diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 38bd781d44..9dd1dd95ab 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -1473,6 +1473,13 @@
// Enable for a belt style printer with endless "Z" motion
//#define BELTPRINTER
+// Enable for Polargraph Kinematics
+//#define POLARGRAPH
+#if ENABLED(POLARGRAPH)
+ #define POLARGRAPH_MAX_BELT_LEN 1035.0
+ #define POLAR_SEGMENTS_PER_SECOND 5
+#endif
+
//===========================================================================
//============================== Endstop Settings ===========================
//===========================================================================
@@ -1505,18 +1512,18 @@
#define ENDSTOPPULLUPS
#if DISABLED(ENDSTOPPULLUPS)
// Disable ENDSTOPPULLUPS to set pullups individually
- //#define ENDSTOPPULLUP_XMAX
- //#define ENDSTOPPULLUP_YMAX
- //#define ENDSTOPPULLUP_ZMAX
- //#define ENDSTOPPULLUP_IMAX
- //#define ENDSTOPPULLUP_JMAX
- //#define ENDSTOPPULLUP_KMAX
//#define ENDSTOPPULLUP_XMIN
//#define ENDSTOPPULLUP_YMIN
//#define ENDSTOPPULLUP_ZMIN
//#define ENDSTOPPULLUP_IMIN
//#define ENDSTOPPULLUP_JMIN
//#define ENDSTOPPULLUP_KMIN
+ //#define ENDSTOPPULLUP_XMAX
+ //#define ENDSTOPPULLUP_YMAX
+ //#define ENDSTOPPULLUP_ZMAX
+ //#define ENDSTOPPULLUP_IMAX
+ //#define ENDSTOPPULLUP_JMAX
+ //#define ENDSTOPPULLUP_KMAX
//#define ENDSTOPPULLUP_ZMIN_PROBE
#endif
@@ -1524,18 +1531,18 @@
//#define ENDSTOPPULLDOWNS
#if DISABLED(ENDSTOPPULLDOWNS)
// Disable ENDSTOPPULLDOWNS to set pulldowns individually
- //#define ENDSTOPPULLDOWN_XMAX
- //#define ENDSTOPPULLDOWN_YMAX
- //#define ENDSTOPPULLDOWN_ZMAX
- //#define ENDSTOPPULLDOWN_IMAX
- //#define ENDSTOPPULLDOWN_JMAX
- //#define ENDSTOPPULLDOWN_KMAX
//#define ENDSTOPPULLDOWN_XMIN
//#define ENDSTOPPULLDOWN_YMIN
//#define ENDSTOPPULLDOWN_ZMIN
//#define ENDSTOPPULLDOWN_IMIN
//#define ENDSTOPPULLDOWN_JMIN
//#define ENDSTOPPULLDOWN_KMIN
+ //#define ENDSTOPPULLDOWN_XMAX
+ //#define ENDSTOPPULLDOWN_YMAX
+ //#define ENDSTOPPULLDOWN_ZMAX
+ //#define ENDSTOPPULLDOWN_IMAX
+ //#define ENDSTOPPULLDOWN_JMAX
+ //#define ENDSTOPPULLDOWN_KMAX
//#define ENDSTOPPULLDOWN_ZMIN_PROBE
#endif
@@ -3373,10 +3380,10 @@
*
* Select the language to display on the LCD. These languages are available:
*
- * en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, hu, it,
+ * en, an, bg, ca, cz, da, de, el, el_CY, es, eu, fi, fr, gl, hr, hu, it,
* jp_kana, ko_KR, nl, pl, pt, pt_br, ro, ru, sk, sv, tr, uk, vi, zh_CN, zh_TW
*
- * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
+ * :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek (Greece)', 'el_CY':'Greek (Cyprus)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
*/
#define LCD_LANGUAGE en
@@ -3718,6 +3725,11 @@
//#define VIKI2
//#define miniVIKI
+//
+// Alfawise Ex8 printer LCD marked as WYH L12864 COG
+//
+//#define WYH_L12864
+
//
// MakerLab Mini Panel with graphic
// controller and SD support - https://reprap.org/wiki/Mini_panel
@@ -4297,9 +4309,9 @@
* Set this manually if there are extra servos needing manual control.
* Set to 0 to turn off servo support.
*/
-//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
+//#define NUM_SERVOS 3 // Note: Servo index starts with 0 for M280-M282 commands
-// (ms) Delay before the next move will start, to give the servo time to reach its target angle.
+// (ms) Delay before the next move will start, to give the servo time to reach its target angle.
// 300ms is a good value but you can try less delay.
// If the servo can't reach the requested position, increase it.
#define SERVO_DELAY { 300 }
@@ -4309,3 +4321,6 @@
// Edit servo angles with M281 and save to EEPROM with M500
//#define EDITABLE_SERVO_ANGLES
+
+// Disable servo with M282 to reduce power consumption, noise, and heat when not in use
+//#define SERVO_DETACH_GCODE
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 533dafe643..621b8bd1fb 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -1680,7 +1680,7 @@
* Set STATUS_EXPIRE_SECONDS to zero to never clear the status.
* This will prevent position updates from being displayed.
*/
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
// Enable this option and reduce the value to optimize screen updates.
// The normal delay is 10µs. Use the lowest value that still gives a reliable display.
//#define DOGM_SPI_DELAY_US 5
@@ -2558,8 +2558,8 @@
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
#define FILAMENT_CHANGE_ALERT_BEEPS 2 // Number of alert beeps to play when a response is needed.
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
- #define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is made again
- #define FILAMENT_CHANGE_FAST_RESUME // Reduce number of waits by not prompting again post timeout before continuing
+ #define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is made again
+ #define PAUSE_REHEAT_FAST_RESUME // Reduce number of waits by not prompting again post timeout before continuing
#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
//#define HOME_BEFORE_FILAMENT_CHANGE // Ensure homing has been completed prior to parking for filament change
diff --git a/Marlin/Version.h b/Marlin/Version.h
index 8a74dbdea0..9c9fb411dc 100644
--- a/Marlin/Version.h
+++ b/Marlin/Version.h
@@ -121,7 +121,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
-#define STRING_DISTRIBUTION_DATE "2021-09-14"
+#define STRING_DISTRIBUTION_DATE "2021-10-09"
/**
* Defines a generic printer name to be output to the LCD after booting Marlin.
diff --git a/Marlin/src/HAL/AVR/HAL_SPI.cpp b/Marlin/src/HAL/AVR/HAL_SPI.cpp
index 1a1b98b3dd..8784bb07b3 100644
--- a/Marlin/src/HAL/AVR/HAL_SPI.cpp
+++ b/Marlin/src/HAL/AVR/HAL_SPI.cpp
@@ -34,7 +34,9 @@
#include "../../inc/MarlinConfig.h"
void spiBegin() {
- OUT_WRITE(SD_SS_PIN, HIGH);
+ #if PIN_EXISTS(SD_SS)
+ OUT_WRITE(SD_SS_PIN, HIGH);
+ #endif
SET_OUTPUT(SD_SCK_PIN);
SET_INPUT(SD_MISO_PIN);
SET_OUTPUT(SD_MOSI_PIN);
@@ -74,7 +76,8 @@ void spiBegin() {
#elif defined(PRR0)
PRR0
#endif
- , PRSPI);
+ , PRSPI
+ );
SPCR = _BV(SPE) | _BV(MSTR) | (spiRate >> 1);
SPSR = spiRate & 1 || spiRate == 6 ? 0 : _BV(SPI2X);
diff --git a/Marlin/src/HAL/AVR/MarlinSPI.h b/Marlin/src/HAL/AVR/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/AVR/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/AVR/pinsDebug.h b/Marlin/src/HAL/AVR/pinsDebug.h
index 5fc48a1edc..fcbb7af3e1 100644
--- a/Marlin/src/HAL/AVR/pinsDebug.h
+++ b/Marlin/src/HAL/AVR/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/AVR/pinsDebug_Teensyduino.h b/Marlin/src/HAL/AVR/pinsDebug_Teensyduino.h
index 051972a861..582ae79ba7 100644
--- a/Marlin/src/HAL/AVR/pinsDebug_Teensyduino.h
+++ b/Marlin/src/HAL/AVR/pinsDebug_Teensyduino.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/AVR/pinsDebug_plus_70.h b/Marlin/src/HAL/AVR/pinsDebug_plus_70.h
index db3fdf1f76..d9aa44c3cb 100644
--- a/Marlin/src/HAL/AVR/pinsDebug_plus_70.h
+++ b/Marlin/src/HAL/AVR/pinsDebug_plus_70.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/AVR/u8g_com_HAL_AVR_sw_spi.cpp b/Marlin/src/HAL/AVR/u8g_com_HAL_AVR_sw_spi.cpp
index 9d928e7af3..45b54379db 100644
--- a/Marlin/src/HAL/AVR/u8g_com_HAL_AVR_sw_spi.cpp
+++ b/Marlin/src/HAL/AVR/u8g_com_HAL_AVR_sw_spi.cpp
@@ -64,8 +64,8 @@
#include
-uint8_t u8g_bitData, u8g_bitNotData, u8g_bitClock, u8g_bitNotClock;
-volatile uint8_t *u8g_outData, *u8g_outClock;
+static uint8_t u8g_bitData, u8g_bitNotData, u8g_bitClock, u8g_bitNotClock;
+static volatile uint8_t *u8g_outData, *u8g_outClock;
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin) {
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
diff --git a/Marlin/src/HAL/DUE/MarlinSPI.h b/Marlin/src/HAL/DUE/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/DUE/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_shared_hw_spi.cpp b/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_shared_hw_spi.cpp
index fcfcef88be..68f6a5c1a7 100644
--- a/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_shared_hw_spi.cpp
+++ b/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_shared_hw_spi.cpp
@@ -20,7 +20,6 @@
*
*/
-
/**
* Based on u8g_com_msp430_hw_spi.c
*
diff --git a/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_st7920_sw_spi.cpp b/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_st7920_sw_spi.cpp
index 65bfd4f4e2..8268cf307e 100644
--- a/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_st7920_sw_spi.cpp
+++ b/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_st7920_sw_spi.cpp
@@ -57,7 +57,7 @@
#include "../../../inc/MarlinConfigPre.h"
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#include "../../../inc/MarlinConfig.h"
#include "../../shared/Delay.h"
@@ -182,5 +182,5 @@ uint8_t u8g_com_HAL_DUE_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_va
}
#endif // LIGHTWEIGHT_UI
-#endif // U8GLIB_ST7920
+#endif // IS_U8GLIB_ST7920
#endif // ARDUINO_ARCH_SAM
diff --git a/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi.cpp b/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi.cpp
index 2b13c182d0..68e3e74a45 100644
--- a/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi.cpp
+++ b/Marlin/src/HAL/DUE/dogm/u8g_com_HAL_DUE_sw_spi.cpp
@@ -57,7 +57,7 @@
#include "../../../inc/MarlinConfigPre.h"
-#if HAS_MARLINUI_U8GLIB && DISABLED(U8GLIB_ST7920)
+#if HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
#include "u8g_com_HAL_DUE_sw_spi_shared.h"
@@ -141,5 +141,5 @@ uint8_t u8g_com_HAL_DUE_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
return 1;
}
-#endif // HAS_MARLINUI_U8GLIB && !U8GLIB_ST7920
+#endif // HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
#endif // ARDUINO_ARCH_SAM
diff --git a/Marlin/src/HAL/DUE/pinsDebug.h b/Marlin/src/HAL/DUE/pinsDebug.h
index 225ba95ce9..f01c53c8ce 100644
--- a/Marlin/src/HAL/DUE/pinsDebug.h
+++ b/Marlin/src/HAL/DUE/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/ESP32/HAL.cpp b/Marlin/src/HAL/ESP32/HAL.cpp
index 7818dbdd87..6a66d519b3 100644
--- a/Marlin/src/HAL/ESP32/HAL.cpp
+++ b/Marlin/src/HAL/ESP32/HAL.cpp
@@ -28,6 +28,10 @@
#include
#include
+#if ENABLED(USE_ESP32_TASK_WDT)
+ #include
+#endif
+
#if ENABLED(WIFISUPPORT)
#include
#include "wifi.h"
@@ -90,8 +94,24 @@ volatile int numPWMUsed = 0,
#endif
-void HAL_init_board() {
+#if ENABLED(USE_ESP32_EXIO)
+ HardwareSerial YSerial2(2);
+ void Write_EXIO(uint8_t IO, uint8_t v) {
+ if (ISRS_ENABLED()) {
+ DISABLE_ISRS();
+ YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100));
+ ENABLE_ISRS();
+ }
+ else
+ YSerial2.write(0x80 | (((char)v) << 5) | (IO - 100));
+ }
+#endif
+
+void HAL_init_board() {
+ #if ENABLED(USE_ESP32_TASK_WDT)
+ esp_task_wdt_init(10, true);
+ #endif
#if ENABLED(ESP3D_WIFISUPPORT)
esp3dlib.init();
#elif ENABLED(WIFISUPPORT)
@@ -127,7 +147,11 @@ void HAL_init_board() {
// Initialize the i2s peripheral only if the I2S stepper stream is enabled.
// The following initialization is performed after Serial1 and Serial2 are defined as
// their native pins might conflict with the i2s stream even when they are remapped.
- TERN_(I2S_STEPPER_STREAM, i2s_init());
+ #if ENABLED(USE_ESP32_EXIO)
+ YSerial2.begin(460800 * 3, SERIAL_8N1, 16, 17);
+ #elif ENABLED(I2S_STEPPER_STREAM)
+ i2s_init();
+ #endif
}
void HAL_idletask() {
diff --git a/Marlin/src/HAL/ESP32/HAL.h b/Marlin/src/HAL/ESP32/HAL.h
index 0f92052030..bc0ce4e037 100644
--- a/Marlin/src/HAL/ESP32/HAL.h
+++ b/Marlin/src/HAL/ESP32/HAL.h
@@ -142,6 +142,10 @@ void HAL_idletask();
inline void HAL_init() {}
void HAL_init_board();
+#if ENABLED(USE_ESP32_EXIO)
+ void Write_EXIO(uint8_t IO, uint8_t v);
+#endif
+
//
// Delay in cycles (used by DELAY_NS / DELAY_US)
//
diff --git a/Marlin/src/HAL/ESP32/HAL_SPI.cpp b/Marlin/src/HAL/ESP32/HAL_SPI.cpp
index 8743ac5be2..868ab1b671 100644
--- a/Marlin/src/HAL/ESP32/HAL_SPI.cpp
+++ b/Marlin/src/HAL/ESP32/HAL_SPI.cpp
@@ -53,11 +53,9 @@ static SPISettings spiConfig;
// ------------------------
void spiBegin() {
- #if !PIN_EXISTS(SD_SS)
- #error "SD_SS_PIN not defined!"
+ #if ENABLED(SDSUPPORT) && PIN_EXISTS(SD_SS)
+ OUT_WRITE(SD_SS_PIN, HIGH);
#endif
-
- OUT_WRITE(SD_SS_PIN, HIGH);
}
void spiInit(uint8_t spiRate) {
diff --git a/Marlin/src/HAL/ESP32/MarlinSPI.h b/Marlin/src/HAL/ESP32/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/ESP32/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/ESP32/esp32.csv b/Marlin/src/HAL/ESP32/esp32.csv
new file mode 100644
index 0000000000..8f6e101f02
--- /dev/null
+++ b/Marlin/src/HAL/ESP32/esp32.csv
@@ -0,0 +1,6 @@
+# Name, Type, SubType, Offset, Size, Flags
+nvs, data, nvs, 0x9000, 0x5000,
+otadata, data, ota, 0xe000, 0x2000,
+app0, app, ota_0, 0x10000, 0x180000,
+app1, app, ota_1, 0x190000, 0x180000,
+spiffs, data, spiffs, 0x310000, 0xF0000,
diff --git a/Marlin/src/HAL/ESP32/fastio.h b/Marlin/src/HAL/ESP32/fastio.h
index 8db89dca12..c8e3f7e343 100644
--- a/Marlin/src/HAL/ESP32/fastio.h
+++ b/Marlin/src/HAL/ESP32/fastio.h
@@ -40,13 +40,19 @@
// Set pin as input with pullup mode
#define _PULLUP(IO, v) pinMode(IO, v ? INPUT_PULLUP : INPUT)
-// Read a pin wrapper
-#define READ(IO) (IS_I2S_EXPANDER_PIN(IO) ? i2s_state(I2S_EXPANDER_PIN_INDEX(IO)) : digitalRead(IO))
+#if ENABLED(USE_ESP32_EXIO)
+ // Read a pin wrapper
+ #define READ(IO) digitalRead(IO)
+ // Write to a pin wrapper
+ #define WRITE(IO, v) (IO >= 100 ? Write_EXIO(IO, v) : digitalWrite(IO, v))
+#else
+ // Read a pin wrapper
+ #define READ(IO) (IS_I2S_EXPANDER_PIN(IO) ? i2s_state(I2S_EXPANDER_PIN_INDEX(IO)) : digitalRead(IO))
+ // Write to a pin wrapper
+ #define WRITE(IO, v) (IS_I2S_EXPANDER_PIN(IO) ? i2s_write(I2S_EXPANDER_PIN_INDEX(IO), v) : digitalWrite(IO, v))
+#endif
-// Write to a pin wrapper
-#define WRITE(IO, v) (IS_I2S_EXPANDER_PIN(IO) ? i2s_write(I2S_EXPANDER_PIN_INDEX(IO), v) : digitalWrite(IO, v))
-
-// Set pin as input wrapper
+// Set pin as input wrapper (0x80 | (v << 5) | (IO - 100))
#define SET_INPUT(IO) _SET_INPUT(IO)
// Set pin as input with pullup wrapper
diff --git a/Marlin/src/HAL/ESP32/i2s.cpp b/Marlin/src/HAL/ESP32/i2s.cpp
index c28c008793..557ea319e6 100644
--- a/Marlin/src/HAL/ESP32/i2s.cpp
+++ b/Marlin/src/HAL/ESP32/i2s.cpp
@@ -23,6 +23,8 @@
#include "../../inc/MarlinConfigPre.h"
+#if DISABLED(USE_ESP32_EXIO)
+
#include "i2s.h"
#include "../shared/Marduino.h"
@@ -340,4 +342,5 @@ void i2s_push_sample() {
dma.current[dma.rw_pos++] = i2s_port_data;
}
+#endif // !USE_ESP32_EXIO
#endif // ARDUINO_ARCH_ESP32
diff --git a/Marlin/src/HAL/ESP32/spi_pins.h b/Marlin/src/HAL/ESP32/spi_pins.h
index cfe71eee4a..58881f0ea7 100644
--- a/Marlin/src/HAL/ESP32/spi_pins.h
+++ b/Marlin/src/HAL/ESP32/spi_pins.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/ESP32/watchdog.h b/Marlin/src/HAL/ESP32/watchdog.h
index b6c169e347..43db813076 100644
--- a/Marlin/src/HAL/ESP32/watchdog.h
+++ b/Marlin/src/HAL/ESP32/watchdog.h
@@ -25,7 +25,7 @@
extern "C" {
#endif
- esp_err_t esp_task_wdt_reset();
+ esp_err_t esp_task_wdt_reset();
#ifdef __cplusplus
}
diff --git a/Marlin/src/HAL/LINUX/MarlinSPI.h b/Marlin/src/HAL/LINUX/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/LINUX/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/LINUX/main.cpp b/Marlin/src/HAL/LINUX/main.cpp
index 31f6de98ee..f2af2ff33f 100644
--- a/Marlin/src/HAL/LINUX/main.cpp
+++ b/Marlin/src/HAL/LINUX/main.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -16,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#ifdef __PLAT_LINUX__
//#define GPIO_LOGGING // Full GPIO and Positional Logging
diff --git a/Marlin/src/HAL/LINUX/pinsDebug.h b/Marlin/src/HAL/LINUX/pinsDebug.h
index 9803c5d362..7bfd97d024 100644
--- a/Marlin/src/HAL/LINUX/pinsDebug.h
+++ b/Marlin/src/HAL/LINUX/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/LPC1768/HAL.h b/Marlin/src/HAL/LPC1768/HAL.h
index ca4e2decab..f241249804 100644
--- a/Marlin/src/HAL/LPC1768/HAL.h
+++ b/Marlin/src/HAL/LPC1768/HAL.h
@@ -156,17 +156,17 @@ int freeMemory();
using FilteredADC = LPC176x::ADC;
extern uint32_t HAL_adc_reading;
-[[gnu::always_inline]] inline void HAL_start_adc(const pin_t pin) {
+[[gnu::always_inline]] inline void HAL_adc_start_conversion(const pin_t pin) {
HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits
}
-[[gnu::always_inline]] inline uint16_t HAL_read_adc() {
+[[gnu::always_inline]] inline uint16_t HAL_adc_get_result() {
return HAL_adc_reading;
}
#define HAL_adc_init()
#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin)
-#define HAL_START_ADC(pin) HAL_start_adc(pin)
-#define HAL_READ_ADC() HAL_read_adc()
+#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
+#define HAL_READ_ADC() HAL_adc_get_result()
#define HAL_ADC_READY() (true)
// Test whether the pin is valid
diff --git a/Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp b/Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp
index 6570a599a4..1991d79719 100644
--- a/Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp
+++ b/Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp
@@ -90,15 +90,15 @@ bool PersistentStore::access_finish() {
// to see errors that are happening in read_data / write_data
static void debug_rw(const bool write, int &pos, const uint8_t *value, const size_t size, const FRESULT s, const size_t total=0) {
#if ENABLED(DEBUG_SD_EEPROM_EMULATION)
- PGM_P const rw_str = write ? PSTR("write") : PSTR("read");
+ FSTR_P const rw_str = write ? F("write") : F("read");
SERIAL_CHAR(' ');
- SERIAL_ECHOPGM_P(rw_str);
+ SERIAL_ECHOF(rw_str);
SERIAL_ECHOLNPGM("_data(", pos, ",", *value, ",", size, ", ...)");
if (total) {
SERIAL_ECHOPGM(" f_");
- SERIAL_ECHOPGM_P(rw_str);
+ SERIAL_ECHOF(rw_str);
SERIAL_ECHOPGM("()=", s, "\n size=", size, "\n bytes_");
- SERIAL_ECHOLNPGM_P(write ? PSTR("written=") : PSTR("read="), total);
+ SERIAL_ECHOLNF(write ? F("written=") : F("read="), total);
}
else
SERIAL_ECHOLNPGM(" f_lseek()=", s);
diff --git a/Marlin/src/HAL/LPC1768/pinsDebug.h b/Marlin/src/HAL/LPC1768/pinsDebug.h
index 466bf170b4..a2f5c123a2 100644
--- a/Marlin/src/HAL/LPC1768/pinsDebug.h
+++ b/Marlin/src/HAL/LPC1768/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp b/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp
index a2cb66ab5b..a9847b2d2f 100644
--- a/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp
+++ b/Marlin/src/HAL/LPC1768/tft/tft_spi.cpp
@@ -26,39 +26,22 @@
#include "tft_spi.h"
-//TFT_SPI tft;
-
SPIClass TFT_SPI::SPIx(1);
-#define TFT_CS_H WRITE(TFT_CS_PIN, HIGH)
-#define TFT_CS_L WRITE(TFT_CS_PIN, LOW)
-
-#define TFT_DC_H WRITE(TFT_DC_PIN, HIGH)
-#define TFT_DC_L WRITE(TFT_DC_PIN, LOW)
-
-#define TFT_RST_H WRITE(TFT_RESET_PIN, HIGH)
-#define TFT_RST_L WRITE(TFT_RESET_PIN, LOW)
-
-#define TFT_BLK_H WRITE(TFT_BACKLIGHT_PIN, HIGH)
-#define TFT_BLK_L WRITE(TFT_BACKLIGHT_PIN, LOW)
-
void TFT_SPI::Init() {
#if PIN_EXISTS(TFT_RESET)
- SET_OUTPUT(TFT_RESET_PIN);
- TFT_RST_H;
+ OUT_WRITE(TFT_RESET_PIN, HIGH);
delay(100);
#endif
#if PIN_EXISTS(TFT_BACKLIGHT)
- SET_OUTPUT(TFT_BACKLIGHT_PIN);
- TFT_BLK_H;
+ OUT_WRITE(TFT_BACKLIGHT_PIN, HIGH);
#endif
SET_OUTPUT(TFT_DC_PIN);
SET_OUTPUT(TFT_CS_PIN);
-
- TFT_DC_H;
- TFT_CS_H;
+ WRITE(TFT_DC_PIN, HIGH);
+ WRITE(TFT_CS_PIN, HIGH);
/**
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
@@ -97,7 +80,7 @@ void TFT_SPI::Init() {
void TFT_SPI::DataTransferBegin(uint16_t DataSize) {
SPIx.setDataSize(DataSize);
SPIx.begin();
- TFT_CS_L;
+ WRITE(TFT_CS_PIN, LOW);
}
uint32_t TFT_SPI::GetID() {
@@ -116,7 +99,7 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) {
SPIx.setDataSize(DATASIZE_8BIT);
SPIx.setClock(SPI_CLOCK_DIV64);
SPIx.begin();
- TFT_CS_L;
+ WRITE(TFT_CS_PIN, LOW);
WriteReg(Reg);
LOOP_L_N(i, 4) {
@@ -131,21 +114,15 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) {
return data >> 7;
}
-bool TFT_SPI::isBusy() {
- return false;
-}
+bool TFT_SPI::isBusy() { return false; }
-void TFT_SPI::Abort() {
- DataTransferEnd();
-}
+void TFT_SPI::Abort() { DataTransferEnd(); }
-void TFT_SPI::Transmit(uint16_t Data) {
- SPIx.transfer(Data);
-}
+void TFT_SPI::Transmit(uint16_t Data) { SPIx.transfer(Data); }
void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) {
- DataTransferBegin(DATASIZE_16BIT); //16
- TFT_DC_H;
+ DataTransferBegin(DATASIZE_16BIT);
+ WRITE(TFT_DC_PIN, HIGH);
SPIx.dmaSend(Data, Count, MemoryIncrease);
DataTransferEnd();
}
diff --git a/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp b/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
index 039fa6769b..e159ebaa0c 100644
--- a/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
+++ b/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
@@ -57,7 +57,7 @@
#include "../../../inc/MarlinConfigPre.h"
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#include
#include
@@ -143,5 +143,5 @@ uint8_t u8g_com_HAL_LPC1768_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t ar
return 1;
}
-#endif // U8GLIB_ST7920
+#endif // IS_U8GLIB_ST7920
#endif // TARGET_LPC1768
diff --git a/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp b/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp
index 3308d03e79..f116a9b80a 100644
--- a/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp
+++ b/Marlin/src/HAL/LPC1768/u8g/u8g_com_HAL_LPC1768_sw_spi.cpp
@@ -57,7 +57,7 @@
#include "../../../inc/MarlinConfigPre.h"
-#if HAS_MARLINUI_U8GLIB && DISABLED(U8GLIB_ST7920)
+#if HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
#include
#include "../../shared/HAL_SPI.h"
@@ -205,5 +205,5 @@ uint8_t u8g_com_HAL_LPC1768_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val,
return 1;
}
-#endif // HAS_MARLINUI_U8GLIB && !U8GLIB_ST7920
+#endif // HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
#endif // TARGET_LPC1768
diff --git a/Marlin/src/HAL/NATIVE_SIM/pinsDebug.h b/Marlin/src/HAL/NATIVE_SIM/pinsDebug.h
index 7e50492598..aa90eb39a3 100644
--- a/Marlin/src/HAL/NATIVE_SIM/pinsDebug.h
+++ b/Marlin/src/HAL/NATIVE_SIM/pinsDebug.h
@@ -20,7 +20,6 @@
/**
* Support routines for X86_64
*/
-
#pragma once
/**
diff --git a/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_st7920_sw_spi.cpp b/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_st7920_sw_spi.cpp
index c77c3d30f0..c384cdd751 100644
--- a/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_st7920_sw_spi.cpp
+++ b/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_st7920_sw_spi.cpp
@@ -57,7 +57,7 @@
#include "../../../inc/MarlinConfig.h"
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#include
#include "../../shared/Delay.h"
@@ -167,5 +167,5 @@ uint8_t u8g_com_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
}
#endif
-#endif // U8GLIB_ST7920
+#endif // IS_U8GLIB_ST7920
#endif // TARGET_LPC1768
diff --git a/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp b/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp
index 085954803c..7fd335d62e 100644
--- a/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp
+++ b/Marlin/src/HAL/NATIVE_SIM/u8g/u8g_com_sw_spi.cpp
@@ -57,7 +57,7 @@
#include "../../../inc/MarlinConfig.h"
-#if HAS_MARLINUI_U8GLIB && DISABLED(U8GLIB_ST7920)
+#if HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
#undef SPI_SPEED
#define SPI_SPEED 2 // About 2 MHz
@@ -211,5 +211,5 @@ uint8_t u8g_com_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_pt
#elif !ANY(TFT_COLOR_UI, TFT_CLASSIC_UI, TFT_LVGL_UI, HAS_MARLINUI_HD44780) && HAS_MARLINUI_U8GLIB
#include
uint8_t u8g_com_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {return 0;}
-#endif // HAS_MARLINUI_U8GLIB && !U8GLIB_ST7920
+#endif // HAS_MARLINUI_U8GLIB && !IS_U8GLIB_ST7920
#endif // __PLAT_NATIVE_SIM__
diff --git a/Marlin/src/HAL/SAMD51/MarlinSPI.h b/Marlin/src/HAL/SAMD51/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/SAMD51/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/SAMD51/QSPIFlash.h b/Marlin/src/HAL/SAMD51/QSPIFlash.h
index db4abec91c..58822fe05f 100644
--- a/Marlin/src/HAL/SAMD51/QSPIFlash.h
+++ b/Marlin/src/HAL/SAMD51/QSPIFlash.h
@@ -25,7 +25,6 @@
*
* Derived from Adafruit_SPIFlash class with no SdFat references
*/
-
#pragma once
#include
diff --git a/Marlin/src/HAL/SAMD51/endstop_interrupts.h b/Marlin/src/HAL/SAMD51/endstop_interrupts.h
index c46b6e072f..61a06c0d4b 100644
--- a/Marlin/src/HAL/SAMD51/endstop_interrupts.h
+++ b/Marlin/src/HAL/SAMD51/endstop_interrupts.h
@@ -162,12 +162,14 @@ void setup_endstop_interrupts() {
#error "Z_MIN_PROBE_PIN has no EXTINT line available."
#endif
_ATTACH(Z_MIN_PROBE_PIN);
- #elif HAS_I_MAX
+ #endif
+ #if HAS_I_MAX
#if !AVAILABLE_EILINE(I_MAX_PIN)
#error "I_MAX_PIN has no EXTINT line available."
#endif
attachInterrupt(I_MAX_PIN, endstop_ISR, CHANGE);
- #elif HAS_I_MIN
+ #endif
+ #if HAS_I_MIN
#if !AVAILABLE_EILINE(I_MIN_PIN)
#error "I_MIN_PIN has no EXTINT line available."
#endif
@@ -178,7 +180,8 @@ void setup_endstop_interrupts() {
#error "J_MAX_PIN has no EXTINT line available."
#endif
attachInterrupt(J_MAX_PIN, endstop_ISR, CHANGE);
- #elif HAS_J_MIN
+ #endif
+ #if HAS_J_MIN
#if !AVAILABLE_EILINE(J_MIN_PIN)
#error "J_MIN_PIN has no EXTINT line available."
#endif
@@ -189,7 +192,8 @@ void setup_endstop_interrupts() {
#error "K_MAX_PIN has no EXTINT line available."
#endif
attachInterrupt(K_MAX_PIN, endstop_ISR, CHANGE);
- #elif HAS_K_MIN
+ #endif
+ #if HAS_K_MIN
#if !AVAILABLE_EILINE(K_MIN_PIN)
#error "K_MIN_PIN has no EXTINT line available."
#endif
diff --git a/Marlin/src/HAL/STM32/HAL.h b/Marlin/src/HAL/STM32/HAL.h
index cbf4da2848..caef985722 100644
--- a/Marlin/src/HAL/STM32/HAL.h
+++ b/Marlin/src/HAL/STM32/HAL.h
@@ -183,8 +183,13 @@ static inline int freeMemory() {
#define HAL_ANALOG_SELECT(pin) pinMode(pin, INPUT)
+#ifdef ADC_RESOLUTION
+ #define HAL_ADC_RESOLUTION ADC_RESOLUTION
+#else
+ #define HAL_ADC_RESOLUTION 12
+#endif
+
#define HAL_ADC_VREF 3.3
-#define HAL_ADC_RESOLUTION ADC_RESOLUTION // 12
#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
#define HAL_READ_ADC() HAL_adc_result
#define HAL_ADC_READY() true
diff --git a/Marlin/src/HAL/STM32/HAL_SPI.cpp b/Marlin/src/HAL/STM32/HAL_SPI.cpp
index 85a5238b54..8ee4761647 100644
--- a/Marlin/src/HAL/STM32/HAL_SPI.cpp
+++ b/Marlin/src/HAL/STM32/HAL_SPI.cpp
@@ -47,7 +47,9 @@ static SPISettings spiConfig;
#include "../shared/Delay.h"
void spiBegin(void) {
- OUT_WRITE(SD_SS_PIN, HIGH);
+ #if PIN_EXISTS(SD_SS)
+ OUT_WRITE(SD_SS_PIN, HIGH);
+ #endif
OUT_WRITE(SD_SCK_PIN, HIGH);
SET_INPUT(SD_MISO_PIN);
OUT_WRITE(SD_MOSI_PIN, HIGH);
diff --git a/Marlin/src/HAL/STM32/MarlinSPI.cpp b/Marlin/src/HAL/STM32/MarlinSPI.cpp
index e1be50820f..7078d210dc 100644
--- a/Marlin/src/HAL/STM32/MarlinSPI.cpp
+++ b/Marlin/src/HAL/STM32/MarlinSPI.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#if defined(HAL_STM32) && !defined(STM32H7xx)
diff --git a/Marlin/src/HAL/STM32/MarlinSerial.cpp b/Marlin/src/HAL/STM32/MarlinSerial.cpp
index 3caedc72eb..37a8f40fd0 100644
--- a/Marlin/src/HAL/STM32/MarlinSerial.cpp
+++ b/Marlin/src/HAL/STM32/MarlinSerial.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -16,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/MarlinSerial.h b/Marlin/src/HAL/STM32/MarlinSerial.h
index ab5c4260af..bf861fb8a7 100644
--- a/Marlin/src/HAL/STM32/MarlinSerial.h
+++ b/Marlin/src/HAL/STM32/MarlinSerial.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp b/Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp
index 914969f10c..54e1820c78 100644
--- a/Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp
+++ b/Marlin/src/HAL/STM32/Sd2Card_sdio_stm32duino.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/eeprom_bl24cxx.cpp b/Marlin/src/HAL/STM32/eeprom_bl24cxx.cpp
index 5bd4c18577..f30b3dedb2 100644
--- a/Marlin/src/HAL/STM32/eeprom_bl24cxx.cpp
+++ b/Marlin/src/HAL/STM32/eeprom_bl24cxx.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/eeprom_if_iic.cpp b/Marlin/src/HAL/STM32/eeprom_if_iic.cpp
index 26b3d9044e..ad8712c0c0 100644
--- a/Marlin/src/HAL/STM32/eeprom_if_iic.cpp
+++ b/Marlin/src/HAL/STM32/eeprom_if_iic.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/eeprom_sdcard.cpp b/Marlin/src/HAL/STM32/eeprom_sdcard.cpp
index 77563b2ae5..473b656f9a 100644
--- a/Marlin/src/HAL/STM32/eeprom_sdcard.cpp
+++ b/Marlin/src/HAL/STM32/eeprom_sdcard.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/fast_pwm.cpp b/Marlin/src/HAL/STM32/fast_pwm.cpp
index a8fcbe5f82..917e12615f 100644
--- a/Marlin/src/HAL/STM32/fast_pwm.cpp
+++ b/Marlin/src/HAL/STM32/fast_pwm.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/pinsDebug.h b/Marlin/src/HAL/STM32/pinsDebug.h
index c77dbc4c75..73d850fc43 100644
--- a/Marlin/src/HAL/STM32/pinsDebug.h
+++ b/Marlin/src/HAL/STM32/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/STM32/spi_pins.h b/Marlin/src/HAL/STM32/spi_pins.h
index e2052c5c77..7f341a8c25 100644
--- a/Marlin/src/HAL/STM32/spi_pins.h
+++ b/Marlin/src/HAL/STM32/spi_pins.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/STM32/tft/tft_fsmc.cpp b/Marlin/src/HAL/STM32/tft/tft_fsmc.cpp
index dacf533224..e68b3c1269 100644
--- a/Marlin/src/HAL/STM32/tft/tft_fsmc.cpp
+++ b/Marlin/src/HAL/STM32/tft/tft_fsmc.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/tft/tft_ltdc.cpp b/Marlin/src/HAL/STM32/tft/tft_ltdc.cpp
index 0549dbf108..66cfd65995 100644
--- a/Marlin/src/HAL/STM32/tft/tft_ltdc.cpp
+++ b/Marlin/src/HAL/STM32/tft/tft_ltdc.cpp
@@ -183,7 +183,7 @@ void LTDC_Config() {
hltdc_F.Init.AccumulatedVBP = (LTDC_LCD_VSYNC + LTDC_LCD_VBP - 1);
hltdc_F.Init.AccumulatedActiveH = (TFT_HEIGHT + LTDC_LCD_VSYNC + LTDC_LCD_VBP - 1);
hltdc_F.Init.AccumulatedActiveW = (TFT_WIDTH + LTDC_LCD_HSYNC + LTDC_LCD_HBP - 1);
- hltdc_F.Init.TotalHeight = (TFT_HEIGHT + LTDC_LCD_VSYNC + LTDC_LCD_VBP + LTDC_LCD_VFP - 1);
+ hltdc_F.Init.TotalHeigh = (TFT_HEIGHT + LTDC_LCD_VSYNC + LTDC_LCD_VBP + LTDC_LCD_VFP - 1);
hltdc_F.Init.TotalWidth = (TFT_WIDTH + LTDC_LCD_HSYNC + LTDC_LCD_HBP + LTDC_LCD_HFP - 1);
/* Configure R,G,B component values for LCD background color : all black background */
@@ -205,7 +205,7 @@ void LTDC_Config() {
pLayerCfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
/* Start Address configuration : frame buffer is located at SDRAM memory */
- pLayerCfg.FBStartAddress = (uint32_t)(FRAME_BUFFER_ADDRESS);
+ pLayerCfg.FBStartAdress = (uint32_t)(FRAME_BUFFER_ADDRESS);
/* Alpha constant (255 == totally opaque) */
pLayerCfg.Alpha = 255;
diff --git a/Marlin/src/HAL/STM32/tft/tft_spi.cpp b/Marlin/src/HAL/STM32/tft/tft_spi.cpp
index 29a309f40e..790513e7ed 100644
--- a/Marlin/src/HAL/STM32/tft/tft_spi.cpp
+++ b/Marlin/src/HAL/STM32/tft/tft_spi.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/tft/xpt2046.cpp b/Marlin/src/HAL/STM32/tft/xpt2046.cpp
index 912e6c2db7..cf4a8f18e9 100644
--- a/Marlin/src/HAL/STM32/tft/xpt2046.cpp
+++ b/Marlin/src/HAL/STM32/tft/xpt2046.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/usb_host.cpp b/Marlin/src/HAL/STM32/usb_host.cpp
index f0879a36a4..d77f0b28e9 100644
--- a/Marlin/src/HAL/STM32/usb_host.cpp
+++ b/Marlin/src/HAL/STM32/usb_host.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/usb_serial.cpp b/Marlin/src/HAL/STM32/usb_serial.cpp
index 959ca4ff43..b607275db5 100644
--- a/Marlin/src/HAL/STM32/usb_serial.cpp
+++ b/Marlin/src/HAL/STM32/usb_serial.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -16,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32/usb_serial.h b/Marlin/src/HAL/STM32/usb_serial.h
index ca61b9ed23..3edb6fd618 100644
--- a/Marlin/src/HAL/STM32/usb_serial.h
+++ b/Marlin/src/HAL/STM32/usb_serial.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/STM32/watchdog.cpp b/Marlin/src/HAL/STM32/watchdog.cpp
index 72c74a2e3b..1eccdec498 100644
--- a/Marlin/src/HAL/STM32/watchdog.cpp
+++ b/Marlin/src/HAL/STM32/watchdog.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../platforms.h"
#ifdef HAL_STM32
diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp
index 73014945a1..df1ba33d4a 100644
--- a/Marlin/src/HAL/STM32F1/HAL.cpp
+++ b/Marlin/src/HAL/STM32F1/HAL.cpp
@@ -437,7 +437,7 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) {
case POWER_MONITOR_VOLTAGE_PIN: pin_index = POWERMON_VOLTS; break;
#endif
}
- HAL_adc_result = (HAL_adc_results[(int)pin_index] >> 2) & 0x3FF; // shift to get 10 bits only.
+ HAL_adc_result = HAL_adc_results[(int)pin_index] >> (12 - HAL_ADC_RESOLUTION); // shift out unused bits
}
uint16_t HAL_adc_get_result() { return HAL_adc_result; }
diff --git a/Marlin/src/HAL/STM32F1/HAL.h b/Marlin/src/HAL/STM32F1/HAL.h
index 0861c918aa..864600e4eb 100644
--- a/Marlin/src/HAL/STM32F1/HAL.h
+++ b/Marlin/src/HAL/STM32F1/HAL.h
@@ -237,8 +237,13 @@ static inline int freeMemory() {
void HAL_adc_init();
+#ifdef ADC_RESOLUTION
+ #define HAL_ADC_RESOLUTION ADC_RESOLUTION
+#else
+ #define HAL_ADC_RESOLUTION 12
+#endif
+
#define HAL_ADC_VREF 3.3
-#define HAL_ADC_RESOLUTION 10
#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
#define HAL_READ_ADC() HAL_adc_result
#define HAL_ADC_READY() true
diff --git a/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_swspi.cpp b/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_swspi.cpp
index f1cd6b3730..26ea1ea19a 100644
--- a/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_swspi.cpp
+++ b/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_swspi.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -16,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#ifdef __STM32F1__
#include "../../../inc/MarlinConfig.h"
diff --git a/Marlin/src/HAL/STM32F1/eeprom_wired.cpp b/Marlin/src/HAL/STM32F1/eeprom_wired.cpp
index 4cac36554f..bc48eef34f 100644
--- a/Marlin/src/HAL/STM32F1/eeprom_wired.cpp
+++ b/Marlin/src/HAL/STM32F1/eeprom_wired.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/STM32F1/pinsDebug.h b/Marlin/src/HAL/STM32F1/pinsDebug.h
index dcf3a51138..27f4b6732b 100644
--- a/Marlin/src/HAL/STM32F1/pinsDebug.h
+++ b/Marlin/src/HAL/STM32F1/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/STM32F1/spi_pins.h b/Marlin/src/HAL/STM32F1/spi_pins.h
index 7d650ffe37..3d3c8f8d2f 100644
--- a/Marlin/src/HAL/STM32F1/spi_pins.h
+++ b/Marlin/src/HAL/STM32F1/spi_pins.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp b/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp
index 5edf96fe56..9bf6bbb32b 100644
--- a/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp
+++ b/Marlin/src/HAL/STM32F1/tft/tft_spi.cpp
@@ -26,36 +26,20 @@
#include "tft_spi.h"
-// TFT_SPI tft;
-
SPIClass TFT_SPI::SPIx(1);
-#define TFT_CS_H OUT_WRITE(TFT_CS_PIN, HIGH)
-#define TFT_CS_L OUT_WRITE(TFT_CS_PIN, LOW)
-
-#define TFT_DC_H OUT_WRITE(TFT_DC_PIN, HIGH)
-#define TFT_DC_L OUT_WRITE(TFT_DC_PIN, LOW)
-
-#define TFT_RST_H OUT_WRITE(TFT_RST_PIN, HIGH)
-#define TFT_RST_L OUT_WRITE(TFT_RST_PIN, LOW)
-
-#define TFT_BLK_H OUT_WRITE(TFT_BACKLIGHT_PIN, HIGH)
-#define TFT_BLK_L OUT_WRITE(TFT_BACKLIGHT_PIN, LOW)
-
void TFT_SPI::Init() {
#if PIN_EXISTS(TFT_RESET)
- // OUT_WRITE(TFT_RESET_PIN, HIGH);
- TFT_RST_H;
+ OUT_WRITE(TFT_RST_PIN, HIGH);
delay(100);
#endif
#if PIN_EXISTS(TFT_BACKLIGHT)
- // OUT_WRITE(TFT_BACKLIGHT_PIN, HIGH);
- TFT_BLK_H;
+ OUT_WRITE(TFT_BACKLIGHT_PIN, HIGH);
#endif
- TFT_DC_H;
- TFT_CS_H;
+ OUT_WRITE(TFT_DC_PIN, HIGH);
+ OUT_WRITE(TFT_CS_PIN, HIGH);
/**
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
@@ -87,7 +71,7 @@ void TFT_SPI::Init() {
void TFT_SPI::DataTransferBegin(uint16_t DataSize) {
SPIx.setDataSize(DataSize);
SPIx.begin();
- TFT_CS_L;
+ OUT_WRITE(TFT_CS_PIN, LOW);
}
#ifdef TFT_DEFAULT_DRIVER
@@ -129,28 +113,16 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) {
#endif
}
-bool TFT_SPI::isBusy() {
- return false;
-}
+bool TFT_SPI::isBusy() { return false; }
-void TFT_SPI::Abort() {
- DataTransferEnd();
-}
+void TFT_SPI::Abort() { DataTransferEnd(); }
-void TFT_SPI::Transmit(uint16_t Data) {
- SPIx.send(Data);
-}
+void TFT_SPI::Transmit(uint16_t Data) { SPIx.send(Data); }
void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) {
DataTransferBegin();
- TFT_DC_H;
- if (MemoryIncrease == DMA_MINC_ENABLE) {
- SPIx.dmaSend(Data, Count, true);
- }
- else {
- SPIx.dmaSend(Data, Count, false);
- }
-
+ OUT_WRITE(TFT_DC_PIN, HIGH);
+ SPIx.dmaSend(Data, Count, MemoryIncrease == DMA_MINC_ENABLE);
DataTransferEnd();
}
diff --git a/Marlin/src/HAL/TEENSY31_32/HAL_SPI.cpp b/Marlin/src/HAL/TEENSY31_32/HAL_SPI.cpp
index ff84e91f79..415c692229 100644
--- a/Marlin/src/HAL/TEENSY31_32/HAL_SPI.cpp
+++ b/Marlin/src/HAL/TEENSY31_32/HAL_SPI.cpp
@@ -36,10 +36,9 @@ static SPISettings spiConfig;
// Initialize SPI bus
void spiBegin() {
- #if !PIN_EXISTS(SD_SS)
- #error "SD_SS_PIN not defined!"
+ #if PIN_EXISTS(SD_SS)
+ OUT_WRITE(SD_SS_PIN, HIGH);
#endif
- OUT_WRITE(SD_SS_PIN, HIGH);
SET_OUTPUT(SD_SCK_PIN);
SET_INPUT(SD_MISO_PIN);
SET_OUTPUT(SD_MOSI_PIN);
diff --git a/Marlin/src/HAL/TEENSY31_32/MarlinSPI.h b/Marlin/src/HAL/TEENSY31_32/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/TEENSY31_32/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/TEENSY31_32/eeprom.cpp b/Marlin/src/HAL/TEENSY31_32/eeprom.cpp
index 85febebebc..d1ff940822 100644
--- a/Marlin/src/HAL/TEENSY31_32/eeprom.cpp
+++ b/Marlin/src/HAL/TEENSY31_32/eeprom.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -16,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#ifdef __MK20DX256__
/**
diff --git a/Marlin/src/HAL/TEENSY35_36/HAL_SPI.cpp b/Marlin/src/HAL/TEENSY35_36/HAL_SPI.cpp
index e63ab1c0e3..d80f57b2c4 100644
--- a/Marlin/src/HAL/TEENSY35_36/HAL_SPI.cpp
+++ b/Marlin/src/HAL/TEENSY35_36/HAL_SPI.cpp
@@ -36,10 +36,9 @@
static SPISettings spiConfig;
void spiBegin() {
- #if !PIN_EXISTS(SD_SS)
- #error "SD_SS_PIN not defined!"
+ #if PIN_EXISTS(SD_SS)
+ OUT_WRITE(SD_SS_PIN, HIGH);
#endif
- OUT_WRITE(SD_SS_PIN, HIGH);
SET_OUTPUT(SD_SCK_PIN);
SET_INPUT(SD_MISO_PIN);
SET_OUTPUT(SD_MOSI_PIN);
diff --git a/Marlin/src/HAL/TEENSY35_36/MarlinSPI.h b/Marlin/src/HAL/TEENSY35_36/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/TEENSY35_36/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/TEENSY35_36/pinsDebug.h b/Marlin/src/HAL/TEENSY35_36/pinsDebug.h
index e529fa93be..7a2e1d6e59 100644
--- a/Marlin/src/HAL/TEENSY35_36/pinsDebug.h
+++ b/Marlin/src/HAL/TEENSY35_36/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/TEENSY40_41/HAL_SPI.cpp b/Marlin/src/HAL/TEENSY40_41/HAL_SPI.cpp
index 610765ad49..9dcb812faf 100644
--- a/Marlin/src/HAL/TEENSY40_41/HAL_SPI.cpp
+++ b/Marlin/src/HAL/TEENSY40_41/HAL_SPI.cpp
@@ -51,12 +51,9 @@ static SPISettings spiConfig;
// ------------------------
void spiBegin() {
- #ifndef SD_SS_PIN
- #error "SD_SS_PIN is not defined!"
+ #if PIN_EXISTS(SD_SS)
+ OUT_WRITE(SD_SS_PIN, HIGH);
#endif
-
- OUT_WRITE(SD_SS_PIN, HIGH);
-
//SET_OUTPUT(SD_SCK_PIN);
//SET_INPUT(SD_MISO_PIN);
//SET_OUTPUT(SD_MOSI_PIN);
diff --git a/Marlin/src/HAL/TEENSY40_41/MarlinSPI.h b/Marlin/src/HAL/TEENSY40_41/MarlinSPI.h
new file mode 100644
index 0000000000..0c447ba4cb
--- /dev/null
+++ b/Marlin/src/HAL/TEENSY40_41/MarlinSPI.h
@@ -0,0 +1,26 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include
+
+using MarlinSPI = SPIClass;
diff --git a/Marlin/src/HAL/TEENSY40_41/pinsDebug.h b/Marlin/src/HAL/TEENSY40_41/pinsDebug.h
index 197cc6f1b2..94b85ea568 100644
--- a/Marlin/src/HAL/TEENSY40_41/pinsDebug.h
+++ b/Marlin/src/HAL/TEENSY40_41/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/HAL/shared/Delay.cpp b/Marlin/src/HAL/shared/Delay.cpp
index 05af38307b..c64376d25d 100644
--- a/Marlin/src/HAL/shared/Delay.cpp
+++ b/Marlin/src/HAL/shared/Delay.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "Delay.h"
#include "../../inc/MarlinConfig.h"
@@ -107,13 +108,14 @@
#if ENABLED(MARLIN_DEV_MODE)
void dump_delay_accuracy_check() {
- auto report_call_time = [](PGM_P const name, PGM_P const unit, const uint32_t cycles, const uint32_t total, const bool do_flush=true) {
+ auto report_call_time = [](FSTR_P const name, FSTR_P const unit, const uint32_t cycles, const uint32_t total, const bool do_flush=true) {
SERIAL_ECHOPGM("Calling ");
- SERIAL_ECHOPGM_P(name);
+ SERIAL_ECHOF(name);
SERIAL_ECHOLNPGM(" for ", cycles);
- SERIAL_ECHOPGM_P(unit);
+ SERIAL_ECHOF(unit);
SERIAL_ECHOLNPGM(" took: ", total);
- SERIAL_ECHOPGM_P(unit);
+ SERIAL_CHAR(' ');
+ SERIAL_ECHOF(unit);
if (do_flush) SERIAL_FLUSHTX();
};
@@ -125,41 +127,42 @@
constexpr uint32_t testValues[] = { 1, 5, 10, 20, 50, 100, 150, 200, 350, 500, 750, 1000 };
for (auto i : testValues) {
s = micros(); DELAY_US(i); e = micros();
- report_call_time(PSTR("delay"), PSTR("us"), i, e - s);
+ report_call_time(F("delay"), F("us"), i, e - s);
}
if (HW_REG(_DWT_CTRL)) {
+ static FSTR_P cyc = F("cycles");
+ static FSTR_P dcd = F("DELAY_CYCLES directly ");
+
for (auto i : testValues) {
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES(i); e = HW_REG(_DWT_CYCCNT);
- report_call_time(PSTR("runtime delay"), PSTR("cycles"), i, e - s);
+ report_call_time(F("runtime delay"), cyc, i, e - s);
}
// Measure the delay to call a real function compared to a function pointer
s = HW_REG(_DWT_CYCCNT); delay_dwt(1); e = HW_REG(_DWT_CYCCNT);
- report_call_time(PSTR("delay_dwt"), PSTR("cycles"), 1, e - s);
-
- static PGMSTR(dcd, "DELAY_CYCLES directly ");
+ report_call_time(F("delay_dwt"), cyc, 1, e - s);
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES( 1); e = HW_REG(_DWT_CYCCNT);
- report_call_time(dcd, PSTR("cycles"), 1, e - s, false);
+ report_call_time(dcd, cyc, 1, e - s, false);
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES( 5); e = HW_REG(_DWT_CYCCNT);
- report_call_time(dcd, PSTR("cycles"), 5, e - s, false);
+ report_call_time(dcd, cyc, 5, e - s, false);
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES(10); e = HW_REG(_DWT_CYCCNT);
- report_call_time(dcd, PSTR("cycles"), 10, e - s, false);
+ report_call_time(dcd, cyc, 10, e - s, false);
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES(20); e = HW_REG(_DWT_CYCCNT);
- report_call_time(dcd, PSTR("cycles"), 20, e - s, false);
+ report_call_time(dcd, cyc, 20, e - s, false);
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES(50); e = HW_REG(_DWT_CYCCNT);
- report_call_time(dcd, PSTR("cycles"), 50, e - s, false);
+ report_call_time(dcd, cyc, 50, e - s, false);
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES(100); e = HW_REG(_DWT_CYCCNT);
- report_call_time(dcd, PSTR("cycles"), 100, e - s, false);
+ report_call_time(dcd, cyc, 100, e - s, false);
s = HW_REG(_DWT_CYCCNT); DELAY_CYCLES(200); e = HW_REG(_DWT_CYCCNT);
- report_call_time(dcd, PSTR("cycles"), 200, e - s, false);
+ report_call_time(dcd, cyc, 200, e - s, false);
}
}
#endif // MARLIN_DEV_MODE
@@ -169,7 +172,7 @@
void calibrate_delay_loop() {}
#if ENABLED(MARLIN_DEV_MODE)
- void dump_delay_accuracy_check() { SERIAL_ECHOPGM_P(PSTR("N/A on this platform")); }
+ void dump_delay_accuracy_check() { SERIAL_ECHOPGM("N/A on this platform"); }
#endif
#endif
diff --git a/Marlin/src/HAL/shared/Marduino.h b/Marlin/src/HAL/shared/Marduino.h
index 56be8d7211..3b5a68a373 100644
--- a/Marlin/src/HAL/shared/Marduino.h
+++ b/Marlin/src/HAL/shared/Marduino.h
@@ -83,7 +83,14 @@
#endif
#ifndef FORCE_INLINE
- #define FORCE_INLINE inline __attribute__((always_inline))
+ #define FORCE_INLINE __attribute__((always_inline)) inline
#endif
#include "progmem.h"
+
+class __FlashStringHelper;
+typedef const __FlashStringHelper* FSTR_P;
+#ifndef FPSTR
+ #define FPSTR(S) (reinterpret_cast(S))
+#endif
+#define FTOP(S) (reinterpret_cast(S))
diff --git a/Marlin/src/HAL/shared/progmem.h b/Marlin/src/HAL/shared/progmem.h
index 539d02705e..4cd7663df9 100644
--- a/Marlin/src/HAL/shared/progmem.h
+++ b/Marlin/src/HAL/shared/progmem.h
@@ -38,7 +38,8 @@
#define PSTR(str) (str)
#endif
#ifndef F
-#define F(str) (str)
+class __FlashStringHelper;
+#define F(str) (reinterpret_cast(PSTR(str)))
#endif
#ifndef _SFR_BYTE
#define _SFR_BYTE(n) (n)
@@ -110,7 +111,7 @@
#define strrchr_P(str, c) strrchr((str), (c))
#endif
#ifndef strsep_P
-#define strsep_P(strp, delim) strsep((strp), (delim))
+#define strsep_P(pstr, delim) strsep((pstr), (delim))
#endif
#ifndef strspn_P
#define strspn_P(str, chrs) strspn((str), (chrs))
diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp
index 07a9d0186f..346c5f8f2c 100644
--- a/Marlin/src/MarlinCore.cpp
+++ b/Marlin/src/MarlinCore.cpp
@@ -30,10 +30,6 @@
#include "MarlinCore.h"
-#if ENABLED(MARLIN_DEV_MODE)
- #warning "WARNING! Disable MARLIN_DEV_MODE for the final build!"
-#endif
-
#include "HAL/shared/Delay.h"
#include "HAL/shared/esp_wifi.h"
#include "HAL/shared/cpu_exception/exception_hook.h"
@@ -74,19 +70,15 @@
#include
#endif
-#if ENABLED(DWIN_CREALITY_LCD)
- #include "lcd/e3v2/creality/dwin.h"
- #include "lcd/e3v2/creality/rotary_encoder.h"
-#elif ENABLED(DWIN_CREALITY_LCD_ENHANCED)
- #include "lcd/e3v2/enhanced/dwin.h"
- #include "lcd/e3v2/enhanced/rotary_encoder.h"
-#elif ENABLED(DWIN_CREALITY_LCD_JYERSUI)
- #include "lcd/e3v2/jyersui/dwin.h"
- #include "lcd/e3v2/jyersui/rotary_encoder.h"
-#endif
-
-#if ENABLED(EXTENSIBLE_UI)
- #include "lcd/extui/ui_api.h"
+#if HAS_DWIN_E3V2
+ #include "lcd/e3v2/common/encoder.h"
+ #if ENABLED(DWIN_CREALITY_LCD)
+ #include "lcd/e3v2/creality/dwin.h"
+ #elif ENABLED(DWIN_CREALITY_LCD_ENHANCED)
+ #include "lcd/e3v2/enhanced/dwin.h"
+ #elif ENABLED(DWIN_CREALITY_LCD_JYERSUI)
+ #include "lcd/e3v2/jyersui/dwin.h"
+ #endif
#endif
#if HAS_ETHERNET
@@ -172,6 +164,8 @@
#if ENABLED(DELTA)
#include "module/delta.h"
+#elif ENABLED(POLARGRAPH)
+ #include "module/polargraph.h"
#elif IS_SCARA
#include "module/scara.h"
#endif
@@ -314,48 +308,6 @@ bool pin_is_protected(const pin_t pin) {
#pragma GCC diagnostic pop
-void enable_e_steppers() {
- #define _ENA_E(N) ENABLE_AXIS_E##N();
- REPEAT(E_STEPPERS, _ENA_E)
-}
-
-void enable_all_steppers() {
- TERN_(AUTO_POWER_CONTROL, powerManager.power_on());
- ENABLE_AXIS_X();
- ENABLE_AXIS_Y();
- ENABLE_AXIS_Z();
- ENABLE_AXIS_I(); // Marlin 6-axis support by DerAndere (https://github.com/DerAndere1/Marlin/wiki)
- ENABLE_AXIS_J();
- ENABLE_AXIS_K();
- enable_e_steppers();
-
- TERN_(EXTENSIBLE_UI, ExtUI::onSteppersEnabled());
-}
-
-void disable_e_steppers() {
- #define _DIS_E(N) DISABLE_AXIS_E##N();
- REPEAT(E_STEPPERS, _DIS_E)
-}
-
-void disable_e_stepper(const uint8_t e) {
- #define _CASE_DIS_E(N) case N: DISABLE_AXIS_E##N(); break;
- switch (e) {
- REPEAT(E_STEPPERS, _CASE_DIS_E)
- }
-}
-
-void disable_all_steppers() {
- DISABLE_AXIS_X();
- DISABLE_AXIS_Y();
- DISABLE_AXIS_Z();
- DISABLE_AXIS_I();
- DISABLE_AXIS_J();
- DISABLE_AXIS_K();
- disable_e_steppers();
-
- TERN_(EXTENSIBLE_UI, ExtUI::onSteppersDisabled());
-}
-
/**
* A Print Job exists when the timer is running or SD is printing
*/
@@ -405,15 +357,15 @@ void startOrResumeJob() {
TERN_(POWER_LOSS_RECOVERY, recovery.purge());
#ifdef EVENT_GCODE_SD_ABORT
- queue.inject_P(PSTR(EVENT_GCODE_SD_ABORT));
+ queue.inject(F(EVENT_GCODE_SD_ABORT));
#endif
TERN_(PASSWORD_AFTER_SD_PRINT_ABORT, password.lock_machine());
}
inline void finishSDPrinting() {
- if (queue.enqueue_one_P(PSTR("M1001"))) { // Keep trying until it gets queued
- marlin_state = MF_RUNNING; // Signal to stop trying
+ if (queue.enqueue_one(F("M1001"))) { // Keep trying until it gets queued
+ marlin_state = MF_RUNNING; // Signal to stop trying
TERN_(PASSWORD_AFTER_SD_PRINT_END, password.lock_machine());
TERN_(DGUS_LCD_UI_MKS, ScreenHandler.SDPrintingFinished());
}
@@ -466,13 +418,13 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
already_shutdown_steppers = true; // L6470 SPI will consume 99% of free time without this
// Individual axes will be disabled if configured
- if (ENABLED(DISABLE_INACTIVE_X)) DISABLE_AXIS_X();
- if (ENABLED(DISABLE_INACTIVE_Y)) DISABLE_AXIS_Y();
- if (ENABLED(DISABLE_INACTIVE_Z)) DISABLE_AXIS_Z();
- if (ENABLED(DISABLE_INACTIVE_I)) DISABLE_AXIS_I();
- if (ENABLED(DISABLE_INACTIVE_J)) DISABLE_AXIS_J();
- if (ENABLED(DISABLE_INACTIVE_K)) DISABLE_AXIS_K();
- if (ENABLED(DISABLE_INACTIVE_E)) disable_e_steppers();
+ TERN_(DISABLE_INACTIVE_X, stepper.disable_axis(X_AXIS));
+ TERN_(DISABLE_INACTIVE_Y, stepper.disable_axis(Y_AXIS));
+ TERN_(DISABLE_INACTIVE_Z, stepper.disable_axis(Z_AXIS));
+ TERN_(DISABLE_INACTIVE_I, stepper.disable_axis(I_AXIS));
+ TERN_(DISABLE_INACTIVE_J, stepper.disable_axis(J_AXIS));
+ TERN_(DISABLE_INACTIVE_K, stepper.disable_axis(K_AXIS));
+ TERN_(DISABLE_INACTIVE_E, stepper.disable_e_steppers());
TERN_(AUTO_BED_LEVELING_UBL, ubl.steppers_were_disabled());
}
@@ -522,7 +474,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
if (!IS_SD_PRINTING() && !READ(HOME_PIN)) { // HOME_PIN goes LOW when pressed
if (ELAPSED(ms, next_home_key_ms)) {
next_home_key_ms = ms + HOME_DEBOUNCE_DELAY;
- LCD_MESSAGEPGM(MSG_AUTO_HOME);
+ LCD_MESSAGE(MSG_AUTO_HOME);
queue.inject_P(G28_STR);
}
}
@@ -541,14 +493,14 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
if (ELAPSED(ms, next_cub_ms_##N)) { \
next_cub_ms_##N = ms + CUB_DEBOUNCE_DELAY_##N; \
CODE; \
- queue.inject_P(PSTR(BUTTON##N##_GCODE)); \
+ queue.inject(F(BUTTON##N##_GCODE)); \
TERN_(HAS_LCD_MENU, ui.quick_feedback()); \
} \
} \
}while(0)
- #define CHECK_CUSTOM_USER_BUTTON(N) _CHECK_CUSTOM_USER_BUTTON(N, NOOP)
- #define CHECK_BETTER_USER_BUTTON(N) _CHECK_CUSTOM_USER_BUTTON(N, if (strlen(BUTTON##N##_DESC)) LCD_MESSAGEPGM_P(PSTR(BUTTON##N##_DESC)))
+ #define CHECK_CUSTOM_USER_BUTTON(N) _CHECK_CUSTOM_USER_BUTTON(N, NOOP)
+ #define CHECK_BETTER_USER_BUTTON(N) _CHECK_CUSTOM_USER_BUTTON(N, if (strlen(BUTTON##N##_DESC)) LCD_MESSAGE_F(BUTTON##N##_DESC))
#if HAS_BETTER_USER_BUTTON(1)
CHECK_BETTER_USER_BUTTON(1);
@@ -691,13 +643,13 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
#if ENABLED(SWITCHING_EXTRUDER)
bool oldstatus;
switch (active_extruder) {
- default: oldstatus = E0_ENABLE_READ(); ENABLE_AXIS_E0(); break;
+ default: oldstatus = stepper.AXIS_IS_ENABLED(E_AXIS, 0); stepper.ENABLE_EXTRUDER(0); break;
#if E_STEPPERS > 1
- case 2: case 3: oldstatus = E1_ENABLE_READ(); ENABLE_AXIS_E1(); break;
+ case 2: case 3: oldstatus = stepper.AXIS_IS_ENABLED(E_AXIS, 1); stepper.ENABLE_EXTRUDER(1); break;
#if E_STEPPERS > 2
- case 4: case 5: oldstatus = E2_ENABLE_READ(); ENABLE_AXIS_E2(); break;
+ case 4: case 5: oldstatus = stepper.AXIS_IS_ENABLED(E_AXIS, 2); stepper.ENABLE_EXTRUDER(2); break;
#if E_STEPPERS > 3
- case 6: case 7: oldstatus = E3_ENABLE_READ(); ENABLE_AXIS_E3(); break;
+ case 6: case 7: oldstatus = stepper.AXIS_IS_ENABLED(E_AXIS, 3); stepper.ENABLE_EXTRUDER(3); break;
#endif // E_STEPPERS > 3
#endif // E_STEPPERS > 2
#endif // E_STEPPERS > 1
@@ -706,7 +658,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
bool oldstatus;
switch (active_extruder) {
default:
- #define _CASE_EN(N) case N: oldstatus = E##N##_ENABLE_READ(); ENABLE_AXIS_E##N(); break;
+ #define _CASE_EN(N) case N: oldstatus = stepper.AXIS_IS_ENABLED(E_AXIS, N); stepper.ENABLE_EXTRUDER(N); break;
REPEAT(E_STEPPERS, _CASE_EN);
}
#endif
@@ -720,17 +672,17 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
#if ENABLED(SWITCHING_EXTRUDER)
switch (active_extruder) {
- default: oldstatus = E0_ENABLE_WRITE(oldstatus); break;
+ default: if (oldstatus) stepper.ENABLE_EXTRUDER(0); else stepper.DISABLE_EXTRUDER(0); break;
#if E_STEPPERS > 1
- case 2: case 3: oldstatus = E1_ENABLE_WRITE(oldstatus); break;
+ case 2: case 3: if (oldstatus) stepper.ENABLE_EXTRUDER(1); else stepper.DISABLE_EXTRUDER(1); break;
#if E_STEPPERS > 2
- case 4: case 5: oldstatus = E2_ENABLE_WRITE(oldstatus); break;
+ case 4: case 5: if (oldstatus) stepper.ENABLE_EXTRUDER(2); else stepper.DISABLE_EXTRUDER(2); break;
#endif // E_STEPPERS > 2
#endif // E_STEPPERS > 1
}
#else // !SWITCHING_EXTRUDER
switch (active_extruder) {
- #define _CASE_RESTORE(N) case N: E##N##_ENABLE_WRITE(oldstatus); break;
+ #define _CASE_RESTORE(N) case N: if (oldstatus) stepper.ENABLE_EXTRUDER(N); else stepper.DISABLE_EXTRUDER(N); break;
REPEAT(E_STEPPERS, _CASE_RESTORE);
}
#endif // !SWITCHING_EXTRUDER
@@ -900,16 +852,16 @@ void idle(bool no_stepper_sleep/*=false*/) {
* Kill all activity and lock the machine.
* After this the machine will need to be reset.
*/
-void kill(PGM_P const lcd_error/*=nullptr*/, PGM_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
+void kill(FSTR_P const lcd_error/*=nullptr*/, FSTR_P const lcd_component/*=nullptr*/, const bool steppers_off/*=false*/) {
thermalManager.disable_all_heaters();
TERN_(HAS_CUTTER, cutter.kill()); // Full cutter shutdown including ISR control
// Echo the LCD message to serial for extra context
- if (lcd_error) { SERIAL_ECHO_START(); SERIAL_ECHOLNPGM_P(lcd_error); }
+ if (lcd_error) { SERIAL_ECHO_START(); SERIAL_ECHOLNF(lcd_error); }
#if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED)
- ui.kill_screen(lcd_error ?: GET_TEXT(MSG_KILLED), lcd_component ?: NUL_STR);
+ ui.kill_screen(lcd_error ?: GET_TEXT_F(MSG_KILLED), lcd_component ?: FPSTR(NUL_STR));
#else
UNUSED(lcd_error); UNUSED(lcd_component);
#endif
@@ -942,7 +894,7 @@ void minkill(const bool steppers_off/*=false*/) {
TERN_(HAS_CUTTER, cutter.kill()); // Reiterate cutter shutdown
// Power off all steppers (for M112) or just the E steppers
- steppers_off ? disable_all_steppers() : disable_e_steppers();
+ steppers_off ? stepper.disable_all_steppers() : stepper.disable_e_steppers();
TERN_(PSU_CONTROL, powerManager.power_off());
@@ -983,7 +935,7 @@ void stop() {
if (!IsStopped()) {
SERIAL_ERROR_MSG(STR_ERR_STOPPED);
- LCD_MESSAGEPGM(MSG_STOPPED);
+ LCD_MESSAGE(MSG_STOPPED);
safe_delay(350); // allow enough time for messages to get out before stopping
marlin_state = MF_STOPPED;
}
@@ -1569,7 +1521,7 @@ void setup() {
#ifdef STARTUP_COMMANDS
SETUP_LOG("STARTUP_COMMANDS");
- queue.inject_P(PSTR(STARTUP_COMMANDS));
+ queue.inject(F(STARTUP_COMMANDS));
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
@@ -1599,7 +1551,7 @@ void setup() {
HMI_Init();
HMI_SetLanguageCache();
HMI_StartFrame(true);
- DWIN_StatusChanged_P(GET_TEXT(WELCOME_MSG));
+ DWIN_StatusChanged(GET_TEXT_F(WELCOME_MSG));
#endif
#if HAS_SERVICE_INTERVALS && !HAS_DWIN_E3V2_BASIC
diff --git a/Marlin/src/MarlinCore.h b/Marlin/src/MarlinCore.h
index 6428b77398..7063c7e2de 100644
--- a/Marlin/src/MarlinCore.h
+++ b/Marlin/src/MarlinCore.h
@@ -38,16 +38,7 @@ inline void idle_no_sleep() { idle(true); }
extern bool G38_did_trigger; // Flag from the ISR to indicate the endstop changed
#endif
-/**
- * The axis order in all axis related arrays is X, Y, Z, E
- */
-void enable_e_steppers();
-void enable_all_steppers();
-void disable_e_stepper(const uint8_t e);
-void disable_e_steppers();
-void disable_all_steppers();
-
-void kill(PGM_P const lcd_error=nullptr, PGM_P const lcd_component=nullptr, const bool steppers_off=false);
+void kill(FSTR_P const lcd_error=nullptr, FSTR_P const lcd_component=nullptr, const bool steppers_off=false);
void minkill(const bool steppers_off=false);
// Global State of the firmware
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index 46b2e5cf0c..bc29ab5dec 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -422,6 +422,8 @@
#define BOARD_MRR_ESPE 6002 // MRR ESPE based on ESP32 (with I2S stepper stream)
#define BOARD_E4D_BOX 6003 // E4d@BOX
#define BOARD_FYSETC_E4 6004 // FYSETC E4
+#define BOARD_PANDA_ZHU 6005 // Panda_ZHU
+#define BOARD_PANDA_M4 6006 // Panda_M4
//
// SAMD51 ARM Cortex M4
diff --git a/Marlin/src/core/debug_out.h b/Marlin/src/core/debug_out.h
index 4e30a5306e..eb1c91e507 100644
--- a/Marlin/src/core/debug_out.h
+++ b/Marlin/src/core/debug_out.h
@@ -36,6 +36,8 @@
#undef DEBUG_ECHOLN
#undef DEBUG_ECHOPGM
#undef DEBUG_ECHOLNPGM
+#undef DEBUG_ECHOF
+#undef DEBUG_ECHOLNF
#undef DEBUG_ECHOPGM_P
#undef DEBUG_ECHOLNPGM_P
#undef DEBUG_ECHOPAIR_F
@@ -54,7 +56,7 @@
#if DEBUG_OUT
#include "debug_section.h"
- #define DEBUG_SECTION(N,S,D) SectionLog N(PSTR(S),D)
+ #define DEBUG_SECTION(N,S,D) SectionLog N(F(S),D)
#define DEBUG_ECHO_START SERIAL_ECHO_START
#define DEBUG_ERROR_START SERIAL_ERROR_START
@@ -65,6 +67,8 @@
#define DEBUG_ECHOLN SERIAL_ECHOLN
#define DEBUG_ECHOPGM SERIAL_ECHOPGM
#define DEBUG_ECHOLNPGM SERIAL_ECHOLNPGM
+ #define DEBUG_ECHOF SERIAL_ECHOF
+ #define DEBUG_ECHOLNF SERIAL_ECHOLNF
#define DEBUG_ECHOPGM SERIAL_ECHOPGM
#define DEBUG_ECHOPGM_P SERIAL_ECHOPGM_P
#define DEBUG_ECHOPAIR_F SERIAL_ECHOPAIR_F
@@ -94,6 +98,8 @@
#define DEBUG_ECHOLN(...) NOOP
#define DEBUG_ECHOPGM(...) NOOP
#define DEBUG_ECHOLNPGM(...) NOOP
+ #define DEBUG_ECHOF(...) NOOP
+ #define DEBUG_ECHOLNF(...) NOOP
#define DEBUG_ECHOPGM_P(...) NOOP
#define DEBUG_ECHOLNPGM_P(...) NOOP
#define DEBUG_ECHOPAIR_F(...) NOOP
diff --git a/Marlin/src/core/debug_section.h b/Marlin/src/core/debug_section.h
index ef1511e6f0..6e23d9e4ed 100644
--- a/Marlin/src/core/debug_section.h
+++ b/Marlin/src/core/debug_section.h
@@ -26,22 +26,22 @@
class SectionLog {
public:
- SectionLog(PGM_P const msg=nullptr, bool inbug=true) {
- the_msg = msg;
- if ((debug = inbug)) echo_msg(PSTR(">>>"));
+ SectionLog(FSTR_P const fmsg=nullptr, bool inbug=true) {
+ the_msg = fmsg;
+ if ((debug = inbug)) echo_msg(F(">>>"));
}
- ~SectionLog() { if (debug) echo_msg(PSTR("<<<")); }
+ ~SectionLog() { if (debug) echo_msg(F("<<<")); }
private:
- PGM_P the_msg;
+ FSTR_P the_msg;
bool debug;
- void echo_msg(PGM_P const pre) {
- SERIAL_ECHOPGM_P(pre);
+ void echo_msg(FSTR_P const fpre) {
+ SERIAL_ECHOF(fpre);
if (the_msg) {
SERIAL_CHAR(' ');
- SERIAL_ECHOPGM_P(the_msg);
+ SERIAL_ECHOF(the_msg);
}
SERIAL_CHAR(' ');
print_pos(current_position);
diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h
index 3341656671..03bffb8bd9 100644
--- a/Marlin/src/core/language.h
+++ b/Marlin/src/core/language.h
@@ -48,8 +48,8 @@
// cz Czech
// da Danish
// de German
-// el Greek
-// el_gr Greek (Greece)
+// el Greek (Greece)
+// el_CY Greek (Cyprus)
// en English
// es Spanish
// eu Basque-Euskera
@@ -165,6 +165,7 @@
#define STR_SAVED_POS "Position saved"
#define STR_RESTORING_POS "Restoring position"
#define STR_INVALID_POS_SLOT "Invalid slot. Total: "
+#define STR_DONE "Done."
#define STR_SD_CANT_OPEN_SUBDIR "Cannot open subdir "
#define STR_SD_INIT_FAIL "No SD card"
@@ -263,9 +264,10 @@
// Settings Report Strings
#define STR_Z_AUTO_ALIGN "Z Auto-Align"
#define STR_BACKLASH_COMPENSATION "Backlash compensation"
-#define STR_DELTA_SETTINGS "Delta settings (L R H S XYZ ABC)"
-#define STR_SCARA_SETTINGS "SCARA settings"
-#define STR_SCARA_S "S"
+#define STR_S_SEG_PER_SEC "S"
+#define STR_DELTA_SETTINGS "Delta (L R H S XYZ ABC)"
+#define STR_SCARA_SETTINGS "SCARA"
+#define STR_POLARGRAPH_SETTINGS "Polargraph"
#define STR_SCARA_P_T_Z "P T Z"
#define STR_ENDSTOP_ADJUSTMENT "Endstop adjustment"
#define STR_SKEW_FACTOR "Skew Factor"
diff --git a/Marlin/src/core/macros.h b/Marlin/src/core/macros.h
index 0174e21add..22c3767e1d 100644
--- a/Marlin/src/core/macros.h
+++ b/Marlin/src/core/macros.h
@@ -33,32 +33,32 @@
#define _AXIS(A) (A##_AXIS)
-#define _XMIN_ 100
-#define _YMIN_ 200
-#define _ZMIN_ 300
-#define _IMIN_ 500
-#define _JMIN_ 600
-#define _KMIN_ 700
-#define _XMAX_ 101
-#define _YMAX_ 201
-#define _ZMAX_ 301
-#define _IMAX_ 501
-#define _JMAX_ 601
-#define _KMAX_ 701
-#define _XDIAG_ 102
-#define _YDIAG_ 202
-#define _ZDIAG_ 302
-#define _IDIAG_ 502
-#define _JDIAG_ 602
-#define _KDIAG_ 702
-#define _E0DIAG_ 400
-#define _E1DIAG_ 401
-#define _E2DIAG_ 402
-#define _E3DIAG_ 403
-#define _E4DIAG_ 404
-#define _E5DIAG_ 405
-#define _E6DIAG_ 406
-#define _E7DIAG_ 407
+#define _XMIN_ 0x11
+#define _YMIN_ 0x12
+#define _ZMIN_ 0x13
+#define _IMIN_ 0x14
+#define _JMIN_ 0x15
+#define _KMIN_ 0x16
+#define _XMAX_ 0x21
+#define _YMAX_ 0x22
+#define _ZMAX_ 0x23
+#define _IMAX_ 0x24
+#define _JMAX_ 0x25
+#define _KMAX_ 0x26
+#define _XDIAG_ 0x31
+#define _YDIAG_ 0x32
+#define _ZDIAG_ 0x33
+#define _IDIAG_ 0x34
+#define _JDIAG_ 0x35
+#define _KDIAG_ 0x36
+#define _E0DIAG_ 0xE0
+#define _E1DIAG_ 0xE1
+#define _E2DIAG_ 0xE2
+#define _E3DIAG_ 0xE3
+#define _E4DIAG_ 0xE4
+#define _E5DIAG_ 0xE5
+#define _E6DIAG_ 0xE6
+#define _E7DIAG_ 0xE7
#define _FORCE_INLINE_ __attribute__((__always_inline__)) __inline__
#define FORCE_INLINE __attribute__((always_inline)) inline
@@ -251,6 +251,8 @@
memcpy(&a[0],&b[0],_MIN(sizeof(a),sizeof(b))); \
}while(0)
+#define CODE_11( A,B,C,D,E,F,G,H,I,J,K,...) A; B; C; D; E; F; G; H; I; J; K
+#define CODE_10( A,B,C,D,E,F,G,H,I,J,...) A; B; C; D; E; F; G; H; I; J
#define CODE_9( A,B,C,D,E,F,G,H,I,...) A; B; C; D; E; F; G; H; I
#define CODE_8( A,B,C,D,E,F,G,H,...) A; B; C; D; E; F; G; H
#define CODE_7( A,B,C,D,E,F,G,...) A; B; C; D; E; F; G
@@ -286,6 +288,10 @@
#define GANG_N_1(N,K) _GANG_N(N,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K)
// Macros for initializing arrays
+#define LIST_20(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T
+#define LIST_19(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S
+#define LIST_18(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R
+#define LIST_17(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q
#define LIST_16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
#define LIST_15(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O
#define LIST_14(A,B,C,D,E,F,G,H,I,J,K,L,M,N,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N
@@ -502,6 +508,11 @@
#define INC_13 14
#define INC_14 15
#define INC_15 16
+#define INC_16 17
+#define INC_17 18
+#define INC_18 19
+#define INC_19 20
+#define INC_20 21
#define INCREMENT_(n) INC_##n
#define INCREMENT(n) INCREMENT_(n)
diff --git a/Marlin/src/core/multi_language.h b/Marlin/src/core/multi_language.h
index 5063faf60c..2106f946ac 100644
--- a/Marlin/src/core/multi_language.h
+++ b/Marlin/src/core/multi_language.h
@@ -1,28 +1,35 @@
-/********************
- * multi_language.h *
- ********************/
-
-/****************************************************************************
- * Written By Marcio Teixeira 2019 - Aleph Objects, Inc. *
- * *
- * This program is free software: you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation, either version 3 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * To view a copy of the GNU General Public License, go to the following *
- * location: . *
- ****************************************************************************/
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
#pragma once
+/*******************************************************
+ * multi_language.h *
+ * By Marcio Teixeira 2019 for Aleph Objects *
+ *******************************************************/
+
#include "../inc/MarlinConfigPre.h"
typedef const char Language_Str[];
+#define LSTR PROGMEM Language_Str
#ifdef LCD_LANGUAGE_5
#define NUM_LANGUAGES 5
@@ -71,7 +78,7 @@ typedef const char Language_Str[];
#define GET_TEXT(MSG) GET_LANG(LCD_LANGUAGE)::MSG
#define MAX_LANG_CHARSIZE LANG_CHARSIZE
#endif
-#define GET_TEXT_F(MSG) (const __FlashStringHelper*)GET_TEXT(MSG)
+#define GET_TEXT_F(MSG) FPSTR(GET_TEXT(MSG))
#define GET_LANGUAGE_NAME(INDEX) GET_LANG(LCD_LANGUAGE_##INDEX)::LANGUAGE
#define LANG_CHARSIZE GET_TEXT(CHARSIZE)
diff --git a/Marlin/src/core/serial.cpp b/Marlin/src/core/serial.cpp
index 8c9f4a8e4d..9cd862df70 100644
--- a/Marlin/src/core/serial.cpp
+++ b/Marlin/src/core/serial.cpp
@@ -69,23 +69,23 @@ PGMSTR(SP_I_LBL, " " AXIS4_STR ":"); PGMSTR(SP_J_LBL, " " AXIS5_STR ":"); PGMSTR
#endif
-void serialprintPGM(PGM_P str) {
+void serial_print_P(PGM_P str) {
while (const char c = pgm_read_byte(str++)) SERIAL_CHAR(c);
}
-void serial_echo_start() { static PGMSTR(echomagic, "echo:"); serialprintPGM(echomagic); }
-void serial_error_start() { static PGMSTR(errormagic, "Error:"); serialprintPGM(errormagic); }
+void serial_echo_start() { static PGMSTR(echomagic, "echo:"); serial_print_P(echomagic); }
+void serial_error_start() { static PGMSTR(errormagic, "Error:"); serial_print_P(errormagic); }
void serial_spaces(uint8_t count) { count *= (PROPORTIONAL_FONT_RATIO); while (count--) SERIAL_CHAR(' '); }
-void serial_ternary(const bool onoff, PGM_P const pre, PGM_P const on, PGM_P const off, PGM_P const post/*=nullptr*/) {
- if (pre) serialprintPGM(pre);
- serialprintPGM(onoff ? on : off);
- if (post) serialprintPGM(post);
+void serial_ternary(const bool onoff, FSTR_P const pre, FSTR_P const on, FSTR_P const off, FSTR_P const post/*=nullptr*/) {
+ if (pre) serial_print(pre);
+ serial_print(onoff ? on : off);
+ if (post) serial_print(post);
}
-void serialprint_onoff(const bool onoff) { serialprintPGM(onoff ? PSTR(STR_ON) : PSTR(STR_OFF)); }
+void serialprint_onoff(const bool onoff) { serial_print(onoff ? F(STR_ON) : F(STR_OFF)); }
void serialprintln_onoff(const bool onoff) { serialprint_onoff(onoff); SERIAL_EOL(); }
-void serialprint_truefalse(const bool tf) { serialprintPGM(tf ? PSTR("true") : PSTR("false")); }
+void serialprint_truefalse(const bool tf) { serial_print(tf ? F("true") : F("false")); }
void print_bin(uint16_t val) {
for (uint8_t i = 16; i--;) {
@@ -94,10 +94,10 @@ void print_bin(uint16_t val) {
}
}
-void print_pos(LINEAR_AXIS_ARGS(const_float_t), PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) {
- if (prefix) serialprintPGM(prefix);
+void print_pos(LINEAR_AXIS_ARGS(const_float_t), FSTR_P const prefix/*=nullptr*/, FSTR_P const suffix/*=nullptr*/) {
+ if (prefix) serial_print(prefix);
SERIAL_ECHOPGM_P(
LIST_N(DOUBLE(LINEAR_AXES), SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z, SP_I_STR, i, SP_J_STR, j, SP_K_STR, k)
);
- if (suffix) serialprintPGM(suffix); else SERIAL_EOL();
+ if (suffix) serial_print(suffix); else SERIAL_EOL();
}
diff --git a/Marlin/src/core/serial.h b/Marlin/src/core/serial.h
index 05d80a4829..e058f1e5cd 100644
--- a/Marlin/src/core/serial.h
+++ b/Marlin/src/core/serial.h
@@ -167,13 +167,10 @@ inline void SERIAL_ECHO(serial_char_t x) { SERIAL_IMPL.write(x.c); }
#define AS_CHAR(C) serial_char_t(C)
#define AS_DIGIT(C) AS_CHAR('0' + (C))
-// SERIAL_ECHO_F prints a floating point value with optional precision
-inline void SERIAL_ECHO_F(EnsureDouble x, int digit=2) { SERIAL_IMPL.print(x, digit); }
-
template
void SERIAL_ECHOLN(T x) { SERIAL_IMPL.println(x); }
-// SERIAL_PRINT works like SERIAL_ECHO but allow to specify the encoding base of the number printed
+// SERIAL_PRINT works like SERIAL_ECHO but also takes the numeric base
template
void SERIAL_PRINT(T x, U y) { SERIAL_IMPL.print(x, y); }
@@ -184,8 +181,20 @@ void SERIAL_PRINTLN(T x, PrintBase y) { SERIAL_IMPL.println(x, y); }
inline void SERIAL_FLUSH() { SERIAL_IMPL.flush(); }
inline void SERIAL_FLUSHTX() { SERIAL_IMPL.flushTX(); }
-// Print a single PROGMEM string to serial
-void serialprintPGM(PGM_P str);
+// Serial echo and error prefixes
+#define SERIAL_ECHO_START() serial_echo_start()
+#define SERIAL_ERROR_START() serial_error_start()
+
+// Serial end-of-line
+#define SERIAL_EOL() SERIAL_CHAR('\n')
+
+// Print a single PROGMEM, PGM_P, or PSTR() string.
+void serial_print_P(PGM_P str);
+inline void serial_println_P(PGM_P str) { serial_print_P(str); SERIAL_EOL(); }
+
+// Print a single FSTR_P, F(), or FPSTR() string.
+inline void serial_print(FSTR_P const fstr) { serial_print_P(FTOP(fstr)); }
+inline void serial_println(FSTR_P const fstr) { serial_println_P(FTOP(fstr)); }
//
// SERIAL_ECHOPGM... macros are used to output string-value pairs.
@@ -195,8 +204,8 @@ void serialprintPGM(PGM_P str);
#define __SEP_N(N,V...) _SEP_##N(V)
#define _SEP_N(N,V...) __SEP_N(N,V)
#define _SEP_N_REF() _SEP_N
-#define _SEP_1(s) serialprintPGM(PSTR(s));
-#define _SEP_2(s,v) serial_echopair_PGM(PSTR(s),v);
+#define _SEP_1(s) serial_print(F(s));
+#define _SEP_2(s,v) serial_echopair(F(s),v);
#define _SEP_3(s,v,V...) _SEP_2(s,v); DEFER2(_SEP_N_REF)()(TWO_ARGS(V),V);
#define SERIAL_ECHOPGM(V...) do{ EVAL(_SEP_N(TWO_ARGS(V),V)); }while(0)
@@ -204,8 +213,8 @@ void serialprintPGM(PGM_P str);
#define __SELP_N(N,V...) _SELP_##N(V)
#define _SELP_N(N,V...) __SELP_N(N,V)
#define _SELP_N_REF() _SELP_N
-#define _SELP_1(s) serialprintPGM(PSTR(s "\n"));
-#define _SELP_2(s,v) serial_echopair_PGM(PSTR(s),v); SERIAL_EOL();
+#define _SELP_1(s) serial_print(F(s "\n"));
+#define _SELP_2(s,v) serial_echolnpair(F(s),v);
#define _SELP_3(s,v,V...) _SEP_2(s,v); DEFER2(_SELP_N_REF)()(TWO_ARGS(V),V);
#define SERIAL_ECHOLNPGM(V...) do{ EVAL(_SELP_N(TWO_ARGS(V),V)); }while(0)
@@ -213,8 +222,8 @@ void serialprintPGM(PGM_P str);
#define __SEP_N_P(N,V...) _SEP_##N##_P(V)
#define _SEP_N_P(N,V...) __SEP_N_P(N,V)
#define _SEP_N_P_REF() _SEP_N_P
-#define _SEP_1_P(p) serialprintPGM(p);
-#define _SEP_2_P(p,v) serial_echopair_PGM(p,v);
+#define _SEP_1_P(p) serial_print_P(p);
+#define _SEP_2_P(p,v) serial_echopair_P(p,v);
#define _SEP_3_P(p,v,V...) _SEP_2_P(p,v); DEFER2(_SEP_N_P_REF)()(TWO_ARGS(V),V);
#define SERIAL_ECHOPGM_P(V...) do{ EVAL(_SEP_N_P(TWO_ARGS(V),V)); }while(0)
@@ -222,11 +231,29 @@ void serialprintPGM(PGM_P str);
#define __SELP_N_P(N,V...) _SELP_##N##_P(V)
#define _SELP_N_P(N,V...) __SELP_N_P(N,V)
#define _SELP_N_P_REF() _SELP_N_P
-#define _SELP_1_P(p) { serialprintPGM(p); SERIAL_EOL(); }
-#define _SELP_2_P(p,v) { serial_echopair_PGM(p,v); SERIAL_EOL(); }
+#define _SELP_1_P(p) serial_println_P(p)
+#define _SELP_2_P(p,v) serial_echolnpair_P(p,v)
#define _SELP_3_P(p,v,V...) { _SEP_2_P(p,v); DEFER2(_SELP_N_P_REF)()(TWO_ARGS(V),V); }
#define SERIAL_ECHOLNPGM_P(V...) do{ EVAL(_SELP_N_P(TWO_ARGS(V),V)); }while(0)
+// Print up to 20 pairs of values. Odd elements must be FSTR_P, F(), or FPSTR().
+#define __SEP_N_F(N,V...) _SEP_##N##_F(V)
+#define _SEP_N_F(N,V...) __SEP_N_F(N,V)
+#define _SEP_N_F_REF() _SEP_N_F
+#define _SEP_1_F(p) serial_print(p);
+#define _SEP_2_F(p,v) serial_echopair(p,v);
+#define _SEP_3_F(p,v,V...) _SEP_2_F(p,v); DEFER2(_SEP_N_F_REF)()(TWO_ARGS(V),V);
+#define SERIAL_ECHOF(V...) do{ EVAL(_SEP_N_F(TWO_ARGS(V),V)); }while(0)
+
+// Print up to 20 pairs of values followed by newline. Odd elements must be FSTR_P, F(), or FPSTR().
+#define __SELP_N_F(N,V...) _SELP_##N##_F(V)
+#define _SELP_N_F(N,V...) __SELP_N_F(N,V)
+#define _SELP_N_F_REF() _SELP_N_F
+#define _SELP_1_F(p) serial_println(p)
+#define _SELP_2_F(p,v) serial_echolnpair(p,v)
+#define _SELP_3_F(p,v,V...) { _SEP_2_F(p,v); DEFER2(_SELP_N_F_REF)()(TWO_ARGS(V),V); }
+#define SERIAL_ECHOLNF(V...) do{ EVAL(_SELP_N_F(TWO_ARGS(V),V)); }while(0)
+
#ifdef AllowDifferentTypeInList
inline void SERIAL_ECHOLIST_IMPL() {}
@@ -236,47 +263,49 @@ void serialprintPGM(PGM_P str);
template
void SERIAL_ECHOLIST_IMPL(T && t, Args && ... args) {
SERIAL_IMPL.print(t);
- serialprintPGM(PSTR(", "));
+ serial_print(F(", "));
SERIAL_ECHOLIST_IMPL(args...);
}
template
- void SERIAL_ECHOLIST(PGM_P const str, Args && ... args) {
- SERIAL_IMPL.print(str);
+ void SERIAL_ECHOLIST(FSTR_P const str, Args && ... args) {
+ SERIAL_IMPL.print(FTOP(str));
SERIAL_ECHOLIST_IMPL(args...);
}
#else // Optimization if the listed type are all the same (seems to be the case in the codebase so use that instead)
template
- void SERIAL_ECHOLIST(PGM_P const str, Args && ... args) {
- serialprintPGM(str);
+ void SERIAL_ECHOLIST(FSTR_P const fstr, Args && ... args) {
+ serial_print(fstr);
typename Private::first_type_of::type values[] = { args... };
constexpr size_t argsSize = sizeof...(args);
for (size_t i = 0; i < argsSize; i++) {
- if (i) serialprintPGM(PSTR(", "));
+ if (i) serial_print(F(", "));
SERIAL_IMPL.print(values[i]);
}
}
#endif
-#define SERIAL_ECHOPAIR_F_P(P,V...) do{ serialprintPGM(P); SERIAL_ECHO_F(V); }while(0)
-#define SERIAL_ECHOLNPAIR_F_P(V...) do{ SERIAL_ECHOPAIR_F_P(V); SERIAL_EOL(); }while(0)
+// SERIAL_ECHO_F prints a floating point value with optional precision
+inline void SERIAL_ECHO_F(EnsureDouble x, int digit=2) { SERIAL_IMPL.print(x, digit); }
-#define SERIAL_ECHOPAIR_F(S,V...) SERIAL_ECHOPAIR_F_P(PSTR(S),V)
-#define SERIAL_ECHOLNPAIR_F(V...) do{ SERIAL_ECHOPAIR_F(V); SERIAL_EOL(); }while(0)
+#define SERIAL_ECHOPAIR_F_P(P,V...) do{ serial_print_P(P); SERIAL_ECHO_F(V); }while(0)
+#define SERIAL_ECHOLNPAIR_F_P(P,V...) do{ SERIAL_ECHOPAIR_F_P(P,V); SERIAL_EOL(); }while(0)
-#define SERIAL_ECHO_START() serial_echo_start()
-#define SERIAL_ERROR_START() serial_error_start()
-#define SERIAL_EOL() SERIAL_CHAR('\n')
+#define SERIAL_ECHOPAIR_F_F(S,V...) do{ serial_print(S); SERIAL_ECHO_F(V); }while(0)
+#define SERIAL_ECHOLNPAIR_F_F(S,V...) do{ SERIAL_ECHOPAIR_F_F(S,V); SERIAL_EOL(); }while(0)
-#define SERIAL_ECHO_MSG(V...) do{ SERIAL_ECHO_START(); SERIAL_ECHOLNPGM(V); }while(0)
-#define SERIAL_ERROR_MSG(V...) do{ SERIAL_ERROR_START(); SERIAL_ECHOLNPGM(V); }while(0)
+#define SERIAL_ECHOPAIR_F(S,V...) SERIAL_ECHOPAIR_F_F(F(S),V)
+#define SERIAL_ECHOLNPAIR_F(V...) do{ SERIAL_ECHOPAIR_F(V); SERIAL_EOL(); }while(0)
-#define SERIAL_ECHO_SP(C) serial_spaces(C)
+#define SERIAL_ECHO_MSG(V...) do{ SERIAL_ECHO_START(); SERIAL_ECHOLNPGM(V); }while(0)
+#define SERIAL_ERROR_MSG(V...) do{ SERIAL_ERROR_START(); SERIAL_ECHOLNPGM(V); }while(0)
-#define SERIAL_ECHO_TERNARY(TF, PRE, ON, OFF, POST) serial_ternary(TF, PSTR(PRE), PSTR(ON), PSTR(OFF), PSTR(POST))
+#define SERIAL_ECHO_SP(C) serial_spaces(C)
+
+#define SERIAL_ECHO_TERNARY(TF, PRE, ON, OFF, POST) serial_ternary(TF, F(PRE), F(ON), F(OFF), F(POST))
#if SERIAL_FLOAT_PRECISION
#define SERIAL_DECIMAL(V) SERIAL_PRINT(V, SERIAL_FLOAT_PRECISION)
@@ -287,33 +316,42 @@ void serialprintPGM(PGM_P str);
//
// Functions for serial printing from PROGMEM. (Saves loads of SRAM.)
//
-inline void serial_echopair_PGM(PGM_P const s_P, serial_char_t v) { serialprintPGM(s_P); SERIAL_CHAR(v.c); }
-
-inline void serial_echopair_PGM(PGM_P const s_P, float v) { serialprintPGM(s_P); SERIAL_DECIMAL(v); }
-inline void serial_echopair_PGM(PGM_P const s_P, double v) { serialprintPGM(s_P); SERIAL_DECIMAL(v); }
-inline void serial_echopair_PGM(PGM_P const s_P, const char *v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
+inline void serial_echopair_P(PGM_P const pstr, serial_char_t v) { serial_print_P(pstr); SERIAL_CHAR(v.c); }
+inline void serial_echopair_P(PGM_P const pstr, float v) { serial_print_P(pstr); SERIAL_DECIMAL(v); }
+inline void serial_echopair_P(PGM_P const pstr, double v) { serial_print_P(pstr); SERIAL_DECIMAL(v); }
+//inline void serial_echopair_P(PGM_P const pstr, const char *v) { serial_print_P(pstr); SERIAL_ECHO(v); }
+inline void serial_echopair_P(PGM_P const pstr, FSTR_P v) { serial_print_P(pstr); SERIAL_ECHOF(v); }
// Default implementation for types without a specialization. Handles integers.
template
-void serial_echopair_PGM(PGM_P const s_P, T v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
+inline void serial_echopair_P(PGM_P const pstr, T v) { serial_print_P(pstr); SERIAL_ECHO(v); }
-inline void serial_echopair_PGM(PGM_P const s_P, bool v) { serial_echopair_PGM(s_P, (int)v); }
-inline void serial_echopair_PGM(PGM_P const s_P, void *v) { serial_echopair_PGM(s_P, (uintptr_t)v); }
+// Add a newline.
+template
+inline void serial_echolnpair_P(PGM_P const pstr, T v) { serial_echopair_P(pstr, v); SERIAL_EOL(); }
+
+// Catch-all for __FlashStringHelper *
+template
+inline void serial_echopair(FSTR_P const fstr, T v) { serial_echopair_P(FTOP(fstr), v); }
+
+// Add a newline to the serial output
+template
+inline void serial_echolnpair(FSTR_P const fstr, T v) { serial_echolnpair_P(FTOP(fstr), v); }
void serial_echo_start();
void serial_error_start();
-void serial_ternary(const bool onoff, PGM_P const pre, PGM_P const on, PGM_P const off, PGM_P const post=nullptr);
+void serial_ternary(const bool onoff, FSTR_P const pre, FSTR_P const on, FSTR_P const off, FSTR_P const post=nullptr);
void serialprint_onoff(const bool onoff);
void serialprintln_onoff(const bool onoff);
void serialprint_truefalse(const bool tf);
void serial_spaces(uint8_t count);
void print_bin(const uint16_t val);
-void print_pos(LINEAR_AXIS_ARGS(const_float_t), PGM_P const prefix=nullptr, PGM_P const suffix=nullptr);
+void print_pos(LINEAR_AXIS_ARGS(const_float_t), FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr);
-inline void print_pos(const xyz_pos_t &xyz, PGM_P const prefix=nullptr, PGM_P const suffix=nullptr) {
+inline void print_pos(const xyz_pos_t &xyz, FSTR_P const prefix=nullptr, FSTR_P const suffix=nullptr) {
print_pos(LINEAR_AXIS_ELEM(xyz), prefix, suffix);
}
-#define SERIAL_POS(SUFFIX,VAR) do { print_pos(VAR, PSTR(" " STRINGIFY(VAR) "="), PSTR(" : " SUFFIX "\n")); }while(0)
-#define SERIAL_XYZ(PREFIX,V...) do { print_pos(V, PSTR(PREFIX), nullptr); }while(0)
+#define SERIAL_POS(SUFFIX,VAR) do { print_pos(VAR, F(" " STRINGIFY(VAR) "="), F(" : " SUFFIX "\n")); }while(0)
+#define SERIAL_XYZ(PREFIX,V...) do { print_pos(V, F(PREFIX)); }while(0)
diff --git a/Marlin/src/core/types.h b/Marlin/src/core/types.h
index 372b4b1e66..72099fb408 100644
--- a/Marlin/src/core/types.h
+++ b/Marlin/src/core/types.h
@@ -26,9 +26,6 @@
#include "../inc/MarlinConfigPre.h"
-class __FlashStringHelper;
-typedef const __FlashStringHelper *progmem_str;
-
//
// Conditional type assignment magic. For example...
//
diff --git a/Marlin/src/core/utility.cpp b/Marlin/src/core/utility.cpp
index 8aeec89f02..b70e2fa9a9 100644
--- a/Marlin/src/core/utility.cpp
+++ b/Marlin/src/core/utility.cpp
@@ -92,9 +92,9 @@ void safe_delay(millis_t ms) {
SERIAL_ECHOPGM(" (Aligned With");
if (probe.offset_xy.y > 0)
- SERIAL_ECHOPGM_P(ENABLED(IS_SCARA) ? PSTR("-Distal") : PSTR("-Back"));
+ SERIAL_ECHOF(F(TERN(IS_SCARA, "-Distal", "-Back")));
else if (probe.offset_xy.y < 0)
- SERIAL_ECHOPGM_P(ENABLED(IS_SCARA) ? PSTR("-Proximal") : PSTR("-Front"));
+ SERIAL_ECHOF(F(TERN(IS_SCARA, "-Proximal", "-Front")));
else if (probe.offset_xy.x != 0)
SERIAL_ECHOPGM("-Center");
@@ -102,7 +102,7 @@ void safe_delay(millis_t ms) {
#endif
- SERIAL_ECHOPGM_P(probe.offset.z < 0 ? PSTR("Below") : probe.offset.z > 0 ? PSTR("Above") : PSTR("Same Z as"));
+ SERIAL_ECHOF(probe.offset.z < 0 ? F("Below") : probe.offset.z > 0 ? F("Above") : F("Same Z as"));
SERIAL_ECHOLNPGM(" Nozzle)");
#endif
diff --git a/Marlin/src/feature/backlash.cpp b/Marlin/src/feature/backlash.cpp
index 23dc973049..b646e19f15 100644
--- a/Marlin/src/feature/backlash.cpp
+++ b/Marlin/src/feature/backlash.cpp
@@ -60,9 +60,9 @@ Backlash backlash;
* spread over multiple segments, smoothing out artifacts even more.
*/
-void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const uint8_t dm, block_t * const block) {
- static uint8_t last_direction_bits;
- uint8_t changed_dir = last_direction_bits ^ dm;
+void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const axis_bits_t dm, block_t * const block) {
+ static axis_bits_t last_direction_bits;
+ axis_bits_t changed_dir = last_direction_bits ^ dm;
// Ignore direction change unless steps are taken in that direction
#if DISABLED(CORE_BACKLASH) || ENABLED(MARKFORGED_XY)
if (!da) CBI(changed_dir, X_AXIS);
diff --git a/Marlin/src/feature/backlash.h b/Marlin/src/feature/backlash.h
index 500168b380..4d4e294038 100644
--- a/Marlin/src/feature/backlash.h
+++ b/Marlin/src/feature/backlash.h
@@ -71,7 +71,7 @@ public:
return has_measurement(X_AXIS) || has_measurement(Y_AXIS) || has_measurement(Z_AXIS);
}
- void add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const uint8_t dm, block_t * const block);
+ void add_correction_steps(const int32_t &da, const int32_t &db, const int32_t &dc, const axis_bits_t dm, block_t * const block);
};
extern Backlash backlash;
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl.cpp b/Marlin/src/feature/bedlevel/ubl/ubl.cpp
index 00cb5ed738..964f1123fe 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl.cpp
@@ -180,10 +180,8 @@ void unified_bed_leveling::display_map(const uint8_t map_type) {
SERIAL_EOL();
serial_echo_column_labels(eachsp - 2);
}
- else {
- SERIAL_ECHOPGM(" for ");
- SERIAL_ECHOPGM_P(csv ? PSTR("CSV:\n") : PSTR("LCD:\n"));
- }
+ else
+ SERIAL_ECHOPGM(" for ", csv ? F("CSV:\n") : F("LCD:\n"));
// Add XY probe offset from extruder because probe.probe_at_point() subtracts them when
// moving to the XY position to be measured. This ensures better agreement between
@@ -213,7 +211,7 @@ void unified_bed_leveling::display_map(const uint8_t map_type) {
// TODO: Display on Graphical LCD
}
else if (isnan(f))
- SERIAL_ECHOPGM_P(human ? PSTR(" . ") : PSTR("NAN"));
+ SERIAL_ECHOF(human ? F(" . ") : F("NAN"));
else if (human || csv) {
if (human && f >= 0.0) SERIAL_CHAR(f > 0 ? '+' : ' '); // Display sign also for positive numbers (' ' for 0)
SERIAL_ECHO_F(f, 3); // Positive: 5 digits, Negative: 6 digits
@@ -281,10 +279,10 @@ bool unified_bed_leveling::sanity_check() {
}
#endif
- process_subcommands_now_P(G28_STR); // Home
- process_subcommands_now_P(PSTR(ALIGN_GCODE "\n" // Align multi z axis if available
- PROBE_GCODE "\n" // Build mesh with available hardware
- "G29P3\nG29P3")); // Ensure mesh is complete by running smart fill twice
+ process_subcommands_now(FPSTR(G28_STR)); // Home
+ process_subcommands_now(F(ALIGN_GCODE "\n" // Align multi z axis if available
+ PROBE_GCODE "\n" // Build mesh with available hardware
+ "G29P3\nG29P3")); // Ensure mesh is complete by running smart fill twice
if (parser.seenval('S')) {
char umw_gcode[32];
@@ -292,9 +290,9 @@ bool unified_bed_leveling::sanity_check() {
queue.inject(umw_gcode);
}
- process_subcommands_now_P(PSTR("G29A\nG29F10\n" // Set UBL Active & Fade 10
- "M140S0\nM104S0\n" // Turn off heaters
- "M500")); // Store settings
+ process_subcommands_now(F("G29A\nG29F10\n" // Set UBL Active & Fade 10
+ "M140S0\nM104S0\n" // Turn off heaters
+ "M500")); // Store settings
}
#endif // UBL_MESH_WIZARD
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index 747c61a8b9..d78a5e2578 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -609,7 +609,7 @@ void unified_bed_leveling::G29() {
settings.load_mesh(param.KLS_storage_slot);
storage_slot = param.KLS_storage_slot;
- SERIAL_ECHOLNPGM("Done.");
+ SERIAL_ECHOLNPGM(STR_DONE);
}
//
@@ -637,7 +637,7 @@ void unified_bed_leveling::G29() {
settings.store_mesh(param.KLS_storage_slot);
storage_slot = param.KLS_storage_slot;
- SERIAL_ECHOLNPGM("Done.");
+ SERIAL_ECHOLNPGM(STR_DONE);
}
if (parser.seen_test('T'))
@@ -656,7 +656,7 @@ void unified_bed_leveling::G29() {
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
if (probe_deployed) {
planner.synchronize();
- gcode.process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
+ gcode.process_subcommands_now(F(Z_PROBE_END_SCRIPT));
}
#else
UNUSED(probe_deployed);
@@ -736,7 +736,7 @@ void unified_bed_leveling::shift_mesh_height() {
const uint8_t point_num = (GRID_MAX_POINTS - count) + 1;
SERIAL_ECHOLNPGM("Probing mesh point ", point_num, "/", GRID_MAX_POINTS, ".");
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), point_num, int(GRID_MAX_POINTS)));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), point_num, int(GRID_MAX_POINTS)));
#if HAS_LCD_MENU
if (ui.button_pressed()) {
@@ -789,12 +789,12 @@ void unified_bed_leveling::shift_mesh_height() {
#endif // HAS_BED_PROBE
-void set_message_with_feedback(PGM_P const msg_P) {
+void set_message_with_feedback(FSTR_P const fstr) {
#if HAS_LCD_MENU
- ui.set_status_P(msg_P);
+ ui.set_status(fstr);
ui.quick_feedback();
#else
- UNUSED(msg_P);
+ UNUSED(fstr);
#endif
}
@@ -850,7 +850,7 @@ void set_message_with_feedback(PGM_P const msg_P) {
planner.synchronize();
SERIAL_ECHOPGM("Place shim under nozzle");
- LCD_MESSAGEPGM(MSG_UBL_BC_INSERT);
+ LCD_MESSAGE(MSG_UBL_BC_INSERT);
ui.return_to_status();
echo_and_take_a_measurement();
@@ -859,7 +859,7 @@ void set_message_with_feedback(PGM_P const msg_P) {
planner.synchronize();
SERIAL_ECHOPGM("Remove shim");
- LCD_MESSAGEPGM(MSG_UBL_BC_REMOVE);
+ LCD_MESSAGE(MSG_UBL_BC_REMOVE);
echo_and_take_a_measurement();
const float z2 = measure_point_with_encoder();
@@ -905,7 +905,7 @@ void set_message_with_feedback(PGM_P const msg_P) {
if (!position_is_reachable(ppos)) break; // SHOULD NOT OCCUR (find_closest_mesh_point only returns reachable points)
- LCD_MESSAGEPGM(MSG_UBL_MOVING_TO_NEXT);
+ LCD_MESSAGE(MSG_UBL_MOVING_TO_NEXT);
do_blocking_move_to(ppos);
do_z_clearance(z_clearance);
@@ -917,11 +917,11 @@ void set_message_with_feedback(PGM_P const msg_P) {
if (parser.seen_test('B')) {
SERIAL_ECHOPGM("Place Shim & Measure");
- LCD_MESSAGEPGM(MSG_UBL_BC_INSERT);
+ LCD_MESSAGE(MSG_UBL_BC_INSERT);
}
else {
SERIAL_ECHOPGM("Measure");
- LCD_MESSAGEPGM(MSG_UBL_BC_INSERT2);
+ LCD_MESSAGE(MSG_UBL_BC_INSERT2);
}
const float z_step = 0.01f; // 0.01mm per encoder tick, occasionally step
@@ -974,7 +974,7 @@ void set_message_with_feedback(PGM_P const msg_P) {
save_ubl_active_state_and_disable();
- LCD_MESSAGEPGM(MSG_UBL_FINE_TUNE_MESH);
+ LCD_MESSAGE(MSG_UBL_FINE_TUNE_MESH);
ui.capture(); // Take over control of the LCD encoder
do_blocking_move_to_xy_z(pos, Z_CLEARANCE_BETWEEN_PROBES); // Move to the given XY with probe clearance
@@ -1039,7 +1039,7 @@ void set_message_with_feedback(PGM_P const msg_P) {
if (_click_and_hold([]{
ui.return_to_status();
do_z_clearance(Z_CLEARANCE_BETWEEN_PROBES);
- set_message_with_feedback(GET_TEXT(MSG_EDITING_STOPPED));
+ set_message_with_feedback(GET_TEXT_F(MSG_EDITING_STOPPED));
})) break;
// TODO: Disable leveling here so the Z value becomes the 'native' Z value.
@@ -1060,7 +1060,7 @@ void set_message_with_feedback(PGM_P const msg_P) {
do_blocking_move_to_xy_z(pos, Z_CLEARANCE_BETWEEN_PROBES);
- LCD_MESSAGEPGM(MSG_UBL_DONE_EDITING_MESH);
+ LCD_MESSAGE(MSG_UBL_DONE_EDITING_MESH);
SERIAL_ECHOLNPGM("Done Editing Mesh");
if (lcd_map_control)
@@ -1077,7 +1077,7 @@ void set_message_with_feedback(PGM_P const msg_P) {
bool unified_bed_leveling::G29_parse_parameters() {
bool err_flag = false;
- set_message_with_feedback(GET_TEXT(MSG_UBL_DOING_G29));
+ set_message_with_feedback(GET_TEXT_F(MSG_UBL_DOING_G29));
param.C_constant = 0;
param.R_repetition = 0;
@@ -1200,7 +1200,7 @@ void unified_bed_leveling::save_ubl_active_state_and_disable() {
ubl_state_recursion_chk++;
if (ubl_state_recursion_chk != 1) {
SERIAL_ECHOLNPGM("save_ubl_active_state_and_disabled() called multiple times in a row.");
- set_message_with_feedback(GET_TEXT(MSG_UBL_SAVE_ERROR));
+ set_message_with_feedback(GET_TEXT_F(MSG_UBL_SAVE_ERROR));
return;
}
#endif
@@ -1213,7 +1213,7 @@ void unified_bed_leveling::restore_ubl_active_state_and_leave() {
#if ENABLED(UBL_DEVEL_DEBUGGING)
if (--ubl_state_recursion_chk) {
SERIAL_ECHOLNPGM("restore_ubl_active_state_and_leave() called too many times.");
- set_message_with_feedback(GET_TEXT(MSG_UBL_RESTORE_ERROR));
+ set_message_with_feedback(GET_TEXT_F(MSG_UBL_RESTORE_ERROR));
return;
}
#endif
@@ -1438,7 +1438,7 @@ void unified_bed_leveling::smart_fill_mesh() {
if (do_3_pt_leveling) {
SERIAL_ECHOLNPGM("Tilting mesh (1/3)");
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " 1/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " 1/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
measured_z = probe.probe_at_point(points[0], PROBE_PT_RAISE, param.V_verbosity);
if (isnan(measured_z))
@@ -1457,7 +1457,7 @@ void unified_bed_leveling::smart_fill_mesh() {
if (!abort_flag) {
SERIAL_ECHOLNPGM("Tilting mesh (2/3)");
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " 2/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " 2/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
measured_z = probe.probe_at_point(points[1], PROBE_PT_RAISE, param.V_verbosity);
#ifdef VALIDATE_MESH_TILT
@@ -1477,7 +1477,7 @@ void unified_bed_leveling::smart_fill_mesh() {
if (!abort_flag) {
SERIAL_ECHOLNPGM("Tilting mesh (3/3)");
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " 3/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " 3/3"), GET_TEXT(MSG_LCD_TILTING_MESH)));
measured_z = probe.probe_at_point(points[2], PROBE_PT_LAST_STOW, param.V_verbosity);
#ifdef VALIDATE_MESH_TILT
@@ -1518,7 +1518,7 @@ void unified_bed_leveling::smart_fill_mesh() {
if (!abort_flag) {
SERIAL_ECHOLNPGM("Tilting mesh point ", point_num, "/", total_points, "\n");
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points));
measured_z = probe.probe_at_point(rpos, parser.seen_test('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity); // TODO: Needs error handling
@@ -1609,7 +1609,7 @@ void unified_bed_leveling::smart_fill_mesh() {
}
if (DEBUGGING(LEVELING)) {
- rotation.debug(PSTR("rotation matrix:\n"));
+ rotation.debug(F("rotation matrix:\n"));
DEBUG_ECHOPAIR_F("LSF Results A=", lsf_results.A, 7);
DEBUG_ECHOPAIR_F(" B=", lsf_results.B, 7);
DEBUG_ECHOLNPAIR_F(" D=", lsf_results.D, 7);
@@ -1636,14 +1636,14 @@ void unified_bed_leveling::smart_fill_mesh() {
auto normed = [&](const xy_pos_t &pos, const_float_t zadd) {
return normal.x * pos.x + normal.y * pos.y + zadd;
};
- auto debug_pt = [](PGM_P const pre, const xy_pos_t &pos, const_float_t zadd) {
- d_from(); SERIAL_ECHOPGM_P(pre);
+ auto debug_pt = [](FSTR_P const pre, const xy_pos_t &pos, const_float_t zadd) {
+ d_from(); SERIAL_ECHOF(pre);
DEBUG_ECHO_F(normed(pos, zadd), 6);
DEBUG_ECHOLNPAIR_F(" Z error = ", zadd - get_z_correction(pos), 6);
};
- debug_pt(PSTR("1st point: "), probe_pt[0], normal.z * z1);
- debug_pt(PSTR("2nd point: "), probe_pt[1], normal.z * z2);
- debug_pt(PSTR("3rd point: "), probe_pt[2], normal.z * z3);
+ debug_pt(F("1st point: "), probe_pt[0], normal.z * z1);
+ debug_pt(F("2nd point: "), probe_pt[1], normal.z * z2);
+ debug_pt(F("3rd point: "), probe_pt[2], normal.z * z3);
d_from(); DEBUG_ECHOPGM("safe home with Z=");
DEBUG_ECHOLNPAIR_F("0 : ", normed(safe_homing_xy, 0), 6);
d_from(); DEBUG_ECHOPGM("safe home with Z=");
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp
index 20408d8d1e..f7e98c9fa7 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_motion.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfig.h"
#if ENABLED(AUTO_BED_LEVELING_UBL)
@@ -323,6 +324,8 @@
#define DELTA_SEGMENT_MIN_LENGTH 0.25 // SCARA minimum segment size is 0.25mm
#elif ENABLED(DELTA)
#define DELTA_SEGMENT_MIN_LENGTH 0.10 // mm (still subject to DELTA_SEGMENTS_PER_SECOND)
+ #elif ENABLED(POLARGRAPH)
+ #define DELTA_SEGMENT_MIN_LENGTH 0.10 // mm (still subject to DELTA_SEGMENTS_PER_SECOND)
#else // CARTESIAN
#ifdef LEVELED_SEGMENT_LENGTH
#define DELTA_SEGMENT_MIN_LENGTH LEVELED_SEGMENT_LENGTH
diff --git a/Marlin/src/feature/cancel_object.cpp b/Marlin/src/feature/cancel_object.cpp
index ee5716888d..bffd2bb720 100644
--- a/Marlin/src/feature/cancel_object.cpp
+++ b/Marlin/src/feature/cancel_object.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../inc/MarlinConfig.h"
#if ENABLED(CANCEL_OBJECTS)
@@ -45,7 +46,7 @@ void CancelObject::set_active_object(const int8_t obj) {
#if BOTH(HAS_STATUS_MESSAGE, CANCEL_OBJECTS_REPORTING)
if (active_object >= 0)
- ui.status_printf_P(0, PSTR(S_FMT " %i"), GET_TEXT(MSG_PRINTING_OBJECT), int(active_object));
+ ui.status_printf(0, F(S_FMT " %i"), GET_TEXT(MSG_PRINTING_OBJECT), int(active_object));
else
ui.reset_status();
#endif
diff --git a/Marlin/src/feature/closedloop.cpp b/Marlin/src/feature/closedloop.cpp
index 8a97f0c0cd..1b9f711a6b 100644
--- a/Marlin/src/feature/closedloop.cpp
+++ b/Marlin/src/feature/closedloop.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../inc/MarlinConfig.h"
#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp
index 35f567fa8f..5efddbb111 100644
--- a/Marlin/src/feature/controllerfan.cpp
+++ b/Marlin/src/feature/controllerfan.cpp
@@ -25,7 +25,7 @@
#if ENABLED(USE_CONTROLLER_FAN)
#include "controllerfan.h"
-#include "../module/stepper/indirection.h"
+#include "../module/stepper.h"
#include "../module/temperature.h"
ControllerFan controllerFan;
@@ -54,33 +54,12 @@ void ControllerFan::update() {
if (ELAPSED(ms, nextMotorCheck)) {
nextMotorCheck = ms + 2500UL; // Not a time critical function, so only check every 2.5s
- #define MOTOR_IS_ON(A,B) (A##_ENABLE_READ() == bool(B##_ENABLE_ON))
- #define _OR_ENABLED_E(N) || MOTOR_IS_ON(E##N,E)
-
- const bool motor_on = (
- ( DISABLED(CONTROLLER_FAN_IGNORE_Z) &&
- ( MOTOR_IS_ON(Z,Z)
- || TERN0(HAS_Z2_ENABLE, MOTOR_IS_ON(Z2,Z))
- || TERN0(HAS_Z3_ENABLE, MOTOR_IS_ON(Z3,Z))
- || TERN0(HAS_Z4_ENABLE, MOTOR_IS_ON(Z4,Z))
- )
- ) || (
- DISABLED(CONTROLLER_FAN_USE_Z_ONLY) &&
- ( MOTOR_IS_ON(X,X) || MOTOR_IS_ON(Y,Y)
- || TERN0(HAS_X2_ENABLE, MOTOR_IS_ON(X2,X))
- || TERN0(HAS_Y2_ENABLE, MOTOR_IS_ON(Y2,Y))
- #if E_STEPPERS
- REPEAT(E_STEPPERS, _OR_ENABLED_E)
- #endif
- )
- )
- );
-
// If any triggers for the controller fan are true...
// - At least one stepper driver is enabled
// - The heated bed is enabled
// - TEMP_SENSOR_BOARD is reporting >= CONTROLLER_FAN_MIN_BOARD_TEMP
- if ( motor_on
+ const ena_mask_t axis_mask = TERN(CONTROLLER_FAN_USE_Z_ONLY, _BV(Z_AXIS), ~TERN0(CONTROLLER_FAN_IGNORE_Z, _BV(Z_AXIS)));
+ if ( (stepper.axis_enabled.bits & axis_mask)
|| TERN0(HAS_HEATED_BED, thermalManager.temp_bed.soft_pwm_amount > 0)
|| TERN0(HAS_CONTROLLER_FAN_MIN_BOARD_TEMP, thermalManager.wholeDegBoard() >= CONTROLLER_FAN_MIN_BOARD_TEMP)
) lastMotorOn = ms; //... set time to NOW so the fan will turn on
diff --git a/Marlin/src/feature/direct_stepping.cpp b/Marlin/src/feature/direct_stepping.cpp
index 2698b53dd6..b8ef04fcd9 100644
--- a/Marlin/src/feature/direct_stepping.cpp
+++ b/Marlin/src/feature/direct_stepping.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../inc/MarlinConfigPre.h"
#if ENABLED(DIRECT_STEPPING)
@@ -173,7 +174,7 @@ namespace DirectStepping {
template
void SerialPageManager::write_responses() {
if (fatal_error) {
- kill(GET_TEXT(MSG_BAD_PAGE));
+ kill(GET_TEXT_F(MSG_BAD_PAGE));
return;
}
diff --git a/Marlin/src/feature/encoder_i2c.cpp b/Marlin/src/feature/encoder_i2c.cpp
index e6b127e03c..87e611f86c 100644
--- a/Marlin/src/feature/encoder_i2c.cpp
+++ b/Marlin/src/feature/encoder_i2c.cpp
@@ -153,7 +153,7 @@ void I2CPositionEncoder::update() {
#ifdef I2CPE_ERR_THRESH_ABORT
if (ABS(error) > I2CPE_ERR_THRESH_ABORT * planner.settings.axis_steps_per_mm[encoderAxis]) {
- //kill(PSTR("Significant Error"));
+ //kill(F("Significant Error"));
SERIAL_ECHOLNPGM("Axis error over threshold, aborting!", error);
safe_delay(5000);
}
@@ -173,7 +173,7 @@ void I2CPositionEncoder::update() {
LOOP_L_N(i, I2CPE_ERR_PRST_ARRAY_SIZE) sumP += errPrst[i];
const int32_t errorP = int32_t(sumP * RECIPROCAL(I2CPE_ERR_PRST_ARRAY_SIZE));
SERIAL_CHAR(axis_codes[encoderAxis]);
- SERIAL_ECHOLNPGM(" : CORRECT ERR ", errorP * planner.steps_to_mm[encoderAxis], "mm");
+ SERIAL_ECHOLNPGM(" : CORRECT ERR ", errorP * planner.mm_per_step[encoderAxis], "mm");
babystep.add_steps(encoderAxis, -LROUND(errorP));
errPrstIdx = 0;
}
@@ -232,7 +232,7 @@ bool I2CPositionEncoder::passes_test(const bool report) {
if (report) {
if (H != I2CPE_MAG_SIG_GOOD) SERIAL_ECHOPGM("Warning. ");
SERIAL_CHAR(axis_codes[encoderAxis]);
- serial_ternary(H == I2CPE_MAG_SIG_BAD, PSTR(" axis "), PSTR("magnetic strip "), PSTR("encoder "));
+ serial_ternary(H == I2CPE_MAG_SIG_BAD, F(" axis "), F("magnetic strip "), F("encoder "));
switch (H) {
case I2CPE_MAG_SIG_GOOD:
case I2CPE_MAG_SIG_MID:
diff --git a/Marlin/src/feature/fwretract.cpp b/Marlin/src/feature/fwretract.cpp
index 26817b9ed2..4077d8d1c2 100644
--- a/Marlin/src/feature/fwretract.cpp
+++ b/Marlin/src/feature/fwretract.cpp
@@ -75,7 +75,7 @@ void FWRetract::reset() {
LOOP_L_N(i, EXTRUDERS) {
retracted[i] = false;
- TERN_(HAS_MULTI_EXTRUDER, retracted_swap[i] = false);
+ E_TERN_(retracted_swap[i] = false);
current_retract[i] = 0.0;
}
}
@@ -91,7 +91,7 @@ void FWRetract::reset() {
* Note: Auto-retract will apply the set Z hop in addition to any Z hop
* included in the G-code. Use M207 Z0 to to prevent double hop.
*/
-void FWRetract::retract(const bool retracting OPTARG(HAS_MULTI_EXTRUDER, bool swapping/*=false*/)) {
+void FWRetract::retract(const bool retracting E_OPTARG(bool swapping/*=false*/)) {
// Prevent two retracts or recovers in a row
if (retracted[active_extruder] == retracting) return;
diff --git a/Marlin/src/feature/fwretract.h b/Marlin/src/feature/fwretract.h
index 9b0ff19c8b..d6d0432e3a 100644
--- a/Marlin/src/feature/fwretract.h
+++ b/Marlin/src/feature/fwretract.h
@@ -74,7 +74,7 @@ public:
#endif
}
- static void retract(const bool retracting OPTARG(HAS_MULTI_EXTRUDER, bool swapping = false));
+ static void retract(const bool retracting E_OPTARG(bool swapping=false));
static void M207_report();
static void M207();
diff --git a/Marlin/src/feature/host_actions.cpp b/Marlin/src/feature/host_actions.cpp
index 62e60320f7..9f5a1481f1 100644
--- a/Marlin/src/feature/host_actions.cpp
+++ b/Marlin/src/feature/host_actions.cpp
@@ -37,33 +37,33 @@
#include "runout.h"
#endif
-void host_action(PGM_P const pstr, const bool eol) {
+void host_action(FSTR_P const fstr, const bool eol) {
PORT_REDIRECT(SerialMask::All);
SERIAL_ECHOPGM("//action:");
- SERIAL_ECHOPGM_P(pstr);
+ SERIAL_ECHOF(fstr);
if (eol) SERIAL_EOL();
}
#ifdef ACTION_ON_KILL
- void host_action_kill() { host_action(PSTR(ACTION_ON_KILL)); }
+ void host_action_kill() { host_action(F(ACTION_ON_KILL)); }
#endif
#ifdef ACTION_ON_PAUSE
- void host_action_pause(const bool eol/*=true*/) { host_action(PSTR(ACTION_ON_PAUSE), eol); }
+ void host_action_pause(const bool eol/*=true*/) { host_action(F(ACTION_ON_PAUSE), eol); }
#endif
#ifdef ACTION_ON_PAUSED
- void host_action_paused(const bool eol/*=true*/) { host_action(PSTR(ACTION_ON_PAUSED), eol); }
+ void host_action_paused(const bool eol/*=true*/) { host_action(F(ACTION_ON_PAUSED), eol); }
#endif
#ifdef ACTION_ON_RESUME
- void host_action_resume() { host_action(PSTR(ACTION_ON_RESUME)); }
+ void host_action_resume() { host_action(F(ACTION_ON_RESUME)); }
#endif
#ifdef ACTION_ON_RESUMED
- void host_action_resumed() { host_action(PSTR(ACTION_ON_RESUMED)); }
+ void host_action_resumed() { host_action(F(ACTION_ON_RESUMED)); }
#endif
#ifdef ACTION_ON_CANCEL
- void host_action_cancel() { host_action(PSTR(ACTION_ON_CANCEL)); }
+ void host_action_cancel() { host_action(F(ACTION_ON_CANCEL)); }
#endif
#ifdef ACTION_ON_START
- void host_action_start() { host_action(PSTR(ACTION_ON_START)); }
+ void host_action_start() { host_action(F(ACTION_ON_START)); }
#endif
#if ENABLED(HOST_PROMPT_SUPPORT)
@@ -77,60 +77,60 @@ void host_action(PGM_P const pstr, const bool eol) {
PromptReason host_prompt_reason = PROMPT_NOT_DEFINED;
- void host_action_notify(const char * const message) {
+ void host_action_notify(const char * const cstr) {
PORT_REDIRECT(SerialMask::All);
- host_action(PSTR("notification "), false);
- SERIAL_ECHOLN(message);
+ host_action(F("notification "), false);
+ SERIAL_ECHOLN(cstr);
}
- void host_action_notify_P(PGM_P const message) {
+ void host_action_notify(FSTR_P const fstr) {
PORT_REDIRECT(SerialMask::All);
- host_action(PSTR("notification "), false);
- SERIAL_ECHOLNPGM_P(message);
+ host_action(F("notification "), false);
+ SERIAL_ECHOLNF(fstr);
}
- void host_action_prompt(PGM_P const ptype, const bool eol=true) {
+ void host_action_prompt(FSTR_P const ptype, const bool eol=true) {
PORT_REDIRECT(SerialMask::All);
- host_action(PSTR("prompt_"), false);
- SERIAL_ECHOPGM_P(ptype);
+ host_action(F("prompt_"), false);
+ SERIAL_ECHOF(ptype);
if (eol) SERIAL_EOL();
}
- void host_action_prompt_plus(PGM_P const ptype, PGM_P const pstr, const char extra_char='\0') {
+ void host_action_prompt_plus(FSTR_P const ptype, FSTR_P const fstr, const char extra_char='\0') {
host_action_prompt(ptype, false);
PORT_REDIRECT(SerialMask::All);
SERIAL_CHAR(' ');
- SERIAL_ECHOPGM_P(pstr);
+ SERIAL_ECHOF(fstr);
if (extra_char != '\0') SERIAL_CHAR(extra_char);
SERIAL_EOL();
}
- void host_action_prompt_begin(const PromptReason reason, PGM_P const pstr, const char extra_char/*='\0'*/) {
+ void host_action_prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char/*='\0'*/) {
host_action_prompt_end();
host_prompt_reason = reason;
- host_action_prompt_plus(PSTR("begin"), pstr, extra_char);
+ host_action_prompt_plus(F("begin"), fstr, extra_char);
}
- void host_action_prompt_button(PGM_P const pstr) { host_action_prompt_plus(PSTR("button"), pstr); }
- void host_action_prompt_end() { host_action_prompt(PSTR("end")); }
- void host_action_prompt_show() { host_action_prompt(PSTR("show")); }
+ void host_action_prompt_button(FSTR_P const fstr) { host_action_prompt_plus(F("button"), fstr); }
+ void host_action_prompt_end() { host_action_prompt(F("end")); }
+ void host_action_prompt_show() { host_action_prompt(F("show")); }
- void _host_prompt_show(PGM_P const btn1/*=nullptr*/, PGM_P const btn2/*=nullptr*/) {
+ void _host_prompt_show(FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) {
if (btn1) host_action_prompt_button(btn1);
if (btn2) host_action_prompt_button(btn2);
host_action_prompt_show();
}
- void host_prompt_do(const PromptReason reason, PGM_P const pstr, PGM_P const btn1/*=nullptr*/, PGM_P const btn2/*=nullptr*/) {
- host_action_prompt_begin(reason, pstr);
+ void host_prompt_do(const PromptReason reason, FSTR_P const fstr, FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) {
+ host_action_prompt_begin(reason, fstr);
_host_prompt_show(btn1, btn2);
}
- void host_prompt_do(const PromptReason reason, PGM_P const pstr, const char extra_char, PGM_P const btn1/*=nullptr*/, PGM_P const btn2/*=nullptr*/) {
- host_action_prompt_begin(reason, pstr, extra_char);
+ void host_prompt_do(const PromptReason reason, FSTR_P const fstr, const char extra_char, FSTR_P const btn1/*=nullptr*/, FSTR_P const btn2/*=nullptr*/) {
+ host_action_prompt_begin(reason, fstr, extra_char);
_host_prompt_show(btn1, btn2);
}
void filament_load_host_prompt() {
const bool disable_to_continue = TERN0(HAS_FILAMENT_SENSOR, runout.filament_ran_out);
- host_prompt_do(PROMPT_FILAMENT_RUNOUT, PSTR("Paused"), PSTR("PurgeMore"),
- disable_to_continue ? PSTR("DisableRunout") : CONTINUE_STR
+ host_prompt_do(PROMPT_FILAMENT_RUNOUT, F("Paused"), F("PurgeMore"),
+ disable_to_continue ? F("DisableRunout") : FPSTR(CONTINUE_STR)
);
}
diff --git a/Marlin/src/feature/host_actions.h b/Marlin/src/feature/host_actions.h
index 065b59d755..fb19618b1a 100644
--- a/Marlin/src/feature/host_actions.h
+++ b/Marlin/src/feature/host_actions.h
@@ -24,7 +24,7 @@
#include "../inc/MarlinConfigPre.h"
#include "../HAL/shared/Marduino.h"
-void host_action(PGM_P const pstr, const bool eol=true);
+void host_action(FSTR_P const fstr, const bool eol=true);
#ifdef ACTION_ON_KILL
void host_action_kill();
@@ -64,16 +64,16 @@ void host_action(PGM_P const pstr, const bool eol=true);
extern PromptReason host_prompt_reason;
void host_response_handler(const uint8_t response);
- void host_action_notify(const char * const message);
- void host_action_notify_P(PGM_P const message);
- void host_action_prompt_begin(const PromptReason reason, PGM_P const pstr, const char extra_char='\0');
- void host_action_prompt_button(PGM_P const pstr);
+ void host_action_notify(const char * const cstr);
+ void host_action_notify(FSTR_P const fstr);
+ void host_action_prompt_begin(const PromptReason reason, FSTR_P const fstr, const char extra_char='\0');
+ void host_action_prompt_button(FSTR_P const fstr);
void host_action_prompt_end();
void host_action_prompt_show();
- void host_prompt_do(const PromptReason reason, PGM_P const pstr, PGM_P const btn1=nullptr, PGM_P const btn2=nullptr);
- void host_prompt_do(const PromptReason reason, PGM_P const pstr, const char extra_char, PGM_P const btn1=nullptr, PGM_P const btn2=nullptr);
- inline void host_prompt_open(const PromptReason reason, PGM_P const pstr, PGM_P const btn1=nullptr, PGM_P const btn2=nullptr) {
- if (host_prompt_reason == PROMPT_NOT_DEFINED) host_prompt_do(reason, pstr, btn1, btn2);
+ void host_prompt_do(const PromptReason reason, FSTR_P const fstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr);
+ void host_prompt_do(const PromptReason reason, FSTR_P const fstr, const char extra_char, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr);
+ inline void host_prompt_open(const PromptReason reason, FSTR_P const fstr, FSTR_P const btn1=nullptr, FSTR_P const btn2=nullptr) {
+ if (host_prompt_reason == PROMPT_NOT_DEFINED) host_prompt_do(reason, fstr, btn1, btn2);
}
void filament_load_host_prompt();
diff --git a/Marlin/src/feature/hotend_idle.cpp b/Marlin/src/feature/hotend_idle.cpp
index b962743ed0..4b137f42da 100644
--- a/Marlin/src/feature/hotend_idle.cpp
+++ b/Marlin/src/feature/hotend_idle.cpp
@@ -77,7 +77,7 @@ void HotendIdleProtection::check() {
void HotendIdleProtection::timed_out() {
next_protect_ms = 0;
SERIAL_ECHOLNPGM("Hotend Idle Timeout");
- LCD_MESSAGEPGM(MSG_HOTEND_IDLE_TIMEOUT);
+ LCD_MESSAGE(MSG_HOTEND_IDLE_TIMEOUT);
HOTEND_LOOP() {
if ((HOTEND_IDLE_NOZZLE_TARGET) < thermalManager.degTargetHotend(e))
thermalManager.setTargetHotend(HOTEND_IDLE_NOZZLE_TARGET, e);
diff --git a/Marlin/src/feature/max7219.cpp b/Marlin/src/feature/max7219.cpp
index e13c6f5b97..474933aa19 100644
--- a/Marlin/src/feature/max7219.cpp
+++ b/Marlin/src/feature/max7219.cpp
@@ -124,11 +124,10 @@ uint8_t Max7219::suspended; // = 0;
#define SIG_DELAY() DELAY_NS(250)
#endif
-void Max7219::error(const char * const func, const int32_t v1, const int32_t v2/*=-1*/) {
+void Max7219::error(FSTR_P const func, const int32_t v1, const int32_t v2/*=-1*/) {
#if ENABLED(MAX7219_ERRORS)
SERIAL_ECHOPGM("??? Max7219::");
- SERIAL_ECHOPGM_P(func);
- SERIAL_CHAR('(');
+ SERIAL_ECHOF(func, AS_CHAR('('));
SERIAL_ECHO(v1);
if (v2 > 0) SERIAL_ECHOPGM(", ", v2);
SERIAL_CHAR(')');
@@ -268,24 +267,24 @@ void Max7219::set(const uint8_t line, const uint8_t bits) {
// Modify a single LED bit and send the changed line
void Max7219::led_set(const uint8_t x, const uint8_t y, const bool on) {
- if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(PSTR("led_set"), x, y);
+ if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(F("led_set"), x, y);
if (BIT_7219(x, y) == on) return;
XOR_7219(x, y);
refresh_unit_line(LED_IND(x, y));
}
void Max7219::led_on(const uint8_t x, const uint8_t y) {
- if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(PSTR("led_on"), x, y);
+ if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(F("led_on"), x, y);
led_set(x, y, true);
}
void Max7219::led_off(const uint8_t x, const uint8_t y) {
- if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(PSTR("led_off"), x, y);
+ if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(F("led_off"), x, y);
led_set(x, y, false);
}
void Max7219::led_toggle(const uint8_t x, const uint8_t y) {
- if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(PSTR("led_toggle"), x, y);
+ if (x >= MAX7219_X_LEDS || y >= MAX7219_Y_LEDS) return error(F("led_toggle"), x, y);
led_set(x, y, !BIT_7219(x, y));
}
@@ -328,13 +327,13 @@ void Max7219::fill() {
}
void Max7219::clear_row(const uint8_t row) {
- if (row >= MAX7219_Y_LEDS) return error(PSTR("clear_row"), row);
+ if (row >= MAX7219_Y_LEDS) return error(F("clear_row"), row);
LOOP_L_N(x, MAX7219_X_LEDS) CLR_7219(x, row);
send_row(row);
}
void Max7219::clear_column(const uint8_t col) {
- if (col >= MAX7219_X_LEDS) return error(PSTR("set_column"), col);
+ if (col >= MAX7219_X_LEDS) return error(F("set_column"), col);
LOOP_L_N(y, MAX7219_Y_LEDS) CLR_7219(col, y);
send_column(col);
}
@@ -345,7 +344,7 @@ void Max7219::clear_column(const uint8_t col) {
* once with a single call to the function (if rotated 90° or 270°).
*/
void Max7219::set_row(const uint8_t row, const uint32_t val) {
- if (row >= MAX7219_Y_LEDS) return error(PSTR("set_row"), row);
+ if (row >= MAX7219_Y_LEDS) return error(F("set_row"), row);
uint32_t mask = _BV32(MAX7219_X_LEDS - 1);
LOOP_L_N(x, MAX7219_X_LEDS) {
if (val & mask) SET_7219(x, row); else CLR_7219(x, row);
@@ -360,7 +359,7 @@ void Max7219::set_row(const uint8_t row, const uint32_t val) {
* once with a single call to the function (if rotated 0° or 180°).
*/
void Max7219::set_column(const uint8_t col, const uint32_t val) {
- if (col >= MAX7219_X_LEDS) return error(PSTR("set_column"), col);
+ if (col >= MAX7219_X_LEDS) return error(F("set_column"), col);
uint32_t mask = _BV32(MAX7219_Y_LEDS - 1);
LOOP_L_N(y, MAX7219_Y_LEDS) {
if (val & mask) SET_7219(col, y); else CLR_7219(col, y);
@@ -371,56 +370,56 @@ void Max7219::set_column(const uint8_t col, const uint32_t val) {
void Max7219::set_rows_16bits(const uint8_t y, uint32_t val) {
#if MAX7219_X_LEDS == 8
- if (y > MAX7219_Y_LEDS - 2) return error(PSTR("set_rows_16bits"), y, val);
+ if (y > MAX7219_Y_LEDS - 2) return error(F("set_rows_16bits"), y, val);
set_row(y + 1, val); val >>= 8;
set_row(y + 0, val);
#else // at least 16 bits on each row
- if (y > MAX7219_Y_LEDS - 1) return error(PSTR("set_rows_16bits"), y, val);
+ if (y > MAX7219_Y_LEDS - 1) return error(F("set_rows_16bits"), y, val);
set_row(y, val);
#endif
}
void Max7219::set_rows_32bits(const uint8_t y, uint32_t val) {
#if MAX7219_X_LEDS == 8
- if (y > MAX7219_Y_LEDS - 4) return error(PSTR("set_rows_32bits"), y, val);
+ if (y > MAX7219_Y_LEDS - 4) return error(F("set_rows_32bits"), y, val);
set_row(y + 3, val); val >>= 8;
set_row(y + 2, val); val >>= 8;
set_row(y + 1, val); val >>= 8;
set_row(y + 0, val);
#elif MAX7219_X_LEDS == 16
- if (y > MAX7219_Y_LEDS - 2) return error(PSTR("set_rows_32bits"), y, val);
+ if (y > MAX7219_Y_LEDS - 2) return error(F("set_rows_32bits"), y, val);
set_row(y + 1, val); val >>= 16;
set_row(y + 0, val);
#else // at least 24 bits on each row. In the 3 matrix case, just display the low 24 bits
- if (y > MAX7219_Y_LEDS - 1) return error(PSTR("set_rows_32bits"), y, val);
+ if (y > MAX7219_Y_LEDS - 1) return error(F("set_rows_32bits"), y, val);
set_row(y, val);
#endif
}
void Max7219::set_columns_16bits(const uint8_t x, uint32_t val) {
#if MAX7219_Y_LEDS == 8
- if (x > MAX7219_X_LEDS - 2) return error(PSTR("set_columns_16bits"), x, val);
+ if (x > MAX7219_X_LEDS - 2) return error(F("set_columns_16bits"), x, val);
set_column(x + 0, val); val >>= 8;
set_column(x + 1, val);
#else // at least 16 bits in each column
- if (x > MAX7219_X_LEDS - 1) return error(PSTR("set_columns_16bits"), x, val);
+ if (x > MAX7219_X_LEDS - 1) return error(F("set_columns_16bits"), x, val);
set_column(x, val);
#endif
}
void Max7219::set_columns_32bits(const uint8_t x, uint32_t val) {
#if MAX7219_Y_LEDS == 8
- if (x > MAX7219_X_LEDS - 4) return error(PSTR("set_rows_32bits"), x, val);
+ if (x > MAX7219_X_LEDS - 4) return error(F("set_rows_32bits"), x, val);
set_column(x + 3, val); val >>= 8;
set_column(x + 2, val); val >>= 8;
set_column(x + 1, val); val >>= 8;
set_column(x + 0, val);
#elif MAX7219_Y_LEDS == 16
- if (x > MAX7219_X_LEDS - 2) return error(PSTR("set_rows_32bits"), x, val);
+ if (x > MAX7219_X_LEDS - 2) return error(F("set_rows_32bits"), x, val);
set_column(x + 1, val); val >>= 16;
set_column(x + 0, val);
#else // at least 24 bits on each row. In the 3 matrix case, just display the low 24 bits
- if (x > MAX7219_X_LEDS - 1) return error(PSTR("set_rows_32bits"), x, val);
+ if (x > MAX7219_X_LEDS - 1) return error(F("set_rows_32bits"), x, val);
set_column(x, val);
#endif
}
diff --git a/Marlin/src/feature/max7219.h b/Marlin/src/feature/max7219.h
index 3e5b62db2f..c25fef1730 100644
--- a/Marlin/src/feature/max7219.h
+++ b/Marlin/src/feature/max7219.h
@@ -42,6 +42,8 @@
* a Max7219_Set_Row(). The opposite is true for rotations of 0 or 180 degrees.
*/
+#include "../inc/MarlinConfig.h"
+
#ifndef MAX7219_ROTATE
#define MAX7219_ROTATE 0
#endif
@@ -140,7 +142,7 @@ public:
private:
static uint8_t suspended;
- static void error(const char * const func, const int32_t v1, const int32_t v2=-1);
+ static void error(FSTR_P const func, const int32_t v1, const int32_t v2=-1);
static void noop();
static void set(const uint8_t line, const uint8_t bits);
static void send_row(const uint8_t row);
diff --git a/Marlin/src/feature/meatpack.cpp b/Marlin/src/feature/meatpack.cpp
index 2edcd7478a..b2899243b2 100644
--- a/Marlin/src/feature/meatpack.cpp
+++ b/Marlin/src/feature/meatpack.cpp
@@ -169,10 +169,9 @@ void MeatPack::handle_command(const MeatPack_Command c) {
void MeatPack::report_state() {
// NOTE: if any configuration vars are added below, the outgoing sync text for host plugin
// should not contain the "PV' substring, as this is used to indicate protocol version
- SERIAL_ECHOPGM("[MP] ");
- SERIAL_ECHOPGM(MeatPack_ProtocolVersion " ");
+ SERIAL_ECHOPGM("[MP] " MeatPack_ProtocolVersion " ");
serialprint_onoff(TEST(state, MPConfig_Bit_Active));
- SERIAL_ECHOPGM_P(TEST(state, MPConfig_Bit_NoSpaces) ? PSTR(" NSP\n") : PSTR(" ESP\n"));
+ SERIAL_ECHOF(TEST(state, MPConfig_Bit_NoSpaces) ? F(" NSP\n") : F(" ESP\n"));
}
/**
diff --git a/Marlin/src/feature/mmu/mmu.cpp b/Marlin/src/feature/mmu/mmu.cpp
index 7189723138..6340f3c301 100644
--- a/Marlin/src/feature/mmu/mmu.cpp
+++ b/Marlin/src/feature/mmu/mmu.cpp
@@ -26,6 +26,7 @@
#include "../MarlinCore.h"
#include "../module/planner.h"
+#include "../module/stepper.h"
void mmu_init() {
SET_OUTPUT(E_MUX0_PIN);
@@ -35,7 +36,7 @@ void mmu_init() {
void select_multiplexed_stepper(const uint8_t e) {
planner.synchronize();
- disable_e_steppers();
+ stepper.disable_e_steppers();
WRITE(E_MUX0_PIN, TEST(e, 0) ? HIGH : LOW);
WRITE(E_MUX1_PIN, TEST(e, 1) ? HIGH : LOW);
WRITE(E_MUX2_PIN, TEST(e, 2) ? HIGH : LOW);
diff --git a/Marlin/src/feature/mmu/mmu2.cpp b/Marlin/src/feature/mmu/mmu2.cpp
index cf03eaf7f6..56e6e6150b 100644
--- a/Marlin/src/feature/mmu/mmu2.cpp
+++ b/Marlin/src/feature/mmu/mmu2.cpp
@@ -35,7 +35,7 @@ MMU2 mmu2;
#include "../../libs/nozzle.h"
#include "../../module/temperature.h"
#include "../../module/planner.h"
-#include "../../module/stepper/indirection.h"
+#include "../../module/stepper.h"
#include "../../MarlinCore.h"
#if ENABLED(HOST_PROMPT_SUPPORT)
@@ -54,7 +54,7 @@ MMU2 mmu2;
#define MMU_CMD_TIMEOUT 45000UL // 45s timeout for mmu commands (except P0)
#define MMU_P0_TIMEOUT 3000UL // Timeout for P0 command: 3seconds
-#define MMU2_COMMAND(S) tx_str_P(PSTR(S "\n"))
+#define MMU2_COMMAND(S) tx_str(F(S "\n"))
#if ENABLED(MMU_EXTRUDER_SENSOR)
uint8_t mmu_idl_sens = 0;
@@ -229,17 +229,17 @@ void MMU2::mmu_loop() {
if (cmd) {
if (WITHIN(cmd, MMU_CMD_T0, MMU_CMD_T0 + EXTRUDERS - 1)) {
// tool change
- int filament = cmd - MMU_CMD_T0;
+ const int filament = cmd - MMU_CMD_T0;
DEBUG_ECHOLNPGM("MMU <= T", filament);
- tx_printf_P(PSTR("T%d\n"), filament);
+ tx_printf(F("T%d\n"), filament);
TERN_(MMU_EXTRUDER_SENSOR, mmu_idl_sens = 1); // enable idler sensor, if any
state = 3; // wait for response
}
else if (WITHIN(cmd, MMU_CMD_L0, MMU_CMD_L0 + EXTRUDERS - 1)) {
// load
- int filament = cmd - MMU_CMD_L0;
+ const int filament = cmd - MMU_CMD_L0;
DEBUG_ECHOLNPGM("MMU <= L", filament);
- tx_printf_P(PSTR("L%d\n"), filament);
+ tx_printf(F("L%d\n"), filament);
state = 3; // wait for response
}
else if (cmd == MMU_CMD_C0) {
@@ -257,9 +257,9 @@ void MMU2::mmu_loop() {
}
else if (WITHIN(cmd, MMU_CMD_E0, MMU_CMD_E0 + EXTRUDERS - 1)) {
// eject filament
- int filament = cmd - MMU_CMD_E0;
+ const int filament = cmd - MMU_CMD_E0;
DEBUG_ECHOLNPGM("MMU <= E", filament);
- tx_printf_P(PSTR("E%d\n"), filament);
+ tx_printf(F("E%d\n"), filament);
state = 3; // wait for response
}
else if (cmd == MMU_CMD_R0) {
@@ -270,9 +270,9 @@ void MMU2::mmu_loop() {
}
else if (WITHIN(cmd, MMU_CMD_F0, MMU_CMD_F0 + EXTRUDERS - 1)) {
// filament type
- int filament = cmd - MMU_CMD_F0;
+ const int filament = cmd - MMU_CMD_F0;
DEBUG_ECHOLNPGM("MMU <= F", filament, " ", cmd_arg);
- tx_printf_P(PSTR("F%d %d\n"), filament, cmd_arg);
+ tx_printf(F("F%d %d\n"), filament, cmd_arg);
state = 3; // wait for response
}
@@ -356,13 +356,15 @@ void MMU2::mmu_loop() {
*/
bool MMU2::rx_start() {
// check for start message
- return rx_str_P(PSTR("start\n"));
+ return rx_str(F("start\n"));
}
/**
* Check if the data received ends with the given string.
*/
-bool MMU2::rx_str_P(const char *str) {
+bool MMU2::rx_str(FSTR_P fstr) {
+ PGM_P pstr = FTOP(fstr);
+
uint8_t i = strlen(rx_buffer);
while (MMU2_SERIAL.available()) {
@@ -375,14 +377,14 @@ bool MMU2::rx_str_P(const char *str) {
}
rx_buffer[i] = '\0';
- uint8_t len = strlen_P(str);
+ uint8_t len = strlen_P(pstr);
if (i < len) return false;
- str += len;
+ pstr += len;
while (len--) {
- char c0 = pgm_read_byte(str--), c1 = rx_buffer[i--];
+ char c0 = pgm_read_byte(pstr--), c1 = rx_buffer[i--];
if (c0 == c1) continue;
if (c0 == '\r' && c1 == '\n') continue; // match cr as lf
if (c0 == '\n' && c1 == '\r') continue; // match lf as cr
@@ -394,19 +396,19 @@ bool MMU2::rx_str_P(const char *str) {
/**
* Transfer data to MMU, no argument
*/
-void MMU2::tx_str_P(const char *str) {
+void MMU2::tx_str(FSTR_P fstr) {
clear_rx_buffer();
- uint8_t len = strlen_P(str);
- LOOP_L_N(i, len) MMU2_SERIAL.write(pgm_read_byte(str++));
+ PGM_P pstr = FTOP(fstr);
+ while (const char c = pgm_read_byte(pstr)) { MMU2_SERIAL.write(c); pstr++; }
prev_request = millis();
}
/**
* Transfer data to MMU, single argument
*/
-void MMU2::tx_printf_P(const char *format, int argument = -1) {
+void MMU2::tx_printf(FSTR_P format, int argument = -1) {
clear_rx_buffer();
- uint8_t len = sprintf_P(tx_buffer, format, argument);
+ const uint8_t len = sprintf_P(tx_buffer, FTOP(format), argument);
LOOP_L_N(i, len) MMU2_SERIAL.write(tx_buffer[i]);
prev_request = millis();
}
@@ -414,9 +416,9 @@ void MMU2::tx_printf_P(const char *format, int argument = -1) {
/**
* Transfer data to MMU, two arguments
*/
-void MMU2::tx_printf_P(const char *format, int argument1, int argument2) {
+void MMU2::tx_printf(FSTR_P format, int argument1, int argument2) {
clear_rx_buffer();
- uint8_t len = sprintf_P(tx_buffer, format, argument1, argument2);
+ const uint8_t len = sprintf_P(tx_buffer, FTOP(format), argument1, argument2);
LOOP_L_N(i, len) MMU2_SERIAL.write(tx_buffer[i]);
prev_request = millis();
}
@@ -433,7 +435,7 @@ void MMU2::clear_rx_buffer() {
* Check if we received 'ok' from MMU
*/
bool MMU2::rx_ok() {
- if (rx_str_P(PSTR("ok\n"))) {
+ if (rx_str(F("ok\n"))) {
prev_P0_request = millis();
return true;
}
@@ -446,12 +448,12 @@ bool MMU2::rx_ok() {
void MMU2::check_version() {
if (buildnr < MMU_REQUIRED_FW_BUILDNR) {
SERIAL_ERROR_MSG("Invalid MMU2 firmware. Version >= " STRINGIFY(MMU_REQUIRED_FW_BUILDNR) " required.");
- kill(GET_TEXT(MSG_KILL_MMU2_FIRMWARE));
+ kill(GET_TEXT_F(MSG_KILL_MMU2_FIRMWARE));
}
}
static void mmu2_not_responding() {
- LCD_MESSAGEPGM(MSG_MMU2_NOT_RESPONDING);
+ LCD_MESSAGE(MSG_MMU2_NOT_RESPONDING);
BUZZ(100, 659);
BUZZ(200, 698);
BUZZ(100, 659);
@@ -486,8 +488,8 @@ static void mmu2_not_responding() {
if (index != extruder) {
- DISABLE_AXIS_E0();
- ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+ stepper.disable_extruder();
+ ui.status_printf(0, GET_TEXT_F(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
command(MMU_CMD_T0 + index);
manage_response(true, true);
@@ -495,7 +497,7 @@ static void mmu2_not_responding() {
if (load_to_gears()) {
extruder = index; // filament change is finished
active_extruder = 0;
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
SERIAL_ECHO_MSG(STR_ACTIVE_EXTRUDER, extruder);
}
ui.reset_status();
@@ -531,13 +533,13 @@ static void mmu2_not_responding() {
#if ENABLED(MMU2_MENUS)
planner.synchronize();
const uint8_t index = mmu2_choose_filament();
- DISABLE_AXIS_E0();
+ stepper.disable_extruder();
command(MMU_CMD_T0 + index);
manage_response(true, true);
if (load_to_gears()) {
mmu_loop();
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
extruder = index;
active_extruder = 0;
}
@@ -566,14 +568,14 @@ static void mmu2_not_responding() {
set_runout_valid(false);
if (index != extruder) {
- DISABLE_AXIS_E0();
+ stepper.disable_extruder();
if (FILAMENT_PRESENT()) {
DEBUG_ECHOLNPGM("Unloading\n");
mmu_loading_flag = false;
command(MMU_CMD_U0);
manage_response(true, true);
}
- ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+ ui.status_printf(0, GET_TEXT_F(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
mmu_loading_flag = true;
command(MMU_CMD_T0 + index);
manage_response(true, true);
@@ -582,7 +584,7 @@ static void mmu2_not_responding() {
extruder = index;
active_extruder = 0;
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
SERIAL_ECHO_MSG(STR_ACTIVE_EXTRUDER, extruder);
ui.reset_status();
@@ -620,14 +622,14 @@ static void mmu2_not_responding() {
#if ENABLED(MMU2_MENUS)
planner.synchronize();
uint8_t index = mmu2_choose_filament();
- DISABLE_AXIS_E0();
+ stepper.disable_extruder();
command(MMU_CMD_T0 + index);
manage_response(true, true);
mmu_continue_loading();
command(MMU_CMD_C0);
mmu_loop();
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
extruder = index;
active_extruder = 0;
#else
@@ -670,14 +672,14 @@ static void mmu2_not_responding() {
set_runout_valid(false);
if (index != extruder) {
- DISABLE_AXIS_E0();
- ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+ stepper.disable_extruder();
+ ui.status_printf(0, GET_TEXT_F(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
command(MMU_CMD_T0 + index);
manage_response(true, true);
command(MMU_CMD_C0);
extruder = index; //filament change is finished
active_extruder = 0;
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
SERIAL_ECHO_MSG(STR_ACTIVE_EXTRUDER, extruder);
ui.reset_status();
}
@@ -714,13 +716,13 @@ static void mmu2_not_responding() {
#if ENABLED(MMU2_MENUS)
planner.synchronize();
uint8_t index = mmu2_choose_filament();
- DISABLE_AXIS_E0();
+ stepper.disable_extruder();
command(MMU_CMD_T0 + index);
manage_response(true, true);
command(MMU_CMD_C0);
mmu_loop();
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
extruder = index;
active_extruder = 0;
#else
@@ -808,14 +810,14 @@ void MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) {
if (turn_off_nozzle && resume_hotend_temp) {
thermalManager.setTargetHotend(resume_hotend_temp, active_extruder);
- LCD_MESSAGEPGM(MSG_HEATING);
+ LCD_MESSAGE(MSG_HEATING);
BUZZ(200, 40);
while (!thermalManager.wait_for_hotend(active_extruder, false)) safe_delay(1000);
}
if (move_axes && all_axes_homed()) {
- LCD_MESSAGEPGM(MSG_MMU2_RESUMING);
+ LCD_MESSAGE(MSG_MMU2_RESUMING);
BUZZ(198, 404); BUZZ(4, 0); BUZZ(198, 404);
// Move XY to starting position, then Z
@@ -826,7 +828,7 @@ void MMU2::manage_response(const bool move_axes, const bool turn_off_nozzle) {
}
else {
BUZZ(198, 404); BUZZ(4, 0); BUZZ(198, 404);
- LCD_MESSAGEPGM(MSG_MMU2_RESUMING);
+ LCD_MESSAGE(MSG_MMU2_RESUMING);
}
}
}
@@ -842,7 +844,7 @@ void MMU2::set_filament_type(const uint8_t index, const uint8_t filamentType) {
}
void MMU2::filament_runout() {
- queue.inject_P(PSTR(MMU2_FILAMENT_RUNOUT_SCRIPT));
+ queue.inject(F(MMU2_FILAMENT_RUNOUT_SCRIPT));
planner.synchronize();
}
@@ -853,7 +855,7 @@ void MMU2::filament_runout() {
if (cmd == MMU_CMD_NONE && last_cmd == MMU_CMD_C0) {
if (present && !mmu2s_triggered) {
DEBUG_ECHOLNPGM("MMU <= 'A'");
- tx_str_P(PSTR("A\n"));
+ tx_str(F("A\n"));
}
// Slowly spin the extruder during C0
else {
@@ -908,11 +910,11 @@ bool MMU2::load_filament_to_nozzle(const uint8_t index) {
if (thermalManager.tooColdToExtrude(active_extruder)) {
BUZZ(200, 404);
- LCD_ALERTMESSAGEPGM(MSG_HOTEND_TOO_COLD);
+ LCD_ALERTMESSAGE(MSG_HOTEND_TOO_COLD);
return false;
}
- DISABLE_AXIS_E0();
+ stepper.disable_extruder();
command(MMU_CMD_T0 + index);
manage_response(true, true);
@@ -944,13 +946,13 @@ bool MMU2::eject_filament(const uint8_t index, const bool recover) {
if (thermalManager.tooColdToExtrude(active_extruder)) {
BUZZ(200, 404);
- LCD_ALERTMESSAGEPGM(MSG_HOTEND_TOO_COLD);
+ LCD_ALERTMESSAGE(MSG_HOTEND_TOO_COLD);
return false;
}
- LCD_MESSAGEPGM(MSG_MMU2_EJECTING_FILAMENT);
+ LCD_MESSAGE(MSG_MMU2_EJECTING_FILAMENT);
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
current_position.e -= MMU2_FILAMENTCHANGE_EJECT_FEED;
line_to_current_position(MMM_TO_MMS(2500));
planner.synchronize();
@@ -958,10 +960,10 @@ bool MMU2::eject_filament(const uint8_t index, const bool recover) {
manage_response(false, false);
if (recover) {
- LCD_MESSAGEPGM(MSG_MMU2_EJECT_RECOVER);
+ LCD_MESSAGE(MSG_MMU2_EJECT_RECOVER);
BUZZ(200, 404);
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, PSTR("MMU2 Eject Recover"), CONTINUE_STR));
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(PSTR("MMU2 Eject Recover")));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("MMU2 Eject Recover"), FPSTR(CONTINUE_STR)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("MMU2 Eject Recover")));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
BUZZ(200, 404);
BUZZ(200, 404);
@@ -979,7 +981,7 @@ bool MMU2::eject_filament(const uint8_t index, const bool recover) {
BUZZ(200, 404);
- DISABLE_AXIS_E0();
+ stepper.disable_extruder();
return true;
}
@@ -993,7 +995,7 @@ bool MMU2::unload() {
if (thermalManager.tooColdToExtrude(active_extruder)) {
BUZZ(200, 404);
- LCD_ALERTMESSAGEPGM(MSG_HOTEND_TOO_COLD);
+ LCD_ALERTMESSAGE(MSG_HOTEND_TOO_COLD);
return false;
}
@@ -1016,7 +1018,7 @@ bool MMU2::unload() {
void MMU2::execute_extruder_sequence(const E_Step * sequence, int steps) {
planner.synchronize();
- ENABLE_AXIS_E0();
+ stepper.enable_extruder();
const E_Step* step = sequence;
@@ -1034,7 +1036,7 @@ void MMU2::execute_extruder_sequence(const E_Step * sequence, int steps) {
step++;
}
- DISABLE_AXIS_E0();
+ stepper.disable_extruder();
}
#endif // HAS_PRUSA_MMU2
diff --git a/Marlin/src/feature/mmu/mmu2.h b/Marlin/src/feature/mmu/mmu2.h
index 95338a5184..9574e2217f 100644
--- a/Marlin/src/feature/mmu/mmu2.h
+++ b/Marlin/src/feature/mmu/mmu2.h
@@ -57,10 +57,10 @@ public:
static bool eject_filament(const uint8_t index, const bool recover);
private:
- static bool rx_str_P(const char *str);
- static void tx_str_P(const char *str);
- static void tx_printf_P(const char *format, const int argument);
- static void tx_printf_P(const char *format, const int argument1, const int argument2);
+ static inline bool rx_str(FSTR_P fstr);
+ static inline void tx_str(FSTR_P fstr);
+ static inline void tx_printf(FSTR_P ffmt, const int argument);
+ static inline void tx_printf(FSTR_P ffmt, const int argument1, const int argument2);
static void clear_rx_buffer();
static bool rx_ok();
diff --git a/Marlin/src/feature/pause.cpp b/Marlin/src/feature/pause.cpp
index 3474dbe4b7..d18c1d20c0 100644
--- a/Marlin/src/feature/pause.cpp
+++ b/Marlin/src/feature/pause.cpp
@@ -194,17 +194,24 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true; // LCD click or M108 will clear this
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(PSTR("Load Filament")));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("Load Filament")));
#if ENABLED(HOST_PROMPT_SUPPORT)
const char tool = '0' + TERN0(MULTI_FILAMENT_SENSOR, active_extruder);
- host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Load Filament T"), tool, CONTINUE_STR);
+ host_prompt_do(PROMPT_USER_CONTINUE, F("Load Filament T"), tool, FPSTR(CONTINUE_STR));
#endif
while (wait_for_user) {
impatient_beep(max_beep_count);
#if BOTH(FILAMENT_CHANGE_RESUME_ON_INSERT, FILAMENT_RUNOUT_SENSOR)
- if (READ(FIL_RUNOUT1_PIN) != FIL_RUNOUT1_STATE) wait_for_user = false;
+ #if ENABLED(MULTI_FILAMENT_SENSOR)
+ #define _CASE_INSERTED(N) case N-1: if (READ(FIL_RUNOUT##N##_PIN) != FIL_RUNOUT##N##_STATE) wait_for_user = false; break;
+ switch (active_extruder) {
+ REPEAT_1(NUM_RUNOUT_SENSORS, _CASE_INSERTED)
+ }
+ #else
+ if (READ(FIL_RUNOUT_PIN) != FIL_RUNOUT_STATE) wait_for_user = false;
+ #endif
#endif
idle_no_sleep();
}
@@ -245,9 +252,9 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_PURGE);
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_PURGE)));
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_FILAMENT_CHANGE_PURGE), CONTINUE_STR));
- TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, GET_TEXT(MSG_FILAMENT_CHANGE_PURGE), CONTINUE_STR));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE)));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR)));
+ TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE), FPSTR(CONTINUE_STR)));
wait_for_user = true; // A click or M108 breaks the purge_length loop
for (float purge_count = purge_length; purge_count > 0 && wait_for_user; --purge_count)
unscaled_e_move(1, ADVANCED_PAUSE_PURGE_FEEDRATE);
@@ -295,8 +302,8 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
* send current back to their board, potentially frying it.
*/
inline void disable_active_extruder() {
- #if HAS_E_STEPPER_ENABLE
- disable_e_stepper(active_extruder);
+ #if HAS_EXTRUDERS
+ stepper.DISABLE_EXTRUDER(active_extruder);
safe_delay(100);
#endif
}
@@ -396,7 +403,7 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool
#endif
#endif
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, PSTR("Pause"), DISMISS_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("Pause"), FPSTR(DISMISS_STR)));
// Indicate that the printer is paused
++did_pause_print;
@@ -479,7 +486,7 @@ void show_continue_prompt(const bool is_reload) {
ui.pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
SERIAL_ECHO_START();
- SERIAL_ECHOPGM_P(is_reload ? PSTR(_PMSG(STR_FILAMENT_CHANGE_INSERT) "\n") : PSTR(_PMSG(STR_FILAMENT_CHANGE_WAIT) "\n"));
+ SERIAL_ECHOF(is_reload ? F(_PMSG(STR_FILAMENT_CHANGE_INSERT) "\n") : F(_PMSG(STR_FILAMENT_CHANGE_WAIT) "\n"));
}
void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
@@ -505,8 +512,8 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
// Wait for filament insert by user and press button
KEEPALIVE_STATE(PAUSED_FOR_USER);
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_NOZZLE_PARKED), CONTINUE_STR));
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_NOZZLE_PARKED)));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_NOZZLE_PARKED), FPSTR(CONTINUE_STR)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_NOZZLE_PARKED)));
wait_for_user = true; // LCD click or M108 will clear this
while (wait_for_user) {
impatient_beep(max_beep_count);
@@ -521,17 +528,17 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
ui.pause_show_message(PAUSE_MESSAGE_HEAT);
SERIAL_ECHO_MSG(_PMSG(STR_FILAMENT_CHANGE_HEAT));
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_HEATER_TIMEOUT), GET_TEXT(MSG_REHEAT)));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_HEATER_TIMEOUT), GET_TEXT_F(MSG_REHEAT)));
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_HEATER_TIMEOUT)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_HEATER_TIMEOUT)));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(0, true)); // Wait for LCD click or M108
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, GET_TEXT(MSG_REHEATING)));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, GET_TEXT_F(MSG_REHEATING)));
- TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged_P(GET_TEXT(MSG_REHEATING)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onStatusChanged(GET_TEXT_F(MSG_REHEATING)));
- TERN_(DWIN_CREALITY_LCD_ENHANCED, ui.set_status_P(GET_TEXT(MSG_REHEATING)));
+ TERN_(DWIN_CREALITY_LCD_ENHANCED, LCD_MESSAGE(MSG_REHEATING));
// Re-enable the heaters if they timed out
HOTEND_LOOP() thermalManager.reset_hotend_idle_timer(e);
@@ -547,17 +554,13 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
HOTEND_LOOP() thermalManager.heater_idle[e].start(nozzle_timeout);
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_REHEATDONE), CONTINUE_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_REHEATDONE), FPSTR(CONTINUE_STR)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_REHEATDONE)));
+ TERN_(DWIN_CREALITY_LCD_ENHANCED, LCD_MESSAGE(MSG_REHEATDONE));
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_REHEATDONE)));
+ IF_DISABLED(PAUSE_REHEAT_FAST_RESUME, wait_for_user = true);
- TERN_(DWIN_CREALITY_LCD_ENHANCED, ui.set_status_P(GET_TEXT(MSG_REHEATDONE)));
-
- #if DISABLED(FILAMENT_CHANGE_FAST_RESUME)
- wait_for_user = true;
- #endif
nozzle_timed_out = false;
-
first_impatient_beep(max_beep_count);
}
idle_no_sleep();
@@ -668,7 +671,7 @@ void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_
--did_pause_print;
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, PSTR("Resuming"), DISMISS_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("Resuming"), FPSTR(DISMISS_STR)));
// Resume the print job timer if it was running
if (print_job_timer.isPaused()) print_job_timer.start();
diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp
index b86249fbc0..fabe35b989 100644
--- a/Marlin/src/feature/power.cpp
+++ b/Marlin/src/feature/power.cpp
@@ -27,7 +27,7 @@
#include "../inc/MarlinConfig.h"
#include "power.h"
-#include "../module/stepper/indirection.h"
+#include "../module/stepper.h"
#include "../MarlinCore.h"
#if ENABLED(PS_OFF_SOUND)
@@ -82,7 +82,7 @@ void Power::power_on() {
TERN_(HAS_TRINAMIC_CONFIG, safe_delay(PSU_POWERUP_DELAY));
#ifdef PSU_POWERUP_GCODE
- GcodeSuite::process_subcommands_now_P(PSTR(PSU_POWERUP_GCODE));
+ gcode.process_subcommands_now(F(PSU_POWERUP_GCODE));
#endif
}
@@ -95,7 +95,7 @@ void Power::power_off() {
if (!psu_on) return;
#ifdef PSU_POWEROFF_GCODE
- GcodeSuite::process_subcommands_now_P(PSTR(PSU_POWEROFF_GCODE));
+ gcode.process_subcommands_now(F(PSU_POWEROFF_GCODE));
#endif
#if ENABLED(PS_OFF_SOUND)
@@ -120,6 +120,9 @@ void Power::power_off() {
*/
bool Power::is_power_needed() {
+ // If any of the stepper drivers are enabled...
+ if (stepper.axis_enabled.bits) return true;
+
if (printJobOngoing() || printingIsPaused()) return true;
#if ENABLED(AUTO_POWER_FANS)
@@ -140,23 +143,6 @@ void Power::power_off() {
if (TERN0(AUTO_POWER_COOLER_FAN, thermalManager.coolerfan_speed))
return true;
- // If any of the drivers or the bed are enabled...
- if (X_ENABLE_READ() == X_ENABLE_ON || Y_ENABLE_READ() == Y_ENABLE_ON || Z_ENABLE_READ() == Z_ENABLE_ON
- #if HAS_X2_ENABLE
- || X2_ENABLE_READ() == X_ENABLE_ON
- #endif
- #if HAS_Y2_ENABLE
- || Y2_ENABLE_READ() == Y_ENABLE_ON
- #endif
- #if HAS_Z2_ENABLE
- || Z2_ENABLE_READ() == Z_ENABLE_ON
- #endif
- #if E_STEPPERS
- #define _OR_ENABLED_E(N) || E##N##_ENABLE_READ() == E_ENABLE_ON
- REPEAT(E_STEPPERS, _OR_ENABLED_E)
- #endif
- ) return true;
-
#if HAS_HOTEND
HOTEND_LOOP() if (thermalManager.degTargetHotend(e) > 0 || thermalManager.temp_hotend[e].soft_pwm_amount > 0) return true;
#endif
diff --git a/Marlin/src/feature/powerloss.cpp b/Marlin/src/feature/powerloss.cpp
index 159121ba45..723ec1903b 100644
--- a/Marlin/src/feature/powerloss.cpp
+++ b/Marlin/src/feature/powerloss.cpp
@@ -109,7 +109,7 @@ void PrintJobRecovery::check() {
if (card.isMounted()) {
load();
if (!valid()) return cancel();
- queue.inject_P(PSTR("M1000S"));
+ queue.inject(F("M1000S"));
}
}
@@ -130,7 +130,7 @@ void PrintJobRecovery::load() {
(void)file.read(&info, sizeof(info));
close();
}
- debug(PSTR("Load"));
+ debug(F("Load"));
}
/**
@@ -186,7 +186,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW
TERN_(GCODE_REPEAT_MARKERS, info.stored_repeat = repeat);
TERN_(HAS_HOME_OFFSET, info.home_offset = home_offset);
TERN_(HAS_POSITION_SHIFT, info.position_shift = position_shift);
- TERN_(HAS_MULTI_EXTRUDER, info.active_extruder = active_extruder);
+ E_TERN_(info.active_extruder = active_extruder);
#if DISABLED(NO_VOLUMETRICS)
info.flag.volumetric_enabled = parser.volumetric_enabled;
@@ -244,7 +244,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW
#if POWER_LOSS_RETRACT_LEN
// Retract filament now
- gcode.process_subcommands_now_P(PSTR("G1 F3000 E-" STRINGIFY(POWER_LOSS_RETRACT_LEN)));
+ gcode.process_subcommands_now(F("G1 F3000 E-" STRINGIFY(POWER_LOSS_RETRACT_LEN)));
#endif
#if POWER_LOSS_ZRAISE
@@ -301,7 +301,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW
retract_and_lift(zraise);
#endif
- kill(GET_TEXT(MSG_OUTAGE_RECOVERY));
+ kill(GET_TEXT_F(MSG_OUTAGE_RECOVERY));
}
#endif
@@ -311,7 +311,7 @@ void PrintJobRecovery::save(const bool force/*=false*/, const float zraise/*=POW
*/
void PrintJobRecovery::write() {
- debug(PSTR("Write"));
+ debug(F("Write"));
open(false);
file.seekSet(0);
@@ -337,7 +337,7 @@ void PrintJobRecovery::resume() {
#if HAS_LEVELING
// Make sure leveling is off before any G92 and G28
- gcode.process_subcommands_now_P(PSTR("M420 S0 Z0"));
+ gcode.process_subcommands_now(F("M420 S0 Z0"));
#endif
#if HAS_HEATED_BED
@@ -373,7 +373,7 @@ void PrintJobRecovery::resume() {
// establish the current position as best we can.
//
- gcode.process_subcommands_now_P(PSTR("G92.9E0")); // Reset E to 0
+ gcode.process_subcommands_now(F("G92.9E0")); // Reset E to 0
#if Z_HOME_TO_MAX
@@ -410,7 +410,7 @@ void PrintJobRecovery::resume() {
}
// Home XY with no Z raise, and also home Z here if Z isn't homing down below.
- gcode.process_subcommands_now_P(PSTR("G28R0" TERN_(HOME_XY_ONLY, "XY"))); // No raise during G28
+ gcode.process_subcommands_now(F("G28R0" TERN_(HOME_XY_ONLY, "XY"))); // No raise during G28
#endif
@@ -513,7 +513,7 @@ void PrintJobRecovery::resume() {
// Un-retract if there was a retract at outage
#if ENABLED(BACKUP_POWER_SUPPLY) && POWER_LOSS_RETRACT_LEN > 0
- gcode.process_subcommands_now_P(PSTR("G1E" STRINGIFY(POWER_LOSS_RETRACT_LEN) "F3000"));
+ gcode.process_subcommands_now(F("G1E" STRINGIFY(POWER_LOSS_RETRACT_LEN) "F3000"));
#endif
// Additional purge on resume if configured
@@ -523,7 +523,7 @@ void PrintJobRecovery::resume() {
#endif
#if ENABLED(NOZZLE_CLEAN_FEATURE)
- gcode.process_subcommands_now_P(PSTR("G12"));
+ gcode.process_subcommands_now(F("G12"));
#endif
// Move back over to the saved XY
@@ -575,8 +575,8 @@ void PrintJobRecovery::resume() {
#if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
- void PrintJobRecovery::debug(PGM_P const prefix) {
- DEBUG_ECHOPGM_P(prefix);
+ void PrintJobRecovery::debug(FSTR_P const prefix) {
+ DEBUG_ECHOF(prefix);
DEBUG_ECHOLNPGM(" Job Recovery Info...\nvalid_head:", info.valid_head, " valid_foot:", info.valid_foot);
if (info.valid_head) {
if (info.valid_head == info.valid_foot) {
diff --git a/Marlin/src/feature/powerloss.h b/Marlin/src/feature/powerloss.h
index 6a13c92df7..76cb398af2 100644
--- a/Marlin/src/feature/powerloss.h
+++ b/Marlin/src/feature/powerloss.h
@@ -204,9 +204,9 @@ class PrintJobRecovery {
static inline bool valid() { return info.valid() && interrupted_file_exists(); }
#if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
- static void debug(PGM_P const prefix);
+ static void debug(FSTR_P const prefix);
#else
- static inline void debug(PGM_P const) {}
+ static inline void debug(FSTR_P const) {}
#endif
private:
diff --git a/Marlin/src/feature/probe_temp_comp.cpp b/Marlin/src/feature/probe_temp_comp.cpp
index 68984fe756..05b204ae6b 100644
--- a/Marlin/src/feature/probe_temp_comp.cpp
+++ b/Marlin/src/feature/probe_temp_comp.cpp
@@ -69,11 +69,11 @@ void ProbeTempComp::print_offsets() {
LOOP_L_N(s, TSI_COUNT) {
celsius_t temp = cali_info[s].start_temp;
for (int16_t i = -1; i < cali_info[s].measurements; ++i) {
- SERIAL_ECHOPGM_P(s == TSI_BED ? PSTR("Bed") :
+ SERIAL_ECHOF(s == TSI_BED ? F("Bed") :
#if ENABLED(USE_TEMP_EXT_COMPENSATION)
- s == TSI_EXT ? PSTR("Extruder") :
+ s == TSI_EXT ? F("Extruder") :
#endif
- PSTR("Probe")
+ F("Probe")
);
SERIAL_ECHOLNPGM(
" temp: ", temp,
diff --git a/Marlin/src/feature/repeat.cpp b/Marlin/src/feature/repeat.cpp
index b52feb4a00..165f71fd0f 100644
--- a/Marlin/src/feature/repeat.cpp
+++ b/Marlin/src/feature/repeat.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../inc/MarlinConfig.h"
#if ENABLED(GCODE_REPEAT_MARKERS)
diff --git a/Marlin/src/feature/runout.cpp b/Marlin/src/feature/runout.cpp
index 1c56378359..e53c229e70 100644
--- a/Marlin/src/feature/runout.cpp
+++ b/Marlin/src/feature/runout.cpp
@@ -96,7 +96,7 @@ void event_filament_runout(const uint8_t extruder) {
//action:out_of_filament
#if ENABLED(HOST_PROMPT_SUPPORT)
- host_action_prompt_begin(PROMPT_FILAMENT_RUNOUT, PSTR("FilamentRunout T"), tool);
+ host_action_prompt_begin(PROMPT_FILAMENT_RUNOUT, F("FilamentRunout T"), tool);
host_action_prompt_show();
#endif
@@ -115,7 +115,7 @@ void event_filament_runout(const uint8_t extruder) {
// Legacy Repetier command for use until newer version supports standard dialog
// To be removed later when pause command also triggers dialog
#ifdef ACTION_ON_FILAMENT_RUNOUT
- host_action(PSTR(ACTION_ON_FILAMENT_RUNOUT " T"), false);
+ host_action(F(ACTION_ON_FILAMENT_RUNOUT " T"), false);
SERIAL_CHAR(tool);
SERIAL_EOL();
#endif
@@ -140,7 +140,7 @@ void event_filament_runout(const uint8_t extruder) {
SERIAL_ECHOPGM("Runout Command: ");
SERIAL_ECHOLNPGM(FILAMENT_RUNOUT_SCRIPT);
#endif
- queue.inject_P(PSTR(FILAMENT_RUNOUT_SCRIPT));
+ queue.inject(F(FILAMENT_RUNOUT_SCRIPT));
#endif
}
}
diff --git a/Marlin/src/feature/runout.h b/Marlin/src/feature/runout.h
index d88e81d9d9..8065e51555 100644
--- a/Marlin/src/feature/runout.h
+++ b/Marlin/src/feature/runout.h
@@ -317,7 +317,7 @@ class FilamentSensorBase {
static uint8_t was_out; // = 0
if (out != TEST(was_out, s)) {
TBI(was_out, s);
- SERIAL_ECHOLNPGM_P(PSTR("Filament Sensor "), '0' + s, out ? PSTR(" OUT") : PSTR(" IN"));
+ SERIAL_ECHOLNF(F("Filament Sensor "), AS_DIGIT(s), out ? F(" OUT") : F(" IN"));
}
#endif
}
@@ -352,7 +352,7 @@ class FilamentSensorBase {
if (ELAPSED(ms, t)) {
t = millis() + 1000UL;
LOOP_L_N(i, NUM_RUNOUT_SENSORS)
- SERIAL_ECHOPGM_P(i ? PSTR(", ") : PSTR("Remaining mm: "), runout_mm_countdown[i]);
+ SERIAL_ECHOF(i ? F(", ") : F("Remaining mm: "), runout_mm_countdown[i]);
SERIAL_EOL();
}
#endif
@@ -373,7 +373,7 @@ class FilamentSensorBase {
// Only trigger on extrusion with XYZ movement to allow filament change and retract/recover.
const uint8_t e = b->extruder;
const int32_t steps = b->steps.e;
- runout_mm_countdown[e] -= (TEST(b->direction_bits, E_AXIS) ? -steps : steps) * planner.steps_to_mm[E_AXIS_N(e)];
+ runout_mm_countdown[e] -= (TEST(b->direction_bits, E_AXIS) ? -steps : steps) * planner.mm_per_step[E_AXIS_N(e)];
}
}
};
diff --git a/Marlin/src/feature/stepper_driver_safety.cpp b/Marlin/src/feature/stepper_driver_safety.cpp
index 991f5a5906..11b90954b4 100644
--- a/Marlin/src/feature/stepper_driver_safety.cpp
+++ b/Marlin/src/feature/stepper_driver_safety.cpp
@@ -28,78 +28,52 @@
static uint32_t axis_plug_backward = 0;
-void stepper_driver_backward_error(PGM_P str) {
+void stepper_driver_backward_error(FSTR_P const fstr) {
SERIAL_ERROR_START();
- SERIAL_ECHOPGM_P(str);
+ SERIAL_ECHOF(fstr);
SERIAL_ECHOLNPGM(" driver is backward!");
- ui.status_printf_P(2, PSTR(S_FMT S_FMT), str, GET_TEXT(MSG_DRIVER_BACKWARD));
+ ui.status_printf(2, F(S_FMT S_FMT), FTOP(fstr), GET_TEXT(MSG_DRIVER_BACKWARD));
}
void stepper_driver_backward_check() {
OUT_WRITE(SAFE_POWER_PIN, LOW);
- #define TEST_BACKWARD(AXIS, BIT) do { \
+ #define _TEST_BACKWARD(AXIS, BIT) do { \
SET_INPUT(AXIS##_ENABLE_PIN); \
OUT_WRITE(AXIS##_STEP_PIN, false); \
delay(20); \
if (READ(AXIS##_ENABLE_PIN) == false) { \
SBI(axis_plug_backward, BIT); \
- stepper_driver_backward_error(PSTR(STRINGIFY(AXIS))); \
+ stepper_driver_backward_error(F(STRINGIFY(AXIS))); \
} \
}while(0)
- #if HAS_X_ENABLE
- TEST_BACKWARD(X, 0);
- #endif
- #if HAS_X2_ENABLE
- TEST_BACKWARD(X2, 1);
- #endif
+ #define TEST_BACKWARD(AXIS, BIT) TERN_(HAS_##AXIS##_ENABLE, _TEST_BACKWARD(AXIS, BIT))
- #if HAS_Y_ENABLE
- TEST_BACKWARD(Y, 2);
- #endif
- #if HAS_Y2_ENABLE
- TEST_BACKWARD(Y2, 3);
- #endif
+ TEST_BACKWARD(X, 0);
+ TEST_BACKWARD(X2, 1);
- #if HAS_Z_ENABLE
- TEST_BACKWARD(Z, 4);
- #endif
- #if HAS_Z2_ENABLE
- TEST_BACKWARD(Z2, 5);
- #endif
- #if HAS_Z3_ENABLE
- TEST_BACKWARD(Z3, 6);
- #endif
- #if HAS_Z4_ENABLE
- TEST_BACKWARD(Z4, 7);
- #endif
+ TEST_BACKWARD(Y, 2);
+ TEST_BACKWARD(Y2, 3);
- #if HAS_E0_ENABLE
- TEST_BACKWARD(E0, 8);
- #endif
- #if HAS_E1_ENABLE
- TEST_BACKWARD(E1, 9);
- #endif
- #if HAS_E2_ENABLE
- TEST_BACKWARD(E2, 10);
- #endif
- #if HAS_E3_ENABLE
- TEST_BACKWARD(E3, 11);
- #endif
- #if HAS_E4_ENABLE
- TEST_BACKWARD(E4, 12);
- #endif
- #if HAS_E5_ENABLE
- TEST_BACKWARD(E5, 13);
- #endif
- #if HAS_E6_ENABLE
- TEST_BACKWARD(E6, 14);
- #endif
- #if HAS_E7_ENABLE
- TEST_BACKWARD(E7, 15);
- #endif
+ TEST_BACKWARD(Z, 4);
+ TEST_BACKWARD(Z2, 5);
+ TEST_BACKWARD(Z3, 6);
+ TEST_BACKWARD(Z4, 7);
+
+ TEST_BACKWARD(I, 8);
+ TEST_BACKWARD(J, 9);
+ TEST_BACKWARD(K, 10);
+
+ TEST_BACKWARD(E0, 11);
+ TEST_BACKWARD(E1, 12);
+ TEST_BACKWARD(E2, 13);
+ TEST_BACKWARD(E3, 14);
+ TEST_BACKWARD(E4, 15);
+ TEST_BACKWARD(E5, 16);
+ TEST_BACKWARD(E6, 17);
+ TEST_BACKWARD(E7, 18);
if (!axis_plug_backward)
WRITE(SAFE_POWER_PIN, HIGH);
@@ -108,64 +82,36 @@ void stepper_driver_backward_check() {
void stepper_driver_backward_report() {
if (!axis_plug_backward) return;
- auto _report_if_backward = [](PGM_P axis, uint8_t bit) {
+ auto _report_if_backward = [](FSTR_P const axis, uint8_t bit) {
if (TEST(axis_plug_backward, bit))
stepper_driver_backward_error(axis);
};
- #define REPORT_BACKWARD(axis, bit) _report_if_backward(PSTR(STRINGIFY(axis)), bit)
+ #define REPORT_BACKWARD(axis, bit) TERN_(HAS_##axis##_ENABLE, _report_if_backward(F(STRINGIFY(axis)), bit))
- #if HAS_X_ENABLE
- REPORT_BACKWARD(X, 0);
- #endif
- #if HAS_X2_ENABLE
- REPORT_BACKWARD(X2, 1);
- #endif
+ REPORT_BACKWARD(X, 0);
+ REPORT_BACKWARD(X2, 1);
- #if HAS_Y_ENABLE
- REPORT_BACKWARD(Y, 2);
- #endif
- #if HAS_Y2_ENABLE
- REPORT_BACKWARD(Y2, 3);
- #endif
+ REPORT_BACKWARD(Y, 2);
+ REPORT_BACKWARD(Y2, 3);
- #if HAS_Z_ENABLE
- REPORT_BACKWARD(Z, 4);
- #endif
- #if HAS_Z2_ENABLE
- REPORT_BACKWARD(Z2, 5);
- #endif
- #if HAS_Z3_ENABLE
- REPORT_BACKWARD(Z3, 6);
- #endif
- #if HAS_Z4_ENABLE
- REPORT_BACKWARD(Z4, 7);
- #endif
+ REPORT_BACKWARD(Z, 4);
+ REPORT_BACKWARD(Z2, 5);
+ REPORT_BACKWARD(Z3, 6);
+ REPORT_BACKWARD(Z4, 7);
- #if HAS_E0_ENABLE
- REPORT_BACKWARD(E0, 8);
- #endif
- #if HAS_E1_ENABLE
- REPORT_BACKWARD(E1, 9);
- #endif
- #if HAS_E2_ENABLE
- REPORT_BACKWARD(E2, 10);
- #endif
- #if HAS_E3_ENABLE
- REPORT_BACKWARD(E3, 11);
- #endif
- #if HAS_E4_ENABLE
- REPORT_BACKWARD(E4, 12);
- #endif
- #if HAS_E5_ENABLE
- REPORT_BACKWARD(E5, 13);
- #endif
- #if HAS_E6_ENABLE
- REPORT_BACKWARD(E6, 14);
- #endif
- #if HAS_E7_ENABLE
- REPORT_BACKWARD(E7, 15);
- #endif
+ REPORT_BACKWARD(I, 8);
+ REPORT_BACKWARD(J, 9);
+ REPORT_BACKWARD(K, 10);
+
+ REPORT_BACKWARD(E0, 11);
+ REPORT_BACKWARD(E1, 12);
+ REPORT_BACKWARD(E2, 13);
+ REPORT_BACKWARD(E3, 14);
+ REPORT_BACKWARD(E4, 15);
+ REPORT_BACKWARD(E5, 16);
+ REPORT_BACKWARD(E6, 17);
+ REPORT_BACKWARD(E7, 18);
}
#endif // HAS_DRIVER_SAFE_POWER_PROTECT
diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp
index 97fedf13c5..82c10e6e8e 100644
--- a/Marlin/src/feature/tmc_util.cpp
+++ b/Marlin/src/feature/tmc_util.cpp
@@ -212,7 +212,7 @@
if (data.is_ot) SERIAL_ECHOLNPGM("overtemperature");
if (data.is_s2g) SERIAL_ECHOLNPGM("coil short circuit");
TERN_(TMC_DEBUG, tmc_report_all());
- kill(PSTR("Driver error"));
+ kill(F("Driver error"));
}
#endif
@@ -561,7 +561,7 @@
};
template
- static void print_vsense(TMC &st) { SERIAL_ECHOPGM_P(st.vsense() ? PSTR("1=.18") : PSTR("0=.325")); }
+ static void print_vsense(TMC &st) { SERIAL_ECHOF(st.vsense() ? F("1=.18") : F("0=.325")); }
#if HAS_DRIVER(TMC2130) || HAS_DRIVER(TMC5130)
static void _tmc_status(TMC2130Stepper &st, const TMC_debug_enum i) {
@@ -732,7 +732,7 @@
SERIAL_ECHO(st.cs());
SERIAL_ECHOPGM("/31");
break;
- case TMC_VSENSE: SERIAL_ECHOPGM_P(st.vsense() ? PSTR("1=.165") : PSTR("0=.310")); break;
+ case TMC_VSENSE: SERIAL_ECHOF(st.vsense() ? F("1=.165") : F("0=.310")); break;
case TMC_MICROSTEPS: SERIAL_ECHO(st.microsteps()); break;
//case TMC_OTPW: serialprint_truefalse(st.otpw()); break;
//case TMC_OTPW_TRIGGERED: serialprint_truefalse(st.getOTPW()); break;
@@ -1256,15 +1256,14 @@ static bool test_connection(TMC &st) {
if (test_result > 0) SERIAL_ECHOPGM("Error: All ");
- const char *stat;
+ FSTR_P stat;
switch (test_result) {
default:
- case 0: stat = PSTR("OK"); break;
- case 1: stat = PSTR("HIGH"); break;
- case 2: stat = PSTR("LOW"); break;
+ case 0: stat = F("OK"); break;
+ case 1: stat = F("HIGH"); break;
+ case 2: stat = F("LOW"); break;
}
- SERIAL_ECHOPGM_P(stat);
- SERIAL_EOL();
+ SERIAL_ECHOLNF(stat);
return test_result;
}
@@ -1342,7 +1341,7 @@ void test_tmc_connection(LOGICAL_AXIS_ARGS(const bool)) {
#endif
}
- if (axis_connection) LCD_MESSAGEPGM(MSG_ERROR_TMC);
+ if (axis_connection) LCD_MESSAGE(MSG_ERROR_TMC);
}
#endif // HAS_TRINAMIC_CONFIG
diff --git a/Marlin/src/feature/twibus.cpp b/Marlin/src/feature/twibus.cpp
index 5f5209cdd4..55e4da75cf 100644
--- a/Marlin/src/feature/twibus.cpp
+++ b/Marlin/src/feature/twibus.cpp
@@ -51,27 +51,27 @@ void TWIBus::address(const uint8_t adr) {
addr = adr;
- debug(PSTR("address"), adr);
+ debug(F("address"), adr);
}
void TWIBus::addbyte(const char c) {
if (buffer_s >= COUNT(buffer)) return;
buffer[buffer_s++] = c;
- debug(PSTR("addbyte"), c);
+ debug(F("addbyte"), c);
}
void TWIBus::addbytes(char src[], uint8_t bytes) {
- debug(PSTR("addbytes"), bytes);
+ debug(F("addbytes"), bytes);
while (bytes--) addbyte(*src++);
}
void TWIBus::addstring(char str[]) {
- debug(PSTR("addstring"), str);
+ debug(F("addstring"), str);
while (char c = *str++) addbyte(c);
}
void TWIBus::send() {
- debug(PSTR("send"), addr);
+ debug(F("send"), addr);
Wire.beginTransmission(I2C_ADDRESS(addr));
Wire.write(buffer, buffer_s);
@@ -81,20 +81,20 @@ void TWIBus::send() {
}
// static
-void TWIBus::echoprefix(uint8_t bytes, const char pref[], uint8_t adr) {
+void TWIBus::echoprefix(uint8_t bytes, FSTR_P const pref, uint8_t adr) {
SERIAL_ECHO_START();
- SERIAL_ECHOPGM_P(pref);
+ SERIAL_ECHOF(pref);
SERIAL_ECHOPGM(": from:", adr, " bytes:", bytes, " data:");
}
// static
-void TWIBus::echodata(uint8_t bytes, const char pref[], uint8_t adr) {
+void TWIBus::echodata(uint8_t bytes, FSTR_P const pref, uint8_t adr) {
echoprefix(bytes, pref, adr);
while (bytes-- && Wire.available()) SERIAL_CHAR(Wire.read());
SERIAL_EOL();
}
-void TWIBus::echobuffer(const char pref[], uint8_t adr) {
+void TWIBus::echobuffer(FSTR_P const pref, uint8_t adr) {
echoprefix(buffer_s, pref, adr);
LOOP_L_N(i, buffer_s) SERIAL_CHAR(buffer[i]);
SERIAL_EOL();
@@ -103,11 +103,11 @@ void TWIBus::echobuffer(const char pref[], uint8_t adr) {
bool TWIBus::request(const uint8_t bytes) {
if (!addr) return false;
- debug(PSTR("request"), bytes);
+ debug(F("request"), bytes);
// requestFrom() is a blocking function
if (Wire.requestFrom(I2C_ADDRESS(addr), bytes) == 0) {
- debug("request fail", I2C_ADDRESS(addr));
+ debug(F("request fail"), I2C_ADDRESS(addr));
return false;
}
@@ -115,10 +115,10 @@ bool TWIBus::request(const uint8_t bytes) {
}
void TWIBus::relay(const uint8_t bytes) {
- debug(PSTR("relay"), bytes);
+ debug(F("relay"), bytes);
if (request(bytes))
- echodata(bytes, PSTR("i2c-reply"), addr);
+ echodata(bytes, F("i2c-reply"), addr);
}
uint8_t TWIBus::capture(char *dst, const uint8_t bytes) {
@@ -127,7 +127,7 @@ uint8_t TWIBus::capture(char *dst, const uint8_t bytes) {
while (count < bytes && Wire.available())
dst[count++] = Wire.read();
- debug(PSTR("capture"), count);
+ debug(F("capture"), count);
return count;
}
@@ -140,12 +140,12 @@ void TWIBus::flush() {
#if I2C_SLAVE_ADDRESS > 0
void TWIBus::receive(uint8_t bytes) {
- debug(PSTR("receive"), bytes);
- echodata(bytes, PSTR("i2c-receive"), 0);
+ debug(F("receive"), bytes);
+ echodata(bytes, F("i2c-receive"), 0);
}
void TWIBus::reply(char str[]/*=nullptr*/) {
- debug(PSTR("reply"), str);
+ debug(F("reply"), str);
if (str) {
reset();
@@ -170,18 +170,16 @@ void TWIBus::flush() {
#if ENABLED(DEBUG_TWIBUS)
// static
- void TWIBus::prefix(const char func[]) {
- SERIAL_ECHOPGM("TWIBus::");
- SERIAL_ECHOPGM_P(func);
- SERIAL_ECHOPGM(": ");
+ void TWIBus::prefix(FSTR_P const func) {
+ SERIAL_ECHOPGM("TWIBus::", func, ": ");
}
- void TWIBus::debug(const char func[], uint32_t adr) {
+ void TWIBus::debug(FSTR_P const func, uint32_t adr) {
if (DEBUGGING(INFO)) { prefix(func); SERIAL_ECHOLN(adr); }
}
- void TWIBus::debug(const char func[], char c) {
+ void TWIBus::debug(FSTR_P const func, char c) {
if (DEBUGGING(INFO)) { prefix(func); SERIAL_ECHOLN(c); }
}
- void TWIBus::debug(const char func[], char str[]) {
+ void TWIBus::debug(FSTR_P const func, char str[]) {
if (DEBUGGING(INFO)) { prefix(func); SERIAL_ECHOLN(str); }
}
diff --git a/Marlin/src/feature/twibus.h b/Marlin/src/feature/twibus.h
index 5939153482..2a8a7fef6a 100644
--- a/Marlin/src/feature/twibus.h
+++ b/Marlin/src/feature/twibus.h
@@ -142,7 +142,7 @@ class TWIBus {
*
* @param bytes the number of bytes to request
*/
- static void echoprefix(uint8_t bytes, const char prefix[], uint8_t adr);
+ static void echoprefix(uint8_t bytes, FSTR_P prefix, uint8_t adr);
/**
* @brief Echo data on the bus to serial
@@ -151,7 +151,7 @@ class TWIBus {
*
* @param bytes the number of bytes to request
*/
- static void echodata(uint8_t bytes, const char prefix[], uint8_t adr);
+ static void echodata(uint8_t bytes, FSTR_P prefix, uint8_t adr);
/**
* @brief Echo data in the buffer to serial
@@ -160,7 +160,7 @@ class TWIBus {
*
* @param bytes the number of bytes to request
*/
- void echobuffer(const char prefix[], uint8_t adr);
+ void echobuffer(FSTR_P prefix, uint8_t adr);
/**
* @brief Request data from the slave device and wait.
@@ -237,17 +237,16 @@ class TWIBus {
* @brief Prints a debug message
* @details Prints a simple debug message "TWIBus::function: value"
*/
- static void prefix(const char func[]);
- static void debug(const char func[], uint32_t adr);
- static void debug(const char func[], char c);
- static void debug(const char func[], char adr[]);
- static inline void debug(const char func[], uint8_t v) { debug(func, (uint32_t)v); }
+ static void prefix(FSTR_P const func);
+ static void debug(FSTR_P const func, uint32_t adr);
+ static void debug(FSTR_P const func, char c);
+ static void debug(FSTR_P const func, char adr[]);
#else
- static inline void debug(const char[], uint32_t) {}
- static inline void debug(const char[], char) {}
- static inline void debug(const char[], char[]) {}
- static inline void debug(const char[], uint8_t) {}
+ static inline void debug(FSTR_P const, uint32_t) {}
+ static inline void debug(FSTR_P const, char) {}
+ static inline void debug(FSTR_P const, char[]) {}
#endif
+ static inline void debug(FSTR_P const func, uint8_t v) { debug(func, (uint32_t)v); }
};
extern TWIBus i2c;
diff --git a/Marlin/src/gcode/bedlevel/G26.cpp b/Marlin/src/gcode/bedlevel/G26.cpp
index ba14e6f0b4..e111bcd8aa 100644
--- a/Marlin/src/gcode/bedlevel/G26.cpp
+++ b/Marlin/src/gcode/bedlevel/G26.cpp
@@ -163,7 +163,7 @@ float g26_random_deviation = 0.0;
*/
bool user_canceled() {
if (!ui.button_pressed()) return false; // Return if the button isn't pressed
- ui.set_status_P(GET_TEXT(MSG_G26_CANCELED), 99);
+ ui.set_status(GET_TEXT_F(MSG_G26_CANCELED), 99);
TERN_(HAS_LCD_MENU, ui.quick_feedback());
ui.wait_for_release();
return true;
@@ -323,7 +323,7 @@ typedef struct {
if (bed_temp > 25) {
#if HAS_WIRED_LCD
- ui.set_status_P(GET_TEXT(MSG_G26_HEATING_BED), 99);
+ ui.set_status(GET_TEXT_F(MSG_G26_HEATING_BED), 99);
ui.quick_feedback();
TERN_(HAS_LCD_MENU, ui.capture());
#endif
@@ -342,7 +342,7 @@ typedef struct {
// Start heating the active nozzle
#if HAS_WIRED_LCD
- ui.set_status_P(GET_TEXT(MSG_G26_HEATING_NOZZLE), 99);
+ ui.set_status(GET_TEXT_F(MSG_G26_HEATING_NOZZLE), 99);
ui.quick_feedback();
#endif
thermalManager.setTargetHotend(hotend_temp, active_extruder);
@@ -372,7 +372,7 @@ typedef struct {
if (prime_flag == -1) { // The user wants to control how much filament gets purged
ui.capture();
- ui.set_status_P(GET_TEXT(MSG_G26_MANUAL_PRIME), 99);
+ ui.set_status(GET_TEXT_F(MSG_G26_MANUAL_PRIME), 99);
ui.chirp();
destination = current_position;
@@ -399,7 +399,7 @@ typedef struct {
ui.wait_for_release();
- ui.set_status_P(GET_TEXT(MSG_G26_PRIME_DONE), 99);
+ ui.set_status(GET_TEXT_F(MSG_G26_PRIME_DONE), 99);
ui.quick_feedback();
ui.release();
}
@@ -407,7 +407,7 @@ typedef struct {
#endif
{
#if HAS_WIRED_LCD
- ui.set_status_P(GET_TEXT(MSG_G26_FIXED_LENGTH), 99);
+ ui.set_status(GET_TEXT_F(MSG_G26_FIXED_LENGTH), 99);
ui.quick_feedback();
#endif
destination = current_position;
@@ -854,7 +854,7 @@ void GcodeSuite::G26() {
} while (--g26_repeats && location.valid());
LEAVE:
- ui.set_status_P(GET_TEXT(MSG_G26_LEAVING), -1);
+ ui.set_status(GET_TEXT_F(MSG_G26_LEAVING), -1);
TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(location, ExtUI::G26_FINISH));
g26.retract_filament(destination);
diff --git a/Marlin/src/gcode/bedlevel/G35.cpp b/Marlin/src/gcode/bedlevel/G35.cpp
index 8d5c057361..e45e18b7fb 100644
--- a/Marlin/src/gcode/bedlevel/G35.cpp
+++ b/Marlin/src/gcode/bedlevel/G35.cpp
@@ -92,7 +92,7 @@ void GcodeSuite::G35() {
TERN_(HAS_DUPLICATION_MODE, set_duplication_enabled(false));
// Home only Z axis when X and Y is trusted, otherwise all axes, if needed before this procedure
- if (!all_axes_trusted()) process_subcommands_now_P(PSTR("G28Z"));
+ if (!all_axes_trusted()) process_subcommands_now(F("G28Z"));
bool err_break = false;
@@ -116,7 +116,7 @@ void GcodeSuite::G35() {
if (DEBUGGING(LEVELING)) {
DEBUG_ECHOPGM("Probing point ", i + 1, " (");
- DEBUG_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
+ DEBUG_ECHOF(FPSTR(pgm_read_ptr(&tramming_point_name[i])));
DEBUG_CHAR(')');
DEBUG_ECHOLNPGM_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y, SP_Z_STR, z_probed_height);
}
diff --git a/Marlin/src/gcode/bedlevel/M420.cpp b/Marlin/src/gcode/bedlevel/M420.cpp
index 1110ce7ccf..3c23e85a1d 100644
--- a/Marlin/src/gcode/bedlevel/M420.cpp
+++ b/Marlin/src/gcode/bedlevel/M420.cpp
@@ -195,7 +195,7 @@ void GcodeSuite::M420() {
// V to print the matrix or mesh
if (seenV) {
#if ABL_PLANAR
- planner.bed_level_matrix.debug(PSTR("Bed Level Correction Matrix:"));
+ planner.bed_level_matrix.debug(F("Bed Level Correction Matrix:"));
#else
if (leveling_is_valid()) {
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
@@ -243,15 +243,15 @@ void GcodeSuite::M420() {
}
void GcodeSuite::M420_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(
+ report_heading_etc(forReplay, F(
TERN(MESH_BED_LEVELING, "Mesh Bed Leveling", TERN(AUTO_BED_LEVELING_UBL, "Unified Bed Leveling", "Auto Bed Leveling"))
));
- SERIAL_ECHOPGM_P(
- PSTR(" M420 S"), planner.leveling_active
+ SERIAL_ECHOF(
+ F(" M420 S"), planner.leveling_active
#if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- , SP_Z_STR, LINEAR_UNIT(planner.z_fade_height)
+ , FPSTR(SP_Z_STR), LINEAR_UNIT(planner.z_fade_height)
#endif
- , " ; Leveling "
+ , F(" ; Leveling ")
);
serialprintln_onoff(planner.leveling_active);
}
diff --git a/Marlin/src/gcode/bedlevel/abl/G29.cpp b/Marlin/src/gcode/bedlevel/abl/G29.cpp
index 0eb13dba96..f7afd93c81 100644
--- a/Marlin/src/gcode/bedlevel/abl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/abl/G29.cpp
@@ -244,7 +244,7 @@ G29_TYPE GcodeSuite::G29() {
// Send 'N' to force homing before G29 (internal only)
if (parser.seen_test('N'))
- process_subcommands_now_P(TERN(CAN_SET_LEVELING_AFTER_G28, PSTR("G28L0"), G28_STR));
+ process_subcommands_now(TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR)));
// Don't allow auto-leveling without homing first
if (homing_needed_error()) G29_RETURN(false);
@@ -636,7 +636,7 @@ G29_TYPE GcodeSuite::G29() {
if (TERN0(IS_KINEMATIC, !probe.can_reach(abl.probePos))) continue;
if (abl.verbose_level) SERIAL_ECHOLNPGM("Probing mesh point ", pt_index, "/", abl.abl_points, ".");
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), int(pt_index), int(abl.abl_points)));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), int(pt_index), int(abl.abl_points)));
abl.measured_z = faux ? 0.001f * random(-100, 101) : probe.probe_at_point(abl.probePos, raise_after, abl.verbose_level);
@@ -681,7 +681,7 @@ G29_TYPE GcodeSuite::G29() {
LOOP_L_N(i, 3) {
if (abl.verbose_level) SERIAL_ECHOLNPGM("Probing point ", i + 1, "/3.");
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/3"), GET_TEXT(MSG_PROBING_POINT), int(i + 1)));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/3"), GET_TEXT(MSG_PROBING_POINT), int(i + 1)));
// Retain the last probe position
abl.probePos = xy_pos_t(points[i]);
@@ -783,8 +783,8 @@ G29_TYPE GcodeSuite::G29() {
float min_diff = 999;
- auto print_topo_map = [&](PGM_P const title, const bool get_min) {
- SERIAL_ECHOPGM_P(title);
+ auto print_topo_map = [&](FSTR_P const title, const bool get_min) {
+ SERIAL_ECHOF(title);
for (int8_t yy = abl.grid_points.y - 1; yy >= 0; yy--) {
LOOP_L_N(xx, abl.grid_points.x) {
const int ind = abl.indexIntoAB[xx][yy];
@@ -802,19 +802,19 @@ G29_TYPE GcodeSuite::G29() {
SERIAL_EOL();
};
- print_topo_map(PSTR("\nBed Height Topography:\n"
- " +--- BACK --+\n"
- " | |\n"
- " L | (+) | R\n"
- " E | | I\n"
- " F | (-) N (+) | G\n"
- " T | | H\n"
- " | (-) | T\n"
- " | |\n"
- " O-- FRONT --+\n"
- " (0,0)\n"), true);
+ print_topo_map(F("\nBed Height Topography:\n"
+ " +--- BACK --+\n"
+ " | |\n"
+ " L | (+) | R\n"
+ " E | | I\n"
+ " F | (-) N (+) | G\n"
+ " T | | H\n"
+ " | (-) | T\n"
+ " | |\n"
+ " O-- FRONT --+\n"
+ " (0,0)\n"), true);
if (abl.verbose_level > 3)
- print_topo_map(PSTR("\nCorrected Bed Height vs. Bed Topology:\n"), false);
+ print_topo_map(F("\nCorrected Bed Height vs. Bed Topology:\n"), false);
} // abl.topography_map
@@ -825,7 +825,7 @@ G29_TYPE GcodeSuite::G29() {
// For LINEAR and 3POINT leveling correct the current position
if (abl.verbose_level > 0)
- planner.bed_level_matrix.debug(PSTR("\n\nBed Level Correction Matrix:"));
+ planner.bed_level_matrix.debug(F("\n\nBed Level Correction Matrix:"));
if (!abl.dryrun) {
//
@@ -882,7 +882,7 @@ G29_TYPE GcodeSuite::G29() {
#ifdef Z_PROBE_END_SCRIPT
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
planner.synchronize();
- process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
+ process_subcommands_now(F(Z_PROBE_END_SCRIPT));
#endif
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_CompletedLeveling());
diff --git a/Marlin/src/gcode/bedlevel/mbl/G29.cpp b/Marlin/src/gcode/bedlevel/mbl/G29.cpp
index 11e503f013..eec89f73ac 100644
--- a/Marlin/src/gcode/bedlevel/mbl/G29.cpp
+++ b/Marlin/src/gcode/bedlevel/mbl/G29.cpp
@@ -103,7 +103,7 @@ void GcodeSuite::G29() {
mbl.reset();
mbl_probe_index = 0;
if (!ui.wait_for_move) {
- queue.inject_P(parser.seen_test('N') ? PSTR("G28" TERN(CAN_SET_LEVELING_AFTER_G28, "L0", "") "\nG29S2") : PSTR("G29S2"));
+ queue.inject(parser.seen_test('N') ? F("G28" TERN(CAN_SET_LEVELING_AFTER_G28, "L0", "") "\nG29S2") : F("G29S2"));
TERN_(EXTENSIBLE_UI, ExtUI::onMeshLevelingStart());
return;
}
@@ -152,7 +152,7 @@ void GcodeSuite::G29() {
// After recording the last point, activate home and activate
mbl_probe_index = -1;
SERIAL_ECHOLNPGM("Mesh probing done.");
- TERN_(HAS_STATUS_MESSAGE, ui.set_status(GET_TEXT(MSG_MESH_DONE)));
+ TERN_(HAS_STATUS_MESSAGE, LCD_MESSAGE(MSG_MESH_DONE));
BUZZ(100, 659);
BUZZ(100, 698);
@@ -214,7 +214,7 @@ void GcodeSuite::G29() {
if (state == MeshNext) {
SERIAL_ECHOLNPGM("MBL G29 point ", _MIN(mbl_probe_index, GRID_MAX_POINTS), " of ", GRID_MAX_POINTS);
- if (mbl_probe_index > 0) TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), _MIN(mbl_probe_index, GRID_MAX_POINTS), int(GRID_MAX_POINTS)));
+ if (mbl_probe_index > 0) TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), _MIN(mbl_probe_index, GRID_MAX_POINTS), int(GRID_MAX_POINTS)));
}
report_current_position();
diff --git a/Marlin/src/gcode/calibrate/G28.cpp b/Marlin/src/gcode/calibrate/G28.cpp
index dc93ba3d2f..95f2a9b176 100644
--- a/Marlin/src/gcode/calibrate/G28.cpp
+++ b/Marlin/src/gcode/calibrate/G28.cpp
@@ -156,7 +156,7 @@
homeaxis(Z_AXIS);
}
else {
- LCD_MESSAGEPGM(MSG_ZPROBE_OUT);
+ LCD_MESSAGE(MSG_ZPROBE_OUT);
SERIAL_ECHO_MSG(STR_ZPROBE_OUT_SER);
}
}
@@ -269,33 +269,33 @@ void GcodeSuite::G28() {
#endif
#if HAS_HOMING_CURRENT
- auto debug_current = [](PGM_P const s, const int16_t a, const int16_t b) {
- DEBUG_ECHOPGM_P(s); DEBUG_ECHOLNPGM(" current: ", a, " -> ", b);
+ auto debug_current = [](FSTR_P const s, const int16_t a, const int16_t b) {
+ DEBUG_ECHOF(s); DEBUG_ECHOLNPGM(" current: ", a, " -> ", b);
};
#if HAS_CURRENT_HOME(X)
const int16_t tmc_save_current_X = stepperX.getMilliamps();
stepperX.rms_current(X_CURRENT_HOME);
- if (DEBUGGING(LEVELING)) debug_current(PSTR("X"), tmc_save_current_X, X_CURRENT_HOME);
+ if (DEBUGGING(LEVELING)) debug_current(F("X"), tmc_save_current_X, X_CURRENT_HOME);
#endif
#if HAS_CURRENT_HOME(X2)
const int16_t tmc_save_current_X2 = stepperX2.getMilliamps();
stepperX2.rms_current(X2_CURRENT_HOME);
- if (DEBUGGING(LEVELING)) debug_current(PSTR("X2"), tmc_save_current_X2, X2_CURRENT_HOME);
+ if (DEBUGGING(LEVELING)) debug_current(F("X2"), tmc_save_current_X2, X2_CURRENT_HOME);
#endif
#if HAS_CURRENT_HOME(Y)
const int16_t tmc_save_current_Y = stepperY.getMilliamps();
stepperY.rms_current(Y_CURRENT_HOME);
- if (DEBUGGING(LEVELING)) debug_current(PSTR("Y"), tmc_save_current_Y, Y_CURRENT_HOME);
+ if (DEBUGGING(LEVELING)) debug_current(F("Y"), tmc_save_current_Y, Y_CURRENT_HOME);
#endif
#if HAS_CURRENT_HOME(Y2)
const int16_t tmc_save_current_Y2 = stepperY2.getMilliamps();
stepperY2.rms_current(Y2_CURRENT_HOME);
- if (DEBUGGING(LEVELING)) debug_current(PSTR("Y2"), tmc_save_current_Y2, Y2_CURRENT_HOME);
+ if (DEBUGGING(LEVELING)) debug_current(F("Y2"), tmc_save_current_Y2, Y2_CURRENT_HOME);
#endif
#if HAS_CURRENT_HOME(Z) && ENABLED(DELTA)
const int16_t tmc_save_current_Z = stepperZ.getMilliamps();
stepperZ.rms_current(Z_CURRENT_HOME);
- if (DEBUGGING(LEVELING)) debug_current(PSTR("Z"), tmc_save_current_Z, Z_CURRENT_HOME);
+ if (DEBUGGING(LEVELING)) debug_current(F("Z"), tmc_save_current_Z, Z_CURRENT_HOME);
#endif
#endif
diff --git a/Marlin/src/gcode/calibrate/G33.cpp b/Marlin/src/gcode/calibrate/G33.cpp
index 8867c168d2..8a9de49880 100644
--- a/Marlin/src/gcode/calibrate/G33.cpp
+++ b/Marlin/src/gcode/calibrate/G33.cpp
@@ -97,10 +97,9 @@ void ac_cleanup(TERN_(HAS_MULTI_HOTEND, const uint8_t old_tool_index)) {
TERN_(HAS_MULTI_HOTEND, tool_change(old_tool_index, true));
}
-void print_signed_float(PGM_P const prefix, const_float_t f) {
+void print_signed_float(FSTR_P const prefix, const_float_t f) {
SERIAL_ECHOPGM(" ");
- SERIAL_ECHOPGM_P(prefix);
- SERIAL_CHAR(':');
+ SERIAL_ECHOF(prefix, AS_CHAR(':'));
if (f >= 0) SERIAL_CHAR('+');
SERIAL_ECHO_F(f, 2);
}
@@ -111,24 +110,23 @@ void print_signed_float(PGM_P const prefix, const_float_t f) {
static void print_calibration_settings(const bool end_stops, const bool tower_angles) {
SERIAL_ECHOPGM(".Height:", delta_height);
if (end_stops) {
- print_signed_float(PSTR("Ex"), delta_endstop_adj.a);
- print_signed_float(PSTR("Ey"), delta_endstop_adj.b);
- print_signed_float(PSTR("Ez"), delta_endstop_adj.c);
+ print_signed_float(F("Ex"), delta_endstop_adj.a);
+ print_signed_float(F("Ey"), delta_endstop_adj.b);
+ print_signed_float(F("Ez"), delta_endstop_adj.c);
}
if (end_stops && tower_angles) {
- SERIAL_ECHOPGM(" Radius:", delta_radius);
- SERIAL_EOL();
+ SERIAL_ECHOLNPGM(" Radius:", delta_radius);
SERIAL_CHAR('.');
SERIAL_ECHO_SP(13);
}
if (tower_angles) {
- print_signed_float(PSTR("Tx"), delta_tower_angle_trim.a);
- print_signed_float(PSTR("Ty"), delta_tower_angle_trim.b);
- print_signed_float(PSTR("Tz"), delta_tower_angle_trim.c);
+ print_signed_float(F("Tx"), delta_tower_angle_trim.a);
+ print_signed_float(F("Ty"), delta_tower_angle_trim.b);
+ print_signed_float(F("Tz"), delta_tower_angle_trim.c);
}
- if ((!end_stops && tower_angles) || (end_stops && !tower_angles)) { // XOR
+ if (end_stops != tower_angles)
SERIAL_ECHOPGM(" Radius:", delta_radius);
- }
+
SERIAL_EOL();
}
@@ -137,11 +135,11 @@ static void print_calibration_settings(const bool end_stops, const bool tower_an
*/
static void print_calibration_results(const float z_pt[NPP + 1], const bool tower_points, const bool opposite_points) {
SERIAL_ECHOPGM(". ");
- print_signed_float(PSTR("c"), z_pt[CEN]);
+ print_signed_float(F("c"), z_pt[CEN]);
if (tower_points) {
- print_signed_float(PSTR(" x"), z_pt[__A]);
- print_signed_float(PSTR(" y"), z_pt[__B]);
- print_signed_float(PSTR(" z"), z_pt[__C]);
+ print_signed_float(F(" x"), z_pt[__A]);
+ print_signed_float(F(" y"), z_pt[__B]);
+ print_signed_float(F(" z"), z_pt[__C]);
}
if (tower_points && opposite_points) {
SERIAL_EOL();
@@ -149,9 +147,9 @@ static void print_calibration_results(const float z_pt[NPP + 1], const bool towe
SERIAL_ECHO_SP(13);
}
if (opposite_points) {
- print_signed_float(PSTR("yz"), z_pt[_BC]);
- print_signed_float(PSTR("zx"), z_pt[_CA]);
- print_signed_float(PSTR("xy"), z_pt[_AB]);
+ print_signed_float(F("yz"), z_pt[_BC]);
+ print_signed_float(F("zx"), z_pt[_CA]);
+ print_signed_float(F("xy"), z_pt[_AB]);
}
SERIAL_EOL();
}
@@ -477,11 +475,11 @@ void GcodeSuite::G33() {
SERIAL_ECHOLNPGM("G33 Auto Calibrate");
// Report settings
- PGM_P const checkingac = PSTR("Checking... AC");
- SERIAL_ECHOPGM_P(checkingac);
+ FSTR_P const checkingac = F("Checking... AC");
+ SERIAL_ECHOF(checkingac);
if (verbose_level == 0) SERIAL_ECHOPGM(" (DRY-RUN)");
SERIAL_EOL();
- ui.set_status_P(checkingac);
+ ui.set_status(checkingac);
print_calibration_settings(_endstop_results, _angle_results);
@@ -653,13 +651,13 @@ void GcodeSuite::G33() {
}
}
else { // dry run
- PGM_P const enddryrun = PSTR("End DRY-RUN");
- SERIAL_ECHOPGM_P(enddryrun);
+ FSTR_P const enddryrun = F("End DRY-RUN");
+ SERIAL_ECHOF(enddryrun);
SERIAL_ECHO_SP(35);
SERIAL_ECHOLNPAIR_F("std dev:", zero_std_dev, 3);
char mess[21];
- strcpy_P(mess, enddryrun);
+ strcpy_P(mess, FTOP(enddryrun));
strcpy_P(&mess[11], PSTR(" sd:"));
if (zero_std_dev < 1)
sprintf_P(&mess[15], PSTR("0.%03i"), (int)LROUND(zero_std_dev * 1000.0f));
diff --git a/Marlin/src/gcode/calibrate/G34.cpp b/Marlin/src/gcode/calibrate/G34.cpp
index f335a12311..98a0bdef88 100644
--- a/Marlin/src/gcode/calibrate/G34.cpp
+++ b/Marlin/src/gcode/calibrate/G34.cpp
@@ -47,7 +47,7 @@ void GcodeSuite::G34() {
TemporaryGlobalEndstopsState unlock_z(false);
#ifdef GANTRY_CALIBRATION_COMMANDS_PRE
- gcode.process_subcommands_now_P(PSTR(GANTRY_CALIBRATION_COMMANDS_PRE));
+ process_subcommands_now(F(GANTRY_CALIBRATION_COMMANDS_PRE));
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Sub Commands Processed");
#endif
@@ -148,7 +148,7 @@ void GcodeSuite::G34() {
#ifdef GANTRY_CALIBRATION_COMMANDS_POST
if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Running Post Commands");
- gcode.process_subcommands_now_P(PSTR(GANTRY_CALIBRATION_COMMANDS_POST));
+ process_subcommands_now(F(GANTRY_CALIBRATION_COMMANDS_POST));
#endif
SET_SOFT_ENDSTOP_LOOSE(false);
diff --git a/Marlin/src/gcode/calibrate/G34_M422.cpp b/Marlin/src/gcode/calibrate/G34_M422.cpp
index dd1dd5622a..8f4eab2c97 100644
--- a/Marlin/src/gcode/calibrate/G34_M422.cpp
+++ b/Marlin/src/gcode/calibrate/G34_M422.cpp
@@ -31,7 +31,7 @@
#include "../../module/stepper.h"
#include "../../module/planner.h"
#include "../../module/probe.h"
-#include "../../lcd/marlinui.h" // for LCD_MESSAGEPGM
+#include "../../lcd/marlinui.h" // for LCD_MESSAGE
#if HAS_LEVELING
#include "../../feature/bedlevel/bedlevel.h"
@@ -229,7 +229,7 @@ void GcodeSuite::G34() {
const float z_probed_height = probe.probe_at_point(z_stepper_align.xy[iprobe], raise_after, 0, true, false);
if (isnan(z_probed_height)) {
SERIAL_ECHOLNPGM("Probing failed");
- LCD_MESSAGEPGM(MSG_LCD_PROBING_FAILED);
+ LCD_MESSAGE(MSG_LCD_PROBING_FAILED);
err_break = true;
break;
}
@@ -328,7 +328,7 @@ void GcodeSuite::G34() {
auto decreasing_accuracy = [](const_float_t v1, const_float_t v2) {
if (v1 < v2 * 0.7f) {
SERIAL_ECHOLNPGM("Decreasing Accuracy Detected.");
- LCD_MESSAGEPGM(MSG_DECREASING_ACCURACY);
+ LCD_MESSAGE(MSG_DECREASING_ACCURACY);
return true;
}
return false;
@@ -411,7 +411,7 @@ void GcodeSuite::G34() {
if (success_break) {
SERIAL_ECHOLNPGM("Target accuracy achieved.");
- LCD_MESSAGEPGM(MSG_ACCURACY_ACHIEVED);
+ LCD_MESSAGE(MSG_ACCURACY_ACHIEVED);
break;
}
@@ -433,7 +433,7 @@ void GcodeSuite::G34() {
// After this operation the z position needs correction
set_axis_never_homed(Z_AXIS);
// Home Z after the alignment procedure
- process_subcommands_now_P(PSTR("G28Z"));
+ process_subcommands_now(F("G28Z"));
#else
// Use the probed height from the last iteration to determine the Z height.
// z_measured_min is used, because all steppers are aligned to z_measured_min.
@@ -538,7 +538,7 @@ void GcodeSuite::M422() {
}
void GcodeSuite::M422_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_Z_AUTO_ALIGN));
+ report_heading(forReplay, F(STR_Z_AUTO_ALIGN));
LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
report_echo_start(forReplay);
SERIAL_ECHOLNPGM_P(
diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp
index 23a66dd0c5..88c906f493 100644
--- a/Marlin/src/gcode/calibrate/G425.cpp
+++ b/Marlin/src/gcode/calibrate/G425.cpp
@@ -709,7 +709,7 @@ inline void calibrate_all() {
void GcodeSuite::G425() {
#ifdef CALIBRATION_SCRIPT_PRE
- GcodeSuite::process_subcommands_now_P(PSTR(CALIBRATION_SCRIPT_PRE));
+ process_subcommands_now(F(CALIBRATION_SCRIPT_PRE));
#endif
if (homing_needed_error()) return;
@@ -745,7 +745,7 @@ void GcodeSuite::G425() {
SET_SOFT_ENDSTOP_LOOSE(false);
#ifdef CALIBRATION_SCRIPT_POST
- GcodeSuite::process_subcommands_now_P(PSTR(CALIBRATION_SCRIPT_POST));
+ process_subcommands_now(F(CALIBRATION_SCRIPT_POST));
#endif
}
diff --git a/Marlin/src/gcode/calibrate/G76_M192_M871.cpp b/Marlin/src/gcode/calibrate/G76_M192_M871.cpp
index 170958cab4..2408f44ac4 100644
--- a/Marlin/src/gcode/calibrate/G76_M192_M871.cpp
+++ b/Marlin/src/gcode/calibrate/G76_M192_M871.cpp
@@ -158,7 +158,7 @@ void GcodeSuite::G76() {
return;
}
- process_subcommands_now_P(G28_STR);
+ process_subcommands_now(FPSTR(G28_STR));
}
remember_feedrate_scaling_off();
@@ -351,7 +351,7 @@ void GcodeSuite::M192() {
}
const celsius_t target_temp = parser.value_celsius();
- ui.set_status_P(thermalManager.isProbeBelowTemp(target_temp) ? GET_TEXT(MSG_PROBE_HEATING) : GET_TEXT(MSG_PROBE_COOLING));
+ ui.set_status(thermalManager.isProbeBelowTemp(target_temp) ? GET_TEXT_F(MSG_PROBE_HEATING) : GET_TEXT_F(MSG_PROBE_COOLING));
thermalManager.wait_for_probe(target_temp, no_wait_for_cooling);
}
diff --git a/Marlin/src/gcode/calibrate/M100.cpp b/Marlin/src/gcode/calibrate/M100.cpp
index 0e2d42907a..338392b597 100644
--- a/Marlin/src/gcode/calibrate/M100.cpp
+++ b/Marlin/src/gcode/calibrate/M100.cpp
@@ -51,7 +51,7 @@
* Also, there are two support functions that can be called from a developer's C code.
*
* uint16_t check_for_free_memory_corruption(PGM_P const free_memory_start);
- * void M100_dump_routine(PGM_P const title, const char * const start, const uintptr_t size);
+ * void M100_dump_routine(FSTR_P const title, const char * const start, const uintptr_t size);
*
* Initial version by Roxy-3D
*/
@@ -182,8 +182,8 @@ inline int32_t count_test_bytes(const char * const start_free_memory) {
}
}
- void M100_dump_routine(PGM_P const title, const char * const start, const uintptr_t size) {
- SERIAL_ECHOLNPGM_P(title);
+ void M100_dump_routine(FSTR_P const title, const char * const start, const uintptr_t size) {
+ SERIAL_ECHOLNF(title);
//
// Round the start and end locations to produce full lines of output
//
@@ -196,8 +196,8 @@ inline int32_t count_test_bytes(const char * const start_free_memory) {
#endif // M100_FREE_MEMORY_DUMPER
-inline int check_for_free_memory_corruption(PGM_P const title) {
- SERIAL_ECHOPGM_P(title);
+inline int check_for_free_memory_corruption(FSTR_P const title) {
+ SERIAL_ECHOF(title);
char *start_free_memory = free_memory_start, *end_free_memory = free_memory_end;
int n = end_free_memory - start_free_memory;
@@ -217,7 +217,7 @@ inline int check_for_free_memory_corruption(PGM_P const title) {
// idle();
serial_delay(20);
#if ENABLED(M100_FREE_MEMORY_DUMPER)
- M100_dump_routine(PSTR(" Memory corruption detected with end_free_memory.
*
*/
+
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER)
diff --git a/Marlin/src/gcode/calibrate/M425.cpp b/Marlin/src/gcode/calibrate/M425.cpp
index 1d314a37d3..190af0f71b 100644
--- a/Marlin/src/gcode/calibrate/M425.cpp
+++ b/Marlin/src/gcode/calibrate/M425.cpp
@@ -114,7 +114,7 @@ void GcodeSuite::M425() {
}
void GcodeSuite::M425_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_BACKLASH_COMPENSATION));
+ report_heading_etc(forReplay, F(STR_BACKLASH_COMPENSATION));
SERIAL_ECHOLNPGM_P(
PSTR(" M425 F"), backlash.get_correction()
#ifdef BACKLASH_SMOOTHING_MM
diff --git a/Marlin/src/gcode/calibrate/M48.cpp b/Marlin/src/gcode/calibrate/M48.cpp
index 9db90c76ac..913ffe30d4 100644
--- a/Marlin/src/gcode/calibrate/M48.cpp
+++ b/Marlin/src/gcode/calibrate/M48.cpp
@@ -79,7 +79,7 @@ void GcodeSuite::M48() {
};
if (!probe.can_reach(test_position)) {
- ui.set_status_P(GET_TEXT(MSG_M48_OUT_OF_BOUNDS), 99);
+ ui.set_status(GET_TEXT_F(MSG_M48_OUT_OF_BOUNDS), 99);
SERIAL_ECHOLNPGM("? (X,Y) out of bounds.");
return;
}
@@ -144,7 +144,7 @@ void GcodeSuite::M48() {
LOOP_L_N(n, n_samples) {
#if HAS_STATUS_MESSAGE
// Display M48 progress in the status bar
- ui.status_printf_P(0, PSTR(S_FMT ": %d/%d"), GET_TEXT(MSG_M48_POINT), int(n + 1), int(n_samples));
+ ui.status_printf(0, F(S_FMT ": %d/%d"), GET_TEXT(MSG_M48_POINT), int(n + 1), int(n_samples));
#endif
// When there are "legs" of movement move around the point before probing
@@ -260,7 +260,7 @@ void GcodeSuite::M48() {
#if HAS_STATUS_MESSAGE
// Display M48 results in the status bar
char sigma_str[8];
- ui.status_printf_P(0, PSTR(S_FMT ": %s"), GET_TEXT(MSG_M48_DEVIATION), dtostrf(sigma, 2, 6, sigma_str));
+ ui.status_printf(0, F(S_FMT ": %s"), GET_TEXT(MSG_M48_DEVIATION), dtostrf(sigma, 2, 6, sigma_str));
#endif
}
diff --git a/Marlin/src/gcode/calibrate/M665.cpp b/Marlin/src/gcode/calibrate/M665.cpp
index 09b5ec8d4e..aa21471b60 100644
--- a/Marlin/src/gcode/calibrate/M665.cpp
+++ b/Marlin/src/gcode/calibrate/M665.cpp
@@ -62,7 +62,7 @@
}
void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_DELTA_SETTINGS));
+ report_heading_etc(forReplay, F(STR_DELTA_SETTINGS));
SERIAL_ECHOLNPGM_P(
PSTR(" M665 L"), LINEAR_UNIT(delta_diagonal_rod)
, PSTR(" R"), LINEAR_UNIT(delta_radius)
@@ -132,7 +132,7 @@
}
void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_SCARA_SETTINGS " (" STR_SCARA_S TERN_(HAS_SCARA_OFFSET, " " STR_SCARA_P_T_Z) ")"));
+ report_heading_etc(forReplay, F(STR_SCARA_SETTINGS " (" STR_S_SEG_PER_SEC TERN_(HAS_SCARA_OFFSET, " " STR_SCARA_P_T_Z) ")"));
SERIAL_ECHOLNPGM_P(
PSTR(" M665 S"), segments_per_second
#if HAS_SCARA_OFFSET
@@ -143,6 +143,29 @@
);
}
+#elif ENABLED(POLARGRAPH)
+
+ #include "../../module/polargraph.h"
+
+ /**
+ * M665: Set POLARGRAPH settings
+ *
+ * Parameters:
+ *
+ * S[segments-per-second] - Segments-per-second
+ */
+ void GcodeSuite::M665() {
+ if (parser.seenval('S'))
+ segments_per_second = parser.value_float();
+ else
+ M665_report();
+ }
+
+ void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
+ report_heading_etc(forReplay, F(STR_POLARGRAPH_SETTINGS " (" STR_S_SEG_PER_SEC ")"));
+ SERIAL_ECHOLNPGM(" M665 S", segments_per_second);
+ }
+
#endif
#endif // IS_KINEMATIC
diff --git a/Marlin/src/gcode/calibrate/M666.cpp b/Marlin/src/gcode/calibrate/M666.cpp
index c4149c2352..15f8baf109 100644
--- a/Marlin/src/gcode/calibrate/M666.cpp
+++ b/Marlin/src/gcode/calibrate/M666.cpp
@@ -61,7 +61,7 @@
}
void GcodeSuite::M666_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
+ report_heading_etc(forReplay, F(STR_ENDSTOP_ADJUSTMENT));
SERIAL_ECHOLNPGM_P(
PSTR(" M666 X"), LINEAR_UNIT(delta_endstop_adj.a)
, SP_Y_STR, LINEAR_UNIT(delta_endstop_adj.b)
@@ -105,7 +105,7 @@
}
void GcodeSuite::M666_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
+ report_heading_etc(forReplay, F(STR_ENDSTOP_ADJUSTMENT));
SERIAL_ECHOPGM(" M666");
#if ENABLED(X_DUAL_ENDSTOPS)
SERIAL_ECHOLNPGM_P(SP_X_STR, LINEAR_UNIT(endstops.x2_endstop_adj));
diff --git a/Marlin/src/gcode/calibrate/M852.cpp b/Marlin/src/gcode/calibrate/M852.cpp
index c4361b89f3..b24a449652 100644
--- a/Marlin/src/gcode/calibrate/M852.cpp
+++ b/Marlin/src/gcode/calibrate/M852.cpp
@@ -92,7 +92,7 @@ void GcodeSuite::M852() {
}
void GcodeSuite::M852_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_SKEW_FACTOR));
+ report_heading_etc(forReplay, F(STR_SKEW_FACTOR));
SERIAL_ECHOPAIR_F(" M851 I", planner.skew_factor.xy, 6);
#if ENABLED(SKEW_CORRECTION_FOR_Z)
SERIAL_ECHOPAIR_F(" J", planner.skew_factor.xz, 6);
diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp
index 2880bd9943..7b7ce5e10d 100644
--- a/Marlin/src/gcode/config/M200-M205.cpp
+++ b/Marlin/src/gcode/config/M200-M205.cpp
@@ -76,7 +76,7 @@
void GcodeSuite::M200_report(const bool forReplay/*=true*/) {
if (!forReplay) {
- report_heading(forReplay, PSTR(STR_FILAMENT_SETTINGS), false);
+ report_heading(forReplay, F(STR_FILAMENT_SETTINGS), false);
if (!parser.volumetric_enabled) SERIAL_ECHOPGM(" (Disabled):");
SERIAL_EOL();
report_echo_start(forReplay);
@@ -133,7 +133,7 @@ void GcodeSuite::M201() {
}
void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_MAX_ACCELERATION));
+ report_heading_etc(forReplay, F(STR_MAX_ACCELERATION));
SERIAL_ECHOLNPGM_P(
LIST_N(DOUBLE(LINEAR_AXES),
PSTR(" M201 X"), LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS]),
@@ -178,7 +178,7 @@ void GcodeSuite::M203() {
}
void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_MAX_FEEDRATES));
+ report_heading_etc(forReplay, F(STR_MAX_FEEDRATES));
SERIAL_ECHOLNPGM_P(
LIST_N(DOUBLE(LINEAR_AXES),
PSTR(" M203 X"), LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS]),
@@ -224,7 +224,7 @@ void GcodeSuite::M204() {
}
void GcodeSuite::M204_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_ACCELERATION_P_R_T));
+ report_heading_etc(forReplay, F(STR_ACCELERATION_P_R_T));
SERIAL_ECHOLNPGM_P(
PSTR(" M204 P"), LINEAR_UNIT(planner.settings.acceleration)
, PSTR(" R"), LINEAR_UNIT(planner.settings.retract_acceleration)
@@ -285,7 +285,7 @@ void GcodeSuite::M205() {
}
void GcodeSuite::M205_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(
+ report_heading_etc(forReplay, F(
"Advanced (B S T"
TERN_(HAS_JUNCTION_DEVIATION, " J")
TERN_(HAS_CLASSIC_JERK, " X Y Z")
diff --git a/Marlin/src/gcode/config/M217.cpp b/Marlin/src/gcode/config/M217.cpp
index 11d8c43ef0..7576272a48 100644
--- a/Marlin/src/gcode/config/M217.cpp
+++ b/Marlin/src/gcode/config/M217.cpp
@@ -131,19 +131,19 @@ void GcodeSuite::M217() {
}
void GcodeSuite::M217_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_TOOL_CHANGING));
+ report_heading_etc(forReplay, F(STR_TOOL_CHANGING));
SERIAL_ECHOPGM(" M217");
#if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
SERIAL_ECHOPGM(" S", LINEAR_UNIT(toolchange_settings.swap_length));
SERIAL_ECHOPGM_P(SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
- SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
- SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed));
+ SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
+ SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed));
SERIAL_ECHOPGM(" R", LINEAR_UNIT(toolchange_settings.retract_speed),
- " U", LINEAR_UNIT(toolchange_settings.unretract_speed),
- " F", toolchange_settings.fan_speed,
- " G", toolchange_settings.fan_time);
+ " U", LINEAR_UNIT(toolchange_settings.unretract_speed),
+ " F", toolchange_settings.fan_speed,
+ " G", toolchange_settings.fan_time);
#if ENABLED(TOOLCHANGE_MIGRATION_FEATURE)
SERIAL_ECHOPGM(" A", migration.automode);
diff --git a/Marlin/src/gcode/config/M218.cpp b/Marlin/src/gcode/config/M218.cpp
index c95cd6c1b9..c39447a28d 100644
--- a/Marlin/src/gcode/config/M218.cpp
+++ b/Marlin/src/gcode/config/M218.cpp
@@ -57,7 +57,7 @@ void GcodeSuite::M218() {
}
void GcodeSuite::M218_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_HOTEND_OFFSETS));
+ report_heading_etc(forReplay, F(STR_HOTEND_OFFSETS));
LOOP_S_L_N(e, 1, HOTENDS) {
report_echo_start(forReplay);
SERIAL_ECHOPGM_P(
diff --git a/Marlin/src/gcode/config/M281.cpp b/Marlin/src/gcode/config/M281.cpp
index b6644eb4ab..b90de6be30 100644
--- a/Marlin/src/gcode/config/M281.cpp
+++ b/Marlin/src/gcode/config/M281.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../inc/MarlinConfig.h"
#if ENABLED(EDITABLE_SERVO_ANGLES)
@@ -54,7 +55,7 @@ void GcodeSuite::M281() {
}
void GcodeSuite::M281_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_SERVO_ANGLES));
+ report_heading_etc(forReplay, F(STR_SERVO_ANGLES));
LOOP_L_N(i, NUM_SERVOS) {
switch (i) {
default: break;
diff --git a/Marlin/src/gcode/config/M301.cpp b/Marlin/src/gcode/config/M301.cpp
index 19b438309c..fc9f1883d6 100644
--- a/Marlin/src/gcode/config/M301.cpp
+++ b/Marlin/src/gcode/config/M301.cpp
@@ -48,10 +48,10 @@
void GcodeSuite::M301() {
// multi-extruder PID patch: M301 updates or prints a single extruder's PID values
// default behavior (omitting E parameter) is to update for extruder 0 only
- int8_t e = parser.byteval('E', -1); // extruder being updated
+ int8_t e = E_TERN0(parser.byteval('E', -1)); // extruder being updated
if (!parser.seen("PID" TERN_(PID_EXTRUSION_SCALING, "CL") TERN_(PID_FAN_SCALING, "F")))
- return M301_report(true, e);
+ return M301_report(true E_OPTARG(e));
if (e == -1) e = 0;
@@ -78,8 +78,9 @@ void GcodeSuite::M301() {
SERIAL_ERROR_MSG(STR_INVALID_EXTRUDER);
}
-void GcodeSuite::M301_report(const bool forReplay/*=true*/, const int8_t eindex/*=-1*/) {
- report_heading(forReplay, PSTR(STR_HOTEND_PID));
+void GcodeSuite::M301_report(const bool forReplay/*=true*/ E_OPTARG(const int8_t eindex/*=-1*/)) {
+ report_heading(forReplay, F(STR_HOTEND_PID));
+ IF_DISABLED(HAS_MULTI_EXTRUDER, constexpr int8_t eindex = -1);
HOTEND_LOOP() {
if (e == eindex || eindex == -1) {
report_echo_start(forReplay);
diff --git a/Marlin/src/gcode/config/M302.cpp b/Marlin/src/gcode/config/M302.cpp
index 57c049e194..e271dcd469 100644
--- a/Marlin/src/gcode/config/M302.cpp
+++ b/Marlin/src/gcode/config/M302.cpp
@@ -55,7 +55,7 @@ void GcodeSuite::M302() {
// Report current state
SERIAL_ECHO_START();
SERIAL_ECHOPGM("Cold extrudes are ");
- SERIAL_ECHOPGM_P(thermalManager.allow_cold_extrude ? PSTR("en") : PSTR("dis"));
+ SERIAL_ECHOF(thermalManager.allow_cold_extrude ? F("en") : F("dis"));
SERIAL_ECHOLNPGM("abled (min temp ", thermalManager.extrude_min_temp, "C)");
}
}
diff --git a/Marlin/src/gcode/config/M304.cpp b/Marlin/src/gcode/config/M304.cpp
index 05ee4bad80..4bd415db1e 100644
--- a/Marlin/src/gcode/config/M304.cpp
+++ b/Marlin/src/gcode/config/M304.cpp
@@ -42,7 +42,7 @@ void GcodeSuite::M304() {
}
void GcodeSuite::M304_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_BED_PID));
+ report_heading_etc(forReplay, F(STR_BED_PID));
SERIAL_ECHO_MSG(
" M304 P", thermalManager.temp_bed.pid.Kp
, " I", unscalePID_i(thermalManager.temp_bed.pid.Ki)
diff --git a/Marlin/src/gcode/config/M309.cpp b/Marlin/src/gcode/config/M309.cpp
index 01c4e62347..577023292e 100644
--- a/Marlin/src/gcode/config/M309.cpp
+++ b/Marlin/src/gcode/config/M309.cpp
@@ -42,7 +42,7 @@ void GcodeSuite::M309() {
}
void GcodeSuite::M309_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_CHAMBER_PID));
+ report_heading_etc(forReplay, F(STR_CHAMBER_PID));
SERIAL_ECHOLNPGM(
" M309 P", thermalManager.temp_chamber.pid.Kp
, " I", unscalePID_i(thermalManager.temp_chamber.pid.Ki)
diff --git a/Marlin/src/gcode/config/M43.cpp b/Marlin/src/gcode/config/M43.cpp
index b2455c4b60..2c778fd006 100644
--- a/Marlin/src/gcode/config/M43.cpp
+++ b/Marlin/src/gcode/config/M43.cpp
@@ -65,12 +65,12 @@ inline void toggle_pins() {
pin_t pin = GET_PIN_MAP_PIN_M43(i);
if (!VALID_PIN(pin)) continue;
if (M43_NEVER_TOUCH(i) || (!ignore_protection && pin_is_protected(pin))) {
- report_pin_state_extended(pin, ignore_protection, true, PSTR("Untouched "));
+ report_pin_state_extended(pin, ignore_protection, true, F("Untouched "));
SERIAL_EOL();
}
else {
watchdog_refresh();
- report_pin_state_extended(pin, ignore_protection, true, PSTR("Pulsing "));
+ report_pin_state_extended(pin, ignore_protection, true, F("Pulsing "));
#ifdef __STM32F1__
const auto prior_mode = _GET_MODE(i);
#else
@@ -112,7 +112,7 @@ inline void toggle_pins() {
}
SERIAL_EOL();
}
- SERIAL_ECHOLNPGM("Done.");
+ SERIAL_ECHOLNPGM(STR_DONE);
} // toggle_pins
@@ -303,7 +303,7 @@ void GcodeSuite::M43() {
if (parser.seen('E')) {
endstops.monitor_flag = parser.value_bool();
SERIAL_ECHOPGM("endstop monitor ");
- SERIAL_ECHOPGM_P(endstops.monitor_flag ? PSTR("en") : PSTR("dis"));
+ SERIAL_ECHOF(endstops.monitor_flag ? F("en") : F("dis"));
SERIAL_ECHOLNPGM("abled");
return;
}
@@ -344,8 +344,8 @@ void GcodeSuite::M43() {
#if HAS_RESUME_CONTINUE
KEEPALIVE_STATE(PAUSED_FOR_USER);
wait_for_user = true;
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, PSTR("M43 Wait Called"), CONTINUE_STR));
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(PSTR("M43 Wait Called")));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("M43 Wait Called"), FPSTR(CONTINUE_STR)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("M43 Wait Called")));
#endif
for (;;) {
diff --git a/Marlin/src/gcode/config/M92.cpp b/Marlin/src/gcode/config/M92.cpp
index ecc5e63a3c..54fe698f97 100644
--- a/Marlin/src/gcode/config/M92.cpp
+++ b/Marlin/src/gcode/config/M92.cpp
@@ -76,7 +76,7 @@ void GcodeSuite::M92() {
if (parser.seen('H') || wanted) {
const uint16_t argH = parser.ushortval('H'),
micro_steps = argH ?: Z_MICROSTEPS;
- const float z_full_step_mm = micro_steps * planner.steps_to_mm[Z_AXIS];
+ const float z_full_step_mm = micro_steps * planner.mm_per_step[Z_AXIS];
SERIAL_ECHO_START();
SERIAL_ECHOPGM("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm);
if (wanted) {
@@ -91,7 +91,7 @@ void GcodeSuite::M92() {
}
void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/) {
- report_heading_etc(forReplay, PSTR(STR_STEPS_PER_UNIT));
+ report_heading_etc(forReplay, F(STR_STEPS_PER_UNIT));
SERIAL_ECHOPGM_P(LIST_N(DOUBLE(LINEAR_AXES),
PSTR(" M92 X"), LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]),
SP_Y_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]),
diff --git a/Marlin/src/gcode/control/M108_M112_M410.cpp b/Marlin/src/gcode/control/M108_M112_M410.cpp
index 309c806c8f..39f9c04e19 100644
--- a/Marlin/src/gcode/control/M108_M112_M410.cpp
+++ b/Marlin/src/gcode/control/M108_M112_M410.cpp
@@ -40,7 +40,7 @@ void GcodeSuite::M108() {
* M112: Full Shutdown
*/
void GcodeSuite::M112() {
- kill(M112_KILL_STR, nullptr, true);
+ kill(FPSTR(M112_KILL_STR), nullptr, true);
}
/**
diff --git a/Marlin/src/gcode/control/M17_M18_M84.cpp b/Marlin/src/gcode/control/M17_M18_M84.cpp
index e6e0f033ec..4683786f1f 100644
--- a/Marlin/src/gcode/control/M17_M18_M84.cpp
+++ b/Marlin/src/gcode/control/M17_M18_M84.cpp
@@ -29,29 +29,186 @@
#include "../../feature/bedlevel/bedlevel.h"
#endif
-/**
- * M17: Enable stepper motors
- */
-void GcodeSuite::M17() {
- if (parser.seen_axis()) {
- LOGICAL_AXIS_CODE(
- if (TERN0(HAS_E_STEPPER_ENABLE, parser.seen_test('E'))) enable_e_steppers(),
- if (parser.seen_test('X')) ENABLE_AXIS_X(),
- if (parser.seen_test('Y')) ENABLE_AXIS_Y(),
- if (parser.seen_test('Z')) ENABLE_AXIS_Z(),
- if (parser.seen_test(AXIS4_NAME)) ENABLE_AXIS_I(),
- if (parser.seen_test(AXIS5_NAME)) ENABLE_AXIS_J(),
- if (parser.seen_test(AXIS6_NAME)) ENABLE_AXIS_K()
- );
+#define DEBUG_OUT ENABLED(MARLIN_DEV_MODE)
+#include "../../core/debug_out.h"
+#include "../../libs/hex_print.h"
+
+inline axis_flags_t selected_axis_bits() {
+ axis_flags_t selected{0};
+ #if HAS_EXTRUDERS
+ if (parser.seen('E')) {
+ if (E_TERN0(parser.has_value())) {
+ const uint8_t e = parser.value_int();
+ if (e < EXTRUDERS)
+ selected.bits = _BV(INDEX_OF_AXIS(E_AXIS, e));
+ }
+ else
+ selected.bits = selected.e_bits();
+ }
+ #endif
+ selected.bits |= LINEAR_AXIS_GANG(
+ (parser.seen_test('X') << X_AXIS),
+ | (parser.seen_test('Y') << Y_AXIS),
+ | (parser.seen_test('Z') << Z_AXIS),
+ | (parser.seen_test(AXIS4_NAME) << I_AXIS),
+ | (parser.seen_test(AXIS5_NAME) << J_AXIS),
+ | (parser.seen_test(AXIS6_NAME) << K_AXIS)
+ );
+ return selected;
+}
+
+// Enable specified axes and warn about other affected axes
+void do_enable(const axis_flags_t to_enable) {
+ const ena_mask_t was_enabled = stepper.axis_enabled.bits,
+ shall_enable = to_enable.bits & ~was_enabled;
+
+ DEBUG_ECHOLNPGM("Now Enabled: ", hex_word(stepper.axis_enabled.bits), " Enabling: ", hex_word(to_enable.bits), " | ", shall_enable);
+
+ if (!shall_enable) return; // All specified axes already enabled?
+
+ ena_mask_t also_enabled = 0; // Track steppers enabled due to overlap
+
+ // Enable all flagged axes
+ LOOP_LINEAR_AXES(a) {
+ if (TEST(shall_enable, a)) {
+ stepper.enable_axis(AxisEnum(a)); // Mark and enable the requested axis
+ DEBUG_ECHOLNPGM("Enabled ", axis_codes[a], " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... Enabled: ", hex_word(stepper.axis_enabled.bits));
+ also_enabled |= enable_overlap[a];
+ }
}
- else {
- LCD_MESSAGEPGM(MSG_NO_MOVE);
- enable_all_steppers();
+ #if HAS_EXTRUDERS
+ LOOP_L_N(e, EXTRUDERS) {
+ const uint8_t a = INDEX_OF_AXIS(E_AXIS, e);
+ if (TEST(shall_enable, a)) {
+ stepper.ENABLE_EXTRUDER(e);
+ DEBUG_ECHOLNPGM("Enabled E", AS_DIGIT(e), " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... ", hex_word(stepper.axis_enabled.bits));
+ also_enabled |= enable_overlap[a];
+ }
+ }
+ #endif
+
+ if ((also_enabled &= ~(shall_enable | was_enabled))) {
+ SERIAL_CHAR('(');
+ LOOP_LINEAR_AXES(a) if (TEST(also_enabled, a)) SERIAL_CHAR(axis_codes[a], ' ');
+ #if HAS_EXTRUDERS
+ #define _EN_ALSO(N) if (TEST(also_enabled, INDEX_OF_AXIS(E_AXIS, N))) SERIAL_CHAR('E', '0' + N, ' ');
+ REPEAT(EXTRUDERS, _EN_ALSO)
+ #endif
+ SERIAL_ECHOLNPGM("also enabled)");
}
+
+ DEBUG_ECHOLNPGM("Enabled Now: ", hex_word(stepper.axis_enabled.bits));
}
/**
- * M18, M84: Disable stepper motors
+ * M17: Enable stepper motor power for one or more axes.
+ * Print warnings for axes that share an ENABLE_PIN.
+ *
+ * Examples:
+ *
+ * M17 XZ ; Enable X and Z axes
+ * M17 E ; Enable all E steppers
+ * M17 E1 ; Enable just the E1 stepper
+ */
+void GcodeSuite::M17() {
+ if (parser.seen_axis()) {
+ if (any_enable_overlap())
+ do_enable(selected_axis_bits());
+ else {
+ #if HAS_EXTRUDERS
+ if (parser.seen('E')) {
+ if (parser.has_value()) {
+ const uint8_t e = parser.value_int();
+ if (e < EXTRUDERS) stepper.ENABLE_EXTRUDER(e);
+ }
+ else
+ stepper.enable_e_steppers();
+ }
+ #endif
+ LINEAR_AXIS_CODE(
+ if (parser.seen_test('X')) stepper.enable_axis(X_AXIS),
+ if (parser.seen_test('Y')) stepper.enable_axis(Y_AXIS),
+ if (parser.seen_test('Z')) stepper.enable_axis(Z_AXIS),
+ if (parser.seen_test(AXIS4_NAME)) stepper.enable_axis(I_AXIS),
+ if (parser.seen_test(AXIS5_NAME)) stepper.enable_axis(J_AXIS),
+ if (parser.seen_test(AXIS6_NAME)) stepper.enable_axis(K_AXIS)
+ );
+ }
+ }
+ else {
+ LCD_MESSAGE(MSG_NO_MOVE);
+ stepper.enable_all_steppers();
+ }
+}
+
+void try_to_disable(const axis_flags_t to_disable) {
+ ena_mask_t still_enabled = to_disable.bits & stepper.axis_enabled.bits;
+
+ DEBUG_ECHOLNPGM("Enabled: ", hex_word(stepper.axis_enabled.bits), " To Disable: ", hex_word(to_disable.bits), " | ", hex_word(still_enabled));
+
+ if (!still_enabled) return;
+
+ // Attempt to disable all flagged axes
+ LOOP_LINEAR_AXES(a)
+ if (TEST(to_disable.bits, a)) {
+ DEBUG_ECHOPGM("Try to disable ", axis_codes[a], " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... ");
+ if (stepper.disable_axis(AxisEnum(a))) { // Mark the requested axis and request to disable
+ DEBUG_ECHOPGM("OK");
+ still_enabled &= ~(_BV(a) | enable_overlap[a]); // If actually disabled, clear one or more tracked bits
+ }
+ else
+ DEBUG_ECHOPGM("OVERLAP");
+ DEBUG_ECHOLNPGM(" ... still_enabled=", hex_word(still_enabled));
+ }
+ #if HAS_EXTRUDERS
+ LOOP_L_N(e, EXTRUDERS) {
+ const uint8_t a = INDEX_OF_AXIS(E_AXIS, e);
+ if (TEST(to_disable.bits, a)) {
+ DEBUG_ECHOPGM("Try to disable E", AS_DIGIT(e), " (", a, ") with overlap ", hex_word(enable_overlap[a]), " ... ");
+ if (stepper.DISABLE_EXTRUDER(e)) {
+ DEBUG_ECHOPGM("OK");
+ still_enabled &= ~(_BV(a) | enable_overlap[a]);
+ }
+ else
+ DEBUG_ECHOPGM("OVERLAP");
+ DEBUG_ECHOLNPGM(" ... still_enabled=", hex_word(still_enabled));
+ }
+ }
+ #endif
+
+ auto overlap_warning = [](const ena_mask_t axis_bits) {
+ SERIAL_ECHOPGM(" not disabled. Shared with");
+ LOOP_LINEAR_AXES(a) if (TEST(axis_bits, a)) SERIAL_CHAR(' ', axis_codes[a]);
+ #if HAS_EXTRUDERS
+ #define _EN_STILLON(N) if (TEST(axis_bits, INDEX_OF_AXIS(E_AXIS, N))) SERIAL_CHAR(' ', 'E', '0' + N);
+ REPEAT(EXTRUDERS, _EN_STILLON)
+ #endif
+ SERIAL_ECHOLNPGM(".");
+ };
+
+ // If any of the requested axes are still enabled, give a warning
+ LOOP_LINEAR_AXES(a) {
+ if (TEST(still_enabled, a)) {
+ SERIAL_CHAR(axis_codes[a]);
+ overlap_warning(stepper.axis_enabled.bits & enable_overlap[a]);
+ }
+ }
+ #if HAS_EXTRUDERS
+ LOOP_L_N(e, EXTRUDERS) {
+ const uint8_t a = INDEX_OF_AXIS(E_AXIS, e);
+ if (TEST(still_enabled, a)) {
+ SERIAL_CHAR('E', '0' + e);
+ overlap_warning(stepper.axis_enabled.bits & enable_overlap[a]);
+ }
+ }
+ #endif
+
+ DEBUG_ECHOLNPGM("Enabled Now: ", hex_word(stepper.axis_enabled.bits));
+}
+
+/**
+ * M18, M84: Disable stepper motor power for one or more axes.
+ * Print warnings for axes that share an ENABLE_PIN.
*/
void GcodeSuite::M18_M84() {
if (parser.seenval('S')) {
@@ -61,15 +218,26 @@ void GcodeSuite::M18_M84() {
else {
if (parser.seen_axis()) {
planner.synchronize();
- LOGICAL_AXIS_CODE(
- if (TERN0(HAS_E_STEPPER_ENABLE, parser.seen_test('E'))) disable_e_steppers(),
- if (parser.seen_test('X')) DISABLE_AXIS_X(),
- if (parser.seen_test('Y')) DISABLE_AXIS_Y(),
- if (parser.seen_test('Z')) DISABLE_AXIS_Z(),
- if (parser.seen_test(AXIS4_NAME)) DISABLE_AXIS_I(),
- if (parser.seen_test(AXIS5_NAME)) DISABLE_AXIS_J(),
- if (parser.seen_test(AXIS6_NAME)) DISABLE_AXIS_K()
- );
+ if (any_enable_overlap())
+ try_to_disable(selected_axis_bits());
+ else {
+ #if HAS_EXTRUDERS
+ if (parser.seen('E')) {
+ if (E_TERN0(parser.has_value()))
+ stepper.DISABLE_EXTRUDER(parser.value_int());
+ else
+ stepper.disable_e_steppers();
+ }
+ #endif
+ LINEAR_AXIS_CODE(
+ if (parser.seen_test('X')) stepper.disable_axis(X_AXIS),
+ if (parser.seen_test('Y')) stepper.disable_axis(Y_AXIS),
+ if (parser.seen_test('Z')) stepper.disable_axis(Z_AXIS),
+ if (parser.seen_test(AXIS4_NAME)) stepper.disable_axis(I_AXIS),
+ if (parser.seen_test(AXIS5_NAME)) stepper.disable_axis(J_AXIS),
+ if (parser.seen_test(AXIS6_NAME)) stepper.disable_axis(K_AXIS)
+ );
+ }
}
else
planner.finish_and_disable();
diff --git a/Marlin/src/gcode/control/M211.cpp b/Marlin/src/gcode/control/M211.cpp
index a837d79533..95ae052a7b 100644
--- a/Marlin/src/gcode/control/M211.cpp
+++ b/Marlin/src/gcode/control/M211.cpp
@@ -40,15 +40,15 @@ void GcodeSuite::M211() {
}
void GcodeSuite::M211_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_SOFT_ENDSTOPS));
+ report_heading_etc(forReplay, F(STR_SOFT_ENDSTOPS));
SERIAL_ECHOPGM(" M211 S", AS_DIGIT(soft_endstop._enabled), " ; ");
serialprintln_onoff(soft_endstop._enabled);
report_echo_start(forReplay);
const xyz_pos_t l_soft_min = soft_endstop.min.asLogical(),
l_soft_max = soft_endstop.max.asLogical();
- print_pos(l_soft_min, PSTR(STR_SOFT_MIN), PSTR(" "));
- print_pos(l_soft_max, PSTR(STR_SOFT_MAX));
+ print_pos(l_soft_min, F(STR_SOFT_MIN), F(" "));
+ print_pos(l_soft_max, F(STR_SOFT_MAX));
}
#endif // HAS_SOFTWARE_ENDSTOPS
diff --git a/Marlin/src/gcode/control/M280.cpp b/Marlin/src/gcode/control/M280.cpp
index 187c9a9b19..2a8e73eafb 100644
--- a/Marlin/src/gcode/control/M280.cpp
+++ b/Marlin/src/gcode/control/M280.cpp
@@ -26,22 +26,44 @@
#include "../gcode.h"
#include "../../module/servo.h"
+#include "../../module/planner.h"
/**
- * M280: Get or set servo position. P [S]
+ * M280: Get or set servo position.
+ * P - Servo index
+ * S - Angle to set, omit to read current angle, or use -1 to detach
+ *
+ * With POLARGRAPH:
+ * T - Duration of servo move
*/
void GcodeSuite::M280() {
- if (!parser.seen('P')) return;
+ if (!parser.seenval('P')) return;
+
+ TERN_(POLARGRAPH, planner.synchronize());
const int servo_index = parser.value_int();
if (WITHIN(servo_index, 0, NUM_SERVOS - 1)) {
- if (parser.seen('S')) {
- const int a = parser.value_int();
- if (a == -1)
- servo[servo_index].detach();
+ if (parser.seenval('S')) {
+ const int anew = parser.value_int();
+ if (anew >= 0) {
+ #if ENABLED(POLARGRAPH)
+ if (parser.seen('T')) { // (ms) Total duration of servo move
+ const int16_t t = constrain(parser.value_int(), 0, 10000);
+ const int aold = servo[servo_index].read();
+ millis_t now = millis();
+ const millis_t start = now, end = start + t;
+ while (PENDING(now, end)) {
+ safe_delay(50);
+ now = _MIN(millis(), end);
+ MOVE_SERVO(servo_index, LROUND(aold + (anew - aold) * (float(now - start) / t)));
+ }
+ }
+ #endif // POLARGRAPH
+ MOVE_SERVO(servo_index, anew);
+ }
else
- MOVE_SERVO(servo_index, a);
+ DETACH_SERVO(servo_index);
}
else
SERIAL_ECHO_MSG(" Servo ", servo_index, ": ", servo[servo_index].read());
diff --git a/Marlin/src/gcode/control/M282.cpp b/Marlin/src/gcode/control/M282.cpp
new file mode 100644
index 0000000000..e6f5ce7dcc
--- /dev/null
+++ b/Marlin/src/gcode/control/M282.cpp
@@ -0,0 +1,45 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(SERVO_DETACH_GCODE)
+
+#include "../gcode.h"
+#include "../../module/servo.h"
+
+/**
+ * M282: Detach Servo. P
+ */
+void GcodeSuite::M282() {
+
+ if (!parser.seenval('P')) return;
+
+ const int servo_index = parser.value_int();
+ if (WITHIN(servo_index, 0, NUM_SERVOS - 1))
+ DETACH_SERVO(servo_index);
+ else
+ SERIAL_ECHO_MSG("Servo ", servo_index, " out of range");
+
+}
+
+#endif // SERVO_DETACH_GCODE
diff --git a/Marlin/src/gcode/control/M605.cpp b/Marlin/src/gcode/control/M605.cpp
index 08efaab59d..788659e7e2 100644
--- a/Marlin/src/gcode/control/M605.cpp
+++ b/Marlin/src/gcode/control/M605.cpp
@@ -110,7 +110,7 @@
set_duplication_enabled(false);
#ifdef EVENT_GCODE_IDEX_AFTER_MODECHANGE
- gcode.process_subcommands_now_P(PSTR(EVENT_GCODE_IDEX_AFTER_MODECHANGE));
+ process_subcommands_now(F(EVENT_GCODE_IDEX_AFTER_MODECHANGE));
#endif
}
else if (!parser.seen('W')) // if no S or W parameter, the DXC mode gets reset to the user's default
diff --git a/Marlin/src/gcode/control/M80_M81.cpp b/Marlin/src/gcode/control/M80_M81.cpp
index 149613ee15..2a1b3b34b9 100644
--- a/Marlin/src/gcode/control/M80_M81.cpp
+++ b/Marlin/src/gcode/control/M80_M81.cpp
@@ -25,7 +25,7 @@
#include "../../module/temperature.h"
#include "../../module/planner.h" // for planner.finish_and_disable
#include "../../module/printcounter.h" // for print_job_timer.stop
-#include "../../lcd/marlinui.h" // for LCD_MESSAGEPGM_P
+#include "../../lcd/marlinui.h" // for LCD_MESSAGE_F
#include "../../inc/MarlinConfig.h"
@@ -48,7 +48,7 @@
// S: Report the current power supply state and exit
if (parser.seen('S')) {
- SERIAL_ECHOPGM_P(powerManager.psu_on ? PSTR("PS:1\n") : PSTR("PS:0\n"));
+ SERIAL_ECHOF(powerManager.psu_on ? F("PS:1\n") : F("PS:0\n"));
return;
}
@@ -95,5 +95,5 @@ void GcodeSuite::M81() {
powerManager.power_off_soon();
#endif
- LCD_MESSAGEPGM_P(PSTR(MACHINE_NAME " " STR_OFF "."));
+ LCD_MESSAGE_F(MACHINE_NAME " " STR_OFF ".");
}
diff --git a/Marlin/src/gcode/feature/L6470/M122.cpp b/Marlin/src/gcode/feature/L6470/M122.cpp
index 1e5b37e4b7..4a5629b049 100644
--- a/Marlin/src/gcode/feature/L6470/M122.cpp
+++ b/Marlin/src/gcode/feature/L6470/M122.cpp
@@ -47,10 +47,10 @@ inline void L6470_say_status(const L64XX_axis_t axis) {
}
#endif
SERIAL_ECHOPGM("\n...OUTPUT: ");
- SERIAL_ECHOPGM_P(sh.STATUS_AXIS & STATUS_HIZ ? PSTR("OFF") : PSTR("ON "));
+ SERIAL_ECHOF(sh.STATUS_AXIS & STATUS_HIZ ? F("OFF") : F("ON "));
SERIAL_ECHOPGM(" BUSY: "); echo_yes_no((sh.STATUS_AXIS & STATUS_BUSY) == 0);
SERIAL_ECHOPGM(" DIR: ");
- SERIAL_ECHOPGM_P((((sh.STATUS_AXIS & STATUS_DIR) >> 4) ^ L64xxManager.index_to_dir[axis]) ? PSTR("FORWARD") : PSTR("REVERSE"));
+ SERIAL_ECHOF((((sh.STATUS_AXIS & STATUS_DIR) >> 4) ^ L64xxManager.index_to_dir[axis]) ? F("FORWARD") : F("REVERSE"));
if (sh.STATUS_AXIS_LAYOUT == L6480_STATUS_LAYOUT) {
SERIAL_ECHOPGM(" Last Command: ");
if (sh.STATUS_AXIS & sh.STATUS_AXIS_WRONG_CMD) SERIAL_ECHOPGM("VALID");
@@ -67,7 +67,7 @@ inline void L6470_say_status(const L64XX_axis_t axis) {
SERIAL_ECHOPGM(" Last Command: ");
if (!(sh.STATUS_AXIS & sh.STATUS_AXIS_WRONG_CMD)) SERIAL_ECHOPGM("IN");
SERIAL_ECHOPGM("VALID ");
- SERIAL_ECHOPGM_P(sh.STATUS_AXIS & sh.STATUS_AXIS_NOTPERF_CMD ? PSTR("COMPLETED ") : PSTR("Not PERFORMED"));
+ SERIAL_ECHOF(sh.STATUS_AXIS & sh.STATUS_AXIS_NOTPERF_CMD ? F("COMPLETED ") : F("Not PERFORMED"));
SERIAL_ECHOPGM("\n...THERMAL: ", !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_SD) ? "SHUTDOWN " : !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_WRN) ? "WARNING " : "OK ");
}
SERIAL_ECHOPGM(" OVERCURRENT:"); echo_yes_no((sh.STATUS_AXIS & sh.STATUS_AXIS_OCD) == 0);
diff --git a/Marlin/src/gcode/feature/L6470/M906.cpp b/Marlin/src/gcode/feature/L6470/M906.cpp
index 2ab13f5b5d..a74365e84d 100644
--- a/Marlin/src/gcode/feature/L6470/M906.cpp
+++ b/Marlin/src/gcode/feature/L6470/M906.cpp
@@ -107,7 +107,7 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
SERIAL_ECHOPGM("...MicroSteps: ", MicroSteps,
" ADC_OUT: ", L6470_ADC_out);
SERIAL_ECHOPGM(" Vs_compensation: ");
- SERIAL_ECHOPGM_P((motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_EN_VSCOMP) ? PSTR("ENABLED ") : PSTR("DISABLED"));
+ SERIAL_ECHOF((motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_EN_VSCOMP) ? F("ENABLED ") : F("DISABLED"));
SERIAL_ECHOLNPGM(" Compensation coefficient: ~", comp_coef * 0.01f);
SERIAL_ECHOPGM("...KVAL_HOLD: ", motor.GetParam(L6470_KVAL_HOLD),
diff --git a/Marlin/src/gcode/feature/L6470/M916-918.cpp b/Marlin/src/gcode/feature/L6470/M916-918.cpp
index ad0a91111d..8d614603ed 100644
--- a/Marlin/src/gcode/feature/L6470/M916-918.cpp
+++ b/Marlin/src/gcode/feature/L6470/M916-918.cpp
@@ -138,10 +138,10 @@ void GcodeSuite::M916() {
do {
// turn the motor(s) both directions
sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(final_feedrate));
- gcode.process_subcommands_now_P(gcode_string);
+ process_subcommands_now(gcode_string);
sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_max), uint16_t(final_feedrate));
- gcode.process_subcommands_now_P(gcode_string);
+ process_subcommands_now(gcode_string);
// get the status after the motors have stopped
planner.synchronize();
@@ -266,10 +266,10 @@ void GcodeSuite::M917() {
DEBUG_ECHOLNPGM(" OCD threshold : ", (OCD_TH_val + 1) * 375);
sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(final_feedrate));
- gcode.process_subcommands_now_P(gcode_string);
+ process_subcommands_now(gcode_string);
sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_max), uint16_t(final_feedrate));
- gcode.process_subcommands_now_P(gcode_string);
+ process_subcommands_now(gcode_string);
planner.synchronize();
@@ -308,7 +308,7 @@ void GcodeSuite::M917() {
L64xxManager.set_param(axis_index[j], L6470_KVAL_HOLD, kval_hold);
}
DEBUG_ECHOLNPGM(".");
- gcode.reset_stepper_timeout(); // keep steppers powered
+ reset_stepper_timeout(); // keep steppers powered
watchdog_refresh();
safe_delay(5000);
status_composite_temp = 0;
@@ -615,10 +615,10 @@ void GcodeSuite::M918() {
DEBUG_ECHOLNPGM("...feedrate = ", current_feedrate);
sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(current_feedrate));
- gcode.process_subcommands_now_P(gcode_string);
+ process_subcommands_now(gcode_string);
sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_max), uint16_t(current_feedrate));
- gcode.process_subcommands_now_P(gcode_string);
+ process_subcommands_now(gcode_string);
planner.synchronize();
diff --git a/Marlin/src/gcode/feature/advance/M900.cpp b/Marlin/src/gcode/feature/advance/M900.cpp
index 4ed601bbe8..054ea3617f 100644
--- a/Marlin/src/gcode/feature/advance/M900.cpp
+++ b/Marlin/src/gcode/feature/advance/M900.cpp
@@ -145,7 +145,7 @@ void GcodeSuite::M900() {
}
void GcodeSuite::M900_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_LINEAR_ADVANCE));
+ report_heading(forReplay, F(STR_LINEAR_ADVANCE));
#if EXTRUDERS < 2
report_echo_start(forReplay);
SERIAL_ECHOLNPGM(" M900 K", planner.extruder_advance_K[0]);
diff --git a/Marlin/src/gcode/feature/clean/G12.cpp b/Marlin/src/gcode/feature/clean/G12.cpp
index b19932eb98..a0b87b1abc 100644
--- a/Marlin/src/gcode/feature/clean/G12.cpp
+++ b/Marlin/src/gcode/feature/clean/G12.cpp
@@ -50,7 +50,7 @@ void GcodeSuite::G12() {
#ifdef WIPE_SEQUENCE_COMMANDS
if (!parser.seen_any()) {
- gcode.process_subcommands_now_P(PSTR(WIPE_SEQUENCE_COMMANDS));
+ process_subcommands_now(F(WIPE_SEQUENCE_COMMANDS));
return;
}
#endif
diff --git a/Marlin/src/gcode/feature/controllerfan/M710.cpp b/Marlin/src/gcode/feature/controllerfan/M710.cpp
index eede16b5bd..b98d88845d 100644
--- a/Marlin/src/gcode/feature/controllerfan/M710.cpp
+++ b/Marlin/src/gcode/feature/controllerfan/M710.cpp
@@ -67,7 +67,7 @@ void GcodeSuite::M710() {
}
void GcodeSuite::M710_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_CONTROLLER_FAN));
+ report_heading_etc(forReplay, F(STR_CONTROLLER_FAN));
SERIAL_ECHOLNPGM(" M710"
" S", int(controllerFan.settings.active_speed),
" I", int(controllerFan.settings.idle_speed),
diff --git a/Marlin/src/gcode/feature/digipot/M907-M910.cpp b/Marlin/src/gcode/feature/digipot/M907-M910.cpp
index a0b5c48e82..757cffd473 100644
--- a/Marlin/src/gcode/feature/digipot/M907-M910.cpp
+++ b/Marlin/src/gcode/feature/digipot/M907-M910.cpp
@@ -100,7 +100,7 @@ void GcodeSuite::M907() {
#if HAS_MOTOR_CURRENT_SPI || HAS_MOTOR_CURRENT_PWM
void GcodeSuite::M907_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_STEPPER_MOTOR_CURRENTS));
+ report_heading_etc(forReplay, F(STR_STEPPER_MOTOR_CURRENTS));
#if HAS_MOTOR_CURRENT_PWM
SERIAL_ECHOLNPGM_P( // PWM-based has 3 values:
PSTR(" M907 X"), stepper.motor_current_setting[0] // X and Y
diff --git a/Marlin/src/gcode/feature/fwretract/G10_G11.cpp b/Marlin/src/gcode/feature/fwretract/G10_G11.cpp
index 35330fe0ac..1889f83d62 100644
--- a/Marlin/src/gcode/feature/fwretract/G10_G11.cpp
+++ b/Marlin/src/gcode/feature/fwretract/G10_G11.cpp
@@ -32,7 +32,7 @@
* G10 - Retract filament according to settings of M207
* TODO: Handle 'G10 P' for tool settings and 'G10 L' for workspace settings
*/
-void GcodeSuite::G10() { fwretract.retract(true OPTARG(HAS_MULTI_EXTRUDER, parser.boolval('S'))); }
+void GcodeSuite::G10() { fwretract.retract(true E_OPTARG(parser.boolval('S'))); }
/**
* G11 - Recover filament according to settings of M208
diff --git a/Marlin/src/gcode/feature/fwretract/M207-M209.cpp b/Marlin/src/gcode/feature/fwretract/M207-M209.cpp
index 040a09a8e0..173c2894dc 100644
--- a/Marlin/src/gcode/feature/fwretract/M207-M209.cpp
+++ b/Marlin/src/gcode/feature/fwretract/M207-M209.cpp
@@ -38,7 +38,7 @@
void GcodeSuite::M207() { fwretract.M207(); }
void GcodeSuite::M207_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_RETRACT_S_F_Z));
+ report_heading_etc(forReplay, F(STR_RETRACT_S_F_Z));
fwretract.M207_report();
}
@@ -53,7 +53,7 @@ void GcodeSuite::M207_report(const bool forReplay/*=true*/) {
void GcodeSuite::M208() { fwretract.M208(); }
void GcodeSuite::M208_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_RECOVER_S_F));
+ report_heading_etc(forReplay, F(STR_RECOVER_S_F));
fwretract.M208_report();
}
@@ -68,7 +68,7 @@ void GcodeSuite::M208_report(const bool forReplay/*=true*/) {
void GcodeSuite::M209() { fwretract.M209(); }
void GcodeSuite::M209_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_AUTO_RETRACT_S));
+ report_heading_etc(forReplay, F(STR_AUTO_RETRACT_S));
fwretract.M209_report();
}
diff --git a/Marlin/src/gcode/feature/leds/M150.cpp b/Marlin/src/gcode/feature/leds/M150.cpp
index 4d271007e5..45278fe1f5 100644
--- a/Marlin/src/gcode/feature/leds/M150.cpp
+++ b/Marlin/src/gcode/feature/leds/M150.cpp
@@ -56,10 +56,10 @@ void GcodeSuite::M150() {
#if ENABLED(NEOPIXEL_LED)
const int8_t index = parser.intval('I', -1);
#if ENABLED(NEOPIXEL2_SEPARATE)
- int8_t brightness, unit = parser.intval('S', -1);
+ int8_t brightness = neo.brightness(), unit = parser.intval('S', -1);
switch (unit) {
case -1: neo2.neoindex = index; // fall-thru
- case 0: neo.neoindex = index; brightness = neo.brightness(); break;
+ case 0: neo.neoindex = index; break;
case 1: neo2.neoindex = index; brightness = neo2.brightness(); break;
}
#else
diff --git a/Marlin/src/gcode/feature/network/M552-M554.cpp b/Marlin/src/gcode/feature/network/M552-M554.cpp
index 887e67f3bd..0973fb87bf 100644
--- a/Marlin/src/gcode/feature/network/M552-M554.cpp
+++ b/Marlin/src/gcode/feature/network/M552-M554.cpp
@@ -57,14 +57,14 @@ void MAC_report() {
// Display current values when the link is active,
// otherwise show the stored values
-void ip_report(const uint16_t cmd, PGM_P const post, const IPAddress &ipo) {
+void ip_report(const uint16_t cmd, FSTR_P const post, const IPAddress &ipo) {
SERIAL_CHAR('M'); SERIAL_ECHO(cmd); SERIAL_CHAR(' ');
LOOP_L_N(i, 4) {
SERIAL_ECHO(ipo[i]);
if (i < 3) SERIAL_CHAR('.');
}
SERIAL_ECHOPGM(" ; ");
- SERIAL_ECHOLNPGM_P(post);
+ SERIAL_ECHOLNF(post);
}
/**
@@ -98,7 +98,7 @@ void GcodeSuite::M552() {
}
void GcodeSuite::M552_report() {
- ip_report(552, PSTR("ip address"), Ethernet.linkStatus() == LinkON ? Ethernet.localIP() : ethernet.ip);
+ ip_report(552, F("ip address"), Ethernet.linkStatus() == LinkON ? Ethernet.localIP() : ethernet.ip);
}
/**
@@ -112,7 +112,7 @@ void GcodeSuite::M553() {
}
void GcodeSuite::M553_report() {
- ip_report(553, PSTR("subnet mask"), Ethernet.linkStatus() == LinkON ? Ethernet.subnetMask() : ethernet.subnet);
+ ip_report(553, F("subnet mask"), Ethernet.linkStatus() == LinkON ? Ethernet.subnetMask() : ethernet.subnet);
}
/**
@@ -126,7 +126,7 @@ void GcodeSuite::M554() {
}
void GcodeSuite::M554_report() {
- ip_report(554, PSTR("gateway"), Ethernet.linkStatus() == LinkON ? Ethernet.gatewayIP() : ethernet.gateway);
+ ip_report(554, F("gateway"), Ethernet.linkStatus() == LinkON ? Ethernet.gatewayIP() : ethernet.gateway);
}
#endif // HAS_ETHERNET
diff --git a/Marlin/src/gcode/feature/pause/G27.cpp b/Marlin/src/gcode/feature/pause/G27.cpp
index 3ce618d675..f61453e6fb 100644
--- a/Marlin/src/gcode/feature/pause/G27.cpp
+++ b/Marlin/src/gcode/feature/pause/G27.cpp
@@ -20,7 +20,6 @@
*
*/
-
#include "../../../inc/MarlinConfig.h"
#if ENABLED(NOZZLE_PARK_FEATURE)
diff --git a/Marlin/src/gcode/feature/pause/M603.cpp b/Marlin/src/gcode/feature/pause/M603.cpp
index ebb110d2e7..6689749cfb 100644
--- a/Marlin/src/gcode/feature/pause/M603.cpp
+++ b/Marlin/src/gcode/feature/pause/M603.cpp
@@ -65,7 +65,7 @@ void GcodeSuite::M603() {
}
void GcodeSuite::M603_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_FILAMENT_LOAD_UNLOAD));
+ report_heading(forReplay, F(STR_FILAMENT_LOAD_UNLOAD));
#if EXTRUDERS == 1
report_echo_start(forReplay);
diff --git a/Marlin/src/gcode/feature/powerloss/M1000.cpp b/Marlin/src/gcode/feature/powerloss/M1000.cpp
index 3ebb286b57..c086ca842c 100644
--- a/Marlin/src/gcode/feature/powerloss/M1000.cpp
+++ b/Marlin/src/gcode/feature/powerloss/M1000.cpp
@@ -44,10 +44,10 @@
void menu_job_recovery();
-inline void plr_error(PGM_P const prefix) {
+inline void plr_error(FSTR_P const prefix) {
#if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
DEBUG_ECHO_START();
- DEBUG_ECHOPGM_P(prefix);
+ DEBUG_ECHOF(prefix);
DEBUG_ECHOLNPGM(" Job Recovery Data");
#else
UNUSED(prefix);
@@ -91,7 +91,7 @@ void GcodeSuite::M1000() {
recovery.resume();
}
else
- plr_error(recovery.info.valid_head ? PSTR("No") : PSTR("Invalid"));
+ plr_error(recovery.info.valid_head ? F("No") : F("Invalid"));
}
diff --git a/Marlin/src/gcode/feature/powerloss/M413.cpp b/Marlin/src/gcode/feature/powerloss/M413.cpp
index 7c714dad25..0ccbfe6341 100644
--- a/Marlin/src/gcode/feature/powerloss/M413.cpp
+++ b/Marlin/src/gcode/feature/powerloss/M413.cpp
@@ -47,17 +47,17 @@ void GcodeSuite::M413() {
if (parser.seen("RL")) recovery.load();
if (parser.seen_test('W')) recovery.save(true);
if (parser.seen_test('P')) recovery.purge();
- if (parser.seen_test('D')) recovery.debug(PSTR("M413"));
+ if (parser.seen_test('D')) recovery.debug(F("M413"));
#if PIN_EXISTS(POWER_LOSS)
if (parser.seen_test('O')) recovery._outage();
#endif
- if (parser.seen_test('E')) SERIAL_ECHOPGM_P(recovery.exists() ? PSTR("PLR Exists\n") : PSTR("No PLR\n"));
- if (parser.seen_test('V')) SERIAL_ECHOPGM_P(recovery.valid() ? PSTR("Valid\n") : PSTR("Invalid\n"));
+ if (parser.seen_test('E')) SERIAL_ECHOF(recovery.exists() ? F("PLR Exists\n") : F("No PLR\n"));
+ if (parser.seen_test('V')) SERIAL_ECHOF(recovery.valid() ? F("Valid\n") : F("Invalid\n"));
#endif
}
void GcodeSuite::M413_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_POWER_LOSS_RECOVERY));
+ report_heading_etc(forReplay, F(STR_POWER_LOSS_RECOVERY));
SERIAL_ECHOPGM(" M413 S", AS_DIGIT(recovery.enabled), " ; ");
serialprintln_onoff(recovery.enabled);
}
diff --git a/Marlin/src/gcode/feature/runout/M412.cpp b/Marlin/src/gcode/feature/runout/M412.cpp
index bed08294ba..bcf1e9f1b1 100644
--- a/Marlin/src/gcode/feature/runout/M412.cpp
+++ b/Marlin/src/gcode/feature/runout/M412.cpp
@@ -67,8 +67,8 @@ void GcodeSuite::M412() {
}
void GcodeSuite::M412_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_FILAMENT_RUNOUT_SENSOR));
- SERIAL_ECHOLNPGM(
+ report_heading_etc(forReplay, F(STR_FILAMENT_RUNOUT_SENSOR));
+ SERIAL_ECHOPGM(
" M412 S", runout.enabled
#if HAS_FILAMENT_RUNOUT_DISTANCE
, " D", LINEAR_UNIT(runout.runout_distance())
diff --git a/Marlin/src/gcode/feature/trinamic/M569.cpp b/Marlin/src/gcode/feature/trinamic/M569.cpp
index 5cadd2d45e..2803c44592 100644
--- a/Marlin/src/gcode/feature/trinamic/M569.cpp
+++ b/Marlin/src/gcode/feature/trinamic/M569.cpp
@@ -32,7 +32,7 @@ template
void tmc_say_stealth_status(TMC &st) {
st.printLabel();
SERIAL_ECHOPGM(" driver mode:\t");
- SERIAL_ECHOLNPGM_P(st.get_stealthChop() ? PSTR("stealthChop") : PSTR("spreadCycle"));
+ SERIAL_ECHOLNF(st.get_stealthChop() ? F("stealthChop") : F("spreadCycle"));
}
template
void tmc_set_stealthChop(TMC &st, const bool enable) {
@@ -139,14 +139,14 @@ void GcodeSuite::M569() {
}
void GcodeSuite::M569_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_DRIVER_STEPPING_MODE));
+ report_heading(forReplay, F(STR_DRIVER_STEPPING_MODE));
- auto say_M569 = [](const bool forReplay, const char * const etc=nullptr, const bool eol=false) {
+ auto say_M569 = [](const bool forReplay, FSTR_P const etc=nullptr, const bool eol=false) {
if (!forReplay) SERIAL_ECHO_START();
SERIAL_ECHOPGM(" M569 S1");
if (etc) {
SERIAL_CHAR(' ');
- SERIAL_ECHOPGM_P(etc);
+ SERIAL_ECHOF(etc);
}
if (eol) SERIAL_EOL();
};
@@ -176,28 +176,28 @@ void GcodeSuite::M569_report(const bool forReplay/*=true*/) {
chop_z2 = TERN0(Z2_HAS_STEALTHCHOP, stepperZ2.get_stored_stealthChop());
if (chop_x2 || chop_y2 || chop_z2) {
- say_M569(forReplay, PSTR("I1"));
+ say_M569(forReplay, F("I1"));
if (chop_x2) SERIAL_ECHOPGM_P(SP_X_STR);
if (chop_y2) SERIAL_ECHOPGM_P(SP_Y_STR);
if (chop_z2) SERIAL_ECHOPGM_P(SP_Z_STR);
SERIAL_EOL();
}
- if (TERN0(Z3_HAS_STEALTHCHOP, stepperZ3.get_stored_stealthChop())) { say_M569(forReplay, PSTR("I2 Z"), true); }
- if (TERN0(Z4_HAS_STEALTHCHOP, stepperZ4.get_stored_stealthChop())) { say_M569(forReplay, PSTR("I3 Z"), true); }
+ if (TERN0(Z3_HAS_STEALTHCHOP, stepperZ3.get_stored_stealthChop())) { say_M569(forReplay, F("I2 Z"), true); }
+ if (TERN0(Z4_HAS_STEALTHCHOP, stepperZ4.get_stored_stealthChop())) { say_M569(forReplay, F("I3 Z"), true); }
- if (TERN0( I_HAS_STEALTHCHOP, stepperI.get_stored_stealthChop())) { say_M569(forReplay, SP_I_STR, true); }
- if (TERN0( J_HAS_STEALTHCHOP, stepperJ.get_stored_stealthChop())) { say_M569(forReplay, SP_J_STR, true); }
- if (TERN0( K_HAS_STEALTHCHOP, stepperK.get_stored_stealthChop())) { say_M569(forReplay, SP_K_STR, true); }
+ if (TERN0( I_HAS_STEALTHCHOP, stepperI.get_stored_stealthChop())) { say_M569(forReplay, FPSTR(SP_I_STR), true); }
+ if (TERN0( J_HAS_STEALTHCHOP, stepperJ.get_stored_stealthChop())) { say_M569(forReplay, FPSTR(SP_J_STR), true); }
+ if (TERN0( K_HAS_STEALTHCHOP, stepperK.get_stored_stealthChop())) { say_M569(forReplay, FPSTR(SP_K_STR), true); }
- if (TERN0(E0_HAS_STEALTHCHOP, stepperE0.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T0 E"), true); }
- if (TERN0(E1_HAS_STEALTHCHOP, stepperE1.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T1 E"), true); }
- if (TERN0(E2_HAS_STEALTHCHOP, stepperE2.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T2 E"), true); }
- if (TERN0(E3_HAS_STEALTHCHOP, stepperE3.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T3 E"), true); }
- if (TERN0(E4_HAS_STEALTHCHOP, stepperE4.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T4 E"), true); }
- if (TERN0(E5_HAS_STEALTHCHOP, stepperE5.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T5 E"), true); }
- if (TERN0(E6_HAS_STEALTHCHOP, stepperE6.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T6 E"), true); }
- if (TERN0(E7_HAS_STEALTHCHOP, stepperE7.get_stored_stealthChop())) { say_M569(forReplay, PSTR("T7 E"), true); }
+ if (TERN0(E0_HAS_STEALTHCHOP, stepperE0.get_stored_stealthChop())) { say_M569(forReplay, F("T0 E"), true); }
+ if (TERN0(E1_HAS_STEALTHCHOP, stepperE1.get_stored_stealthChop())) { say_M569(forReplay, F("T1 E"), true); }
+ if (TERN0(E2_HAS_STEALTHCHOP, stepperE2.get_stored_stealthChop())) { say_M569(forReplay, F("T2 E"), true); }
+ if (TERN0(E3_HAS_STEALTHCHOP, stepperE3.get_stored_stealthChop())) { say_M569(forReplay, F("T3 E"), true); }
+ if (TERN0(E4_HAS_STEALTHCHOP, stepperE4.get_stored_stealthChop())) { say_M569(forReplay, F("T4 E"), true); }
+ if (TERN0(E5_HAS_STEALTHCHOP, stepperE5.get_stored_stealthChop())) { say_M569(forReplay, F("T5 E"), true); }
+ if (TERN0(E6_HAS_STEALTHCHOP, stepperE6.get_stored_stealthChop())) { say_M569(forReplay, F("T6 E"), true); }
+ if (TERN0(E7_HAS_STEALTHCHOP, stepperE7.get_stored_stealthChop())) { say_M569(forReplay, F("T7 E"), true); }
}
#endif // HAS_STEALTHCHOP
diff --git a/Marlin/src/gcode/feature/trinamic/M906.cpp b/Marlin/src/gcode/feature/trinamic/M906.cpp
index 8877603c3a..74596831d3 100644
--- a/Marlin/src/gcode/feature/trinamic/M906.cpp
+++ b/Marlin/src/gcode/feature/trinamic/M906.cpp
@@ -199,14 +199,15 @@ void GcodeSuite::M906() {
}
void GcodeSuite::M906_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_STEPPER_DRIVER_CURRENT));
+ report_heading(forReplay, F(STR_STEPPER_DRIVER_CURRENT));
auto say_M906 = [](const bool forReplay) {
report_echo_start(forReplay);
SERIAL_ECHOPGM(" M906");
};
- #if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z)
+ #if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z) \
+ || AXIS_IS_TMC(I) || AXIS_IS_TMC(J) || AXIS_IS_TMC(K)
say_M906(forReplay);
#if AXIS_IS_TMC(X)
SERIAL_ECHOPGM_P(SP_X_STR, stepperX.getMilliamps());
@@ -217,6 +218,15 @@ void GcodeSuite::M906_report(const bool forReplay/*=true*/) {
#if AXIS_IS_TMC(Z)
SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ.getMilliamps());
#endif
+ #if AXIS_IS_TMC(I)
+ SERIAL_ECHOPGM_P(SP_I_STR, stepperI.getMilliamps());
+ #endif
+ #if AXIS_IS_TMC(J)
+ SERIAL_ECHOPGM_P(SP_J_STR, stepperJ.getMilliamps());
+ #endif
+ #if AXIS_IS_TMC(K)
+ SERIAL_ECHOPGM_P(SP_K_STR, stepperK.getMilliamps());
+ #endif
SERIAL_EOL();
#endif
@@ -239,25 +249,11 @@ void GcodeSuite::M906_report(const bool forReplay/*=true*/) {
say_M906(forReplay);
SERIAL_ECHOLNPGM(" I2 Z", stepperZ3.getMilliamps());
#endif
-
#if AXIS_IS_TMC(Z4)
say_M906(forReplay);
SERIAL_ECHOLNPGM(" I3 Z", stepperZ4.getMilliamps());
#endif
- #if AXIS_IS_TMC(I)
- say_M906(forReplay);
- SERIAL_ECHOLNPGM_P(SP_I_STR, stepperI.getMilliamps());
- #endif
- #if AXIS_IS_TMC(J)
- say_M906(forReplay);
- SERIAL_ECHOLNPGM_P(SP_J_STR, stepperJ.getMilliamps());
- #endif
- #if AXIS_IS_TMC(K)
- say_M906(forReplay);
- SERIAL_ECHOLNPGM_P(SP_K_STR, stepperK.getMilliamps());
- #endif
-
#if AXIS_IS_TMC(E0)
say_M906(forReplay);
SERIAL_ECHOLNPGM(" T0 E", stepperE0.getMilliamps());
diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
index 58702c603f..6e177960ef 100644
--- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
+++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
@@ -311,7 +311,7 @@
}
void GcodeSuite::M913_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_HYBRID_THRESHOLD));
+ report_heading(forReplay, F(STR_HYBRID_THRESHOLD));
auto say_M913 = [](const bool forReplay) {
report_echo_start(forReplay);
@@ -512,7 +512,7 @@
}
void GcodeSuite::M914_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_STALLGUARD_THRESHOLD));
+ report_heading(forReplay, F(STR_STALLGUARD_THRESHOLD));
auto say_M914 = [](const bool forReplay) {
report_echo_start(forReplay);
diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index e3b90b65b3..1bfb82622e 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -74,7 +74,7 @@ millis_t GcodeSuite::previous_move_ms = 0,
// Relative motion mode for each logical axis
static constexpr xyze_bool_t ar_init = AXIS_RELATIVE_MODES;
-uint8_t GcodeSuite::axis_relative = 0 LOGICAL_AXIS_GANG(
+axis_bits_t GcodeSuite::axis_relative = 0 LOGICAL_AXIS_GANG(
| (ar_init.e << REL_E),
| (ar_init.x << REL_X),
| (ar_init.y << REL_Y),
@@ -103,12 +103,12 @@ uint8_t GcodeSuite::axis_relative = 0 LOGICAL_AXIS_GANG(
#endif
void GcodeSuite::report_echo_start(const bool forReplay) { if (!forReplay) SERIAL_ECHO_START(); }
-void GcodeSuite::report_heading(const bool forReplay, PGM_P const pstr, const bool eol/*=true*/) {
+void GcodeSuite::report_heading(const bool forReplay, FSTR_P const fstr, const bool eol/*=true*/) {
if (forReplay) return;
- if (pstr) {
+ if (fstr) {
SERIAL_ECHO_START();
SERIAL_ECHOPGM("; ");
- SERIAL_ECHOPGM_P(pstr);
+ SERIAL_ECHOF(fstr);
}
if (eol) { SERIAL_CHAR(':'); SERIAL_EOL(); }
}
@@ -237,12 +237,12 @@ void GcodeSuite::dwell(millis_t time) {
#if ENABLED(G29_RETRY_AND_RECOVER)
void GcodeSuite::event_probe_recover() {
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, PSTR("G29 Retrying"), DISMISS_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_INFO, F("G29 Retrying"), FPSTR(DISMISS_STR)));
#ifdef ACTION_ON_G29_RECOVER
- host_action(PSTR(ACTION_ON_G29_RECOVER));
+ host_action(F(ACTION_ON_G29_RECOVER));
#endif
#ifdef G29_RECOVER_COMMANDS
- process_subcommands_now_P(PSTR(G29_RECOVER_COMMANDS));
+ process_subcommands_now(F(G29_RECOVER_COMMANDS));
#endif
}
@@ -252,16 +252,16 @@ void GcodeSuite::dwell(millis_t time) {
void GcodeSuite::event_probe_failure() {
#ifdef ACTION_ON_G29_FAILURE
- host_action(PSTR(ACTION_ON_G29_FAILURE));
+ host_action(F(ACTION_ON_G29_FAILURE));
#endif
#ifdef G29_FAILURE_COMMANDS
- process_subcommands_now_P(PSTR(G29_FAILURE_COMMANDS));
+ process_subcommands_now(F(G29_FAILURE_COMMANDS));
#endif
#if ENABLED(G29_HALT_ON_FAILURE)
#ifdef ACTION_ON_CANCEL
host_action_cancel();
#endif
- kill(GET_TEXT(MSG_LCD_PROBING_FAILED));
+ kill(GET_TEXT_F(MSG_LCD_PROBING_FAILED));
#endif
}
@@ -285,7 +285,7 @@ void GcodeSuite::dwell(millis_t time) {
TERN_(HOST_PROMPT_SUPPORT, host_action_prompt_end());
#ifdef G29_SUCCESS_COMMANDS
- process_subcommands_now_P(PSTR(G29_SUCCESS_COMMANDS));
+ process_subcommands_now(F(G29_SUCCESS_COMMANDS));
#endif
}
@@ -717,6 +717,9 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
#if ENABLED(EDITABLE_SERVO_ANGLES)
case 281: M281(); break; // M281: Set servo angles
#endif
+ #if ENABLED(SERVO_DETACH_GCODE)
+ case 282: M282(); break; // M282: Detach servo
+ #endif
#endif
#if ENABLED(BABYSTEPPING)
@@ -882,8 +885,8 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
case 605: M605(); break; // M605: Set Dual X Carriage movement mode
#endif
- #if ENABLED(DELTA)
- case 665: M665(); break; // M665: Set delta configurations
+ #if IS_KINEMATIC
+ case 665: M665(); break; // M665: Set Delta/SCARA parameters
#endif
#if ENABLED(DELTA) || HAS_EXTRA_ENDSTOPS
@@ -1064,7 +1067,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
}
#if ENABLED(M100_FREE_MEMORY_DUMPER)
- void M100_dump_routine(PGM_P const title, const char * const start, const uintptr_t size);
+ void M100_dump_routine(FSTR_P const title, const char * const start, const uintptr_t size);
#endif
/**
@@ -1083,7 +1086,7 @@ void GcodeSuite::process_next_command() {
SERIAL_ECHOLN(command.buffer);
#if ENABLED(M100_FREE_MEMORY_DUMPER)
SERIAL_ECHOPGM("slot:", queue.ring_buffer.index_r);
- M100_dump_routine(PSTR(" Command Queue:"), (const char*)&queue.ring_buffer, sizeof(queue.ring_buffer));
+ M100_dump_routine(F(" Command Queue:"), (const char*)&queue.ring_buffer, sizeof(queue.ring_buffer));
#endif
}
@@ -1097,7 +1100,11 @@ void GcodeSuite::process_next_command() {
* G-code "macros" to be called from within other G-code handlers.
*/
-void GcodeSuite::process_subcommands_now_P(PGM_P pgcode) {
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
+
+void GcodeSuite::process_subcommands_now(FSTR_P fgcode) {
+ PGM_P pgcode = FTOP(fgcode);
char * const saved_cmd = parser.command_ptr; // Save the parser state
for (;;) {
PGM_P const delim = strchr_P(pgcode, '\n'); // Get address of next newline
@@ -1113,6 +1120,8 @@ void GcodeSuite::process_subcommands_now_P(PGM_P pgcode) {
parser.parse(saved_cmd); // Restore the parser state
}
+#pragma GCC diagnostic pop
+
void GcodeSuite::process_subcommands_now(char * gcode) {
char * const saved_cmd = parser.command_ptr; // Save the parser state
for (;;) {
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 16cee3481d..21f0d3942f 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -192,6 +192,7 @@
* M261 - i2c Request Data (Requires EXPERIMENTAL_I2CBUS)
* M280 - Set servo position absolute: "M280 P S". (Requires servos)
* M281 - Set servo min|max position: "M281 P L U". (Requires EDITABLE_SERVO_ANGLES)
+ * M282 - Detach servo: "M282 P". (Requires SERVO_DETACH_GCODE)
* M290 - Babystepping (Requires BABYSTEPPING)
* M300 - Play beep sound S P
* M301 - Set PID parameters P I and D. (Requires PIDTEMP)
@@ -243,6 +244,7 @@
* M603 - Configure filament change: "M603 T U L". (Requires ADVANCED_PAUSE_FEATURE)
* M605 - Set Dual X-Carriage movement mode: "M605 S [X] [R]". (Requires DUAL_X_CARRIAGE)
* M665 - Set delta configurations: "M665 H L R S B X Y Z (Requires DELTA)
+ * Set SCARA configurations: "M665 S P T Z (Requires MORGAN_SCARA or MP_SCARA)
* M666 - Set/get offsets for delta (Requires DELTA) or dual endstops. (Requires [XYZ]_DUAL_ENDSTOPS)
* M672 - Set/Reset Duet Smart Effector's sensitivity. (Requires DUET_SMART_EFFECTOR and SMART_EFFECTOR_MOD_PIN)
* M701 - Load filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
@@ -325,7 +327,7 @@ extern const char G28_STR[];
class GcodeSuite {
public:
- static uint8_t axis_relative;
+ static axis_bits_t axis_relative;
static inline bool axis_is_relative(const AxisEnum a) {
#if HAS_EXTRUDERS
@@ -380,9 +382,9 @@ public:
}
static void report_echo_start(const bool forReplay);
- static void report_heading(const bool forReplay, PGM_P const pstr, const bool eol=true);
- static inline void report_heading_etc(const bool forReplay, PGM_P const pstr, const bool eol=true) {
- report_heading(forReplay, pstr, eol);
+ static void report_heading(const bool forReplay, FSTR_P const fstr, const bool eol=true);
+ static inline void report_heading_etc(const bool forReplay, FSTR_P const fstr, const bool eol=true) {
+ report_heading(forReplay, fstr, eol);
report_echo_start(forReplay);
}
static void say_units();
@@ -395,11 +397,11 @@ public:
static void process_next_command();
// Execute G-code in-place, preserving current G-code parameters
- static void process_subcommands_now_P(PGM_P pgcode);
+ static void process_subcommands_now(FSTR_P fgcode);
static void process_subcommands_now(char * gcode);
static inline void home_all_axes(const bool keep_leveling=false) {
- process_subcommands_now_P(keep_leveling ? G28_STR : TERN(CAN_SET_LEVELING_AFTER_G28, PSTR("G28L0"), G28_STR));
+ process_subcommands_now(keep_leveling ? FPSTR(G28_STR) : TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR)));
}
#if EITHER(HAS_AUTO_REPORTING, HOST_KEEPALIVE_FEATURE)
@@ -862,6 +864,9 @@ private:
static void M281();
static void M281_report(const bool forReplay=true);
#endif
+ #if ENABLED(SERVO_DETACH_GCODE)
+ static void M282();
+ #endif
#endif
#if ENABLED(BABYSTEPPING)
@@ -874,7 +879,7 @@ private:
#if ENABLED(PIDTEMP)
static void M301();
- static void M301_report(const bool forReplay=true, const int8_t eindex=-1);
+ static void M301_report(const bool forReplay=true E_OPTARG(const int8_t eindex=-1));
#endif
#if ENABLED(PREVENT_COLD_EXTRUSION)
diff --git a/Marlin/src/gcode/gcode_d.cpp b/Marlin/src/gcode/gcode_d.cpp
index 3baff46836..204455e65e 100644
--- a/Marlin/src/gcode/gcode_d.cpp
+++ b/Marlin/src/gcode/gcode_d.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../inc/MarlinConfigPre.h"
#if ENABLED(MARLIN_DEV_MODE)
@@ -57,7 +58,7 @@ void GcodeSuite::D(const int16_t dcode) {
break;
case 10:
- kill(PSTR("D10"), PSTR("KILL TEST"), parser.seen_test('P'));
+ kill(F("D10"), F("KILL TEST"), parser.seen_test('P'));
break;
case 1: {
diff --git a/Marlin/src/gcode/geometry/G17-G19.cpp b/Marlin/src/gcode/geometry/G17-G19.cpp
index 0154598ccb..fbac7470ca 100644
--- a/Marlin/src/gcode/geometry/G17-G19.cpp
+++ b/Marlin/src/gcode/geometry/G17-G19.cpp
@@ -29,10 +29,10 @@
inline void report_workspace_plane() {
SERIAL_ECHO_START();
SERIAL_ECHOPGM("Workspace Plane ");
- SERIAL_ECHOPGM_P(
- gcode.workspace_plane == GcodeSuite::PLANE_YZ ? PSTR("YZ\n")
- : gcode.workspace_plane == GcodeSuite::PLANE_ZX ? PSTR("ZX\n")
- : PSTR("XY\n")
+ SERIAL_ECHOF(
+ gcode.workspace_plane == GcodeSuite::PLANE_YZ ? F("YZ\n")
+ : gcode.workspace_plane == GcodeSuite::PLANE_ZX ? F("ZX\n")
+ : F("XY\n")
);
}
diff --git a/Marlin/src/gcode/geometry/M206_M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp
index 416b3f7634..131dbecf33 100644
--- a/Marlin/src/gcode/geometry/M206_M428.cpp
+++ b/Marlin/src/gcode/geometry/M206_M428.cpp
@@ -53,7 +53,7 @@ void GcodeSuite::M206() {
}
void GcodeSuite::M206_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_HOME_OFFSET));
+ report_heading_etc(forReplay, F(STR_HOME_OFFSET));
SERIAL_ECHOLNPGM_P(
#if IS_CARTESIAN
LIST_N(DOUBLE(LINEAR_AXES),
@@ -91,7 +91,7 @@ void GcodeSuite::M428() {
diff[i] = -current_position[i];
if (!WITHIN(diff[i], -20, 20)) {
SERIAL_ERROR_MSG(STR_ERR_M428_TOO_FAR);
- LCD_ALERTMESSAGEPGM_P(PSTR("Err: Too far!"));
+ LCD_ALERTMESSAGE_F("Err: Too far!");
BUZZ(200, 40);
return;
}
@@ -99,7 +99,7 @@ void GcodeSuite::M428() {
LOOP_LINEAR_AXES(i) set_home_offset((AxisEnum)i, diff[i]);
report_current_position();
- LCD_MESSAGEPGM(MSG_HOME_OFFSETS_APPLIED);
+ LCD_MESSAGE(MSG_HOME_OFFSETS_APPLIED);
BUZZ(100, 659);
BUZZ(100, 698);
}
diff --git a/Marlin/src/gcode/host/M115.cpp b/Marlin/src/gcode/host/M115.cpp
index 1c106977bf..8a9c409764 100644
--- a/Marlin/src/gcode/host/M115.cpp
+++ b/Marlin/src/gcode/host/M115.cpp
@@ -34,9 +34,9 @@
#endif
#if ENABLED(EXTENDED_CAPABILITIES_REPORT)
- static void cap_line(PGM_P const name, bool ena=false) {
+ static void cap_line(FSTR_P const name, bool ena=false) {
SERIAL_ECHOPGM("Cap:");
- SERIAL_ECHOPGM_P(name);
+ SERIAL_ECHOF(name);
SERIAL_CHAR(':', '0' + ena);
SERIAL_EOL();
}
@@ -68,101 +68,101 @@ void GcodeSuite::M115() {
serial_index_t port = queue.ring_buffer.command_port();
// PAREN_COMMENTS
- TERN_(PAREN_COMMENTS, cap_line(PSTR("PAREN_COMMENTS"), true));
+ TERN_(PAREN_COMMENTS, cap_line(F("PAREN_COMMENTS"), true));
// QUOTED_STRINGS
- TERN_(GCODE_QUOTED_STRINGS, cap_line(PSTR("QUOTED_STRINGS"), true));
+ TERN_(GCODE_QUOTED_STRINGS, cap_line(F("QUOTED_STRINGS"), true));
// SERIAL_XON_XOFF
- cap_line(PSTR("SERIAL_XON_XOFF"), ENABLED(SERIAL_XON_XOFF));
+ cap_line(F("SERIAL_XON_XOFF"), ENABLED(SERIAL_XON_XOFF));
// BINARY_FILE_TRANSFER (M28 B1)
- cap_line(PSTR("BINARY_FILE_TRANSFER"), ENABLED(BINARY_FILE_TRANSFER)); // TODO: Use SERIAL_IMPL.has_feature(port, SerialFeature::BinaryFileTransfer) once implemented
+ cap_line(F("BINARY_FILE_TRANSFER"), ENABLED(BINARY_FILE_TRANSFER)); // TODO: Use SERIAL_IMPL.has_feature(port, SerialFeature::BinaryFileTransfer) once implemented
// EEPROM (M500, M501)
- cap_line(PSTR("EEPROM"), ENABLED(EEPROM_SETTINGS));
+ cap_line(F("EEPROM"), ENABLED(EEPROM_SETTINGS));
// Volumetric Extrusion (M200)
- cap_line(PSTR("VOLUMETRIC"), DISABLED(NO_VOLUMETRICS));
+ cap_line(F("VOLUMETRIC"), DISABLED(NO_VOLUMETRICS));
// AUTOREPORT_POS (M154)
- cap_line(PSTR("AUTOREPORT_POS"), ENABLED(AUTO_REPORT_POSITION));
+ cap_line(F("AUTOREPORT_POS"), ENABLED(AUTO_REPORT_POSITION));
// AUTOREPORT_TEMP (M155)
- cap_line(PSTR("AUTOREPORT_TEMP"), ENABLED(AUTO_REPORT_TEMPERATURES));
+ cap_line(F("AUTOREPORT_TEMP"), ENABLED(AUTO_REPORT_TEMPERATURES));
// PROGRESS (M530 S L, M531 , M532 X L)
- cap_line(PSTR("PROGRESS"));
+ cap_line(F("PROGRESS"));
// Print Job timer M75, M76, M77
- cap_line(PSTR("PRINT_JOB"), true);
+ cap_line(F("PRINT_JOB"), true);
// AUTOLEVEL (G29)
- cap_line(PSTR("AUTOLEVEL"), ENABLED(HAS_AUTOLEVEL));
+ cap_line(F("AUTOLEVEL"), ENABLED(HAS_AUTOLEVEL));
// RUNOUT (M412, M600)
- cap_line(PSTR("RUNOUT"), ENABLED(FILAMENT_RUNOUT_SENSOR));
+ cap_line(F("RUNOUT"), ENABLED(FILAMENT_RUNOUT_SENSOR));
// Z_PROBE (G30)
- cap_line(PSTR("Z_PROBE"), ENABLED(HAS_BED_PROBE));
+ cap_line(F("Z_PROBE"), ENABLED(HAS_BED_PROBE));
// MESH_REPORT (M420 V)
- cap_line(PSTR("LEVELING_DATA"), ENABLED(HAS_LEVELING));
+ cap_line(F("LEVELING_DATA"), ENABLED(HAS_LEVELING));
// BUILD_PERCENT (M73)
- cap_line(PSTR("BUILD_PERCENT"), ENABLED(LCD_SET_PROGRESS_MANUALLY));
+ cap_line(F("BUILD_PERCENT"), ENABLED(LCD_SET_PROGRESS_MANUALLY));
// SOFTWARE_POWER (M80, M81)
- cap_line(PSTR("SOFTWARE_POWER"), ENABLED(PSU_CONTROL));
+ cap_line(F("SOFTWARE_POWER"), ENABLED(PSU_CONTROL));
// TOGGLE_LIGHTS (M355)
- cap_line(PSTR("TOGGLE_LIGHTS"), ENABLED(CASE_LIGHT_ENABLE));
- cap_line(PSTR("CASE_LIGHT_BRIGHTNESS"), TERN0(CASE_LIGHT_ENABLE, caselight.has_brightness()));
+ cap_line(F("TOGGLE_LIGHTS"), ENABLED(CASE_LIGHT_ENABLE));
+ cap_line(F("CASE_LIGHT_BRIGHTNESS"), TERN0(CASE_LIGHT_ENABLE, caselight.has_brightness()));
// EMERGENCY_PARSER (M108, M112, M410, M876)
- cap_line(PSTR("EMERGENCY_PARSER"), ENABLED(EMERGENCY_PARSER));
+ cap_line(F("EMERGENCY_PARSER"), ENABLED(EMERGENCY_PARSER));
// HOST ACTION COMMANDS (paused, resume, resumed, cancel, etc.)
- cap_line(PSTR("HOST_ACTION_COMMANDS"), ENABLED(HOST_ACTION_COMMANDS));
+ cap_line(F("HOST_ACTION_COMMANDS"), ENABLED(HOST_ACTION_COMMANDS));
// PROMPT SUPPORT (M876)
- cap_line(PSTR("PROMPT_SUPPORT"), ENABLED(HOST_PROMPT_SUPPORT));
+ cap_line(F("PROMPT_SUPPORT"), ENABLED(HOST_PROMPT_SUPPORT));
// SDCARD (M20, M23, M24, etc.)
- cap_line(PSTR("SDCARD"), ENABLED(SDSUPPORT));
+ cap_line(F("SDCARD"), ENABLED(SDSUPPORT));
// REPEAT (M808)
- cap_line(PSTR("REPEAT"), ENABLED(GCODE_REPEAT_MARKERS));
+ cap_line(F("REPEAT"), ENABLED(GCODE_REPEAT_MARKERS));
// SD_WRITE (M928, M28, M29)
- cap_line(PSTR("SD_WRITE"), ENABLED(SDSUPPORT) && DISABLED(SDCARD_READONLY));
+ cap_line(F("SD_WRITE"), ENABLED(SDSUPPORT) && DISABLED(SDCARD_READONLY));
// AUTOREPORT_SD_STATUS (M27 extension)
- cap_line(PSTR("AUTOREPORT_SD_STATUS"), ENABLED(AUTO_REPORT_SD_STATUS));
+ cap_line(F("AUTOREPORT_SD_STATUS"), ENABLED(AUTO_REPORT_SD_STATUS));
// LONG_FILENAME_HOST_SUPPORT (M33)
- cap_line(PSTR("LONG_FILENAME"), ENABLED(LONG_FILENAME_HOST_SUPPORT));
+ cap_line(F("LONG_FILENAME"), ENABLED(LONG_FILENAME_HOST_SUPPORT));
// THERMAL_PROTECTION
- cap_line(PSTR("THERMAL_PROTECTION"), ENABLED(THERMALLY_SAFE));
+ cap_line(F("THERMAL_PROTECTION"), ENABLED(THERMALLY_SAFE));
// MOTION_MODES (M80-M89)
- cap_line(PSTR("MOTION_MODES"), ENABLED(GCODE_MOTION_MODES));
+ cap_line(F("MOTION_MODES"), ENABLED(GCODE_MOTION_MODES));
// ARC_SUPPORT (G2-G3)
- cap_line(PSTR("ARCS"), ENABLED(ARC_SUPPORT));
+ cap_line(F("ARCS"), ENABLED(ARC_SUPPORT));
// BABYSTEPPING (M290)
- cap_line(PSTR("BABYSTEPPING"), ENABLED(BABYSTEPPING));
+ cap_line(F("BABYSTEPPING"), ENABLED(BABYSTEPPING));
// CHAMBER_TEMPERATURE (M141, M191)
- cap_line(PSTR("CHAMBER_TEMPERATURE"), ENABLED(HAS_HEATED_CHAMBER));
+ cap_line(F("CHAMBER_TEMPERATURE"), ENABLED(HAS_HEATED_CHAMBER));
// COOLER_TEMPERATURE (M143, M193)
- cap_line(PSTR("COOLER_TEMPERATURE"), ENABLED(HAS_COOLER));
+ cap_line(F("COOLER_TEMPERATURE"), ENABLED(HAS_COOLER));
// MEATPACK Compression
- cap_line(PSTR("MEATPACK"), SERIAL_IMPL.has_feature(port, SerialFeature::MeatPack));
+ cap_line(F("MEATPACK"), SERIAL_IMPL.has_feature(port, SerialFeature::MeatPack));
// Machine Geometry
#if ENABLED(M115_GEOMETRY_REPORT)
diff --git a/Marlin/src/gcode/host/M16.cpp b/Marlin/src/gcode/host/M16.cpp
index 1ac8580396..03e734daaa 100644
--- a/Marlin/src/gcode/host/M16.cpp
+++ b/Marlin/src/gcode/host/M16.cpp
@@ -33,7 +33,7 @@
void GcodeSuite::M16() {
if (strcmp_P(parser.string_arg, PSTR(MACHINE_NAME)))
- kill(GET_TEXT(MSG_KILL_EXPECTED_PRINTER));
+ kill(GET_TEXT_F(MSG_KILL_EXPECTED_PRINTER));
}
diff --git a/Marlin/src/gcode/host/M360.cpp b/Marlin/src/gcode/host/M360.cpp
index cec8df7542..b1b558b033 100644
--- a/Marlin/src/gcode/host/M360.cpp
+++ b/Marlin/src/gcode/host/M360.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../inc/MarlinConfig.h"
#if ENABLED(REPETIER_GCODE_M360)
@@ -42,9 +43,15 @@ static void config_line(PGM_P const name, const float val, PGM_P const pref=null
config_prefix(name, pref, ind);
SERIAL_ECHOLN(val);
}
+static void config_line(FSTR_P const name, const float val, FSTR_P const pref=nullptr, const int8_t ind=-1) {
+ config_line(FTOP(name), val, FTOP(pref) , ind);
+}
static void config_line_e(const int8_t e, PGM_P const name, const float val) {
config_line(name, val, PSTR("Extr."), e + 1);
}
+static void config_line_e(const int8_t e, FSTR_P const name, const float val) {
+ config_line_e(e, FTOP(name), val);
+}
/**
* M360: Report Firmware configuration
@@ -59,19 +66,19 @@ void GcodeSuite::M360() {
//
// Basics and Enabled items
//
- config_line(PSTR("Baudrate"), BAUDRATE);
- config_line(PSTR("InputBuffer"), MAX_CMD_SIZE);
- config_line(PSTR("PrintlineCache"), BUFSIZE);
- config_line(PSTR("MixingExtruder"), ENABLED(MIXING_EXTRUDER));
- config_line(PSTR("SDCard"), ENABLED(SDSUPPORT));
- config_line(PSTR("Fan"), ENABLED(HAS_FAN));
- config_line(PSTR("LCD"), ENABLED(HAS_DISPLAY));
- config_line(PSTR("SoftwarePowerSwitch"), 1);
- config_line(PSTR("SupportLocalFilamentchange"), ENABLED(ADVANCED_PAUSE_FEATURE));
- config_line(PSTR("CaseLights"), ENABLED(CASE_LIGHT_ENABLE));
- config_line(PSTR("ZProbe"), ENABLED(HAS_BED_PROBE));
- config_line(PSTR("Autolevel"), ENABLED(HAS_LEVELING));
- config_line(PSTR("EEPROM"), ENABLED(EEPROM_SETTINGS));
+ config_line(F("Baudrate"), BAUDRATE);
+ config_line(F("InputBuffer"), MAX_CMD_SIZE);
+ config_line(F("PrintlineCache"), BUFSIZE);
+ config_line(F("MixingExtruder"), ENABLED(MIXING_EXTRUDER));
+ config_line(F("SDCard"), ENABLED(SDSUPPORT));
+ config_line(F("Fan"), ENABLED(HAS_FAN));
+ config_line(F("LCD"), ENABLED(HAS_DISPLAY));
+ config_line(F("SoftwarePowerSwitch"), 1);
+ config_line(F("SupportLocalFilamentchange"), ENABLED(ADVANCED_PAUSE_FEATURE));
+ config_line(F("CaseLights"), ENABLED(CASE_LIGHT_ENABLE));
+ config_line(F("ZProbe"), ENABLED(HAS_BED_PROBE));
+ config_line(F("Autolevel"), ENABLED(HAS_LEVELING));
+ config_line(F("EEPROM"), ENABLED(EEPROM_SETTINGS));
//
// Homing Directions
@@ -86,7 +93,7 @@ void GcodeSuite::M360() {
//
#if HAS_CLASSIC_JERK
if (planner.max_jerk.x == planner.max_jerk.y)
- config_line(PSTR("XY"), planner.max_jerk.x, JERK_STR);
+ config_line(F("XY"), planner.max_jerk.x, FPSTR(JERK_STR));
else {
config_line(X_STR, planner.max_jerk.x, JERK_STR);
config_line(Y_STR, planner.max_jerk.y, JERK_STR);
@@ -97,21 +104,21 @@ void GcodeSuite::M360() {
//
// Firmware Retraction
//
- config_line(PSTR("SupportG10G11"), ENABLED(FWRETRACT));
+ config_line(F("SupportG10G11"), ENABLED(FWRETRACT));
#if ENABLED(FWRETRACT)
PGMSTR(RET_STR, "Retraction");
PGMSTR(UNRET_STR, "RetractionUndo");
PGMSTR(SPEED_STR, "Speed");
// M10 Retract with swap (long) moves
- config_line(PSTR("Length"), fwretract.settings.retract_length, RET_STR);
- config_line(SPEED_STR, fwretract.settings.retract_feedrate_mm_s, RET_STR);
- config_line(PSTR("ZLift"), fwretract.settings.retract_zraise, RET_STR);
- config_line(PSTR("LongLength"), fwretract.settings.swap_retract_length, RET_STR);
+ config_line(F("Length"), fwretract.settings.retract_length, FPSTR(RET_STR));
+ config_line(SPEED_STR, fwretract.settings.retract_feedrate_mm_s, RET_STR);
+ config_line(F("ZLift"), fwretract.settings.retract_zraise, FPSTR(RET_STR));
+ config_line(F("LongLength"), fwretract.settings.swap_retract_length, FPSTR(RET_STR));
// M11 Recover (undo) with swap (long) moves
- config_line(SPEED_STR, fwretract.settings.retract_recover_feedrate_mm_s, UNRET_STR);
- config_line(PSTR("ExtraLength"), fwretract.settings.retract_recover_extra, UNRET_STR);
- config_line(PSTR("ExtraLongLength"), fwretract.settings.swap_retract_recover_extra, UNRET_STR);
- config_line(PSTR("LongSpeed"), fwretract.settings.swap_retract_recover_feedrate_mm_s, UNRET_STR);
+ config_line(SPEED_STR, fwretract.settings.retract_recover_feedrate_mm_s, UNRET_STR);
+ config_line(F("ExtraLength"), fwretract.settings.retract_recover_extra, FPSTR(UNRET_STR));
+ config_line(F("ExtraLongLength"), fwretract.settings.swap_retract_recover_extra, FPSTR(UNRET_STR));
+ config_line(F("LongSpeed"), fwretract.settings.swap_retract_recover_feedrate_mm_s, FPSTR(UNRET_STR));
#endif
//
@@ -162,22 +169,22 @@ void GcodeSuite::M360() {
//
// Heated Bed
//
- config_line(PSTR("HeatedBed"), ENABLED(HAS_HEATED_BED));
+ config_line(F("HeatedBed"), ENABLED(HAS_HEATED_BED));
#if HAS_HEATED_BED
- config_line(PSTR("MaxBedTemp"), BED_MAX_TARGET);
+ config_line(F("MaxBedTemp"), BED_MAX_TARGET);
#endif
//
// Per-Extruder settings
//
- config_line(PSTR("NumExtruder"), EXTRUDERS);
+ config_line(F("NumExtruder"), EXTRUDERS);
#if HAS_EXTRUDERS
LOOP_L_N(e, EXTRUDERS) {
config_line_e(e, JERK_STR, TERN(HAS_LINEAR_E_JERK, planner.max_e_jerk[E_INDEX_N(e)], TERN(HAS_CLASSIC_JERK, planner.max_jerk.e, DEFAULT_EJERK)));
- config_line_e(e, PSTR("MaxSpeed"), planner.settings.max_feedrate_mm_s[E_AXIS_N(e)]);
- config_line_e(e, PSTR("Acceleration"), planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(e)]);
- config_line_e(e, PSTR("Diameter"), TERN(NO_VOLUMETRICS, DEFAULT_NOMINAL_FILAMENT_DIA, planner.filament_size[e]));
- config_line_e(e, PSTR("MaxTemp"), thermalManager.hotend_maxtemp[e]);
+ config_line_e(e, F("MaxSpeed"), planner.settings.max_feedrate_mm_s[E_AXIS_N(e)]);
+ config_line_e(e, F("Acceleration"), planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(e)]);
+ config_line_e(e, F("Diameter"), TERN(NO_VOLUMETRICS, DEFAULT_NOMINAL_FILAMENT_DIA, planner.filament_size[e]));
+ config_line_e(e, F("MaxTemp"), thermalManager.hotend_maxtemp[e]);
}
#endif
}
diff --git a/Marlin/src/gcode/host/M876.cpp b/Marlin/src/gcode/host/M876.cpp
index 0d8256cf08..00efb013d2 100644
--- a/Marlin/src/gcode/host/M876.cpp
+++ b/Marlin/src/gcode/host/M876.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../inc/MarlinConfig.h"
#if ENABLED(HOST_PROMPT_SUPPORT) && DISABLED(EMERGENCY_PARSER)
diff --git a/Marlin/src/gcode/lcd/M0_M1.cpp b/Marlin/src/gcode/lcd/M0_M1.cpp
index 9ba6ed5fc7..239366fec8 100644
--- a/Marlin/src/gcode/lcd/M0_M1.cpp
+++ b/Marlin/src/gcode/lcd/M0_M1.cpp
@@ -59,7 +59,7 @@ void GcodeSuite::M0_M1() {
if (parser.string_arg)
ui.set_status(parser.string_arg, true);
else {
- LCD_MESSAGEPGM(MSG_USERWAIT);
+ LCD_MESSAGE(MSG_USERWAIT);
#if ENABLED(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0
ui.reset_progress_bar_timeout();
#endif
@@ -67,11 +67,14 @@ void GcodeSuite::M0_M1() {
#elif ENABLED(EXTENSIBLE_UI)
if (parser.string_arg)
- ExtUI::onUserConfirmRequired(parser.string_arg); // Can this take an SRAM string??
+ ExtUI::onUserConfirmRequired(parser.string_arg); // String in an SRAM buffer
else
- ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_USERWAIT));
+ ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_USERWAIT));
#elif ENABLED(DWIN_CREALITY_LCD_ENHANCED)
- DWIN_Popup_Confirm(ICON_BLTouch, parser.string_arg ?: GET_TEXT(MSG_STOPPED), GET_TEXT(MSG_USERWAIT));
+ if (parser.string_arg)
+ DWIN_Popup_Confirm(ICON_BLTouch, parser.string_arg, GET_TEXT_F(MSG_USERWAIT));
+ else
+ DWIN_Popup_Confirm(ICON_BLTouch, GET_TEXT_F(MSG_STOPPED), GET_TEXT_F(MSG_USERWAIT));
#else
if (parser.string_arg) {
@@ -81,7 +84,7 @@ void GcodeSuite::M0_M1() {
#endif
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, parser.codenum ? PSTR("M1 Stop") : PSTR("M0 Stop"), CONTINUE_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, parser.codenum ? F("M1 Stop") : F("M0 Stop"), FPSTR(CONTINUE_STR)));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(ms));
diff --git a/Marlin/src/gcode/lcd/M145.cpp b/Marlin/src/gcode/lcd/M145.cpp
index 77fd425763..2dba238d3f 100644
--- a/Marlin/src/gcode/lcd/M145.cpp
+++ b/Marlin/src/gcode/lcd/M145.cpp
@@ -61,7 +61,7 @@ void GcodeSuite::M145() {
}
void GcodeSuite::M145_report(const bool forReplay/*=true*/) {
- report_heading(forReplay, PSTR(STR_MATERIAL_HEATUP));
+ report_heading(forReplay, F(STR_MATERIAL_HEATUP));
LOOP_L_N(i, PREHEAT_COUNT) {
report_echo_start(forReplay);
SERIAL_ECHOLNPGM_P(
diff --git a/Marlin/src/gcode/lcd/M250.cpp b/Marlin/src/gcode/lcd/M250.cpp
index 618e3d5d6c..25e4232788 100644
--- a/Marlin/src/gcode/lcd/M250.cpp
+++ b/Marlin/src/gcode/lcd/M250.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../inc/MarlinConfig.h"
#if HAS_LCD_CONTRAST
@@ -31,13 +32,13 @@
*/
void GcodeSuite::M250() {
if (parser.seenval('C'))
- ui.set_contrast(parser.value_int());
+ ui.set_contrast(parser.value_byte());
else
M250_report();
}
void GcodeSuite::M250_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_LCD_CONTRAST));
+ report_heading_etc(forReplay, F(STR_LCD_CONTRAST));
SERIAL_ECHOLNPGM(" M250 C", ui.contrast);
}
diff --git a/Marlin/src/gcode/lcd/M256.cpp b/Marlin/src/gcode/lcd/M256.cpp
index ee187cc2e1..9842cc2583 100644
--- a/Marlin/src/gcode/lcd/M256.cpp
+++ b/Marlin/src/gcode/lcd/M256.cpp
@@ -37,7 +37,7 @@ void GcodeSuite::M256() {
}
void GcodeSuite::M256_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_LCD_BRIGHTNESS));
+ report_heading_etc(forReplay, F(STR_LCD_BRIGHTNESS));
SERIAL_ECHOLNPGM(" M256 B", ui.brightness);
}
diff --git a/Marlin/src/gcode/lcd/M414.cpp b/Marlin/src/gcode/lcd/M414.cpp
index 0eac980e0f..9aa49ea3c2 100644
--- a/Marlin/src/gcode/lcd/M414.cpp
+++ b/Marlin/src/gcode/lcd/M414.cpp
@@ -44,7 +44,7 @@ void GcodeSuite::M414() {
}
void GcodeSuite::M414_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_UI_LANGUAGE));
+ report_heading_etc(forReplay, F(STR_UI_LANGUAGE));
SERIAL_ECHOLNPGM(" M414 S", ui.language);
}
diff --git a/Marlin/src/gcode/motion/G2_G3.cpp b/Marlin/src/gcode/motion/G2_G3.cpp
index 33167d9dff..0c7bdc7a3a 100644
--- a/Marlin/src/gcode/motion/G2_G3.cpp
+++ b/Marlin/src/gcode/motion/G2_G3.cpp
@@ -403,7 +403,7 @@ void GcodeSuite::G2_G3(const bool clockwise) {
else {
#if ENABLED(CNC_WORKSPACE_PLANES)
char achar, bchar;
- switch (gcode.workspace_plane) {
+ switch (workspace_plane) {
default:
case GcodeSuite::PLANE_XY: achar = 'I'; bchar = 'J'; break;
case GcodeSuite::PLANE_YZ: achar = 'J'; bchar = 'K'; break;
diff --git a/Marlin/src/gcode/motion/G4.cpp b/Marlin/src/gcode/motion/G4.cpp
index 724ed7f1ca..df3f5b010e 100644
--- a/Marlin/src/gcode/motion/G4.cpp
+++ b/Marlin/src/gcode/motion/G4.cpp
@@ -38,7 +38,7 @@ void GcodeSuite::G4() {
SERIAL_ECHOLNPGM(STR_Z_MOVE_COMP);
#endif
- if (!ui.has_status()) LCD_MESSAGEPGM(MSG_DWELL);
+ if (!ui.has_status()) LCD_MESSAGE(MSG_DWELL);
dwell(dwell_ms);
}
diff --git a/Marlin/src/gcode/motion/G6.cpp b/Marlin/src/gcode/motion/G6.cpp
index 168dc28abd..a57a293e06 100644
--- a/Marlin/src/gcode/motion/G6.cpp
+++ b/Marlin/src/gcode/motion/G6.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../inc/MarlinConfig.h"
#if ENABLED(DIRECT_STEPPING)
diff --git a/Marlin/src/gcode/parser.h b/Marlin/src/gcode/parser.h
index ad550765ec..83fda54836 100644
--- a/Marlin/src/gcode/parser.h
+++ b/Marlin/src/gcode/parser.h
@@ -351,8 +351,8 @@ public:
static inline char temp_units_code() {
return input_temp_units == TEMPUNIT_K ? 'K' : input_temp_units == TEMPUNIT_F ? 'F' : 'C';
}
- static inline PGM_P temp_units_name() {
- return input_temp_units == TEMPUNIT_K ? PSTR("Kelvin") : input_temp_units == TEMPUNIT_F ? PSTR("Fahrenheit") : PSTR("Celsius");
+ static inline FSTR_P temp_units_name() {
+ return input_temp_units == TEMPUNIT_K ? F("Kelvin") : input_temp_units == TEMPUNIT_F ? F("Fahrenheit") : F("Celsius");
}
#if HAS_LCD_MENU && DISABLED(DISABLE_M503)
diff --git a/Marlin/src/gcode/probe/M851.cpp b/Marlin/src/gcode/probe/M851.cpp
index 5518117946..e66392acb4 100644
--- a/Marlin/src/gcode/probe/M851.cpp
+++ b/Marlin/src/gcode/probe/M851.cpp
@@ -84,7 +84,7 @@ void GcodeSuite::M851() {
}
void GcodeSuite::M851_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_Z_PROBE_OFFSET));
+ report_heading_etc(forReplay, F(STR_Z_PROBE_OFFSET));
SERIAL_ECHOPGM_P(
#if HAS_PROBE_XY_OFFSET
PSTR(" M851 X"), LINEAR_UNIT(probe.offset_xy.x),
@@ -94,7 +94,7 @@ void GcodeSuite::M851_report(const bool forReplay/*=true*/) {
PSTR(" M851 X0 Y0 Z")
#endif
, LINEAR_UNIT(probe.offset.z)
- , " ;"
+ , PSTR(" ;")
);
say_units();
}
diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp
index 07d7c536a6..cc072e51a1 100644
--- a/Marlin/src/gcode/queue.cpp
+++ b/Marlin/src/gcode/queue.cpp
@@ -126,7 +126,7 @@ bool GCodeQueue::RingBuffer::enqueue(const char *cmd, bool skip_ok/*=true*/
* Enqueue with Serial Echo
* Return true if the command was consumed
*/
-bool GCodeQueue::enqueue_one(const char *cmd) {
+bool GCodeQueue::enqueue_one(const char * const cmd) {
//SERIAL_ECHOLNPGM("enqueue_one(\"", cmd, "\")");
if (*cmd == 0 || ISEOL(*cmd)) return true;
@@ -195,15 +195,15 @@ bool GCodeQueue::process_injected_command() {
* Enqueue and return only when commands are actually enqueued.
* Never call this from a G-code handler!
*/
-void GCodeQueue::enqueue_one_now(const char *cmd) { while (!enqueue_one(cmd)) idle(); }
+void GCodeQueue::enqueue_one_now(const char * const cmd) { while (!enqueue_one(cmd)) idle(); }
/**
* Attempt to enqueue a single G-code command
* and return 'true' if successful.
*/
-bool GCodeQueue::enqueue_one_P(PGM_P const pgcode) {
+bool GCodeQueue::enqueue_one(FSTR_P const fgcode) {
size_t i = 0;
- PGM_P p = pgcode;
+ PGM_P p = FTOP(fgcode);
char c;
while ((c = pgm_read_byte(&p[i])) && c != '\n') i++;
char cmd[i + 1];
@@ -260,8 +260,7 @@ void GCodeQueue::RingBuffer::ok_to_send() {
while (NUMERIC_SIGNED(*p))
SERIAL_CHAR(*p++);
}
- SERIAL_ECHOPGM_P(SP_P_STR, planner.moves_free(),
- SP_B_STR, BUFSIZE - length);
+ SERIAL_ECHOPGM_P(SP_P_STR, planner.moves_free(), SP_B_STR, BUFSIZE - length);
#endif
SERIAL_EOL();
}
@@ -303,10 +302,10 @@ static bool serial_data_available(serial_index_t index) {
inline int read_serial(const serial_index_t index) { return SERIAL_IMPL.read(index); }
-void GCodeQueue::gcode_line_error(PGM_P const err, const serial_index_t serial_ind) {
+void GCodeQueue::gcode_line_error(FSTR_P const ferr, const serial_index_t serial_ind) {
PORT_REDIRECT(SERIAL_PORTMASK(serial_ind)); // Reply to the serial port that sent the command
SERIAL_ERROR_START();
- SERIAL_ECHOLNPGM_P(err, serial_state[serial_ind.index].last_N);
+ SERIAL_ECHOLNF(ferr, serial_state[serial_ind.index].last_N);
while (read_serial(serial_ind) != -1) { /* nada */ } // Clear out the RX buffer. Why don't use flush here ?
flush_and_request_resend(serial_ind);
serial_state[serial_ind.index].count = 0;
@@ -471,7 +470,7 @@ void GCodeQueue::get_serial_commands() {
if (gcode_N != serial.last_N + 1 && !M110) {
// In case of error on a serial port, don't prevent other serial port from making progress
- gcode_line_error(PSTR(STR_ERR_LINE_NO), p);
+ gcode_line_error(F(STR_ERR_LINE_NO), p);
break;
}
@@ -481,13 +480,13 @@ void GCodeQueue::get_serial_commands() {
while (count) checksum ^= command[--count];
if (strtol(apos + 1, nullptr, 10) != checksum) {
// In case of error on a serial port, don't prevent other serial port from making progress
- gcode_line_error(PSTR(STR_ERR_CHECKSUM_MISMATCH), p);
+ gcode_line_error(F(STR_ERR_CHECKSUM_MISMATCH), p);
break;
}
}
else {
// In case of error on a serial port, don't prevent other serial port from making progress
- gcode_line_error(PSTR(STR_ERR_NO_CHECKSUM), p);
+ gcode_line_error(F(STR_ERR_NO_CHECKSUM), p);
break;
}
@@ -496,7 +495,7 @@ void GCodeQueue::get_serial_commands() {
#if ENABLED(SDSUPPORT)
// Pronterface "M29" and "M29 " has no line number
else if (card.flag.saving && !is_M29(command)) {
- gcode_line_error(PSTR(STR_ERR_NO_CHECKSUM), p);
+ gcode_line_error(F(STR_ERR_NO_CHECKSUM), p);
break;
}
#endif
@@ -514,7 +513,7 @@ void GCodeQueue::get_serial_commands() {
TERN_(BEZIER_CURVE_SUPPORT, case 5:)
PORT_REDIRECT(SERIAL_PORTMASK(p)); // Reply to the serial port that sent the command
SERIAL_ECHOLNPGM(STR_ERR_STOPPED);
- LCD_MESSAGEPGM(MSG_STOPPED);
+ LCD_MESSAGE(MSG_STOPPED);
break;
}
}
@@ -524,7 +523,7 @@ void GCodeQueue::get_serial_commands() {
// Process critical commands early
if (command[0] == 'M') switch (command[3]) {
case '8': if (command[2] == '0' && command[1] == '1') { wait_for_heatup = false; TERN_(HAS_LCD_MENU, wait_for_user = false); } break;
- case '2': if (command[2] == '1' && command[1] == '1') kill(M112_KILL_STR, nullptr, true); break;
+ case '2': if (command[2] == '1' && command[1] == '1') kill(FPSTR(M112_KILL_STR), nullptr, true); break;
case '0': if (command[1] == '4' && command[2] == '1') quickstop_stepper(); break;
}
#endif
@@ -694,8 +693,8 @@ void GCodeQueue::advance() {
void GCodeQueue::report_buffer_statistics() {
SERIAL_ECHOLNPGM("D576"
- " P:", planner.moves_free(), " ", -queue.planner_buffer_underruns, " (", queue.max_planner_buffer_empty_duration, ")"
- " B:", BUFSIZE - ring_buffer.length, " ", -queue.command_buffer_underruns, " (", queue.max_command_buffer_empty_duration, ")"
+ " P:", planner.moves_free(), " ", -planner_buffer_underruns, " (", max_planner_buffer_empty_duration, ")"
+ " B:", BUFSIZE - ring_buffer.length, " ", -command_buffer_underruns, " (", max_command_buffer_empty_duration, ")"
);
command_buffer_underruns = planner_buffer_underruns = 0;
max_command_buffer_empty_duration = max_planner_buffer_empty_duration = 0;
@@ -718,8 +717,8 @@ void GCodeQueue::advance() {
NOLESS(max_planner_buffer_empty_duration, planner_buffer_empty_duration); // if it's longer than the currently tracked max duration, replace it
}
- if (queue.auto_buffer_report_interval && ELAPSED(ms, queue.next_buffer_report_ms)) {
- queue.next_buffer_report_ms = ms + 1000UL * queue.auto_buffer_report_interval;
+ if (auto_buffer_report_interval && ELAPSED(ms, next_buffer_report_ms)) {
+ next_buffer_report_ms = ms + 1000UL * auto_buffer_report_interval;
PORT_REDIRECT(SERIAL_BOTH);
report_buffer_statistics();
PORT_RESTORE();
diff --git a/Marlin/src/gcode/queue.h b/Marlin/src/gcode/queue.h
index 6bcf4a97e4..c5562da3aa 100644
--- a/Marlin/src/gcode/queue.h
+++ b/Marlin/src/gcode/queue.h
@@ -127,6 +127,7 @@ public:
* Aborts the current PROGMEM queue so only use for one or two commands.
*/
static inline void inject_P(PGM_P const pgcode) { injected_commands_P = pgcode; }
+ static inline void inject(FSTR_P const fgcode) { inject_P(FTOP(fgcode)); }
/**
* Enqueue command(s) to run from SRAM. Drained by process_injected_command().
@@ -139,18 +140,19 @@ public:
/**
* Enqueue and return only when commands are actually enqueued
*/
- static void enqueue_one_now(const char *cmd);
+ static void enqueue_one_now(const char * const cmd);
/**
* Attempt to enqueue a single G-code command
* and return 'true' if successful.
*/
- static bool enqueue_one_P(PGM_P const pgcode);
+ static bool enqueue_one(FSTR_P const fgcode);
/**
* Enqueue from program memory and return only when commands are actually enqueued
*/
- static void enqueue_now_P(PGM_P const cmd);
+ static void enqueue_now_P(PGM_P const pcmd);
+ static inline void enqueue_now(FSTR_P const fcmd) { enqueue_now_P(FTOP(fcmd)); }
/**
* Check whether there are any commands yet to be executed
@@ -257,7 +259,7 @@ private:
*/
static bool enqueue_one(const char *cmd);
- static void gcode_line_error(PGM_P const err, const serial_index_t serial_ind);
+ static void gcode_line_error(FSTR_P const ferr, const serial_index_t serial_ind);
friend class GcodeSuite;
};
diff --git a/Marlin/src/gcode/sd/M1001.cpp b/Marlin/src/gcode/sd/M1001.cpp
index f5ee6a94d1..374b100f59 100644
--- a/Marlin/src/gcode/sd/M1001.cpp
+++ b/Marlin/src/gcode/sd/M1001.cpp
@@ -27,6 +27,7 @@
#include "../gcode.h"
#include "../../module/planner.h"
#include "../../module/printcounter.h"
+#include "../../module/temperature.h"
#include "../../sd/cardreader.h"
#ifdef SD_FINISHED_RELEASECOMMAND
@@ -77,10 +78,10 @@ void GcodeSuite::M1001() {
// Report total print time
const bool long_print = print_job_timer.duration() > 60;
- if (long_print) gcode.process_subcommands_now_P(PSTR("M31"));
+ if (long_print) process_subcommands_now(F("M31"));
// Stop the print job timer
- gcode.process_subcommands_now_P(PSTR("M77"));
+ process_subcommands_now(F("M77"));
// Set the progress bar "done" state
TERN_(LCD_SET_PROGRESS_MANUALLY, ui.set_progress_done());
@@ -95,8 +96,8 @@ void GcodeSuite::M1001() {
#if HAS_LEDS_OFF_FLAG
if (long_print) {
printerEventLEDs.onPrintCompleted();
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_PRINT_DONE)));
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT(MSG_PRINT_DONE), CONTINUE_STR));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_PRINT_DONE)));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, GET_TEXT_F(MSG_PRINT_DONE), FPSTR(CONTINUE_STR)));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response(SEC_TO_MS(TERN(HAS_LCD_MENU, PE_LEDS_COMPLETED_TIME, 30))));
printerEventLEDs.onResumeAfterWait();
}
@@ -104,7 +105,7 @@ void GcodeSuite::M1001() {
// Inject SD_FINISHED_RELEASECOMMAND, if any
#ifdef SD_FINISHED_RELEASECOMMAND
- gcode.process_subcommands_now_P(PSTR(SD_FINISHED_RELEASECOMMAND));
+ process_subcommands_now(F(SD_FINISHED_RELEASECOMMAND));
#endif
TERN_(EXTENSIBLE_UI, ExtUI::onPrintFinished());
diff --git a/Marlin/src/gcode/sd/M24_M25.cpp b/Marlin/src/gcode/sd/M24_M25.cpp
index 4cb040feb3..21e43b033e 100644
--- a/Marlin/src/gcode/sd/M24_M25.cpp
+++ b/Marlin/src/gcode/sd/M24_M25.cpp
@@ -79,7 +79,7 @@ void GcodeSuite::M24() {
#ifdef ACTION_ON_RESUME
host_action_resume();
#endif
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, PSTR("Resuming SD"), DISMISS_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("Resuming SD"), FPSTR(DISMISS_STR)));
#endif
ui.reset_status();
@@ -116,7 +116,7 @@ void GcodeSuite::M25() {
IF_DISABLED(DWIN_CREALITY_LCD, ui.reset_status());
#if ENABLED(HOST_ACTION_COMMANDS)
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_PAUSE_RESUME, PSTR("Pause SD"), PSTR("Resume")));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_PAUSE_RESUME, F("Pause SD"), F("Resume")));
#ifdef ACTION_ON_PAUSE
host_action_pause();
#endif
diff --git a/Marlin/src/gcode/temp/M140_M190.cpp b/Marlin/src/gcode/temp/M140_M190.cpp
index 857e11dde5..edc15b9cba 100644
--- a/Marlin/src/gcode/temp/M140_M190.cpp
+++ b/Marlin/src/gcode/temp/M140_M190.cpp
@@ -83,7 +83,7 @@ void GcodeSuite::M140_M190(const bool isM190) {
thermalManager.setTargetBed(temp);
- ui.set_status_P(thermalManager.isHeatingBed() ? GET_TEXT(MSG_BED_HEATING) : GET_TEXT(MSG_BED_COOLING));
+ ui.set_status(thermalManager.isHeatingBed() ? GET_TEXT_F(MSG_BED_HEATING) : GET_TEXT_F(MSG_BED_COOLING));
// with PRINTJOB_TIMER_AUTOSTART, M190 can start the timer, and M140 can stop it
TERN_(PRINTJOB_TIMER_AUTOSTART, thermalManager.auto_job_check_timer(isM190, !isM190));
diff --git a/Marlin/src/gcode/temp/M141_M191.cpp b/Marlin/src/gcode/temp/M141_M191.cpp
index ed7637c92a..81a078318a 100644
--- a/Marlin/src/gcode/temp/M141_M191.cpp
+++ b/Marlin/src/gcode/temp/M141_M191.cpp
@@ -69,7 +69,7 @@ void GcodeSuite::M191() {
const bool is_heating = thermalManager.isHeatingChamber();
if (is_heating || !no_wait_for_cooling) {
- ui.set_status_P(is_heating ? GET_TEXT(MSG_CHAMBER_HEATING) : GET_TEXT(MSG_CHAMBER_COOLING));
+ ui.set_status(is_heating ? GET_TEXT_F(MSG_CHAMBER_HEATING) : GET_TEXT_F(MSG_CHAMBER_COOLING));
thermalManager.wait_for_chamber(false);
}
}
diff --git a/Marlin/src/gcode/temp/M143_M193.cpp b/Marlin/src/gcode/temp/M143_M193.cpp
index aef4350e60..e4b29bee5f 100644
--- a/Marlin/src/gcode/temp/M143_M193.cpp
+++ b/Marlin/src/gcode/temp/M143_M193.cpp
@@ -58,7 +58,7 @@ void GcodeSuite::M193() {
cooler.enable();
thermalManager.setTargetCooler(parser.value_celsius());
if (thermalManager.isLaserCooling()) {
- ui.set_status_P(GET_TEXT(MSG_LASER_COOLING));
+ LCD_MESSAGE(MSG_LASER_COOLING);
thermalManager.wait_for_cooler(true);
}
}
diff --git a/Marlin/src/gcode/temp/M303.cpp b/Marlin/src/gcode/temp/M303.cpp
index 0d0ce478ee..f823aefbed 100644
--- a/Marlin/src/gcode/temp/M303.cpp
+++ b/Marlin/src/gcode/temp/M303.cpp
@@ -85,7 +85,7 @@ void GcodeSuite::M303() {
KEEPALIVE_STATE(NOT_BUSY);
#endif
- LCD_MESSAGEPGM(MSG_PID_AUTOTUNE);
+ LCD_MESSAGE(MSG_PID_AUTOTUNE);
thermalManager.PID_autotune(temp, hid, c, u);
ui.reset_status();
}
diff --git a/Marlin/src/gcode/units/M149.cpp b/Marlin/src/gcode/units/M149.cpp
index 20b3781ead..3f1ea3654e 100644
--- a/Marlin/src/gcode/units/M149.cpp
+++ b/Marlin/src/gcode/units/M149.cpp
@@ -37,9 +37,9 @@ void GcodeSuite::M149() {
}
void GcodeSuite::M149_report(const bool forReplay/*=true*/) {
- report_heading_etc(forReplay, PSTR(STR_TEMPERATURE_UNITS));
+ report_heading_etc(forReplay, F(STR_TEMPERATURE_UNITS));
SERIAL_ECHOPGM(" M149 ", AS_CHAR(parser.temp_units_code()), " ; Units in ");
- SERIAL_ECHOLNPGM_P(parser.temp_units_name());
+ SERIAL_ECHOLNF(parser.temp_units_name());
}
#endif // TEMPERATURE_UNITS_SUPPORT
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index 893abae2d7..64916e7a68 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -39,17 +39,17 @@
/**
* General Flags that may be set below by specific LCDs
*
- * DOGLCD : Run a Graphical LCD through U8GLib (with MarlinUI)
- * IS_ULTIPANEL : Define LCD_PINS_D5/6/7 for direct-connected "Ultipanel" LCDs
- * IS_ULTRA_LCD : Ultra LCD, not necessarily Ultipanel.
- * IS_RRD_SC : Common RRD Smart Controller digital interface pins
- * IS_RRD_FG_SC : Common RRD Full Graphical Smart Controller digital interface pins
- * U8GLIB_ST7920 : Most common DOGM display SPI interface, supporting a "lightweight" display mode.
- * U8GLIB_SH1106 : SH1106 OLED with I2C interface via U8GLib
- * IS_U8GLIB_SSD1306 : SSD1306 OLED with I2C interface via U8GLib
- * U8GLIB_SSD1309 : SSD1309 OLED with I2C interface via U8GLib
- * U8GLIB_ST7565_64128N : ST7565 128x64 LCD with SPI interface via U8GLib
- * U8GLIB_LM6059_AF : LM6059 with Hardware SPI via U8GLib
+ * DOGLCD : Run a Graphical LCD through U8GLib (with MarlinUI)
+ * IS_ULTIPANEL : Define LCD_PINS_D5/6/7 for direct-connected "Ultipanel" LCDs
+ * IS_ULTRA_LCD : Ultra LCD, not necessarily Ultipanel.
+ * IS_RRD_SC : Common RRD Smart Controller digital interface pins
+ * IS_RRD_FG_SC : Common RRD Full Graphical Smart Controller digital interface pins
+ * IS_U8GLIB_ST7920 : Most common DOGM display SPI interface, supporting a "lightweight" display mode.
+ * U8GLIB_SH1106 : SH1106 OLED with I2C interface via U8GLib
+ * IS_U8GLIB_SSD1306 : SSD1306 OLED with I2C interface via U8GLib (U8GLIB_SSD1306)
+ * U8GLIB_SSD1309 : SSD1309 OLED with I2C interface via U8GLib (HAS_U8GLIB_I2C_OLED, IS_ULTRA_LCD, DOGLCD)
+ * IS_U8GLIB_ST7565_64128N : ST7565 128x64 LCD with SPI interface via U8GLib
+ * IS_U8GLIB_LM6059_AF : LM6059 with Hardware SPI via U8GLib
*/
#if EITHER(MKS_MINI_12864, ENDER2_STOCKDISPLAY)
@@ -85,7 +85,7 @@
#elif ENABLED(ZONESTAR_12864LCD)
#define DOGLCD
#define IS_RRD_SC 1
- #define U8GLIB_ST7920
+ #define IS_U8GLIB_ST7920 1
#elif ENABLED(ZONESTAR_12864OLED)
#define IS_RRD_SC 1
@@ -99,19 +99,24 @@
#define IS_ULTIPANEL 1
#define ENCODER_PULSES_PER_STEP 2
-#elif ANY(miniVIKI, VIKI2, ELB_FULL_GRAPHIC_CONTROLLER, AZSMZ_12864)
+#elif ANY(miniVIKI, VIKI2, WYH_L12864, ELB_FULL_GRAPHIC_CONTROLLER, AZSMZ_12864)
+
+ #define IS_DOGM_12864 1
#define DOGLCD
#define IS_ULTIPANEL 1
#if ENABLED(miniVIKI)
- #define U8GLIB_ST7565_64128N
+ #define IS_U8GLIB_ST7565_64128N 1
#elif ENABLED(VIKI2)
- #define U8GLIB_ST7565_64128N
+ #define IS_U8GLIB_ST7565_64128N 1
+ #elif ENABLED(WYH_L12864)
+ #define IS_U8GLIB_ST7565_64128N 1
+ #define ST7565_XOFFSET 0x04
#elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
- #define U8GLIB_LM6059_AF
+ #define IS_U8GLIB_LM6059_AF 1
#elif ENABLED(AZSMZ_12864)
- #define U8GLIB_ST7565_64128N
+ #define IS_U8GLIB_ST7565_64128N 1
#endif
#elif ENABLED(OLED_PANEL_TINYBOY2)
@@ -128,7 +133,7 @@
#elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD)
#define DOGLCD
- #define U8GLIB_ST7920
+ #define IS_U8GLIB_ST7920 1
#define IS_ULTIPANEL 1
#elif ENABLED(MKS_12864OLED)
@@ -144,7 +149,7 @@
#elif ENABLED(SAV_3DGLCD)
#ifdef U8GLIB_SSD1306
- #define IS_U8GLIB_SSD1306
+ #define IS_U8GLIB_SSD1306 // Allow for U8GLIB_SSD1306 + SAV_3DGLCD
#endif
#define IS_NEWPANEL 1
@@ -266,7 +271,7 @@
// ST7920-based graphical displays
#if ANY(IS_RRD_FG_SC, LCD_FOR_MELZI, SILVER_GATE_GLCD_CONTROLLER)
#define DOGLCD
- #define U8GLIB_ST7920
+ #define IS_U8GLIB_ST7920 1
#define IS_RRD_SC 1
#endif
@@ -275,7 +280,7 @@
#define IS_ULTIPANEL 1
#define DOGLCD
#if ENABLED(MAKRPANEL)
- #define U8GLIB_ST7565_64128N
+ #define IS_U8GLIB_ST7565_64128N 1
#endif
#endif
@@ -373,25 +378,28 @@
* I2C Panels
*/
-#if EITHER(LCD_SAINSMART_I2C_1602, LCD_SAINSMART_I2C_2004)
+#if ANY(IS_RRD_SC, IS_DOGM_12864, OLED_PANEL_TINYBOY2, LCD_I2C_PANELOLU2)
- #define LCD_I2C_TYPE_PCF8575
- #define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
+ #define STD_ENCODER_PULSES_PER_STEP 4
+ #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+
+ #if ENABLED(LCD_I2C_PANELOLU2) // PANELOLU2 LCD with status LEDs, separate encoder and click inputs
+ #define LCD_I2C_TYPE_MCP23017 // I2C Character-based 12864 display
+ #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
+ #define LCD_USE_I2C_BUZZER // Enable buzzer on LCD (optional)
+ #define IS_ULTIPANEL 1
+ #endif
+
+#elif EITHER(LCD_SAINSMART_I2C_1602, LCD_SAINSMART_I2C_2004)
+
+ #define LCD_I2C_TYPE_PCF8575 // I2C Character-based 12864 display
+ #define LCD_I2C_ADDRESS 0x27 // I2C Address of the port expander
#if ENABLED(LCD_SAINSMART_I2C_2004)
#define LCD_WIDTH 20
#define LCD_HEIGHT 4
#endif
-#elif ENABLED(LCD_I2C_PANELOLU2)
-
- // PANELOLU2 LCD with status LEDs, separate encoder and click inputs
-
- #define LCD_I2C_TYPE_MCP23017
- #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
- #define LCD_USE_I2C_BUZZER // Enable buzzer on LCD (optional)
- #define IS_ULTIPANEL 1
-
#elif ENABLED(LCD_I2C_VIKI)
/**
@@ -417,11 +425,6 @@
#define STD_ENCODER_PULSES_PER_STEP 2
#define STD_ENCODER_STEPS_PER_MENU_ITEM 1
-#elif ANY(IS_RRD_SC, miniVIKI, VIKI2, ELB_FULL_GRAPHIC_CONTROLLER, AZSMZ_12864, OLED_PANEL_TINYBOY2, BQ_LCD_SMART_CONTROLLER, LCD_I2C_PANELOLU2)
-
- #define STD_ENCODER_PULSES_PER_STEP 4
- #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
-
#endif
#if EITHER(LCD_I2C_TYPE_MCP23017, LCD_I2C_TYPE_MCP23008) && DISABLED(NO_LCD_DETECT)
@@ -500,6 +503,20 @@
#define HAS_DWIN_E3V2 1
#endif
+// E3V2 extras
+#if HAS_DWIN_E3V2 || IS_DWIN_MARLINUI
+ #define SERIAL_CATCHALL 0
+ #ifndef LCD_SERIAL_PORT
+ #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_MINI_E3_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO)
+ #define LCD_SERIAL_PORT 1
+ #else
+ #define LCD_SERIAL_PORT 3 // Creality 4.x board
+ #endif
+ #endif
+ #define HAS_LCD_BRIGHTNESS 1
+ #define LCD_BRIGHTNESS_MAX 250
+#endif
+
#if IS_ULTRA_LCD
#define HAS_WIRED_LCD 1
#if ENABLED(DOGLCD)
@@ -573,6 +590,8 @@
* HOTENDS - Number of hotends, whether connected or separate
* E_STEPPERS - Number of actual E stepper motors
* E_MANUAL - Number of E steppers for LCD move options
+ *
+ * These defines must be simple constants for use in REPEAT, etc.
*/
#if EXTRUDERS
#define HAS_EXTRUDERS 1
@@ -591,9 +610,14 @@
#undef DISABLE_E
#endif
+#define E_OPTARG(N) OPTARG(HAS_MULTI_EXTRUDER, N)
+#define E_TERN_(N) TERN_(HAS_MULTI_EXTRUDER, N)
+#define E_TERN0(N) TERN0(HAS_MULTI_EXTRUDER, N)
+
#if ENABLED(E_DUAL_STEPPER_DRIVERS) // E0/E1 steppers act in tandem as E0
#define E_STEPPERS 2
+ #define E_MANUAL 1
#elif ENABLED(SWITCHING_EXTRUDER) // One stepper for every two EXTRUDERS
@@ -623,7 +647,8 @@
#elif HAS_PRUSA_MMU2 // Průša Multi-Material Unit v2
- #define E_STEPPERS 1
+ #define E_STEPPERS 1
+ #define E_MANUAL 1
#endif
@@ -1061,7 +1086,7 @@
#if ANY(MORGAN_SCARA, MP_SCARA, AXEL_TPARA)
#define IS_SCARA 1
#define IS_KINEMATIC 1
-#elif ENABLED(DELTA)
+#elif EITHER(DELTA, POLARGRAPH)
#define IS_KINEMATIC 1
#else
#define IS_CARTESIAN 1
@@ -1111,17 +1136,6 @@
#define HAS_ETHERNET 1
#endif
-#if EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI)
- #define SERIAL_CATCHALL 0
- #ifndef LCD_SERIAL_PORT
- #if MB(BTT_SKR_MINI_E3_V1_0, BTT_SKR_MINI_E3_V1_2, BTT_SKR_MINI_E3_V2_0, BTT_SKR_E3_TURBO)
- #define LCD_SERIAL_PORT 1
- #else
- #define LCD_SERIAL_PORT 3 // Creality 4.x board
- #endif
- #endif
-#endif
-
// Fallback Stepper Driver types that don't depend on Configuration_adv.h
#ifndef X_DRIVER_TYPE
#define X_DRIVER_TYPE A4988
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 34a2ee628a..90c4978310 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -94,6 +94,8 @@
#endif
#if HAS_Z_AXIS
#define Z_MAX_LENGTH (Z_MAX_POS - (Z_MIN_POS))
+#else
+ #undef CONTROLLER_FAN_USE_Z_ONLY
#endif
#if LINEAR_AXES >= 4
#define I_MAX_LENGTH (I_MAX_POS - (I_MIN_POS))
@@ -356,6 +358,8 @@
#define _LCD_CONTRAST_MAX 115
#elif ENABLED(VIKI2)
#define _LCD_CONTRAST_INIT 140
+#elif ENABLED(WYH_L12864)
+ #define _LCD_CONTRAST_INIT 190
#elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
#define _LCD_CONTRAST_MIN 90
#define _LCD_CONTRAST_INIT 110
@@ -421,10 +425,6 @@
#endif
#endif
-#if EITHER(DWIN_CREALITY_LCD_ENHANCED, DWIN_CREALITY_LCD_JYERSUI)
- #define HAS_LCD_BRIGHTNESS 1
-#endif
-
/**
* Override the SD_DETECT_STATE set in Configuration_adv.h
* and enable sharing of onboard SD host drives (all platforms but AGCM4)
@@ -469,31 +469,6 @@
#define NO_LCD_REINIT 1 // Suppress LCD re-initialization
#endif
-/**
- * Set defaults for missing (newer) options
- */
-#ifndef DISABLE_INACTIVE_X
- #define DISABLE_INACTIVE_X DISABLE_X
-#endif
-#if HAS_Y_AXIS && !defined(DISABLE_INACTIVE_Y)
- #define DISABLE_INACTIVE_Y DISABLE_Y
-#endif
-#if HAS_Z_AXIS && !defined(DISABLE_INACTIVE_Z)
- #define DISABLE_INACTIVE_Z DISABLE_Z
-#endif
-#ifndef DISABLE_INACTIVE_E
- #define DISABLE_INACTIVE_E DISABLE_E
-#endif
-#if LINEAR_AXES >= 4 && !defined(DISABLE_INACTIVE_I)
- #define DISABLE_INACTIVE_I DISABLE_I
-#endif
-#if LINEAR_AXES >= 5 && !defined(DISABLE_INACTIVE_J)
- #define DISABLE_INACTIVE_J DISABLE_J
-#endif
-#if LINEAR_AXES >= 6 && !defined(DISABLE_INACTIVE_K)
- #define DISABLE_INACTIVE_K DISABLE_K
-#endif
-
/**
* Power Supply
*/
@@ -1467,7 +1442,7 @@
#define HAS_X_MS_PINS 1
#endif
-#if PIN_EXISTS(X2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X2))
+#if PIN_EXISTS(X2_ENABLE) || AXIS_IS_L64XX(X2) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(X2))
#define HAS_X2_ENABLE 1
#endif
#if PIN_EXISTS(X2_DIR)
@@ -1480,8 +1455,15 @@
#define HAS_X2_MS_PINS 1
#endif
+/**
+ * Set defaults for missing (newer) options
+ */
+#if !defined(DISABLE_INACTIVE_X) && ENABLED(DISABLE_X)
+ #define DISABLE_INACTIVE_X 1
+#endif
+
#if HAS_Y_AXIS
- #if PIN_EXISTS(Y_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y))
+ #if PIN_EXISTS(Y_ENABLE) || AXIS_IS_L64XX(Y) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y))
#define HAS_Y_ENABLE 1
#endif
#if PIN_EXISTS(Y_DIR)
@@ -1494,7 +1476,7 @@
#define HAS_Y_MS_PINS 1
#endif
- #if PIN_EXISTS(Y2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y2))
+ #if PIN_EXISTS(Y2_ENABLE) || AXIS_IS_L64XX(Y2) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Y2))
#define HAS_Y2_ENABLE 1
#endif
#if PIN_EXISTS(Y2_DIR)
@@ -1506,10 +1488,15 @@
#if PIN_EXISTS(Y2_MS1)
#define HAS_Y2_MS_PINS 1
#endif
+ #if !defined(DISABLE_INACTIVE_Y) && ENABLED(DISABLE_Y)
+ #define DISABLE_INACTIVE_Y 1
+ #endif
+#else
+ #undef DISABLE_INACTIVE_Y
#endif
#if HAS_Z_AXIS
- #if PIN_EXISTS(Z_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z))
+ #if PIN_EXISTS(Z_ENABLE) || AXIS_IS_L64XX(Z) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z))
#define HAS_Z_ENABLE 1
#endif
#if PIN_EXISTS(Z_DIR)
@@ -1521,10 +1508,15 @@
#if PIN_EXISTS(Z_MS1)
#define HAS_Z_MS_PINS 1
#endif
+ #if !defined(DISABLE_INACTIVE_Z) && ENABLED(DISABLE_Z)
+ #define DISABLE_INACTIVE_Z 1
+ #endif
+#else
+ #undef DISABLE_INACTIVE_Z
#endif
#if NUM_Z_STEPPER_DRIVERS >= 2
- #if PIN_EXISTS(Z2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z2))
+ #if PIN_EXISTS(Z2_ENABLE) || AXIS_IS_L64XX(Z2) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z2))
#define HAS_Z2_ENABLE 1
#endif
#if PIN_EXISTS(Z2_DIR)
@@ -1539,7 +1531,7 @@
#endif
#if NUM_Z_STEPPER_DRIVERS >= 3
- #if PIN_EXISTS(Z3_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z3))
+ #if PIN_EXISTS(Z3_ENABLE) || AXIS_IS_L64XX(Z3) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z3))
#define HAS_Z3_ENABLE 1
#endif
#if PIN_EXISTS(Z3_DIR)
@@ -1554,7 +1546,7 @@
#endif
#if NUM_Z_STEPPER_DRIVERS >= 4
- #if PIN_EXISTS(Z4_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z4))
+ #if PIN_EXISTS(Z4_ENABLE) || AXIS_IS_L64XX(Z4) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z4))
#define HAS_Z4_ENABLE 1
#endif
#if PIN_EXISTS(Z4_DIR)
@@ -1569,7 +1561,7 @@
#endif
#if LINEAR_AXES >= 4
- #if PIN_EXISTS(I_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(I))
+ #if PIN_EXISTS(I_ENABLE) || AXIS_IS_L64XX(I) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(I))
#define HAS_I_ENABLE 1
#endif
#if PIN_EXISTS(I_DIR)
@@ -1581,10 +1573,15 @@
#if PIN_EXISTS(I_MS1)
#define HAS_I_MS_PINS 1
#endif
+ #if !defined(DISABLE_INACTIVE_I) && ENABLED(DISABLE_I)
+ #define DISABLE_INACTIVE_I 1
+ #endif
+#else
+ #undef DISABLE_INACTIVE_I
#endif
#if LINEAR_AXES >= 5
- #if PIN_EXISTS(J_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(J))
+ #if PIN_EXISTS(J_ENABLE) || AXIS_IS_L64XX(J) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(J))
#define HAS_J_ENABLE 1
#endif
#if PIN_EXISTS(J_DIR)
@@ -1596,10 +1593,15 @@
#if PIN_EXISTS(J_MS1)
#define HAS_J_MS_PINS 1
#endif
+ #if !defined(DISABLE_INACTIVE_J) && ENABLED(DISABLE_J)
+ #define DISABLE_INACTIVE_J 1
+ #endif
+#else
+ #undef DISABLE_INACTIVE_J
#endif
#if LINEAR_AXES >= 6
- #if PIN_EXISTS(K_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(K))
+ #if PIN_EXISTS(K_ENABLE) || AXIS_IS_L64XX(K) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(K))
#define HAS_K_ENABLE 1
#endif
#if PIN_EXISTS(K_DIR)
@@ -1611,12 +1613,17 @@
#if PIN_EXISTS(K_MS1)
#define HAS_K_MS_PINS 1
#endif
+ #if !defined(DISABLE_INACTIVE_K) && ENABLED(DISABLE_K)
+ #define DISABLE_INACTIVE_K 1
+ #endif
+#else
+ #undef DISABLE_INACTIVE_K
#endif
// Extruder steppers and solenoids
#if HAS_EXTRUDERS
- #if PIN_EXISTS(E0_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E0))
+ #if PIN_EXISTS(E0_ENABLE) || AXIS_IS_L64XX(E0) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E0))
#define HAS_E0_ENABLE 1
#endif
#if PIN_EXISTS(E0_DIR)
@@ -1632,118 +1639,137 @@
#define HAS_SOLENOID_0 1
#endif
- #if PIN_EXISTS(E1_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1))
- #define HAS_E1_ENABLE 1
- #endif
- #if PIN_EXISTS(E1_DIR)
- #define HAS_E1_DIR 1
- #endif
- #if PIN_EXISTS(E1_STEP)
- #define HAS_E1_STEP 1
- #endif
- #if PIN_EXISTS(E1_MS1)
- #define HAS_E1_MS_PINS 1
- #endif
- #if PIN_EXISTS(SOL1)
- #define HAS_SOLENOID_1 1
+ #if E_STEPPERS > 1
+ #if PIN_EXISTS(E1_ENABLE) || AXIS_IS_L64XX(E1) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1))
+ #define HAS_E1_ENABLE 1
+ #endif
+ #if PIN_EXISTS(E1_DIR)
+ #define HAS_E1_DIR 1
+ #endif
+ #if PIN_EXISTS(E1_STEP)
+ #define HAS_E1_STEP 1
+ #endif
+ #if PIN_EXISTS(E1_MS1)
+ #define HAS_E1_MS_PINS 1
+ #endif
+ #if PIN_EXISTS(SOL1)
+ #define HAS_SOLENOID_1 1
+ #endif
#endif
- #if PIN_EXISTS(E2_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E2))
- #define HAS_E2_ENABLE 1
- #endif
- #if PIN_EXISTS(E2_DIR)
- #define HAS_E2_DIR 1
- #endif
- #if PIN_EXISTS(E2_STEP)
- #define HAS_E2_STEP 1
- #endif
- #if PIN_EXISTS(E2_MS1)
- #define HAS_E2_MS_PINS 1
- #endif
- #if PIN_EXISTS(SOL2)
- #define HAS_SOLENOID_2 1
+ #if E_STEPPERS > 2
+ #if PIN_EXISTS(E2_ENABLE) || AXIS_IS_L64XX(E2) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E2))
+ #define HAS_E2_ENABLE 1
+ #endif
+ #if PIN_EXISTS(E2_DIR)
+ #define HAS_E2_DIR 1
+ #endif
+ #if PIN_EXISTS(E2_STEP)
+ #define HAS_E2_STEP 1
+ #endif
+ #if PIN_EXISTS(E2_MS1)
+ #define HAS_E2_MS_PINS 1
+ #endif
+ #if PIN_EXISTS(SOL2)
+ #define HAS_SOLENOID_2 1
+ #endif
#endif
- #if PIN_EXISTS(E3_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E3))
- #define HAS_E3_ENABLE 1
- #endif
- #if PIN_EXISTS(E3_DIR)
- #define HAS_E3_DIR 1
- #endif
- #if PIN_EXISTS(E3_STEP)
- #define HAS_E3_STEP 1
- #endif
- #if PIN_EXISTS(E3_MS1)
- #define HAS_E3_MS_PINS 1
- #endif
- #if PIN_EXISTS(SOL3)
- #define HAS_SOLENOID_3 1
+ #if E_STEPPERS > 3
+ #if PIN_EXISTS(E3_ENABLE) || AXIS_IS_L64XX(E3) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E3))
+ #define HAS_E3_ENABLE 1
+ #endif
+ #if PIN_EXISTS(E3_DIR)
+ #define HAS_E3_DIR 1
+ #endif
+ #if PIN_EXISTS(E3_STEP)
+ #define HAS_E3_STEP 1
+ #endif
+ #if PIN_EXISTS(E3_MS1)
+ #define HAS_E3_MS_PINS 1
+ #endif
+ #if PIN_EXISTS(SOL3)
+ #define HAS_SOLENOID_3 1
+ #endif
#endif
- #if PIN_EXISTS(E4_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E4))
- #define HAS_E4_ENABLE 1
- #endif
- #if PIN_EXISTS(E4_DIR)
- #define HAS_E4_DIR 1
- #endif
- #if PIN_EXISTS(E4_STEP)
- #define HAS_E4_STEP 1
- #endif
- #if PIN_EXISTS(E4_MS1)
- #define HAS_E4_MS_PINS 1
- #endif
- #if PIN_EXISTS(SOL4)
- #define HAS_SOLENOID_4 1
+ #if E_STEPPERS > 4
+ #if PIN_EXISTS(E4_ENABLE) || AXIS_IS_L64XX(E4) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E4))
+ #define HAS_E4_ENABLE 1
+ #endif
+ #if PIN_EXISTS(E4_DIR)
+ #define HAS_E4_DIR 1
+ #endif
+ #if PIN_EXISTS(E4_STEP)
+ #define HAS_E4_STEP 1
+ #endif
+ #if PIN_EXISTS(E4_MS1)
+ #define HAS_E4_MS_PINS 1
+ #endif
+ #if PIN_EXISTS(SOL4)
+ #define HAS_SOLENOID_4 1
+ #endif
#endif
- #if PIN_EXISTS(E5_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E5))
- #define HAS_E5_ENABLE 1
- #endif
- #if PIN_EXISTS(E5_DIR)
- #define HAS_E5_DIR 1
- #endif
- #if PIN_EXISTS(E5_STEP)
- #define HAS_E5_STEP 1
- #endif
- #if PIN_EXISTS(E5_MS1)
- #define HAS_E5_MS_PINS 1
- #endif
- #if PIN_EXISTS(SOL5)
- #define HAS_SOLENOID_5 1
+ #if E_STEPPERS > 5
+ #if PIN_EXISTS(E5_ENABLE) || AXIS_IS_L64XX(E5) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E5))
+ #define HAS_E5_ENABLE 1
+ #endif
+ #if PIN_EXISTS(E5_DIR)
+ #define HAS_E5_DIR 1
+ #endif
+ #if PIN_EXISTS(E5_STEP)
+ #define HAS_E5_STEP 1
+ #endif
+ #if PIN_EXISTS(E5_MS1)
+ #define HAS_E5_MS_PINS 1
+ #endif
+ #if PIN_EXISTS(SOL5)
+ #define HAS_SOLENOID_5 1
+ #endif
#endif
- #if PIN_EXISTS(E6_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6))
- #define HAS_E6_ENABLE 1
- #endif
- #if PIN_EXISTS(E6_DIR)
- #define HAS_E6_DIR 1
- #endif
- #if PIN_EXISTS(E6_STEP)
- #define HAS_E6_STEP 1
- #endif
- #if PIN_EXISTS(E6_MS1)
- #define HAS_E6_MS_PINS 1
- #endif
- #if PIN_EXISTS(SOL6)
- #define HAS_SOLENOID_6 1
+ #if E_STEPPERS > 6
+ #if PIN_EXISTS(E6_ENABLE) || AXIS_IS_L64XX(E6) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6))
+ #define HAS_E6_ENABLE 1
+ #endif
+ #if PIN_EXISTS(E6_DIR)
+ #define HAS_E6_DIR 1
+ #endif
+ #if PIN_EXISTS(E6_STEP)
+ #define HAS_E6_STEP 1
+ #endif
+ #if PIN_EXISTS(E6_MS1)
+ #define HAS_E6_MS_PINS 1
+ #endif
+ #if PIN_EXISTS(SOL6)
+ #define HAS_SOLENOID_6 1
+ #endif
#endif
- #if PIN_EXISTS(E7_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7))
- #define HAS_E7_ENABLE 1
- #endif
- #if PIN_EXISTS(E7_DIR)
- #define HAS_E7_DIR 1
- #endif
- #if PIN_EXISTS(E7_STEP)
- #define HAS_E7_STEP 1
- #endif
- #if PIN_EXISTS(E7_MS1)
- #define HAS_E7_MS_PINS 1
- #endif
- #if PIN_EXISTS(SOL7)
- #define HAS_SOLENOID_7 1
+ #if E_STEPPERS > 7
+ #if PIN_EXISTS(E7_ENABLE) || AXIS_IS_L64XX(E7) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7))
+ #define HAS_E7_ENABLE 1
+ #endif
+ #if PIN_EXISTS(E7_DIR)
+ #define HAS_E7_DIR 1
+ #endif
+ #if PIN_EXISTS(E7_STEP)
+ #define HAS_E7_STEP 1
+ #endif
+ #if PIN_EXISTS(E7_MS1)
+ #define HAS_E7_MS_PINS 1
+ #endif
+ #if PIN_EXISTS(SOL7)
+ #define HAS_SOLENOID_7 1
+ #endif
#endif
+ #if !defined(DISABLE_INACTIVE_E) && ENABLED(DISABLE_E)
+ #define DISABLE_INACTIVE_E 1
+ #endif
+#else
+ #undef DISABLE_INACTIVE_E
#endif // HAS_EXTRUDERS
//
@@ -1898,20 +1924,14 @@
#ifndef Z4_INTERPOLATE
#define Z4_INTERPOLATE INTERPOLATE
#endif
- #if LINEAR_AXES >= 4
- #ifndef I_INTERPOLATE
- #define I_INTERPOLATE INTERPOLATE
- #endif
+ #if LINEAR_AXES >= 4 && !defined(I_INTERPOLATE)
+ #define I_INTERPOLATE INTERPOLATE
#endif
- #if LINEAR_AXES >= 5
- #ifndef J_INTERPOLATE
- #define J_INTERPOLATE INTERPOLATE
- #endif
+ #if LINEAR_AXES >= 5 && !defined(J_INTERPOLATE)
+ #define J_INTERPOLATE INTERPOLATE
#endif
- #if LINEAR_AXES >= 6
- #ifndef K_INTERPOLATE
- #define K_INTERPOLATE INTERPOLATE
- #endif
+ #if LINEAR_AXES >= 6 && !defined(K_INTERPOLATE)
+ #define K_INTERPOLATE INTERPOLATE
#endif
#ifndef E0_INTERPOLATE
#define E0_INTERPOLATE INTERPOLATE
@@ -1938,13 +1958,13 @@
#define E7_INTERPOLATE INTERPOLATE
#endif
#ifndef X_SLAVE_ADDRESS
- #define X_SLAVE_ADDRESS 0
+ #define X_SLAVE_ADDRESS 0
#endif
#ifndef Y_SLAVE_ADDRESS
- #define Y_SLAVE_ADDRESS 0
+ #define Y_SLAVE_ADDRESS 0
#endif
#ifndef Z_SLAVE_ADDRESS
- #define Z_SLAVE_ADDRESS 0
+ #define Z_SLAVE_ADDRESS 0
#endif
#ifndef I_SLAVE_ADDRESS
#define I_SLAVE_ADDRESS 0
@@ -1996,12 +2016,6 @@
#endif
#endif
-#if (HAS_E_DRIVER(TMC2660) \
- || ( E0_ENABLE_PIN != X_ENABLE_PIN && E1_ENABLE_PIN != X_ENABLE_PIN \
- && E0_ENABLE_PIN != Y_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN ) )
- #define HAS_E_STEPPER_ENABLE 1
-#endif
-
#if ANY_AXIS_HAS(HW_SERIAL)
#define HAS_TMC_HW_SERIAL 1
#endif
@@ -2593,9 +2607,14 @@
#endif
#if NUM_SERVOS > 0
#define HAS_SERVOS 1
-#endif
-#if HAS_SERVOS && defined(PAUSE_SERVO_OUTPUT) && defined(RESUME_SERVO_OUTPUT)
- #define HAS_PAUSE_SERVO_OUTPUT 1
+ #if defined(PAUSE_SERVO_OUTPUT) && defined(RESUME_SERVO_OUTPUT)
+ #define HAS_PAUSE_SERVO_OUTPUT 1
+ #endif
+#else
+ #undef SERVO_DELAY
+ #undef DEACTIVATE_SERVOS_AFTER_MOVE
+ #undef EDITABLE_SERVO_ANGLES
+ #undef SERVO_DETACH_GCODE
#endif
// Sensors
@@ -2637,7 +2656,7 @@
#if HAS_EXTRUDERS && PIN_EXISTS(MOTOR_CURRENT_PWM_E)
#define HAS_MOTOR_CURRENT_PWM_E 1
#endif
-#if HAS_MOTOR_CURRENT_PWM_E || ANY_PIN(MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y, MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_Z)
+#if HAS_MOTOR_CURRENT_PWM_E || ANY_PIN(MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y, MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_Z, MOTOR_CURRENT_PWM_I, MOTOR_CURRENT_PWM_J, MOTOR_CURRENT_PWM_K)
#define HAS_MOTOR_CURRENT_PWM 1
#endif
@@ -3254,11 +3273,6 @@
#define SD_SPI_SPEED SPI_FULL_SPEED
#endif
-// Defined here to catch the above defines
-#if ENABLED(SDCARD_SORT_ALPHA) && (FOLDER_SORTING || ENABLED(SDSORT_GCODE))
- #define HAS_FOLDER_SORTING 1
-#endif
-
#if HAS_WIRED_LCD
// Get LCD character width/height, which may be overridden by pins, configs, etc.
#ifndef LCD_WIDTH
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index fb6a62b411..7cee8228e1 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -597,9 +597,9 @@
#error "SPINDLE_LASER_PWM (true) is now set with SPINDLE_LASER_USE_PWM (enabled)."
#endif
-#if MOTHERBOARD == BOARD_DUE3DOM_MINI && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD)
+#if MB(DUE3DOM_MINI) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD)
#warning "Onboard temperature sensor for BOARD_DUE3DOM_MINI has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)."
-#elif MOTHERBOARD == BOARD_BTT_SKR_E3_TURBO && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD)
+#elif MB(BTT_SKR_E3_TURBO) && PIN_EXISTS(TEMP_2) && DISABLED(TEMP_SENSOR_BOARD)
#warning "Onboard temperature sensor for BOARD_BTT_SKR_E3_TURBO has moved from TEMP_SENSOR_2 (TEMP_2_PIN) to TEMP_SENSOR_BOARD (TEMP_BOARD_PIN)."
#endif
@@ -833,7 +833,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* LCD Lightweight Screen Style
*/
-#if ENABLED(LIGHTWEIGHT_UI) && DISABLED(U8GLIB_ST7920)
+#if ENABLED(LIGHTWEIGHT_UI) && !IS_U8GLIB_ST7920
#error "LIGHTWEIGHT_UI requires a U8GLIB_ST7920-based display."
#endif
@@ -900,7 +900,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#error "MESH_BED_LEVELING and BABYSTEP_ZPROBE_OFFSET is not a valid combination"
#elif ENABLED(BABYSTEP_ZPROBE_OFFSET) && !HAS_BED_PROBE
#error "BABYSTEP_ZPROBE_OFFSET requires a probe."
- #elif ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) && !HAS_MARLINUI_U8GLIB
+ #elif ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) && NONE(HAS_MARLINUI_U8GLIB, IS_DWIN_MARLINUI)
#error "BABYSTEP_ZPROBE_GFX_OVERLAY requires a Graphical LCD."
#elif ENABLED(BABYSTEP_ZPROBE_GFX_OVERLAY) && DISABLED(BABYSTEP_ZPROBE_OFFSET)
#error "BABYSTEP_ZPROBE_GFX_OVERLAY requires a BABYSTEP_ZPROBE_OFFSET."
@@ -1001,10 +1001,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
static_assert(WITHIN(npp_xyz.z, Z_MIN_POS, Z_MAX_POS), "NOZZLE_PARK_POINT.Z is out of bounds (Z_MIN_POS, Z_MAX_POS).");
#endif
-#if !HAS_RESUME_CONTINUE && DISABLED(HOST_PROMPT_SUPPORT) && DISABLED(EXTENSIBLE_UI)
- #warning "Your Configuration provides no method to acquire user feedback!"
-#endif
-
/**
* Instant Freeze
*/
@@ -1344,8 +1340,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Servo deactivation depends on servo endstops, switching nozzle, or switching extruder
*/
-#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && !HAS_Z_SERVO_PROBE && !defined(SWITCHING_NOZZLE_SERVO_NR) && !defined(SWITCHING_EXTRUDER_SERVO_NR) && !defined(SWITCHING_TOOLHEAD_SERVO_NR)
- #error "Z_PROBE_SERVO_NR, switching nozzle, switching toolhead or switching extruder is required for DEACTIVATE_SERVOS_AFTER_MOVE."
+#if ENABLED(DEACTIVATE_SERVOS_AFTER_MOVE) && NONE(HAS_Z_SERVO_PROBE, POLARGRAPH) && !defined(SWITCHING_NOZZLE_SERVO_NR) && !defined(SWITCHING_EXTRUDER_SERVO_NR) && !defined(SWITCHING_TOOLHEAD_SERVO_NR)
+ #error "Z_PROBE_SERVO_NR, switching nozzle, switching toolhead, switching extruder, or POLARGRAPH is required for DEACTIVATE_SERVOS_AFTER_MOVE."
#endif
/**
@@ -1408,8 +1404,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
#endif
#if LINEAR_AXES >= 5
- #if AXIS5_NAME == AXIS4_NAME || AXIS5_NAME == AXIS6_NAME
- #error "AXIS5_NAME must be different from AXIS4_NAME and AXIS6_NAME"
+ #if AXIS5_NAME == AXIS4_NAME
+ #error "AXIS5_NAME must be unique."
#elif AXIS5_NAME != 'A' && AXIS5_NAME != 'B' && AXIS5_NAME != 'C' && AXIS5_NAME != 'U' && AXIS5_NAME != 'V' && AXIS5_NAME != 'W'
#error "AXIS5_NAME can only be one of 'A', 'B', 'C', 'U', 'V', or 'W'."
#elif !defined(J_MIN_POS) || !defined(J_MAX_POS)
@@ -1422,7 +1418,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
#if LINEAR_AXES >= 6
#if AXIS6_NAME == AXIS5_NAME || AXIS6_NAME == AXIS4_NAME
- #error "AXIS6_NAME must be different from AXIS5_NAME and AXIS4_NAME."
+ #error "AXIS6_NAME must be unique."
#elif AXIS6_NAME != 'A' && AXIS6_NAME != 'B' && AXIS6_NAME != 'C' && AXIS6_NAME != 'U' && AXIS6_NAME != 'V' && AXIS6_NAME != 'W'
#error "AXIS6_NAME can only be one of 'A', 'B', 'C', 'U', 'V', or 'W'."
#elif !defined(K_MIN_POS) || !defined(K_MAX_POS)
@@ -1533,10 +1529,34 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
#if ENABLED(BLTOUCH)
+
+ // BLTouch can't run in 5V mode with a 3.3V probe pin
+ #if ENABLED(BLTOUCH_SET_5V_MODE)
+ #define _5V(P,A,B) WITHIN(P,A,B)
+ #ifdef STM32F1 // STM32F103 5V-tolerant pins
+ #define _IS_5V_TOLERANT(P) (_5V(P,PA8,PA15) || _5V(P,PB2,PB15) || _5V(P,PC6,PC12) || _5V(P,PD0,PD15) || _5V(P,PE0,PE15) || _5V(P,PF0,PF5) || _5V(P,PF11,PF15))
+ #elif defined(ARDUINO_ARCH_SAM)
+ #define _IS_5V_TOLERANT(P) 0 // Assume no 5V tolerance
+ #else
+ #define _IS_5V_TOLERANT(P) 1 // Assume 5V tolerance
+ #endif
+ #if USES_Z_MIN_PROBE_PIN && !_IS_5V_TOLERANT(Z_MIN_PROBE_PIN)
+ #error "BLTOUCH_SET_5V_MODE is not compatible with the Z_MIN_PROBE_PIN."
+ #elif !_IS_5V_TOLERANT(Z_MIN_PIN)
+ #error "BLTOUCH_SET_5V_MODE is not compatible with the Z_MIN_PIN."
+ #endif
+ #undef _IS_5V_TOLERANT
+ #undef _5V
+ #elif NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_ZMIN, ENDSTOPPULLUP_ZMIN_PROBE)
+ #if USES_Z_MIN_PROBE_PIN
+ #error "BLTOUCH on Z_MIN_PROBE_PIN requires ENDSTOPPULLUP_ZMIN_PROBE, ENDSTOPPULLUPS, or BLTOUCH_SET_5V_MODE."
+ #else
+ #error "BLTOUCH on Z_MIN_PIN requires ENDSTOPPULLUP_ZMIN, ENDSTOPPULLUPS, or BLTOUCH_SET_5V_MODE."
+ #endif
+ #endif
+
#if BLTOUCH_DELAY < 200
#error "BLTOUCH_DELAY less than 200 is unsafe and is not supported."
- #elif DISABLED(BLTOUCH_SET_5V_MODE) && NONE(ONBOARD_ENDSTOPPULLUPS, ENDSTOPPULLUPS, ENDSTOPPULLUP_ZMIN, ENDSTOPPULLUP_ZMIN_PROBE)
- #error "BLTOUCH without BLTOUCH_SET_5V_MODE requires ENDSTOPPULLUPS, ENDSTOPPULLUP_ZMIN or ENDSTOPPULLUP_ZMIN_PROBE."
#endif
#endif
@@ -1742,8 +1762,12 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
#endif
-#if ENABLED(MESH_EDIT_GFX_OVERLAY) && !(ENABLED(AUTO_BED_LEVELING_UBL) && EITHER(HAS_MARLINUI_U8GLIB, IS_DWIN_MARLINUI))
- #error "MESH_EDIT_GFX_OVERLAY requires AUTO_BED_LEVELING_UBL and a Graphical LCD."
+#if ENABLED(MESH_EDIT_GFX_OVERLAY)
+ #if DISABLED(AUTO_BED_LEVELING_UBL)
+ #error "MESH_EDIT_GFX_OVERLAY requires AUTO_BED_LEVELING_UBL."
+ #elif NONE(HAS_MARLINUI_U8GLIB, IS_DWIN_MARLINUI)
+ #error "MESH_EDIT_GFX_OVERLAY requires a Graphical LCD."
+ #endif
#endif
#if ENABLED(G29_RETRY_AND_RECOVER) && NONE(AUTO_BED_LEVELING_3POINT, AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_BILINEAR)
@@ -2359,46 +2383,30 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#endif
#endif
-#if E_STEPPERS
- #if !(PINS_EXIST(E0_STEP, E0_DIR) && HAS_E0_ENABLE)
- #error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board."
- #endif
- #if E_STEPPERS > 1
- #if !(PINS_EXIST(E1_STEP, E1_DIR) && HAS_E1_ENABLE)
- #error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board."
- #endif
- #if E_STEPPERS > 2
- #if !(PINS_EXIST(E2_STEP, E2_DIR) && HAS_E2_ENABLE)
- #error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board."
- #endif
- #if E_STEPPERS > 3
- #if !(PINS_EXIST(E3_STEP, E3_DIR) && HAS_E3_ENABLE)
- #error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board."
- #endif
- #if E_STEPPERS > 4
- #if !(PINS_EXIST(E4_STEP, E4_DIR) && HAS_E4_ENABLE)
- #error "E4_STEP_PIN, E4_DIR_PIN, or E4_ENABLE_PIN not defined for this board."
- #endif
- #if E_STEPPERS > 5
- #if !(PINS_EXIST(E5_STEP, E5_DIR) && HAS_E5_ENABLE)
- #error "E5_STEP_PIN, E5_DIR_PIN, or E5_ENABLE_PIN not defined for this board."
- #endif
- #if E_STEPPERS > 6
- #if !(PINS_EXIST(E6_STEP, E6_DIR) && HAS_E6_ENABLE)
- #error "E6_STEP_PIN, E6_DIR_PIN, or E6_ENABLE_PIN not defined for this board."
- #endif
- #if E_STEPPERS > 7
- #if !(PINS_EXIST(E7_STEP, E7_DIR) && HAS_E7_ENABLE)
- #error "E7_STEP_PIN, E7_DIR_PIN, or E7_ENABLE_PIN not defined for this board."
- #endif
- #endif // E_STEPPERS > 7
- #endif // E_STEPPERS > 6
- #endif // E_STEPPERS > 5
- #endif // E_STEPPERS > 4
- #endif // E_STEPPERS > 3
- #endif // E_STEPPERS > 2
- #endif // E_STEPPERS > 1
-#endif // E_STEPPERS
+#if E_STEPPERS > 0 && !(PINS_EXIST(E0_STEP, E0_DIR) && HAS_E0_ENABLE)
+ #error "E0_STEP_PIN, E0_DIR_PIN, or E0_ENABLE_PIN not defined for this board."
+#endif
+#if E_STEPPERS > 1 && !(PINS_EXIST(E1_STEP, E1_DIR) && HAS_E1_ENABLE)
+ #error "E1_STEP_PIN, E1_DIR_PIN, or E1_ENABLE_PIN not defined for this board."
+#endif
+#if E_STEPPERS > 2 && !(PINS_EXIST(E2_STEP, E2_DIR) && HAS_E2_ENABLE)
+ #error "E2_STEP_PIN, E2_DIR_PIN, or E2_ENABLE_PIN not defined for this board."
+#endif
+#if E_STEPPERS > 3 && !(PINS_EXIST(E3_STEP, E3_DIR) && HAS_E3_ENABLE)
+ #error "E3_STEP_PIN, E3_DIR_PIN, or E3_ENABLE_PIN not defined for this board."
+#endif
+#if E_STEPPERS > 4 && !(PINS_EXIST(E4_STEP, E4_DIR) && HAS_E4_ENABLE)
+ #error "E4_STEP_PIN, E4_DIR_PIN, or E4_ENABLE_PIN not defined for this board."
+#endif
+#if E_STEPPERS > 5 && !(PINS_EXIST(E5_STEP, E5_DIR) && HAS_E5_ENABLE)
+ #error "E5_STEP_PIN, E5_DIR_PIN, or E5_ENABLE_PIN not defined for this board."
+#endif
+#if E_STEPPERS > 6 && !(PINS_EXIST(E6_STEP, E6_DIR) && HAS_E6_ENABLE)
+ #error "E6_STEP_PIN, E6_DIR_PIN, or E6_ENABLE_PIN not defined for this board."
+#endif
+#if E_STEPPERS > 7 && !(PINS_EXIST(E7_STEP, E7_DIR) && HAS_E7_ENABLE)
+ #error "E7_STEP_PIN, E7_DIR_PIN, or E7_ENABLE_PIN not defined for this board."
+#endif
/**
* Endstop Tests
@@ -2668,6 +2676,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
+ COUNT_ENABLED(MKS_TS35_V2_0, MKS_ROBIN_TFT24, MKS_ROBIN_TFT28, MKS_ROBIN_TFT32, MKS_ROBIN_TFT35, MKS_ROBIN_TFT43, MKS_ROBIN_TFT_V1_1R, ANET_ET4_TFT28, ANET_ET5_TFT35) \
+ COUNT_ENABLED(TFTGLCD_PANEL_SPI, TFTGLCD_PANEL_I2C) \
+ COUNT_ENABLED(VIKI2, miniVIKI) \
+ + ENABLED(WYH_L12864) \
+ COUNT_ENABLED(ZONESTAR_12864LCD, ZONESTAR_12864OLED, ZONESTAR_12864OLED_SSD1306) \
+ COUNT_ENABLED(ANET_FULL_GRAPHICS_LCD, ANET_FULL_GRAPHICS_LCD_ALT_WIRING) \
+ ENABLED(AZSMZ_12864) \
@@ -3060,10 +3069,16 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMIN (or ENDSTOPPULLUPS) when homing to Z_MIN."
#elif Z_SENSORLESS && Z_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_ZMAX)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_ZMAX (or ENDSTOPPULLUPS) when homing to Z_MAX."
+ #elif LINEAR_AXES >= 4 && I_SENSORLESS && I_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_IMIN)
+ #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMIN (or ENDSTOPPULLUPS) when homing to I_MIN."
#elif LINEAR_AXES >= 4 && I_SENSORLESS && I_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_IMAX)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_IMAX (or ENDSTOPPULLUPS) when homing to I_MAX."
+ #elif LINEAR_AXES >= 5 && J_SENSORLESS && J_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_JMIN)
+ #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMIN (or ENDSTOPPULLUPS) when homing to J_MIN."
#elif LINEAR_AXES >= 5 && J_SENSORLESS && J_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_JMAX)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_JMAX (or ENDSTOPPULLUPS) when homing to J_MAX."
+ #elif LINEAR_AXES >= 6 && K_SENSORLESS && K_HOME_TO_MIN && DISABLED(ENDSTOPPULLUP_KMIN)
+ #error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMIN (or ENDSTOPPULLUPS) when homing to K_MIN."
#elif LINEAR_AXES >= 6 && K_SENSORLESS && K_HOME_TO_MAX && DISABLED(ENDSTOPPULLUP_KMAX)
#error "SENSORLESS_HOMING requires ENDSTOPPULLUP_KMAX (or ENDSTOPPULLUPS) when homing to K_MAX."
#endif
@@ -3283,82 +3298,64 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
/**
* Check per-axis initializers for errors
*/
-constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT,
- sanity_arr_2[] = DEFAULT_MAX_FEEDRATE,
- sanity_arr_3[] = DEFAULT_MAX_ACCELERATION,
- sanity_arr_7[] = HOMING_FEEDRATE_MM_M;
-#define _ARR_TEST(N,I) (sanity_arr_##N[_MIN(I,int(COUNT(sanity_arr_##N))-1)] > 0)
+#define __PLUS_TEST(I,A) && (sanity_arr_##A[_MIN(I,signed(COUNT(sanity_arr_##A)-1))] > 0)
+#define _PLUS_TEST(A) (1 REPEAT2(14,__PLUS_TEST,A))
#if HAS_MULTI_EXTRUDER
#define _EXTRA_NOTE " (Did you forget to enable DISTINCT_E_FACTORS?)"
#else
#define _EXTRA_NOTE " (Should be " STRINGIFY(LINEAR_AXES) "+" STRINGIFY(E_STEPPERS) ")"
#endif
+constexpr float sanity_arr_1[] = DEFAULT_AXIS_STEPS_PER_UNIT;
static_assert(COUNT(sanity_arr_1) >= LOGICAL_AXES, "DEFAULT_AXIS_STEPS_PER_UNIT requires " _LOGICAL_AXES_STR "elements.");
static_assert(COUNT(sanity_arr_1) <= DISTINCT_AXES, "DEFAULT_AXIS_STEPS_PER_UNIT has too many elements." _EXTRA_NOTE);
-static_assert( _ARR_TEST(1,0) && _ARR_TEST(1,1) && _ARR_TEST(1,2)
- && _ARR_TEST(1,3) && _ARR_TEST(1,4) && _ARR_TEST(1,5)
- && _ARR_TEST(1,6) && _ARR_TEST(1,7) && _ARR_TEST(1,8),
- "DEFAULT_AXIS_STEPS_PER_UNIT values must be positive.");
+static_assert(_PLUS_TEST(1), "DEFAULT_AXIS_STEPS_PER_UNIT values must be positive.");
+constexpr float sanity_arr_2[] = DEFAULT_MAX_FEEDRATE;
static_assert(COUNT(sanity_arr_2) >= LOGICAL_AXES, "DEFAULT_MAX_FEEDRATE requires " _LOGICAL_AXES_STR "elements.");
static_assert(COUNT(sanity_arr_2) <= DISTINCT_AXES, "DEFAULT_MAX_FEEDRATE has too many elements." _EXTRA_NOTE);
-static_assert( _ARR_TEST(2,0) && _ARR_TEST(2,1) && _ARR_TEST(2,2)
- && _ARR_TEST(2,3) && _ARR_TEST(2,4) && _ARR_TEST(2,5)
- && _ARR_TEST(2,6) && _ARR_TEST(2,7) && _ARR_TEST(2,8),
- "DEFAULT_MAX_FEEDRATE values must be positive.");
+static_assert(_PLUS_TEST(2), "DEFAULT_MAX_FEEDRATE values must be positive.");
+constexpr float sanity_arr_3[] = DEFAULT_MAX_ACCELERATION;
static_assert(COUNT(sanity_arr_3) >= LOGICAL_AXES, "DEFAULT_MAX_ACCELERATION requires " _LOGICAL_AXES_STR "elements.");
static_assert(COUNT(sanity_arr_3) <= DISTINCT_AXES, "DEFAULT_MAX_ACCELERATION has too many elements." _EXTRA_NOTE);
-static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
- && _ARR_TEST(3,3) && _ARR_TEST(3,4) && _ARR_TEST(3,5)
- && _ARR_TEST(3,6) && _ARR_TEST(3,7) && _ARR_TEST(3,8),
- "DEFAULT_MAX_ACCELERATION values must be positive.");
+static_assert(_PLUS_TEST(3), "DEFAULT_MAX_ACCELERATION values must be positive.");
-static_assert(COUNT(sanity_arr_7) == LINEAR_AXES, "HOMING_FEEDRATE_MM_M requires " _LINEAR_AXES_STR "elements (and no others).");
-static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
- && _ARR_TEST(3,3) && _ARR_TEST(3,4) && _ARR_TEST(3,5)
- && _ARR_TEST(3,6) && _ARR_TEST(3,7) && _ARR_TEST(3,8),
- "HOMING_FEEDRATE_MM_M values must be positive.");
+constexpr float sanity_arr_4[] = HOMING_FEEDRATE_MM_M;
+static_assert(COUNT(sanity_arr_4) == LINEAR_AXES, "HOMING_FEEDRATE_MM_M requires " _LINEAR_AXES_STR "elements (and no others).");
+static_assert(_PLUS_TEST(4), "HOMING_FEEDRATE_MM_M values must be positive.");
-#if ENABLED(LIMITED_MAX_ACCEL_EDITING)
- #ifdef MAX_ACCEL_EDIT_VALUES
- constexpr float sanity_arr_4[] = MAX_ACCEL_EDIT_VALUES;
- static_assert(COUNT(sanity_arr_4) >= LOGICAL_AXES, "MAX_ACCEL_EDIT_VALUES requires " _LOGICAL_AXES_STR "elements.");
- static_assert(COUNT(sanity_arr_4) <= LOGICAL_AXES, "MAX_ACCEL_EDIT_VALUES has too many elements. " _LOGICAL_AXES_STR "elements only.");
- static_assert( _ARR_TEST(4,0) && _ARR_TEST(4,1) && _ARR_TEST(4,2)
- && _ARR_TEST(4,3) && _ARR_TEST(4,4) && _ARR_TEST(4,5)
- && _ARR_TEST(4,6) && _ARR_TEST(4,7) && _ARR_TEST(4,8),
- "MAX_ACCEL_EDIT_VALUES values must be positive.");
- #endif
+#ifdef MAX_ACCEL_EDIT_VALUES
+ constexpr float sanity_arr_5[] = MAX_ACCEL_EDIT_VALUES;
+ static_assert(COUNT(sanity_arr_5) >= LOGICAL_AXES, "MAX_ACCEL_EDIT_VALUES requires " _LOGICAL_AXES_STR "elements.");
+ static_assert(COUNT(sanity_arr_5) <= LOGICAL_AXES, "MAX_ACCEL_EDIT_VALUES has too many elements. " _LOGICAL_AXES_STR "elements only.");
+ static_assert(_PLUS_TEST(5), "MAX_ACCEL_EDIT_VALUES values must be positive.");
#endif
-#if ENABLED(LIMITED_MAX_FR_EDITING)
- #ifdef MAX_FEEDRATE_EDIT_VALUES
- constexpr float sanity_arr_5[] = MAX_FEEDRATE_EDIT_VALUES;
- static_assert(COUNT(sanity_arr_5) >= LOGICAL_AXES, "MAX_FEEDRATE_EDIT_VALUES requires " _LOGICAL_AXES_STR "elements.");
- static_assert(COUNT(sanity_arr_5) <= LOGICAL_AXES, "MAX_FEEDRATE_EDIT_VALUES has too many elements. " _LOGICAL_AXES_STR "elements only.");
- static_assert( _ARR_TEST(5,0) && _ARR_TEST(5,1) && _ARR_TEST(5,2)
- && _ARR_TEST(5,3) && _ARR_TEST(5,4) && _ARR_TEST(5,5)
- && _ARR_TEST(5,6) && _ARR_TEST(5,7) && _ARR_TEST(5,8),
- "MAX_FEEDRATE_EDIT_VALUES values must be positive.");
- #endif
+#ifdef MAX_FEEDRATE_EDIT_VALUES
+ constexpr float sanity_arr_6[] = MAX_FEEDRATE_EDIT_VALUES;
+ static_assert(COUNT(sanity_arr_6) >= LOGICAL_AXES, "MAX_FEEDRATE_EDIT_VALUES requires " _LOGICAL_AXES_STR "elements.");
+ static_assert(COUNT(sanity_arr_6) <= LOGICAL_AXES, "MAX_FEEDRATE_EDIT_VALUES has too many elements. " _LOGICAL_AXES_STR "elements only.");
+ static_assert(_PLUS_TEST(6), "MAX_FEEDRATE_EDIT_VALUES values must be positive.");
#endif
-#if ENABLED(LIMITED_JERK_EDITING)
- #ifdef MAX_JERK_EDIT_VALUES
- constexpr float sanity_arr_6[] = MAX_JERK_EDIT_VALUES;
- static_assert(COUNT(sanity_arr_6) >= LOGICAL_AXES, "MAX_JERK_EDIT_VALUES requires " _LOGICAL_AXES_STR "elements.");
- static_assert(COUNT(sanity_arr_6) <= LOGICAL_AXES, "MAX_JERK_EDIT_VALUES has too many elements. " _LOGICAL_AXES_STR "elements only.");
- static_assert( _ARR_TEST(6,0) && _ARR_TEST(6,1) && _ARR_TEST(6,2)
- && _ARR_TEST(6,3) && _ARR_TEST(6,4) && _ARR_TEST(6,5)
- && _ARR_TEST(6,6) && _ARR_TEST(6,7) && _ARR_TEST(6,8),
- "MAX_JERK_EDIT_VALUES values must be positive.");
- #endif
+#ifdef MAX_JERK_EDIT_VALUES
+ constexpr float sanity_arr_7[] = MAX_JERK_EDIT_VALUES;
+ static_assert(COUNT(sanity_arr_7) >= LOGICAL_AXES, "MAX_JERK_EDIT_VALUES requires " _LOGICAL_AXES_STR "elements.");
+ static_assert(COUNT(sanity_arr_7) <= LOGICAL_AXES, "MAX_JERK_EDIT_VALUES has too many elements. " _LOGICAL_AXES_STR "elements only.");
+ static_assert(_PLUS_TEST(7), "MAX_JERK_EDIT_VALUES values must be positive.");
#endif
-#undef _ARR_TEST
+#ifdef MANUAL_FEEDRATE
+ constexpr float sanity_arr_8[] = MANUAL_FEEDRATE;
+ static_assert(COUNT(sanity_arr_8) >= LOGICAL_AXES, "MANUAL_FEEDRATE requires " _LOGICAL_AXES_STR "elements.");
+ static_assert(COUNT(sanity_arr_8) <= LOGICAL_AXES, "MANUAL_FEEDRATE has too many elements. " _LOGICAL_AXES_STR "elements only.");
+ static_assert(_PLUS_TEST(8), "MANUAL_FEEDRATE values must be positive.");
+#endif
+
+#undef __PLUS_TEST
+#undef _PLUS_TEST
#undef _EXTRA_NOTE
#if BOTH(CNC_COORDINATE_SYSTEMS, NO_WORKSPACE_OFFSETS)
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index be693c73c8..264f24e3bc 100644
--- a/Marlin/src/inc/Version.h
+++ b/Marlin/src/inc/Version.h
@@ -42,7 +42,7 @@
* version was tagged.
*/
#ifndef STRING_DISTRIBUTION_DATE
- #define STRING_DISTRIBUTION_DATE "2021-09-14"
+ #define STRING_DISTRIBUTION_DATE "2021-10-09"
#endif
/**
diff --git a/Marlin/src/inc/Warnings.cpp b/Marlin/src/inc/Warnings.cpp
new file mode 100644
index 0000000000..fbec990fa7
--- /dev/null
+++ b/Marlin/src/inc/Warnings.cpp
@@ -0,0 +1,462 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+/**
+ * Warnings.cpp
+ * Test configuration values and give warnings at compile-time.
+ */
+
+#include "MarlinConfig.h"
+
+//
+// Warnings! Located here so they will appear just once in the build output.
+//
+
+#if ENABLED(MARLIN_DEV_MODE)
+ #warning "WARNING! Disable MARLIN_DEV_MODE for the final build!"
+#endif
+
+#if NONE(HAS_RESUME_CONTINUE, HOST_PROMPT_SUPPORT)
+ #warning "Your Configuration provides no method to acquire user feedback!"
+#endif
+
+#if AUTO_ASSIGNED_X2_STEPPER
+ #warning "Auto-assigned X2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_X2_MS1
+ #warning "Auto-assigned X2_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_X2_MS2
+ #warning "Auto-assigned X2_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_X2_MS3
+ #warning "Auto-assigned X2_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_X2_CS
+ #warning "Auto-assigned X2_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_X2_DIAG
+ #if X2_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned X2_DIAG_PIN to X_MIN_PIN."
+ #elif X2_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned X2_DIAG_PIN to X_MAX_PIN."
+ #elif X2_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned X2_DIAG_PIN to Y_MIN_PIN."
+ #elif X2_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned X2_DIAG_PIN to Y_MAX_PIN."
+ #elif X2_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned X2_DIAG_PIN to Z_MIN_PIN."
+ #elif X2_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned X2_DIAG_PIN to Z_MAX_PIN."
+ #elif X2_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to X_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to Y_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to Z_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E0_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E1_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E2_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E3_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E4_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E5_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E6_DIAG_PIN."
+ #elif X2_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned X2_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+#if AUTO_ASSIGNED_Y2_STEPPER
+ #warning "Auto-assigned Y2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_Y2_MS1
+ #warning "Auto-assigned Y2_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_Y2_MS2
+ #warning "Auto-assigned Y2_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_Y2_MS3
+ #warning "Auto-assigned Y2_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_Y2_CS
+ #warning "Auto-assigned Y2_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_Y2_DIAG
+ #if Y2_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned Y2_DIAG_PIN to X_MIN_PIN."
+ #elif Y2_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned Y2_DIAG_PIN to X_MAX_PIN."
+ #elif Y2_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned Y2_DIAG_PIN to Y_MIN_PIN."
+ #elif Y2_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned Y2_DIAG_PIN to Y_MAX_PIN."
+ #elif Y2_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned Y2_DIAG_PIN to Z_MIN_PIN."
+ #elif Y2_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned Y2_DIAG_PIN to Z_MAX_PIN."
+ #elif Y2_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to X_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to Y_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to Z_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E0_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E1_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E2_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E3_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E4_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E5_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E6_DIAG_PIN."
+ #elif Y2_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned Y2_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+#if AUTO_ASSIGNED_Z2_STEPPER
+ #warning "Auto-assigned Z2 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_Z2_MS1
+ #warning "Auto-assigned Z2_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_Z2_MS2
+ #warning "Auto-assigned Z2_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_Z2_MS3
+ #warning "Auto-assigned Z2_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_Z2_CS
+ #warning "Auto-assigned Z2_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_Z2_DIAG
+ #if Z2_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned Z2_DIAG_PIN to X_MIN_PIN."
+ #elif Z2_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned Z2_DIAG_PIN to X_MAX_PIN."
+ #elif Z2_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned Z2_DIAG_PIN to Y_MIN_PIN."
+ #elif Z2_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned Z2_DIAG_PIN to Y_MAX_PIN."
+ #elif Z2_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned Z2_DIAG_PIN to Z_MIN_PIN."
+ #elif Z2_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned Z2_DIAG_PIN to Z_MAX_PIN."
+ #elif Z2_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to X_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to Y_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to Z_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E0_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E1_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E2_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E3_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E4_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E5_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E6_DIAG_PIN."
+ #elif Z2_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned Z2_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+#if AUTO_ASSIGNED_Z3_STEPPER
+ #warning "Auto-assigned Z3 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_Z3_CS
+ #warning "Auto-assigned Z3_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_Z3_MS1
+ #warning "Auto-assigned Z3_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_Z3_MS2
+ #warning "Auto-assigned Z3_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_Z3_MS3
+ #warning "Auto-assigned Z3_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_Z3_DIAG
+ #if Z3_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned Z3_DIAG_PIN to X_MIN_PIN."
+ #elif Z3_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned Z3_DIAG_PIN to X_MAX_PIN."
+ #elif Z3_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned Z3_DIAG_PIN to Y_MIN_PIN."
+ #elif Z3_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned Z3_DIAG_PIN to Y_MAX_PIN."
+ #elif Z3_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned Z3_DIAG_PIN to Z_MIN_PIN."
+ #elif Z3_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned Z3_DIAG_PIN to Z_MAX_PIN."
+ #elif Z3_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to X_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to Y_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to Z_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E0_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E1_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E2_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E3_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E4_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E5_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E6_DIAG_PIN."
+ #elif Z3_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned Z3_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+#if AUTO_ASSIGNED_Z4_STEPPER
+ #warning "Auto-assigned Z4 STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_Z4_CS
+ #warning "Auto-assigned Z4_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_Z4_MS1
+ #warning "Auto-assigned Z4_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_Z4_MS2
+ #warning "Auto-assigned Z4_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_Z4_MS3
+ #warning "Auto-assigned Z4_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_Z4_DIAG
+ #if Z4_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned Z4_DIAG_PIN to X_MIN_PIN."
+ #elif Z4_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned Z4_DIAG_PIN to X_MAX_PIN."
+ #elif Z4_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned Z4_DIAG_PIN to Y_MIN_PIN."
+ #elif Z4_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned Z4_DIAG_PIN to Y_MAX_PIN."
+ #elif Z4_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned Z4_DIAG_PIN to Z_MIN_PIN."
+ #elif Z4_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned Z4_DIAG_PIN to Z_MAX_PIN."
+ #elif Z4_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to X_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to Y_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to Z_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E0_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E1_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E2_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E3_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E4_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E5_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E6_DIAG_PIN."
+ #elif Z4_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned Z4_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+#if AUTO_ASSIGNED_I_STEPPER
+ #warning "Auto-assigned I STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_I_CS
+ #warning "Auto-assigned I_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_I_MS1
+ #warning "Auto-assigned I_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_I_MS2
+ #warning "Auto-assigned I_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_I_MS3
+ #warning "Auto-assigned I_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_I_DIAG
+ #if I_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned I_DIAG_PIN to X_MIN_PIN."
+ #elif I_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned I_DIAG_PIN to X_MAX_PIN."
+ #elif I_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned I_DIAG_PIN to Y_MIN_PIN."
+ #elif I_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned I_DIAG_PIN to Y_MAX_PIN."
+ #elif I_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned I_DIAG_PIN to Z_MIN_PIN."
+ #elif I_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned I_DIAG_PIN to Z_MAX_PIN."
+ #elif I_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned I_DIAG_PIN to X_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned I_DIAG_PIN to Y_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned I_DIAG_PIN to Z_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E0_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E1_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E2_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E3_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E4_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E5_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E6_DIAG_PIN."
+ #elif I_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned I_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+#if AUTO_ASSIGNED_J_STEPPER
+ #warning "Auto-assigned J STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_J_CS
+ #warning "Auto-assigned J_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_J_MS1
+ #warning "Auto-assigned J_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_J_MS2
+ #warning "Auto-assigned J_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_J_MS3
+ #warning "Auto-assigned J_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_J_DIAG
+ #if J_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned J_DIAG_PIN to X_MIN_PIN."
+ #elif J_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned J_DIAG_PIN to X_MAX_PIN."
+ #elif J_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned J_DIAG_PIN to Y_MIN_PIN."
+ #elif J_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned J_DIAG_PIN to Y_MAX_PIN."
+ #elif J_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned J_DIAG_PIN to Z_MIN_PIN."
+ #elif J_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned J_DIAG_PIN to Z_MAX_PIN."
+ #elif J_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned J_DIAG_PIN to X_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned J_DIAG_PIN to Y_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned J_DIAG_PIN to Z_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E0_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E1_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E2_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E3_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E4_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E5_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E6_DIAG_PIN."
+ #elif J_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned J_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+#if AUTO_ASSIGNED_K_STEPPER
+ #warning "Auto-assigned K STEP/DIR/ENABLE_PINs to unused En_STEP/DIR/ENABLE_PINs."
+#endif
+#if AUTO_ASSIGNED_K_CS
+ #warning "Auto-assigned K_CS_PIN to an unused En_CS_PIN."
+#endif
+#if AUTO_ASSIGNED_K_MS1
+ #warning "Auto-assigned K_MS1_PIN to an unused En_MS1_PIN."
+#endif
+#if AUTO_ASSIGNED_K_MS2
+ #warning "Auto-assigned K_MS2_PIN to an unused En_MS2_PIN."
+#endif
+#if AUTO_ASSIGNED_K_MS3
+ #warning "Auto-assigned K_MS3_PIN to an unused En_MS3_PIN."
+#endif
+#if AUTO_ASSIGNED_K_DIAG
+ #if K_USE_ENDSTOP == _XMIN_
+ #warning "Auto-assigned K_DIAG_PIN to X_MIN_PIN."
+ #elif K_USE_ENDSTOP == _XMAX_
+ #warning "Auto-assigned K_DIAG_PIN to X_MAX_PIN."
+ #elif K_USE_ENDSTOP == _YMIN_
+ #warning "Auto-assigned K_DIAG_PIN to Y_MIN_PIN."
+ #elif K_USE_ENDSTOP == _YMAX_
+ #warning "Auto-assigned K_DIAG_PIN to Y_MAX_PIN."
+ #elif K_USE_ENDSTOP == _ZMIN_
+ #warning "Auto-assigned K_DIAG_PIN to Z_MIN_PIN."
+ #elif K_USE_ENDSTOP == _ZMAX_
+ #warning "Auto-assigned K_DIAG_PIN to Z_MAX_PIN."
+ #elif K_USE_ENDSTOP == _XDIAG_
+ #warning "Auto-assigned K_DIAG_PIN to X_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _YDIAG_
+ #warning "Auto-assigned K_DIAG_PIN to Y_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _ZDIAG_
+ #warning "Auto-assigned K_DIAG_PIN to Z_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E0DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E0_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E1DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E1_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E2DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E2_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E3DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E3_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E4DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E4_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E5DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E5_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E6DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E6_DIAG_PIN."
+ #elif K_USE_ENDSTOP == _E7DIAG_
+ #warning "Auto-assigned K_DIAG_PIN to E7_DIAG_PIN."
+ #endif
+#endif
+
+// Ender 3 Pro (but, apparently all Creality 4.2.2 boards)
+#if ENABLED(EMIT_CREALITY_422_WARNING) || MB(CREALITY_V4)
+ #warning "Creality 4.2.2 boards may have A4988 or TMC2208_STANDALONE drivers. Check your board and make sure to select the correct DRIVER_TYPE!"
+#endif
diff --git a/Marlin/src/lcd/HD44780/lcdprint_hd44780.cpp b/Marlin/src/lcd/HD44780/lcdprint_hd44780.cpp
index 8aca19b0cd..31b26aa5bb 100644
--- a/Marlin/src/lcd/HD44780/lcdprint_hd44780.cpp
+++ b/Marlin/src/lcd/HD44780/lcdprint_hd44780.cpp
@@ -1,3 +1,25 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
/**
* @file lcdprint_hd44780.cpp
* @brief LCD print api for HD44780
@@ -1041,8 +1063,8 @@ int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
return lcd_put_u8str_max_cb(utf8_str, read_byte_ram, max_length);
}
-int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length) {
- return lcd_put_u8str_max_cb(utf8_str_P, read_byte_rom, max_length);
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
+ return lcd_put_u8str_max_cb(utf8_pstr, read_byte_rom, max_length);
}
#if ENABLED(DEBUG_LCDPRINT)
diff --git a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
index f4d765e2d3..b450c9c10f 100644
--- a/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
+++ b/Marlin/src/lcd/HD44780/marlinui_HD44780.cpp
@@ -409,15 +409,15 @@ void MarlinUI::clear_lcd() { lcd.clear(); }
}
// Scroll the PSTR 'text' in a 'len' wide field for 'time' milliseconds at position col,line
- void lcd_scroll(const lcd_uint_t col, const lcd_uint_t line, PGM_P const text, const uint8_t len, const int16_t time) {
- uint8_t slen = utf8_strlen_P(text);
+ void lcd_scroll(const lcd_uint_t col, const lcd_uint_t line, FSTR_P const ftxt, const uint8_t len, const int16_t time) {
+ uint8_t slen = utf8_strlen_P(FTOP(ftxt));
if (slen < len) {
- lcd_put_u8str_max_P(col, line, text, len);
+ lcd_put_u8str_max(col, line, ftxt, len);
for (; slen < len; ++slen) lcd_put_wchar(' ');
safe_delay(time);
}
else {
- PGM_P p = text;
+ PGM_P p = FTOP(ftxt);
int dly = time / _MAX(slen, 1);
LOOP_LE_N(i, slen) {
@@ -439,9 +439,9 @@ void MarlinUI::clear_lcd() { lcd.clear(); }
static void logo_lines(PGM_P const extra) {
int16_t indent = (LCD_WIDTH - 8 - utf8_strlen_P(extra)) / 2;
- lcd_put_wchar(indent, 0, '\x00'); lcd_put_u8str_P(PSTR( "------" )); lcd_put_wchar('\x01');
- lcd_put_u8str_P(indent, 1, PSTR("|Marlin|")); lcd_put_u8str_P(extra);
- lcd_put_wchar(indent, 2, '\x02'); lcd_put_u8str_P(PSTR( "------" )); lcd_put_wchar('\x03');
+ lcd_put_wchar(indent, 0, '\x00'); lcd_put_u8str(F( "------" )); lcd_put_wchar('\x01');
+ lcd_put_u8str(indent, 1, F("|Marlin|")); lcd_put_u8str_P(extra);
+ lcd_put_wchar(indent, 2, '\x02'); lcd_put_u8str(F( "------" )); lcd_put_wchar('\x03');
}
void MarlinUI::show_bootscreen() {
@@ -450,15 +450,16 @@ void MarlinUI::clear_lcd() { lcd.clear(); }
#define LCD_EXTRA_SPACE (LCD_WIDTH-8)
- #define CENTER_OR_SCROLL(STRING,DELAY) \
+ #define CENTER_OR_SCROLL(STRING,DELAY) { \
lcd_erase_line(3); \
- if (utf8_strlen(STRING) <= LCD_WIDTH) { \
- lcd_put_u8str_P((LCD_WIDTH - utf8_strlen_P(PSTR(STRING))) / 2, 3, PSTR(STRING)); \
+ const int len = utf8_strlen(STRING); \
+ if (len <= LCD_WIDTH) { \
+ lcd_put_u8str((LCD_WIDTH - len) / 2, 3, F(STRING)); \
safe_delay(DELAY); \
} \
- else { \
- lcd_scroll(0, 3, PSTR(STRING), LCD_WIDTH, DELAY); \
- }
+ else \
+ lcd_scroll(0, 3, F(STRING), LCD_WIDTH, DELAY); \
+ }
//
// Show the Marlin logo with splash line 1
@@ -497,9 +498,9 @@ void MarlinUI::draw_kill_screen() {
lcd_put_u8str(0, 0, status_message);
lcd_uint_t y = 2;
#if LCD_HEIGHT >= 4
- lcd_put_u8str_P(0, y++, GET_TEXT(MSG_HALTED));
+ lcd_put_u8str(0, y++, GET_TEXT_F(MSG_HALTED));
#endif
- lcd_put_u8str_P(0, y, GET_TEXT(MSG_PLEASE_RESET));
+ lcd_put_u8str(0, y, GET_TEXT_F(MSG_PLEASE_RESET));
}
//
@@ -514,7 +515,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
else if (axis_should_home(axis))
while (const char c = *value++) lcd_put_wchar(c <= '.' ? c : '?');
else if (NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) && !axis_is_trusted(axis))
- lcd_put_u8str_P(axis == Z_AXIS ? PSTR(" ") : PSTR(" "));
+ lcd_put_u8str(axis == Z_AXIS ? F(" ") : F(" "));
else
lcd_put_u8str(value);
}
@@ -613,11 +614,11 @@ FORCE_INLINE void _draw_bed_status(const bool blink) {
FORCE_INLINE void _draw_print_progress() {
const uint8_t progress = ui.get_progress_percent();
- lcd_put_u8str_P(PSTR(TERN(SDSUPPORT, "SD", "P:")));
+ lcd_put_u8str(F(TERN(SDSUPPORT, "SD", "P:")));
if (progress)
lcd_put_u8str(ui8tostr3rj(progress));
else
- lcd_put_u8str_P(PSTR("---"));
+ lcd_put_u8str(F("---"));
lcd_put_wchar('%');
}
@@ -661,9 +662,9 @@ void MarlinUI::draw_status_message(const bool blink) {
// Alternate Status message and Filament display
if (ELAPSED(millis(), next_filament_display)) {
- lcd_put_u8str_P(PSTR("Dia "));
+ lcd_put_u8str(F("Dia "));
lcd_put_u8str(ftostr12ns(filwidth.measured_mm));
- lcd_put_u8str_P(PSTR(" V"));
+ lcd_put_u8str(F(" V"));
lcd_put_u8str(i16tostr3rj(planner.volumetric_percent(parser.volumetric_enabled)));
lcd_put_wchar('%');
return;
@@ -1473,7 +1474,7 @@ void MarlinUI::draw_status_screen() {
if (!isnan(ubl.z_values[x_plot][y_plot]))
lcd_put_u8str(ftostr43sign(ubl.z_values[x_plot][y_plot]));
else
- lcd_put_u8str_P(PSTR(" -----"));
+ lcd_put_u8str(F(" -----"));
#else // 16x4 or 20x4 display
@@ -1492,7 +1493,7 @@ void MarlinUI::draw_status_screen() {
if (!isnan(ubl.z_values[x_plot][y_plot]))
lcd_put_u8str(ftostr43sign(ubl.z_values[x_plot][y_plot]));
else
- lcd_put_u8str_P(PSTR(" -----"));
+ lcd_put_u8str(F(" -----"));
#endif // LCD_HEIGHT > 3
}
diff --git a/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp
index dddab1f259..106ce76138 100644
--- a/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp
+++ b/Marlin/src/lcd/TFTGLCD/lcdprint_TFTGLCD.cpp
@@ -1061,8 +1061,8 @@ int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
return lcd_put_u8str_max_cb(utf8_str, read_byte_ram, max_length);
}
-int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length) {
- return lcd_put_u8str_max_cb(utf8_str_P, read_byte_rom, max_length);
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
+ return lcd_put_u8str_max_cb(utf8_pstr, read_byte_rom, max_length);
}
#if ENABLED(DEBUG_LCDPRINT)
diff --git a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp
index 712e76e86f..420bd7cd66 100644
--- a/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp
+++ b/Marlin/src/lcd/TFTGLCD/marlinui_TFTGLCD.cpp
@@ -376,12 +376,9 @@ void MarlinUI::clear_lcd() {
lcd.clear_buffer();
}
-int16_t MarlinUI::contrast; // Initialized by settings.load()
-
-void MarlinUI::set_contrast(const int16_t value) {
- contrast = constrain(value, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX);
- lcd.setContrast(contrast);
-}
+#if HAS_LCD_CONTRAST
+ void MarlinUI::_set_contrast() { lcd.setContrast(contrast); }
+#endif
static void center_text_P(PGM_P pstart, uint8_t y) {
uint8_t len = utf8_strlen_P(pstart);
@@ -402,9 +399,9 @@ static void center_text_P(PGM_P pstart, uint8_t y) {
uint8_t indent = (LCD_WIDTH - 8) / 2;
// symbols 217 (bottom right corner) and 218 (top left corner) are using for letters in some languages
// and they should be moved to beginning ASCII table as special symbols
- lcd.setCursor(indent, 0); lcd.write(TLC); lcd_put_u8str_P(PSTR("------")); lcd.write(TRC);
- lcd.setCursor(indent, 1); lcd.write(LR); lcd_put_u8str_P(PSTR("Marlin")); lcd.write(LR);
- lcd.setCursor(indent, 2); lcd.write(BLC); lcd_put_u8str_P(PSTR("------")); lcd.write(BRC);
+ lcd.setCursor(indent, 0); lcd.write(TLC); lcd_put_u8str(F("------")); lcd.write(TRC);
+ lcd.setCursor(indent, 1); lcd.write(LR); lcd_put_u8str(F("Marlin")); lcd.write(LR);
+ lcd.setCursor(indent, 2); lcd.write(BLC); lcd_put_u8str(F("------")); lcd.write(BRC);
center_text_P(PSTR(SHORT_BUILD_VERSION), 3);
center_text_P(PSTR(MARLIN_WEBSITE_URL), 4);
picBits = ICON_LOGO;
@@ -440,7 +437,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
else if (axis_should_home(axis))
while (const char c = *value++) lcd.write(c <= '.' ? c : '?');
else if (NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) && !axis_is_trusted(axis))
- lcd_put_u8str_P(axis == Z_AXIS ? PSTR(" ") : PSTR(" "));
+ lcd_put_u8str(axis == Z_AXIS ? F(" ") : F(" "));
else
lcd_put_u8str(value);
}
@@ -518,7 +515,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
FORCE_INLINE void _draw_cooler_status(const bool blink) {
const celsius_t t2 = thermalManager.degTargetCooler();
- lcd.setCursor(0, 5); lcd_put_u8str_P(PSTR("COOL"));
+ lcd.setCursor(0, 5); lcd_put_u8str(F("COOL"));
lcd.setCursor(1, 6); lcd_put_u8str(i16tostr3rj(thermalManager.wholeDegCooler()));
lcd.setCursor(1, 7);
@@ -546,7 +543,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
#if ENABLED(LASER_COOLANT_FLOW_METER)
FORCE_INLINE void _draw_flowmeter_status() {
- lcd.setCursor(5, 5); lcd_put_u8str_P(PSTR("FLOW"));
+ lcd.setCursor(5, 5); lcd_put_u8str(F("FLOW"));
lcd.setCursor(7, 6); lcd_put_wchar('L');
lcd.setCursor(6, 7); lcd_put_u8str(ftostr11ns(cooler.flowrate));
@@ -559,7 +556,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
#if ENABLED(I2C_AMMETER)
FORCE_INLINE void _draw_ammeter_status() {
- lcd.setCursor(10, 5); lcd_put_u8str_P(PSTR("ILAZ"));
+ lcd.setCursor(10, 5); lcd_put_u8str(F("ILAZ"));
ammeter.read();
lcd.setCursor(11, 6);
if (ammeter.current <= 0.999f)
@@ -583,9 +580,9 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
#if HAS_CUTTER
FORCE_INLINE void _draw_cutter_status() {
- lcd.setCursor(15, 5); lcd_put_u8str_P(PSTR("CUTT"));
+ lcd.setCursor(15, 5); lcd_put_u8str(F("CUTT"));
#if CUTTER_UNIT_IS(RPM)
- lcd.setCursor(16, 6); lcd_put_u8str_P(PSTR("RPM"));
+ lcd.setCursor(16, 6); lcd_put_u8str(F("RPM"));
lcd.setCursor(15, 7); lcd_put_u8str(ftostr31ns(float(cutter.unitPower) / 1000));
lcd_put_wchar('K');
#elif CUTTER_UNIT_IS(PERCENT)
@@ -607,14 +604,14 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
if (!PanelDetected) return;
const uint8_t progress = ui._get_progress();
#if ENABLED(SDSUPPORT)
- lcd_put_u8str_P(PSTR("SD"));
+ lcd_put_u8str(F("SD"));
#elif ENABLED(LCD_SET_PROGRESS_MANUALLY)
- lcd_put_u8str_P(PSTR("P:"));
+ lcd_put_u8str(F("P:"));
#endif
if (progress)
lcd.print(ui8tostr3rj(progress));
else
- lcd_put_u8str_P(PSTR("---"));
+ lcd_put_u8str(F("---"));
lcd.write('%');
}
@@ -646,9 +643,9 @@ void MarlinUI::draw_status_message(const bool blink) {
// Alternate Status message and Filament display
if (ELAPSED(millis(), next_filament_display)) {
- lcd_put_u8str_P(PSTR("Dia "));
+ lcd_put_u8str(F("Dia "));
lcd.print(ftostr12ns(filament_width_meas));
- lcd_put_u8str_P(PSTR(" V"));
+ lcd_put_u8str(F(" V"));
lcd.print(i16tostr3rj(100.0 * (
parser.volumetric_enabled
? planner.volumetric_area_nominal / planner.volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM]
@@ -805,7 +802,7 @@ void MarlinUI::draw_status_screen() {
//
lcd.setCursor(0, 1);
- lcd_put_u8str_P(PSTR("FR")); lcd.print(i16tostr3rj(feedrate_percentage)); lcd.write('%');
+ lcd_put_u8str(F("FR")); lcd.print(i16tostr3rj(feedrate_percentage)); lcd.write('%');
#if BOTH(SDSUPPORT, HAS_PRINT_PROGRESS)
lcd.setCursor(LCD_WIDTH / 2 - 3, 1);
@@ -898,7 +895,7 @@ void MarlinUI::draw_status_screen() {
#else
#define FANX 17
#endif
- lcd.setCursor(FANX, 5); lcd_put_u8str_P(PSTR("FAN"));
+ lcd.setCursor(FANX, 5); lcd_put_u8str(F("FAN"));
lcd.setCursor(FANX + 1, 6); lcd.write('%');
lcd.setCursor(FANX, 7);
lcd.print(i16tostr3rj(per));
@@ -934,7 +931,7 @@ void MarlinUI::draw_status_screen() {
void MarlinUI::draw_hotend_status(const uint8_t row, const uint8_t extruder) {
if (!PanelDetected) return;
lcd.setCursor((LCD_WIDTH - 14) / 2, row + 1);
- lcd.write(LCD_STR_THERMOMETER[0]); lcd_put_u8str_P(PSTR(" E")); lcd.write('1' + extruder); lcd.write(' ');
+ lcd.write(LCD_STR_THERMOMETER[0]); lcd_put_u8str(F(" E")); lcd.write('1' + extruder); lcd.write(' ');
lcd.print(i16tostr3rj(thermalManager.wholeDegHotend(extruder))); lcd.write(LCD_STR_DEGREE[0]); lcd.write('/');
lcd.print(i16tostr3rj(thermalManager.degTargetHotend(extruder))); lcd.write(LCD_STR_DEGREE[0]);
lcd.print_line();
@@ -1067,18 +1064,18 @@ void MarlinUI::draw_status_screen() {
*fb++ = ','; lcd.print(i16tostr3left(y_plot)); *fb = ')';
// Show all values
- lcd.setCursor(_LCD_W_POS, 1); lcd_put_u8str_P(PSTR("X:"));
+ lcd.setCursor(_LCD_W_POS, 1); lcd_put_u8str(F("X:"));
lcd.print(ftostr52(LOGICAL_X_POSITION(pgm_read_float(&ubl._mesh_index_to_xpos[x_plot]))));
- lcd.setCursor(_LCD_W_POS, 2); lcd_put_u8str_P(PSTR("Y:"));
+ lcd.setCursor(_LCD_W_POS, 2); lcd_put_u8str(F("Y:"));
lcd.print(ftostr52(LOGICAL_Y_POSITION(pgm_read_float(&ubl._mesh_index_to_ypos[y_plot]))));
// Show the location value
- lcd.setCursor(_LCD_W_POS, 3); lcd_put_u8str_P(PSTR("Z:"));
+ lcd.setCursor(_LCD_W_POS, 3); lcd_put_u8str(F("Z:"));
if (!isnan(ubl.z_values[x_plot][y_plot]))
lcd.print(ftostr43sign(ubl.z_values[x_plot][y_plot]));
else
- lcd_put_u8str_P(PSTR(" -----"));
+ lcd_put_u8str(F(" -----"));
center_text_P(GET_TEXT(MSG_UBL_FINE_TUNE_MESH), 8);
diff --git a/Marlin/src/lcd/dogm/dogm_Statusscreen.h b/Marlin/src/lcd/dogm/dogm_Statusscreen.h
index dfbf7b4291..f17dd06365 100644
--- a/Marlin/src/lcd/dogm/dogm_Statusscreen.h
+++ b/Marlin/src/lcd/dogm/dogm_Statusscreen.h
@@ -480,7 +480,7 @@
#endif
#ifndef STATUS_CUTTER_TEXT_X
- #define STATUS_CUTTER_TEXT_X (STATUS_CUTTER_X -1)
+ #define STATUS_CUTTER_TEXT_X (STATUS_CUTTER_X - 1)
#endif
#ifndef STATUS_CUTTER_TEXT_Y
@@ -488,12 +488,12 @@
#endif
static_assert(
- sizeof(status_cutter_bmp) == (STATUS_CUTTER_BYTEWIDTH) * (STATUS_CUTTER_HEIGHT(0)),
+ sizeof(status_cutter_bmp) == (STATUS_CUTTER_BYTEWIDTH) * STATUS_CUTTER_HEIGHT(0),
"Status cutter bitmap (status_cutter_bmp) dimensions don't match data."
);
#ifdef STATUS_CUTTER_ANIM
static_assert(
- sizeof(status_cutter_on_bmp) == (STATUS_CUTTER_BYTEWIDTH) * (STATUS_CUTTER_HEIGHT(1)),
+ sizeof(status_cutter_on_bmp) == (STATUS_CUTTER_BYTEWIDTH) * STATUS_CUTTER_HEIGHT(1),
"Status cutter bitmap (status_cutter_on_bmp) dimensions don't match data."
);
#endif
@@ -530,12 +530,12 @@
#endif
static_assert(
- sizeof(status_chamber_bmp) == (STATUS_CHAMBER_BYTEWIDTH) * (STATUS_CHAMBER_HEIGHT(0)),
+ sizeof(status_chamber_bmp) == (STATUS_CHAMBER_BYTEWIDTH) * STATUS_CHAMBER_HEIGHT(0),
"Status chamber bitmap (status_chamber_bmp) dimensions don't match data."
);
#ifdef STATUS_CHAMBER_ANIM
static_assert(
- sizeof(status_chamber_on_bmp) == (STATUS_CHAMBER_BYTEWIDTH) * (STATUS_CHAMBER_HEIGHT(1)),
+ sizeof(status_chamber_on_bmp) == (STATUS_CHAMBER_BYTEWIDTH) * STATUS_CHAMBER_HEIGHT(1),
"Status chamber bitmap (status_chamber_on_bmp) dimensions don't match data."
);
#endif
@@ -565,12 +565,12 @@
#endif
static_assert(
- sizeof(status_cooler_bmp1) == (STATUS_COOLER_BYTEWIDTH) * (STATUS_COOLER_HEIGHT(0)),
+ sizeof(status_cooler_bmp1) == (STATUS_COOLER_BYTEWIDTH) * STATUS_COOLER_HEIGHT(0),
"Status cooler bitmap (status_cooler_bmp1) dimensions don't match data."
);
#ifdef STATUS_COOLER_ANIM
static_assert(
- sizeof(status_cooler_bmp2) == (STATUS_COOLER_BYTEWIDTH) * (STATUS_COOLER_HEIGHT(1)),
+ sizeof(status_cooler_bmp2) == (STATUS_COOLER_BYTEWIDTH) * STATUS_COOLER_HEIGHT(1),
"Status cooler bitmap (status_cooler_bmp2) dimensions don't match data."
);
#endif
@@ -647,7 +647,7 @@
#if STATUS_BED_WIDTH && !STATUS_HEATERS_WIDTH
#ifndef STATUS_BED_X
- #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8)
+ #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH + STATUS_BED_BYTEWIDTH) * 8 - TERN0(STATUS_HEAT_PERCENT, 4))
#endif
#ifndef STATUS_BED_HEIGHT
@@ -667,12 +667,12 @@
#endif
static_assert(
- sizeof(status_bed_bmp) == (STATUS_BED_BYTEWIDTH) * (STATUS_BED_HEIGHT(0)),
+ sizeof(status_bed_bmp) == (STATUS_BED_BYTEWIDTH) * STATUS_BED_HEIGHT(0),
"Status bed bitmap (status_bed_bmp) dimensions don't match data."
);
#ifdef STATUS_BED_ANIM
static_assert(
- sizeof(status_bed_on_bmp) == (STATUS_BED_BYTEWIDTH) * (STATUS_BED_HEIGHT(1)),
+ sizeof(status_bed_on_bmp) == (STATUS_BED_BYTEWIDTH) * STATUS_BED_HEIGHT(1),
"Status bed bitmap (status_bed_on_bmp) dimensions don't match data."
);
#endif
diff --git a/Marlin/src/lcd/dogm/fontdata/fontdata_ISO10646_1.h b/Marlin/src/lcd/dogm/fontdata/fontdata_ISO10646_1.h
index 0a7ece8601..6f55d3bc3d 100644
--- a/Marlin/src/lcd/dogm/fontdata/fontdata_ISO10646_1.h
+++ b/Marlin/src/lcd/dogm/fontdata/fontdata_ISO10646_1.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -16,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include
#if defined(__AVR__) && ENABLED(NOT_EXTENDED_ISO10646_1_5X7)
diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_el_gr.h b/Marlin/src/lcd/dogm/fontdata/langdata_el_CY.h
similarity index 99%
rename from Marlin/src/lcd/dogm/fontdata/langdata_el_gr.h
rename to Marlin/src/lcd/dogm/fontdata/langdata_el_CY.h
index 8d7cba8615..c3a2264aec 100644
--- a/Marlin/src/lcd/dogm/fontdata/langdata_el_gr.h
+++ b/Marlin/src/lcd/dogm/fontdata/langdata_el_CY.h
@@ -77,7 +77,7 @@ const u8g_fntpgm_uint8_t fontpage_64_166_166[24] U8G_FONT_SECTION("fontpage_64_1
0x00,0x0C,0x0F,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0xA6,0xA6,0x00,0x01,0x00,0x00,
0x00,0x05,0x01,0x01,0x06,0x00,0x00,0xA8};
-static const uxg_fontinfo_t g_fontinfo_el_gr[] PROGMEM = {
+static const uxg_fontinfo_t g_fontinfo_el_CY[] PROGMEM = {
FONTDATA_ITEM(7, 136, 136, fontpage_7_136_136), // 'Έ' -- 'Έ'
FONTDATA_ITEM(7, 145, 157, fontpage_7_145_157), // 'Α' -- 'Ν'
FONTDATA_ITEM(7, 159, 161, fontpage_7_159_161), // 'Ο' -- 'Ρ'
diff --git a/Marlin/src/lcd/dogm/lcdprint_u8g.cpp b/Marlin/src/lcd/dogm/lcdprint_u8g.cpp
index a85dc9f979..f74a59a08c 100644
--- a/Marlin/src/lcd/dogm/lcdprint_u8g.cpp
+++ b/Marlin/src/lcd/dogm/lcdprint_u8g.cpp
@@ -46,9 +46,9 @@ int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
return ret;
}
-int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length) {
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
u8g_uint_t x = u8g.getPrintCol(), y = u8g.getPrintRow(),
- ret = uxg_DrawUtf8StrP(u8g.getU8g(), x, y, utf8_str_P, max_length);
+ ret = uxg_DrawUtf8StrP(u8g.getU8g(), x, y, utf8_pstr, max_length);
u8g.setPrintPos(x + ret, y);
return ret;
}
diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp
index 33bb3e4b92..5d4c30bbb4 100644
--- a/Marlin/src/lcd/dogm/marlinui_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/marlinui_DOGM.cpp
@@ -93,14 +93,7 @@ U8G_CLASS u8g;
#endif
#if HAS_LCD_CONTRAST
-
- int16_t MarlinUI::contrast = DEFAULT_LCD_CONTRAST;
-
- void MarlinUI::set_contrast(const int16_t value) {
- contrast = constrain(value, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX);
- u8g.setContrast(contrast);
- }
-
+ void MarlinUI::_set_contrast() { u8g.setContrast(contrast); }
#endif
void MarlinUI::set_font(const MarlinFont font_nr) {
@@ -224,8 +217,8 @@ bool MarlinUI::detected() { return true; }
auto _draw_bootscreen_bmp = [&](const uint8_t *bitmap) {
u8g.drawBitmapP(offx, offy, START_BMP_BYTEWIDTH, START_BMPHEIGHT, bitmap);
set_font(FONT_MENU);
- if (!two_part || !line2) lcd_put_u8str_P(txt_offx_1, txt_base - (MENU_FONT_HEIGHT), PSTR(SHORT_BUILD_VERSION));
- if (!two_part || line2) lcd_put_u8str_P(txt_offx_2, txt_base, PSTR(MARLIN_WEBSITE_URL));
+ if (!two_part || !line2) lcd_put_u8str(txt_offx_1, txt_base - (MENU_FONT_HEIGHT), F(SHORT_BUILD_VERSION));
+ if (!two_part || line2) lcd_put_u8str(txt_offx_2, txt_base, F(MARLIN_WEBSITE_URL));
};
auto draw_bootscreen_bmp = [&](const uint8_t *bitmap) {
@@ -338,13 +331,22 @@ void MarlinUI::draw_kill_screen() {
do {
set_font(FONT_MENU);
lcd_put_u8str(0, h4 * 1, status_message);
- lcd_put_u8str_P(0, h4 * 2, GET_TEXT(MSG_HALTED));
- lcd_put_u8str_P(0, h4 * 3, GET_TEXT(MSG_PLEASE_RESET));
+ lcd_put_u8str(0, h4 * 2, GET_TEXT_F(MSG_HALTED));
+ lcd_put_u8str(0, h4 * 3, GET_TEXT_F(MSG_PLEASE_RESET));
} while (u8g.nextPage());
}
void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
+#if HAS_LCD_BRIGHTNESS
+ void MarlinUI::_set_brightness() {
+ #if PIN_EXISTS(TFT_BACKLIGHT)
+ if (PWM_PIN(TFT_BACKLIGHT_PIN))
+ analogWrite(pin_t(TFT_BACKLIGHT_PIN), brightness);
+ #endif
+ }
+#endif
+
#if HAS_LCD_MENU
#include "../menu/menu.h"
@@ -609,7 +611,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
if (!isnan(ubl.z_values[x_plot][y_plot]))
lcd_put_u8str(ftostr43sign(ubl.z_values[x_plot][y_plot]));
else
- lcd_put_u8str_P(PSTR(" -----"));
+ lcd_put_u8str(F(" -----"));
}
}
@@ -713,15 +715,7 @@ void MarlinUI::clear_lcd() { } // Automatically cleared by Picture Loop
B00001100,B00000000
};
- void _lcd_zoffset_overlay_gfx(const_float_t zvalue) {
- // Determine whether the user is raising or lowering the nozzle.
- static int8_t dir;
- static float old_zvalue;
- if (zvalue != old_zvalue) {
- dir = zvalue ? zvalue < old_zvalue ? -1 : 1 : 0;
- old_zvalue = zvalue;
- }
-
+ void MarlinUI::zoffset_overlay(const int8_t dir) {
const unsigned char *rot_up = TERN(OVERLAY_GFX_REVERSE, ccw_bmp, cw_bmp),
*rot_down = TERN(OVERLAY_GFX_REVERSE, cw_bmp, ccw_bmp);
diff --git a/Marlin/src/lcd/dogm/marlinui_DOGM.h b/Marlin/src/lcd/dogm/marlinui_DOGM.h
index 328b69b93b..050f147d62 100644
--- a/Marlin/src/lcd/dogm/marlinui_DOGM.h
+++ b/Marlin/src/lcd/dogm/marlinui_DOGM.h
@@ -43,7 +43,7 @@
#define U8G_PARAM LCD_PINS_D4, LCD_PINS_ENABLE, LCD_PINS_RS
#endif
-#elif ENABLED(U8GLIB_ST7920)
+#elif IS_U8GLIB_ST7920
// RepRap Discount Full Graphics Smart Controller
// and other variant LCDs using ST7920
@@ -72,7 +72,7 @@
#define U8G_CLASS U8GLIB_DOGM128_2X // 4 stripes (HW-SPI)
#endif
-#elif ENABLED(U8GLIB_LM6059_AF)
+#elif IS_U8GLIB_LM6059_AF
// Based on the Adafruit ST7565 (https://www.adafruit.com/products/250)
@@ -82,7 +82,7 @@
#define U8G_CLASS U8GLIB_LM6059_2X // 4 stripes (HW-SPI)
#endif
-#elif ENABLED(U8GLIB_ST7565_64128N)
+#elif IS_U8GLIB_ST7565_64128N
// MaKrPanel, Mini Viki, Viki 2.0, AZSMZ 12864 ST7565 controller
diff --git a/Marlin/src/lcd/dogm/status/bed.h b/Marlin/src/lcd/dogm/status/bed.h
index c484a12929..175a50e341 100644
--- a/Marlin/src/lcd/dogm/status/bed.h
+++ b/Marlin/src/lcd/dogm/status/bed.h
@@ -29,9 +29,7 @@
#define STATUS_BED_ANIM
#define STATUS_BED_WIDTH 24
- #ifndef STATUS_BED_X
- #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
- #endif
+
#define STATUS_BED_TEXT_X (STATUS_BED_X + 11)
const unsigned char status_bed_bmp[] PROGMEM = {
@@ -62,9 +60,6 @@
#else
#define STATUS_BED_WIDTH 21
- #ifndef STATUS_BED_X
- #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8)
- #endif
#ifdef STATUS_BED_ANIM
@@ -108,3 +103,7 @@
#endif
#endif
+
+#ifndef STATUS_BED_X
+ #define STATUS_BED_X (LCD_PIXEL_WIDTH - (STATUS_BED_BYTEWIDTH + STATUS_CHAMBER_BYTEWIDTH + STATUS_FAN_BYTEWIDTH) * 8 - TERN0(STATUS_HEAT_PERCENT, 4))
+#endif
diff --git a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
index 8b707ba7c7..847c13d3ac 100644
--- a/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_DOGM.cpp
@@ -191,7 +191,7 @@
FORCE_INLINE void _draw_centered_temp(const celsius_t temp, const uint8_t tx, const uint8_t ty) {
if (temp < 0)
- lcd_put_u8str(tx - 3 * (INFO_FONT_WIDTH) / 2 + 1, ty, "err");
+ lcd_put_u8str(tx - 3 * (INFO_FONT_WIDTH) / 2 + 1, ty, F("err"));
else {
const char *str = i16tostr3rj(temp);
const uint8_t len = str[0] != ' ' ? 3 : str[1] != ' ' ? 2 : 1;
@@ -436,7 +436,7 @@ FORCE_INLINE void _draw_axis_value(const AxisEnum axis, const char *value, const
else if (axis_should_home(axis))
while (const char c = *value++) lcd_put_wchar(c <= '.' ? c : '?');
else if (NONE(HOME_AFTER_DEACTIVATE, DISABLE_REDUCED_ACCURACY_WARNING) && !axis_is_trusted(axis))
- lcd_put_u8str_P(axis == Z_AXIS ? PSTR(" ") : PSTR(" "));
+ lcd_put_u8str(axis == Z_AXIS ? F(" ") : F(" "));
else
lcd_put_u8str(value);
}
@@ -777,7 +777,7 @@ void MarlinUI::draw_status_screen() {
}
}
else if (progress_state == 2 && estimation_string[0]) {
- lcd_put_u8str_P(PROGRESS_BAR_X, EXTRAS_BASELINE, PSTR("R:"));
+ lcd_put_u8str(PROGRESS_BAR_X, EXTRAS_BASELINE, F("R:"));
lcd_put_u8str(estimation_x_pos, EXTRAS_BASELINE, estimation_string);
}
else if (elapsed_string[0]) {
@@ -879,7 +879,7 @@ void MarlinUI::draw_status_screen() {
if (show_e_total) {
#if ENABLED(LCD_SHOW_E_TOTAL)
_draw_axis_value(E_AXIS, xstring, true);
- lcd_put_u8str_P(PSTR(" "));
+ lcd_put_u8str(F(" "));
#endif
}
else {
@@ -918,7 +918,7 @@ void MarlinUI::draw_status_screen() {
lcd_put_u8str(102, EXTRAS_2_BASELINE, mstring);
lcd_put_wchar('%');
set_font(FONT_MENU);
- lcd_put_wchar(47, EXTRAS_2_BASELINE, LCD_STR_FILAM_DIA[0]); // lcd_put_u8str_P(PSTR(LCD_STR_FILAM_DIA));
+ lcd_put_wchar(47, EXTRAS_2_BASELINE, LCD_STR_FILAM_DIA[0]); // lcd_put_u8str(F(LCD_STR_FILAM_DIA));
lcd_put_wchar(93, EXTRAS_2_BASELINE, LCD_STR_FILAM_MUL[0]);
#endif
}
@@ -932,10 +932,10 @@ void MarlinUI::draw_status_screen() {
#if BOTH(FILAMENT_LCD_DISPLAY, SDSUPPORT)
// Alternate Status message and Filament display
if (ELAPSED(millis(), next_filament_display)) {
- lcd_put_u8str_P(PSTR(LCD_STR_FILAM_DIA));
+ lcd_put_u8str(F(LCD_STR_FILAM_DIA));
lcd_put_wchar(':');
lcd_put_u8str(wstring);
- lcd_put_u8str_P(PSTR(" " LCD_STR_FILAM_MUL));
+ lcd_put_u8str(F(" " LCD_STR_FILAM_MUL));
lcd_put_wchar(':');
lcd_put_u8str(mstring);
lcd_put_wchar('%');
diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
index be112c8d54..2e6d697488 100644
--- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
+++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.cpp
@@ -99,9 +99,9 @@ void ST7920_Lite_Status_Screen::write_str(const char *str, uint8_t len) {
while (*str && len--) write_byte(*str++);
}
-void ST7920_Lite_Status_Screen::write_str_P(PGM_P const str) {
- PGM_P p_str = (PGM_P)str;
- while (char c = pgm_read_byte(p_str++)) write_byte(c);
+void ST7920_Lite_Status_Screen::write_str(FSTR_P const fstr) {
+ PGM_P pstr = FTOP(fstr);
+ while (char c = pgm_read_byte(pstr++)) write_byte(c);
}
void ST7920_Lite_Status_Screen::write_number(const int16_t value, const uint8_t digits/*=3*/) {
@@ -500,11 +500,11 @@ void ST7920_Lite_Status_Screen::draw_progress_bar(const uint8_t value) {
// Draw centered
if (value > 9) {
write_number(value, 4);
- write_str_P(PSTR("% "));
+ write_str(F("% "));
}
else {
write_number(value, 3);
- write_str_P(PSTR("% "));
+ write_str(F("% "));
}
}
@@ -559,7 +559,7 @@ void ST7920_Lite_Status_Screen::draw_temps(uint8_t line, const int16_t temp, con
};
if (targetStateChange) {
- if (!showTarget) write_str_P(PSTR(" "));
+ if (!showTarget) write_str(F(" "));
draw_degree_symbol(5, line, !showTarget);
draw_degree_symbol(9, line, showTarget);
}
diff --git a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
index b217246484..7fe878356b 100644
--- a/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
+++ b/Marlin/src/lcd/dogm/status_screen_lite_ST7920.h
@@ -46,7 +46,7 @@ class ST7920_Lite_Status_Screen {
static void write_str(const char *str);
static void write_str(const char *str, const uint8_t len);
- static void write_str_P(PGM_P const str);
+ static void write_str(FSTR_P const fstr);
static void write_number(const int16_t value, const uint8_t digits=3);
static void _extended_function_set(const bool extended, const bool graphics);
diff --git a/Marlin/src/lcd/dogm/u8g_dev_ssd1309_12864.cpp b/Marlin/src/lcd/dogm/u8g_dev_ssd1309_12864.cpp
index 2a21bd67ca..6d40ea0d4b 100644
--- a/Marlin/src/lcd/dogm/u8g_dev_ssd1309_12864.cpp
+++ b/Marlin/src/lcd/dogm/u8g_dev_ssd1309_12864.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_U8GLIB
diff --git a/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp b/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp
index fda090338c..bfd44d08df 100644
--- a/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp
+++ b/Marlin/src/lcd/dogm/u8g_dev_st7565_64128n_HAL.cpp
@@ -63,6 +63,9 @@
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
+#ifndef ST7565_XOFFSET
+ #define ST7565_XOFFSET 0x00
+#endif
#define ST7565_ADC_REVERSE(N) ((N) ? 0xA1 : 0xA0)
#define ST7565_BIAS_MODE(N) ((N) ? 0xA3 : 0xA2)
@@ -123,7 +126,7 @@ static const uint8_t u8g_dev_st7565_64128n_HAL_init_seq[] PROGMEM = {
static const uint8_t u8g_dev_st7565_64128n_HAL_data_start[] PROGMEM = {
U8G_ESC_ADR(0), // instruction mode
U8G_ESC_CS(1), // enable chip
- ST7565_COLUMN_ADR(0x00), // high 4 bits to 0, low 4 bits to 0. Changed for DisplayTech 64128N
+ ST7565_COLUMN_ADR(ST7565_XOFFSET), // high 4 bits to 0, low 4 bits to 0. Changed for DisplayTech 64128N
U8G_ESC_END // end of sequence
};
diff --git a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
index 9367ed75a9..e844eee251 100644
--- a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
+++ b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
@@ -29,7 +29,7 @@
#include "../../inc/MarlinConfig.h"
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#include "ultralcd_st7920_u8glib_rrd_AVR.h"
@@ -192,5 +192,5 @@ u8g_dev_t u8g_dev_st7920_128x64_rrd_sw_spi = { u8g_dev_rrd_st7920_128x64_fn, &u8
void ST7920_write_byte(const uint8_t val) { ST7920_WRITE_BYTE(val); }
#endif
-#endif // U8GLIB_ST7920
+#endif // IS_U8GLIB_ST7920
#endif // !U8G_HAL_LINKS && (__AVR__ || ARDUINO_ARCH_STM32 || ARDUINO_ARCH_ESP32)
diff --git a/Marlin/src/lcd/e3v2/common/dwin_api.cpp b/Marlin/src/lcd/e3v2/common/dwin_api.cpp
new file mode 100644
index 0000000000..d89b22a7aa
--- /dev/null
+++ b/Marlin/src/lcd/e3v2/common/dwin_api.cpp
@@ -0,0 +1,431 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#include "../../../inc/MarlinConfigPre.h"
+
+#if EITHER(HAS_DWIN_E3V2, IS_DWIN_MARLINUI)
+
+#include "dwin_api.h"
+#include "dwin_set.h"
+
+#include "../../../inc/MarlinConfig.h"
+
+#include // for memset
+
+uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 6 * 2] = { 0xAA };
+uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C };
+uint8_t databuf[26] = { 0 };
+
+// Send the data in the buffer plus the packet tail
+void DWIN_Send(size_t &i) {
+ ++i;
+ LOOP_L_N(n, i) { LCD_SERIAL.write(DWIN_SendBuf[n]); delayMicroseconds(1); }
+ LOOP_L_N(n, 4) { LCD_SERIAL.write(DWIN_BufTail[n]); delayMicroseconds(1); }
+}
+
+/*-------------------------------------- System variable function --------------------------------------*/
+
+// Handshake (1: Success, 0: Fail)
+bool DWIN_Handshake() {
+ static int recnum = 0;
+ #ifndef LCD_BAUDRATE
+ #define LCD_BAUDRATE 115200
+ #endif
+ LCD_SERIAL.begin(LCD_BAUDRATE);
+ const millis_t serial_connect_timeout = millis() + 1000UL;
+ while (!LCD_SERIAL.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
+
+ size_t i = 0;
+ DWIN_Byte(i, 0x00);
+ DWIN_Send(i);
+
+ while (LCD_SERIAL.available() > 0 && recnum < (signed)sizeof(databuf)) {
+ databuf[recnum] = LCD_SERIAL.read();
+ // ignore the invalid data
+ if (databuf[0] != FHONE) { // prevent the program from running.
+ if (recnum > 0) {
+ recnum = 0;
+ ZERO(databuf);
+ }
+ continue;
+ }
+ delay(10);
+ recnum++;
+ }
+
+ return ( recnum >= 3
+ && databuf[0] == FHONE
+ && databuf[1] == '\0'
+ && databuf[2] == 'O'
+ && databuf[3] == 'K' );
+}
+
+#if HAS_LCD_BRIGHTNESS
+ // Set LCD backlight (from DWIN Enhanced)
+ // brightness: 0x00-0xFF
+ void DWIN_LCD_Brightness(const uint8_t brightness) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x30);
+ DWIN_Byte(i, brightness);
+ DWIN_Send(i);
+ }
+#endif
+
+// Set screen display direction
+// dir: 0=0°, 1=90°, 2=180°, 3=270°
+void DWIN_Frame_SetDir(uint8_t dir) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x34);
+ DWIN_Byte(i, 0x5A);
+ DWIN_Byte(i, 0xA5);
+ DWIN_Byte(i, dir);
+ DWIN_Send(i);
+}
+
+// Update display
+void DWIN_UpdateLCD() {
+ size_t i = 0;
+ DWIN_Byte(i, 0x3D);
+ DWIN_Send(i);
+}
+
+/*---------------------------------------- Drawing functions ----------------------------------------*/
+
+// Clear screen
+// color: Clear screen color
+void DWIN_Frame_Clear(const uint16_t color) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x01);
+ DWIN_Word(i, color);
+ DWIN_Send(i);
+}
+
+// Draw a point
+// color: point color
+// width: point width 0x01-0x0F
+// height: point height 0x01-0x0F
+// x,y: upper left point
+void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x02);
+ DWIN_Word(i, color);
+ DWIN_Byte(i, width);
+ DWIN_Byte(i, height);
+ DWIN_Word(i, x);
+ DWIN_Word(i, y);
+ DWIN_Send(i);
+}
+
+// Draw a line
+// color: Line segment color
+// xStart/yStart: Start point
+// xEnd/yEnd: End point
+void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x03);
+ DWIN_Word(i, color);
+ DWIN_Word(i, xStart);
+ DWIN_Word(i, yStart);
+ DWIN_Word(i, xEnd);
+ DWIN_Word(i, yEnd);
+ DWIN_Send(i);
+}
+
+// Draw a rectangle
+// mode: 0=frame, 1=fill, 2=XOR fill
+// color: Rectangle color
+// xStart/yStart: upper left point
+// xEnd/yEnd: lower right point
+void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x05);
+ DWIN_Byte(i, mode);
+ DWIN_Word(i, color);
+ DWIN_Word(i, xStart);
+ DWIN_Word(i, yStart);
+ DWIN_Word(i, xEnd);
+ DWIN_Word(i, yEnd);
+ DWIN_Send(i);
+}
+
+// Move a screen area
+// mode: 0, circle shift; 1, translation
+// dir: 0=left, 1=right, 2=up, 3=down
+// dis: Distance
+// color: Fill color
+// xStart/yStart: upper left point
+// xEnd/yEnd: bottom right point
+void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
+ uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x09);
+ DWIN_Byte(i, (mode << 7) | dir);
+ DWIN_Word(i, dis);
+ DWIN_Word(i, color);
+ DWIN_Word(i, xStart);
+ DWIN_Word(i, yStart);
+ DWIN_Word(i, xEnd);
+ DWIN_Word(i, yEnd);
+ DWIN_Send(i);
+}
+
+/*---------------------------------------- Text related functions ----------------------------------------*/
+
+// Draw a string
+// widthAdjust: true=self-adjust character width; false=no adjustment
+// bShow: true=display background color; false=don't display background color
+// size: Font size
+// color: Character color
+// bColor: Background color
+// x/y: Upper-left coordinate of the string
+// *string: The string
+// rlimit: To limit the drawn string length
+void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const char * const string, uint16_t rlimit/*=0xFFFF*/) {
+ constexpr uint8_t widthAdjust = 0;
+ size_t i = 0;
+ DWIN_Byte(i, 0x11);
+ // Bit 7: widthAdjust
+ // Bit 6: bShow
+ // Bit 5-4: Unused (0)
+ // Bit 3-0: size
+ DWIN_Byte(i, (widthAdjust * 0x80) | (bShow * 0x40) | size);
+ DWIN_Word(i, color);
+ DWIN_Word(i, bColor);
+ DWIN_Word(i, x);
+ DWIN_Word(i, y);
+ DWIN_Text(i, string, rlimit);
+ DWIN_Send(i);
+}
+
+// Draw a positive integer
+// bShow: true=display background color; false=don't display background color
+// zeroFill: true=zero fill; false=no zero fill
+// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
+// size: Font size
+// color: Character color
+// bColor: Background color
+// iNum: Number of digits
+// x/y: Upper-left coordinate
+// value: Integer value
+void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
+ uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint32_t value) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x14);
+ // Bit 7: bshow
+ // Bit 6: 1 = signed; 0 = unsigned number;
+ // Bit 5: zeroFill
+ // Bit 4: zeroMode
+ // Bit 3-0: size
+ DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
+ DWIN_Word(i, color);
+ DWIN_Word(i, bColor);
+ DWIN_Byte(i, iNum);
+ DWIN_Byte(i, 0); // fNum
+ DWIN_Word(i, x);
+ DWIN_Word(i, y);
+ #if 0
+ for (char count = 0; count < 8; count++) {
+ DWIN_Byte(i, value);
+ value >>= 8;
+ if (!(value & 0xFF)) break;
+ }
+ #else
+ // Write a big-endian 64 bit integer
+ const size_t p = i + 1;
+ for (char count = 8; count--;) { // 7..0
+ ++i;
+ DWIN_SendBuf[p + count] = value;
+ value >>= 8;
+ }
+ #endif
+
+ DWIN_Send(i);
+}
+
+// Draw a floating point number
+// bShow: true=display background color; false=don't display background color
+// zeroFill: true=zero fill; false=no zero fill
+// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
+// size: Font size
+// color: Character color
+// bColor: Background color
+// iNum: Number of whole digits
+// fNum: Number of decimal digits
+// x/y: Upper-left point
+// value: Float value
+void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
+ uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, int32_t value) {
+ //uint8_t *fvalue = (uint8_t*)&value;
+ size_t i = 0;
+ DWIN_Byte(i, 0x14);
+ DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
+ DWIN_Word(i, color);
+ DWIN_Word(i, bColor);
+ DWIN_Byte(i, iNum);
+ DWIN_Byte(i, fNum);
+ DWIN_Word(i, x);
+ DWIN_Word(i, y);
+ DWIN_Long(i, value);
+ /*
+ DWIN_Byte(i, fvalue[3]);
+ DWIN_Byte(i, fvalue[2]);
+ DWIN_Byte(i, fvalue[1]);
+ DWIN_Byte(i, fvalue[0]);
+ */
+ DWIN_Send(i);
+}
+
+// Draw a floating point number
+// value: positive unscaled float value
+void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
+ uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
+ const int32_t val = round(value * POW(10, fNum));
+ DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, val);
+}
+
+/*---------------------------------------- Picture related functions ----------------------------------------*/
+
+// Draw JPG and cached in #0 virtual display area
+// id: Picture ID
+void DWIN_JPG_ShowAndCache(const uint8_t id) {
+ size_t i = 0;
+ DWIN_Word(i, 0x2200);
+ DWIN_Byte(i, id);
+ DWIN_Send(i); // AA 23 00 00 00 00 08 00 01 02 03 CC 33 C3 3C
+}
+
+// Draw an Icon
+// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
+// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
+// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
+// libID: Icon library ID
+// picID: Icon ID
+// x/y: Upper-left point
+void DWIN_ICON_Show(bool IBD, bool BIR, bool BFI, uint8_t libID, uint8_t picID, uint16_t x, uint16_t y) {
+ NOMORE(x, DWIN_WIDTH - 1);
+ NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
+ size_t i = 0;
+ DWIN_Byte(i, 0x23);
+ DWIN_Word(i, x);
+ DWIN_Word(i, y);
+ DWIN_Byte(i, (IBD << 7) | (BIR << 6) | (BFI << 5) | libID);
+ DWIN_Byte(i, picID);
+ DWIN_Send(i);
+}
+
+// Draw an Icon from SRAM
+// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
+// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
+// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
+// x/y: Upper-left point
+// addr: SRAM address
+void DWIN_ICON_Show(bool IBD, bool BIR, bool BFI, uint16_t x, uint16_t y, uint16_t addr) {
+ NOMORE(x, DWIN_WIDTH - 1);
+ NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
+ size_t i = 0;
+ DWIN_Byte(i, 0x24);
+ DWIN_Word(i, x);
+ DWIN_Word(i, y);
+ DWIN_Byte(i, (IBD << 7) | (BIR << 6) | (BFI << 5) | 0x00);
+ DWIN_Word(i, addr);
+ DWIN_Send(i);
+}
+
+// Unzip the JPG picture to a virtual display area
+// n: Cache index
+// id: Picture ID
+void DWIN_JPG_CacheToN(uint8_t n, uint8_t id) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x25);
+ DWIN_Byte(i, n);
+ DWIN_Byte(i, id);
+ DWIN_Send(i);
+}
+
+// Animate a series of icons
+// animID: Animation ID; 0x00-0x0F
+// animate: true on; false off;
+// libID: Icon library ID
+// picIDs: Icon starting ID
+// picIDe: Icon ending ID
+// x/y: Upper-left point
+// interval: Display time interval, unit 10mS
+void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs, uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval) {
+ NOMORE(x, DWIN_WIDTH - 1);
+ NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
+ size_t i = 0;
+ DWIN_Byte(i, 0x28);
+ DWIN_Word(i, x);
+ DWIN_Word(i, y);
+ // Bit 7: animation on or off
+ // Bit 6: start from begin or end
+ // Bit 5-4: unused (0)
+ // Bit 3-0: animID
+ DWIN_Byte(i, (animate * 0x80) | 0x40 | animID);
+ DWIN_Byte(i, libID);
+ DWIN_Byte(i, picIDs);
+ DWIN_Byte(i, picIDe);
+ DWIN_Byte(i, interval);
+ DWIN_Send(i);
+}
+
+// Animation Control
+// state: 16 bits, each bit is the state of an animation id
+void DWIN_ICON_AnimationControl(uint16_t state) {
+ size_t i = 0;
+ DWIN_Byte(i, 0x29);
+ DWIN_Word(i, state);
+ DWIN_Send(i);
+}
+
+/*---------------------------------------- Memory functions ----------------------------------------*/
+// The LCD has an additional 32KB SRAM and 16KB Flash
+// Data can be written to the SRAM and saved to one of the jpeg page files
+
+// Write Data Memory
+// command 0x31
+// Type: Write memory selection; 0x5A=SRAM; 0xA5=Flash
+// Address: Write data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
+// Data: data
+//
+// Flash writing returns 0xA5 0x4F 0x4B
+
+// Read Data Memory
+// command 0x32
+// Type: Read memory selection; 0x5A=SRAM; 0xA5=Flash
+// Address: Read data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
+// Length: leangth of data to read; 0x01-0xF0
+//
+// Response:
+// Type, Address, Length, Data
+
+// Write Picture Memory
+// Write the contents of the 32KB SRAM data memory into the designated image memory space
+// Issued: 0x5A, 0xA5, PIC_ID
+// Response: 0xA5 0x4F 0x4B
+//
+// command 0x33
+// 0x5A, 0xA5
+// PicId: Picture Memory location, 0x00-0x0F
+//
+// Flash writing returns 0xA5 0x4F 0x4B
+
+#endif // HAS_DWIN_E3V2 || IS_DWIN_MARLINUI
diff --git a/Marlin/src/lcd/e3v2/common/dwin_api.h b/Marlin/src/lcd/e3v2/common/dwin_api.h
new file mode 100644
index 0000000000..11b065e420
--- /dev/null
+++ b/Marlin/src/lcd/e3v2/common/dwin_api.h
@@ -0,0 +1,265 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+#include "../../../inc/MarlinConfig.h"
+
+#ifndef DWIN_WIDTH
+ #define DWIN_WIDTH 272
+#endif
+#ifndef DWIN_HEIGHT
+ #define DWIN_HEIGHT 480
+#endif
+
+#define RECEIVED_NO_DATA 0x00
+#define RECEIVED_SHAKE_HAND_ACK 0x01
+
+#define FHONE 0xAA
+
+#define DWIN_SCROLL_UP 2
+#define DWIN_SCROLL_DOWN 3
+
+// Make sure DWIN_SendBuf is large enough to hold the largest string plus draw command and tail.
+// Assume the narrowest (6 pixel) font and 2-byte gb2312-encoded characters.
+extern uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 6 * 2];
+extern uint8_t DWIN_BufTail[4];
+extern uint8_t databuf[26];
+
+inline void DWIN_Byte(size_t &i, const uint16_t bval) {
+ DWIN_SendBuf[++i] = bval;
+}
+
+inline void DWIN_Word(size_t &i, const uint16_t wval) {
+ DWIN_SendBuf[++i] = wval >> 8;
+ DWIN_SendBuf[++i] = wval & 0xFF;
+}
+
+inline void DWIN_Long(size_t &i, const uint32_t lval) {
+ DWIN_SendBuf[++i] = (lval >> 24) & 0xFF;
+ DWIN_SendBuf[++i] = (lval >> 16) & 0xFF;
+ DWIN_SendBuf[++i] = (lval >> 8) & 0xFF;
+ DWIN_SendBuf[++i] = lval & 0xFF;
+}
+
+// Send the data in the buffer plus the packet tail
+void DWIN_Send(size_t &i);
+
+inline void DWIN_Text(size_t &i, const char * const string, uint16_t rlimit=0xFFFF) {
+ if (!string) return;
+ const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, _MIN(strlen(string), rlimit));
+ if (len == 0) return;
+ memcpy(&DWIN_SendBuf[i+1], string, len);
+ i += len;
+}
+
+inline void DWIN_Text(size_t &i, FSTR_P string, uint16_t rlimit=0xFFFF) {
+ if (!string) return;
+ const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, _MIN(rlimit, strlen_P((PGM_P)string))); // cast to PGM_P (const char*) measure with strlen_P.
+ if (len == 0) return;
+ memcpy_P(&DWIN_SendBuf[i+1], string, len);
+ i += len;
+}
+
+/*-------------------------------------- System variable function --------------------------------------*/
+
+// Handshake (1: Success, 0: Fail)
+bool DWIN_Handshake();
+
+// DWIN startup
+void DWIN_Startup();
+
+#if HAS_LCD_BRIGHTNESS
+ // Set the backlight brightness
+ // brightness: (0x00-0xFF)
+ void DWIN_LCD_Brightness(const uint8_t brightness);
+#endif
+
+// Set screen display direction
+// dir: 0=0°, 1=90°, 2=180°, 3=270°
+void DWIN_Frame_SetDir(uint8_t dir);
+
+// Update display
+void DWIN_UpdateLCD();
+
+/*---------------------------------------- Drawing functions ----------------------------------------*/
+
+// Clear screen
+// color: Clear screen color
+void DWIN_Frame_Clear(const uint16_t color);
+
+// Draw a point
+// color: point color
+// width: point width 0x01-0x0F
+// height: point height 0x01-0x0F
+// x,y: upper left point
+void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y);
+
+// Draw a line
+// color: Line segment color
+// xStart/yStart: Start point
+// xEnd/yEnd: End point
+void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
+
+// Draw a Horizontal line
+// color: Line segment color
+// xStart/yStart: Start point
+// xLength: Line Length
+inline void DWIN_Draw_HLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xLength) {
+ DWIN_Draw_Line(color, xStart, yStart, xStart + xLength - 1, yStart);
+}
+
+// Draw a Vertical line
+// color: Line segment color
+// xStart/yStart: Start point
+// yLength: Line Length
+inline void DWIN_Draw_VLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t yLength) {
+ DWIN_Draw_Line(color, xStart, yStart, xStart, yStart + yLength - 1);
+}
+
+// Draw a rectangle
+// mode: 0=frame, 1=fill, 2=XOR fill
+// color: Rectangle color
+// xStart/yStart: upper left point
+// xEnd/yEnd: lower right point
+void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
+
+// Draw a box
+// mode: 0=frame, 1=fill, 2=XOR fill
+// color: Rectangle color
+// xStart/yStart: upper left point
+// xSize/ySize: box size
+inline void DWIN_Draw_Box(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xSize, uint16_t ySize) {
+ DWIN_Draw_Rectangle(mode, color, xStart, yStart, xStart + xSize - 1, yStart + ySize - 1);
+}
+
+// Move a screen area
+// mode: 0, circle shift; 1, translation
+// dir: 0=left, 1=right, 2=up, 3=down
+// dis: Distance
+// color: Fill color
+// xStart/yStart: upper left point
+// xEnd/yEnd: bottom right point
+void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
+ uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
+
+
+/*---------------------------------------- Text related functions ----------------------------------------*/
+
+// Draw a string
+// bShow: true=display background color; false=don't display background color
+// size: Font size
+// color: Character color
+// bColor: Background color
+// x/y: Upper-left coordinate of the string
+// *string: The string
+// rlimit: For draw less chars than string length use rlimit
+void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const char * const string, uint16_t rlimit=0xFFFF);
+
+inline void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, FSTR_P const ftitle) {
+ char ctitle[strlen_P(FTOP(ftitle)) + 1];
+ strcpy_P(ctitle, FTOP(ftitle));
+ DWIN_Draw_String(bShow, size, color, bColor, x, y, ctitle);
+}
+
+// Draw a positive integer
+// bShow: true=display background color; false=don't display background color
+// zeroFill: true=zero fill; false=no zero fill
+// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
+// size: Font size
+// color: Character color
+// bColor: Background color
+// iNum: Number of digits
+// x/y: Upper-left coordinate
+// value: Integer value
+void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
+ uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint32_t value);
+
+// Draw a floating point number
+// bShow: true=display background color; false=don't display background color
+// zeroFill: true=zero fill; false=no zero fill
+// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
+// size: Font size
+// color: Character color
+// bColor: Background color
+// iNum: Number of whole digits
+// fNum: Number of decimal digits
+// x/y: Upper-left point
+// value: Float value
+void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
+ uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, int32_t value);
+
+// Draw a floating point number
+// value: positive unscaled float value
+void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
+ uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value);
+
+/*---------------------------------------- Picture related functions ----------------------------------------*/
+
+// Draw JPG and cached in #0 virtual display area
+// id: Picture ID
+void DWIN_JPG_ShowAndCache(const uint8_t id);
+
+// Draw an Icon
+// libID: Icon library ID
+// picID: Icon ID
+// x/y: Upper-left point
+void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y);
+
+// Draw an Icon
+// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
+// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
+// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
+// libID: Icon library ID
+// picID: Icon ID
+// x/y: Upper-left point
+void DWIN_ICON_Show(bool IBD, bool BIR, bool BFI, uint8_t libID, uint8_t picID, uint16_t x, uint16_t y);
+
+// Draw an Icon from SRAM
+// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
+// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
+// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
+// x/y: Upper-left point
+// addr: SRAM address
+void DWIN_ICON_Show(bool IBD, bool BIR, bool BFI, uint16_t x, uint16_t y, uint16_t addr);
+
+// Unzip the JPG picture to a virtual display area
+// n: Cache index
+// id: Picture ID
+void DWIN_JPG_CacheToN(uint8_t n, uint8_t id);
+
+// Unzip the JPG picture to virtual display area #1
+// id: Picture ID
+inline void DWIN_JPG_CacheTo1(uint8_t id) { DWIN_JPG_CacheToN(1, id); }
+
+// Animate a series of icons
+// animID: Animation ID up to 16
+// animate: animation on or off
+// libID: Icon library ID
+// picIDs: Icon starting ID
+// picIDe: Icon ending ID
+// x/y: Upper-left point
+// interval: Display time interval, unit 10mS
+void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs, uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval);
+
+// Animation Control
+// state: 16 bits, each bit is the state of an animation id
+void DWIN_ICON_AnimationControl(uint16_t state);
diff --git a/Marlin/src/lcd/e3v2/common/dwin_color.h b/Marlin/src/lcd/e3v2/common/dwin_color.h
new file mode 100644
index 0000000000..d327f21a93
--- /dev/null
+++ b/Marlin/src/lcd/e3v2/common/dwin_color.h
@@ -0,0 +1,44 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+// Extended and default UI Colors
+#define RGB(R,G,B) (R << 11) | (G << 5) | (B) // R,B: 0..31; G: 0..63
+#define GetRColor(color) ((color >> 11) & 0x1F)
+#define GetGColor(color) ((color >> 5) & 0x3F)
+#define GetBColor(color) ((color >> 0) & 0x1F)
+
+#define Color_White 0xFFFF
+#define Color_Yellow RGB(0x1F,0x3F,0x00)
+#define Color_Red RGB(0x1F,0x00,0x00)
+#define Color_Error_Red 0xB000 // Error!
+#define Color_Bg_Red 0xF00F // Red background color
+#define Color_Bg_Window 0x31E8 // Popup background color
+#define Color_Bg_Blue 0x1125 // Dark blue background color
+#define Color_Bg_Black 0x0841 // Black background color
+#define Color_IconBlue 0x45FA // Lighter blue that matches icons/accents
+#define Popup_Text_Color 0xD6BA // Popup font background color
+#define Line_Color 0x3A6A // Split line color
+#define Rectangle_Color 0xEE2F // Blue square cursor color
+#define Percent_Color 0xFE29 // Percentage color
+#define BarFill_Color 0x10E4 // Fill color of progress bar
+#define Select_Color 0x33BB // Selected color
diff --git a/Marlin/src/lcd/e3v2/common/dwin_font.h b/Marlin/src/lcd/e3v2/common/dwin_font.h
new file mode 100644
index 0000000000..5a4b1a61cf
--- /dev/null
+++ b/Marlin/src/lcd/e3v2/common/dwin_font.h
@@ -0,0 +1,38 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * 3-.0:The font size, 0x00-0x09, corresponds to the font size below:
+ * 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28
+ * 0x05=16*32 0x06=20*40 0x07=24*48 0x08=28*56 0x09=32*64
+ */
+#define font6x12 0x00
+#define font8x16 0x01
+#define font10x20 0x02
+#define font12x24 0x03
+#define font14x28 0x04
+#define font16x32 0x05
+#define font20x40 0x06
+#define font24x48 0x07
+#define font28x56 0x08
+#define font32x64 0x09
diff --git a/Marlin/src/lcd/e3v2/common/dwin_set.h b/Marlin/src/lcd/e3v2/common/dwin_set.h
new file mode 100644
index 0000000000..4fedd7a584
--- /dev/null
+++ b/Marlin/src/lcd/e3v2/common/dwin_set.h
@@ -0,0 +1,138 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+// Picture ID
+#define Language_English 1
+#define Language_Chinese 2
+
+#define ICON 7 // Icon set file 7.ICO
+
+#define ICON_LOGO 0
+#define ICON_Print_0 1
+#define ICON_Print_1 2
+#define ICON_Prepare_0 3
+#define ICON_Prepare_1 4
+#define ICON_Control_0 5
+#define ICON_Control_1 6
+#define ICON_Leveling_0 7
+#define ICON_Leveling_1 8
+#define ICON_HotendTemp 9
+#define ICON_BedTemp 10
+#define ICON_Speed 11
+#define ICON_Zoffset 12
+#define ICON_Back 13
+#define ICON_File 14
+#define ICON_PrintTime 15
+#define ICON_RemainTime 16
+#define ICON_Setup_0 17
+#define ICON_Setup_1 18
+#define ICON_Pause_0 19
+#define ICON_Pause_1 20
+#define ICON_Continue_0 21
+#define ICON_Continue_1 22
+#define ICON_Stop_0 23
+#define ICON_Stop_1 24
+#define ICON_Bar 25
+#define ICON_More 26
+
+#define ICON_Axis 27
+#define ICON_CloseMotor 28
+#define ICON_Homing 29
+#define ICON_SetHome 30
+#define ICON_PLAPreheat 31
+#define ICON_ABSPreheat 32
+#define ICON_Cool 33
+#define ICON_Language 34
+
+#define ICON_MoveX 35
+#define ICON_MoveY 36
+#define ICON_MoveZ 37
+#define ICON_Extruder 38
+
+#define ICON_Temperature 40
+#define ICON_Motion 41
+#define ICON_WriteEEPROM 42
+#define ICON_ReadEEPROM 43
+#define ICON_ResumeEEPROM 44
+#define ICON_Info 45
+
+#define ICON_SetEndTemp 46
+#define ICON_SetBedTemp 47
+#define ICON_FanSpeed 48
+#define ICON_SetPLAPreheat 49
+#define ICON_SetABSPreheat 50
+
+#define ICON_MaxSpeed 51
+#define ICON_MaxAccelerated 52
+#define ICON_MaxJerk 53
+#define ICON_Step 54
+#define ICON_PrintSize 55
+#define ICON_Version 56
+#define ICON_Contact 57
+#define ICON_StockConfiguration 58
+#define ICON_MaxSpeedX 59
+#define ICON_MaxSpeedY 60
+#define ICON_MaxSpeedZ 61
+#define ICON_MaxSpeedE 62
+#define ICON_MaxAccX 63
+#define ICON_MaxAccY 64
+#define ICON_MaxAccZ 65
+#define ICON_MaxAccE 66
+#define ICON_MaxSpeedJerkX 67
+#define ICON_MaxSpeedJerkY 68
+#define ICON_MaxSpeedJerkZ 69
+#define ICON_MaxSpeedJerkE 70
+#define ICON_StepX 71
+#define ICON_StepY 72
+#define ICON_StepZ 73
+#define ICON_StepE 74
+#define ICON_Setspeed 75
+#define ICON_SetZOffset 76
+#define ICON_Rectangle 77
+#define ICON_BLTouch 78
+#define ICON_TempTooLow 79
+#define ICON_AutoLeveling 80
+#define ICON_TempTooHigh 81
+#define ICON_NoTips_C 82
+#define ICON_NoTips_E 83
+#define ICON_Continue_C 84
+#define ICON_Continue_E 85
+#define ICON_Cancel_C 86
+#define ICON_Cancel_E 87
+#define ICON_Confirm_C 88
+#define ICON_Confirm_E 89
+#define ICON_Info_0 90
+#define ICON_Info_1 91
+
+#define ICON_Folder ICON_More
+#define ICON_AdvSet ICON_Language
+#define ICON_HomeOffset ICON_AdvSet
+#define ICON_HomeOffsetX ICON_StepX
+#define ICON_HomeOffsetY ICON_StepY
+#define ICON_HomeOffsetZ ICON_StepZ
+#define ICON_ProbeOffset ICON_AdvSet
+#define ICON_ProbeOffsetX ICON_StepX
+#define ICON_ProbeOffsetY ICON_StepY
+#define ICON_ProbeOffsetZ ICON_StepZ
+#define ICON_PIDNozzle ICON_SetEndTemp
+#define ICON_PIDbed ICON_SetBedTemp
diff --git a/Marlin/src/lcd/e3v2/jyersui/rotary_encoder.cpp b/Marlin/src/lcd/e3v2/common/encoder.cpp
similarity index 91%
rename from Marlin/src/lcd/e3v2/jyersui/rotary_encoder.cpp
rename to Marlin/src/lcd/e3v2/common/encoder.cpp
index 23494aa693..edfaf60aae 100644
--- a/Marlin/src/lcd/e3v2/jyersui/rotary_encoder.cpp
+++ b/Marlin/src/lcd/e3v2/common/encoder.cpp
@@ -21,15 +21,15 @@
*/
/*****************************************************************************
- * @file lcd/e3v2/jyersui/rotary_encoder.cpp
+ * @file lcd/e3v2/common/encoder.cpp
* @brief Rotary encoder functions
*****************************************************************************/
#include "../../../inc/MarlinConfigPre.h"
-#if ENABLED(DWIN_CREALITY_LCD_JYERSUI)
+#if HAS_DWIN_E3V2
-#include "rotary_encoder.h"
+#include "encoder.h"
#include "../../buttons.h"
#include "../../../MarlinCore.h"
@@ -38,7 +38,6 @@
#if HAS_BUZZER
#include "../../../libs/buzzer.h"
- #include "dwin.h"
#endif
#include
@@ -49,10 +48,10 @@
ENCODER_Rate EncoderRate;
-// Buzzer
+// TODO: Replace with ui.quick_feedback
void Encoder_tick() {
#if PIN_EXISTS(BEEPER)
- if (CrealityDWIN.eeprom_settings.beeperenable) {
+ if (ui.buzzer_enabled) {
WRITE(BEEPER_PIN, HIGH);
delay(10);
WRITE(BEEPER_PIN, LOW);
@@ -72,18 +71,18 @@ void Encoder_Configuration() {
SET_INPUT_PULLUP(BTN_ENC);
#endif
#if PIN_EXISTS(BEEPER)
- SET_OUTPUT(BEEPER_PIN);
+ SET_OUTPUT(BEEPER_PIN); // TODO: Use buzzer.h which already inits this
#endif
}
// Analyze encoder value and return state
-ENCODER_DiffState Encoder_ReceiveAnalyze() {
+EncoderState Encoder_ReceiveAnalyze() {
const millis_t now = millis();
static uint8_t lastEncoderBits;
uint8_t newbutton = 0;
static signed char temp_diff = 0;
- ENCODER_DiffState temp_diffState = ENCODER_DIFF_NO;
+ EncoderState temp_diffState = ENCODER_DIFF_NO;
if (BUTTON_PRESSED(EN1)) newbutton |= EN_A;
if (BUTTON_PRESSED(EN2)) newbutton |= EN_B;
if (BUTTON_PRESSED(ENC)) {
@@ -94,8 +93,10 @@ ENCODER_DiffState Encoder_ReceiveAnalyze() {
#if PIN_EXISTS(LCD_LED)
//LED_Action();
#endif
- if (ui.backlight) return ENCODER_DIFF_ENTER;
- ui.refresh_brightness();
+ if (!ui.backlight) ui.refresh_brightness();
+ const bool was_waiting = wait_for_user;
+ wait_for_user = false;
+ return was_waiting ? ENCODER_DIFF_NO : ENCODER_DIFF_ENTER;
}
else return ENCODER_DIFF_NO;
}
@@ -122,13 +123,8 @@ ENCODER_DiffState Encoder_ReceiveAnalyze() {
}
if (ABS(temp_diff) >= ENCODER_PULSES_PER_STEP) {
- #if ENABLED(REVERSE_ENCODER_DIRECTION)
- if (temp_diff > 0) temp_diffState = ENCODER_DIFF_CCW;
- else temp_diffState = ENCODER_DIFF_CW;
- #else
- if (temp_diff > 0) temp_diffState = ENCODER_DIFF_CW;
- else temp_diffState = ENCODER_DIFF_CCW;
- #endif
+ if (temp_diff > 0) temp_diffState = TERN(REVERSE_ENCODER_DIRECTION, ENCODER_DIFF_CCW, ENCODER_DIFF_CW);
+ else temp_diffState = TERN(REVERSE_ENCODER_DIRECTION, ENCODER_DIFF_CW, ENCODER_DIFF_CCW);
#if ENABLED(ENCODER_RATE_MULTIPLIER)
@@ -260,4 +256,4 @@ ENCODER_DiffState Encoder_ReceiveAnalyze() {
#endif // LCD_LED
-#endif // DWIN_CREALITY_LCD_JYERSUI
+#endif // HAS_DWIN_E3V2
diff --git a/Marlin/src/lcd/e3v2/jyersui/rotary_encoder.h b/Marlin/src/lcd/e3v2/common/encoder.h
similarity index 95%
rename from Marlin/src/lcd/e3v2/jyersui/rotary_encoder.h
rename to Marlin/src/lcd/e3v2/common/encoder.h
index 0febe6bd35..e5d9645ed4 100644
--- a/Marlin/src/lcd/e3v2/jyersui/rotary_encoder.h
+++ b/Marlin/src/lcd/e3v2/common/encoder.h
@@ -22,7 +22,7 @@
#pragma once
/*****************************************************************************
- * @file lcd/e3v2/jyersui/rotary_encoder.h
+ * @file lcd/e3v2/common/encoder.h
* @brief Rotary encoder functions
****************************************************************************/
@@ -43,13 +43,13 @@ typedef enum {
ENCODER_DIFF_CW = 1, // clockwise rotation
ENCODER_DIFF_CCW = 2, // counterclockwise rotation
ENCODER_DIFF_ENTER = 3 // click
-} ENCODER_DiffState;
+} EncoderState;
// Encoder initialization
void Encoder_Configuration();
// Analyze encoder value and return state
-ENCODER_DiffState Encoder_ReceiveAnalyze();
+EncoderState Encoder_ReceiveAnalyze();
/*********************** Encoder LED ***********************/
diff --git a/Marlin/src/lcd/e3v2/creality/dwin.cpp b/Marlin/src/lcd/e3v2/creality/dwin.cpp
index 87b8e99c1a..5698442c0e 100644
--- a/Marlin/src/lcd/e3v2/creality/dwin.cpp
+++ b/Marlin/src/lcd/e3v2/creality/dwin.cpp
@@ -30,6 +30,9 @@
#include "dwin.h"
+//#define USE_STRING_HEADINGS
+//#define USE_STRING_TITLES
+
#if ENABLED(LCD_BED_LEVELING) && DISABLED(PROBE_MANUALLY) && ANY(AUTO_BED_LEVELING_BILINEAR, AUTO_BED_LEVELING_LINEAR, AUTO_BED_LEVELING_3POINT)
#define HAS_ONESTEP_LEVELING 1
#endif
@@ -135,12 +138,23 @@ constexpr uint16_t MROWS = TROWS - 1, // Last Row Index
// Value Init
HMI_value_t HMI_ValueStruct;
-HMI_Flag_t HMI_flag{0};
+HMI_flag_t HMI_flag{0};
millis_t dwin_heat_time = 0;
uint8_t checkkey = 0;
+enum SelectItem : uint8_t {
+ PAGE_PRINT = 0,
+ PAGE_PREPARE,
+ PAGE_CONTROL,
+ PAGE_INFO_LEVELING,
+
+ PRINT_SETUP = 0,
+ PRINT_PAUSE_RESUME,
+ PRINT_STOP
+};
+
typedef struct {
uint8_t now, last;
void set(uint8_t v) { now = last = v; }
@@ -235,7 +249,7 @@ void ICON_Print() {
{ 1, { 417, 449 }, 30, 14 },
{ 1, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 0, ICON_Print_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_PRINT, ICON_Print_0, ico, txt);
}
//
@@ -247,7 +261,7 @@ void ICON_Prepare() {
{ 33, { 417, 449 }, 51, 14 },
{ 31, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 1, ICON_Prepare_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_PREPARE, ICON_Prepare_0, ico, txt);
}
//
@@ -259,7 +273,7 @@ void ICON_Control() {
{ 85, { 417, 449 }, 46, 14 },
{ 61, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 2, ICON_Control_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_CONTROL, ICON_Control_0, ico, txt);
}
//
@@ -271,7 +285,7 @@ void ICON_StartInfo() {
{ 133, { 417, 449 }, 23, 14 },
{ 91, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 3, ICON_Info_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Info_0, ico, txt);
}
//
@@ -283,7 +297,7 @@ void ICON_Leveling() {
{ 88, { 433, 464 }, 36, 14 },
{ 211, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 3, ICON_Leveling_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Leveling_0, ico, txt);
}
//
@@ -295,7 +309,7 @@ void ICON_Tune() {
{ 0, { 433, 464 }, 32, 14 },
{ 121, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_print.now == 0, ICON_Setup_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_SETUP, ICON_Setup_0, ico, txt);
}
//
@@ -307,7 +321,7 @@ void ICON_Pause() {
{ 157, { 417, 449 }, 39, 14 },
{ 181, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_print.now == 1, ICON_Pause_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Pause_0, ico, txt);
}
//
@@ -319,7 +333,7 @@ void ICON_Resume() {
{ 33, { 433, 464 }, 53, 14 },
{ 1, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_print.now == 1, ICON_Continue_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Continue_0, ico, txt);
}
void ICON_ResumeOrPause() {
@@ -338,19 +352,15 @@ void ICON_Stop() {
{ 196, { 417, 449 }, 29, 14 },
{ 151, { 405, 447 }, 27, 12 }
};
- ICON_Button(select_print.now == 2, ICON_Stop_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt);
}
inline void Clear_Title_Bar() {
DWIN_Draw_Box(1, Color_Bg_Blue, 0, 0, DWIN_WIDTH, TITLE_HEIGHT);
}
-void Draw_Title(const char * const title) {
- DWIN_Draw_String(false, DWIN_FONT_HEAD, Color_White, Color_Bg_Blue, 14, 4, (char*)title);
-}
-
-void Draw_Title(const __FlashStringHelper * title) {
- DWIN_Draw_String(false, DWIN_FONT_HEAD, Color_White, Color_Bg_Blue, 14, 4, (char*)title);
+void Draw_Title(FSTR_P ftitle) {
+ DWIN_Draw_String(false, DWIN_FONT_HEAD, Color_White, Color_Bg_Blue, 14, 4, ftitle);
}
inline void Clear_Menu_Area() {
@@ -406,32 +416,40 @@ inline uint16_t nr_sd_menu_items() {
return card.get_num_Files() + !card.flag.workDirIsRoot;
}
-void Draw_Menu_Icon(const uint8_t line, const uint8_t icon) {
- DWIN_ICON_Show(ICON, icon, 26, MBASE(line) - 3);
-}
-
void Erase_Menu_Text(const uint8_t line) {
DWIN_Draw_Rectangle(1, Color_Bg_Black, LBLX, MBASE(line) - 14, 271, MBASE(line) + 28);
}
-void Draw_Menu_Item(const uint8_t line, const uint8_t icon=0, const char * const label=nullptr, bool more=false) {
- if (label) DWIN_Draw_String(false, font8x16, Color_White, Color_Bg_Black, LBLX, MBASE(line) - 1, (char*)label);
+void Draw_Menu_Icon(const uint8_t line, const uint8_t icon) {
+ DWIN_ICON_Show(ICON, icon, 26, MBASE(line) - 3);
+}
+
+void _Decorate_Menu_Item(const uint8_t line, const uint8_t icon, bool more) {
if (icon) Draw_Menu_Icon(line, icon);
if (more) Draw_More_Icon(line);
}
+void Draw_Menu_Item(const uint8_t line, const uint8_t icon=0, const char * const label=nullptr, bool more=false) {
+ if (label) DWIN_Draw_String(false, font8x16, Color_White, Color_Bg_Black, LBLX, MBASE(line) - 1, (char*)label);
+ _Decorate_Menu_Item(line, icon, more);
+}
+void Draw_Menu_Item(const uint8_t line, const uint8_t icon=0, FSTR_P const flabel=nullptr, bool more=false) {
+ if (flabel) DWIN_Draw_String(false, font8x16, Color_White, Color_Bg_Black, LBLX, MBASE(line) - 1, flabel);
+ _Decorate_Menu_Item(line, icon, more);
+}
void Draw_Menu_Line(const uint8_t line, const uint8_t icon=0, const char * const label=nullptr, bool more=false) {
Draw_Menu_Item(line, icon, label, more);
DWIN_Draw_Line(Line_Color, 16, MBASE(line) + 33, 256, MBASE(line) + 34);
}
-void Draw_Menu_LineF(const uint8_t line, const uint8_t icon=0, const __FlashStringHelper *label=nullptr, bool more=false) {
- Draw_Menu_Line(line, icon, (char*)label, more);
+void Draw_Menu_Line(const uint8_t line, const uint8_t icon, FSTR_P const flabel, bool more=false) {
+ Draw_Menu_Item(line, icon, flabel, more);
+ DWIN_Draw_Line(Line_Color, 16, MBASE(line) + 33, 256, MBASE(line) + 34);
}
void Draw_Checkbox_Line(const uint8_t line, const bool ison) {
const uint16_t x = 225, y = EBASE(line) - 2;
- DWIN_Draw_String(true, font8x16, Color_White, Color_Bg_Black, x + 5, y, F(ison ? "X" : " "));
+ DWIN_Draw_String(true, font8x16, Color_White, Color_Bg_Black, x + 5, y, ison ? F("X") : F(" "));
DWIN_Draw_Rectangle(0, Color_White, x + 2, y + 2, x + 16, y + 16);
}
@@ -456,7 +474,7 @@ void Draw_Back_First(const bool is_sel=true) {
}
template
-inline bool Apply_Encoder(const ENCODER_DiffState &encoder_diffState, T &valref) {
+inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
if (encoder_diffState == ENCODER_DIFF_CW)
valref += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
@@ -467,6 +485,7 @@ inline bool Apply_Encoder(const ENCODER_DiffState &encoder_diffState, T &valref)
//
// Draw Menus
//
+#define CASE_BACK 0
#define MOTION_CASE_RATE 1
#define MOTION_CASE_ACCEL 2
@@ -574,11 +593,11 @@ void say_steps_per_mm_en(const uint8_t row) {
void DWIN_Draw_Label(const uint8_t row, char *string) {
DWIN_Draw_String(true, font8x16, Color_White, Color_Bg_Black, LBLX, MBASE(row), string);
}
-void DWIN_Draw_Label(const uint8_t row, const __FlashStringHelper *title) {
+void DWIN_Draw_Label(const uint8_t row, FSTR_P title) {
DWIN_Draw_Label(row, (char*)title);
}
-void DWIN_Draw_Signed_Float(uint8_t size, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
+void DWIN_Draw_Signed_Float(uint8_t size, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, int32_t value) {
DWIN_Draw_String(true, size, Color_White, bColor, x - 8, y, value < 0 ? F("-") : F(" "));
DWIN_Draw_FloatValue(true, true, 0, size, Color_White, bColor, iNum, fNum, x, y, value < 0 ? -value : value);
}
@@ -592,7 +611,7 @@ void Draw_Edit_Integer4(const uint8_t row, const uint16_t value, const bool acti
}
void Draw_Edit_Float3(const uint8_t row, const uint16_t value, const bool active=false) {
- DWIN_Draw_FloatValue(true, true, 0, font8x16, Color_White, active ? Select_Color : Color_Bg_Black, 3, UNITFDIGITS, 220 - UNITFDIGITS * 8, EBASE(row), value);
+ DWIN_Draw_FloatValue(true, true, 0, font8x16, Color_White, active ? Select_Color : Color_Bg_Black, 3, UNITFDIGITS, 220 - UNITFDIGITS * 8, EBASE(row), (int32_t)value);
}
void Draw_Edit_Signed_Float2(const uint8_t row, const float value, const bool active=false) {
@@ -759,7 +778,7 @@ void Draw_Prepare_Menu() {
#endif
}
- if (PVISI(0)) Draw_Back_First(select_prepare.now == 0); // < Back
+ if (PVISI(0)) Draw_Back_First(select_prepare.now == CASE_BACK); // < Back
if (PVISI(PREPARE_CASE_MOVE)) Item_Prepare_Move(PSCROL(PREPARE_CASE_MOVE)); // Move >
if (PVISI(PREPARE_CASE_DISA)) Item_Prepare_Disable(PSCROL(PREPARE_CASE_DISA)); // Disable Stepper
if (PVISI(PREPARE_CASE_HOME)) Item_Prepare_Home(PSCROL(PREPARE_CASE_HOME)); // Auto Home
@@ -775,7 +794,7 @@ void Draw_Prepare_Menu() {
#endif
if (PVISI(PREPARE_CASE_LANG)) Item_Prepare_Lang(PSCROL(PREPARE_CASE_LANG)); // Language CN/EN
- if (select_prepare.now) Draw_Menu_Cursor(PSCROL(select_prepare.now));
+ if (select_prepare.now != CASE_BACK) Draw_Menu_Cursor(PSCROL(select_prepare.now));
}
//
@@ -860,7 +879,7 @@ void Draw_Control_Menu() {
#endif
}
- if (CVISI(0)) Draw_Back_First(select_control.now == 0); // < Back
+ if (CVISI(0)) Draw_Back_First(select_control.now == CASE_BACK); // < Back
if (CVISI(CONTROL_CASE_TEMP)) Item_Control_Temp(CSCROL(CONTROL_CASE_TEMP)); // Temperature >
if (CVISI(CONTROL_CASE_MOVE)) Item_Control_Motion(CSCROL(CONTROL_CASE_MOVE)); // Motion >
@@ -897,7 +916,7 @@ void Draw_Control_Menu() {
if (CVISI(CONTROL_CASE_ADVSET)) Item_Control_Advanced(CSCROL(CONTROL_CASE_ADVSET));
if (CVISI(CONTROL_CASE_INFO)) Item_Control_Info(CSCROL(CONTROL_CASE_INFO));
- if (select_control.now && CVISI(select_control.now))
+ if (select_control.now != CASE_BACK && CVISI(select_control.now))
Draw_Menu_Cursor(CSCROL(select_control.now));
// Draw icons and lines
@@ -977,8 +996,8 @@ void Draw_Tune_Menu() {
#endif
}
- Draw_Back_First(select_tune.now == 0);
- if (select_tune.now) Draw_Menu_Cursor(select_tune.now);
+ Draw_Back_First(select_tune.now == CASE_BACK);
+ if (select_tune.now != CASE_BACK) Draw_Menu_Cursor(select_tune.now);
Draw_Menu_Line(TUNE_CASE_SPEED, ICON_Speed);
Draw_Edit_Integer3(TUNE_CASE_SPEED, feedrate_percentage);
@@ -1042,8 +1061,8 @@ void Draw_Motion_Menu() {
#endif
}
- Draw_Back_First(select_motion.now == 0);
- if (select_motion.now) Draw_Menu_Cursor(select_motion.now);
+ Draw_Back_First(select_motion.now == CASE_BACK);
+ if (select_motion.now != CASE_BACK) Draw_Menu_Cursor(select_motion.now);
uint8_t i = 0;
#define _MOTION_ICON(N) Draw_Menu_Line(++i, ICON_MaxSpeed + (N) - 1)
@@ -1179,15 +1198,15 @@ void Popup_window_PauseOrStop() {
Clear_Main_Window();
Draw_Popup_Bkgd_60();
if (HMI_IsChinese()) {
- if (select_print.now == 1) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150); // Pause
- else if (select_print.now == 2) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150); // Stop
+ if (select_print.now == PRINT_PAUSE_RESUME) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150); // Pause
+ else if (select_print.now == PRINT_STOP) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150); // Stop
DWIN_Frame_AreaCopy(1, 220, 304, 264, 319, 130, 150); // Print
DWIN_ICON_Show(ICON, ICON_Confirm_C, 26, 280);
DWIN_ICON_Show(ICON, ICON_Cancel_C, 146, 280);
}
else {
- if (select_print.now == 1) DWIN_Draw_String(true, font8x16, Popup_Text_Color, Color_Bg_Window, (272 - 8 * 11) / 2, 150, GET_TEXT_F(MSG_PAUSE_PRINT));
- else if (select_print.now == 2) DWIN_Draw_String(true, font8x16, Popup_Text_Color, Color_Bg_Window, (272 - 8 * 10) / 2, 150, GET_TEXT_F(MSG_STOP_PRINT));
+ if (select_print.now == PRINT_PAUSE_RESUME) DWIN_Draw_String(true, font8x16, Popup_Text_Color, Color_Bg_Window, (272 - 8 * 11) / 2, 150, GET_TEXT_F(MSG_PAUSE_PRINT));
+ else if (select_print.now == PRINT_STOP) DWIN_Draw_String(true, font8x16, Popup_Text_Color, Color_Bg_Window, (272 - 8 * 10) / 2, 150, GET_TEXT_F(MSG_STOP_PRINT));
DWIN_ICON_Show(ICON, ICON_Confirm_E, 26, 280);
DWIN_ICON_Show(ICON, ICON_Cancel_E, 146, 280);
}
@@ -1277,11 +1296,11 @@ void Goto_MainMenu() {
TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)();
}
-inline ENCODER_DiffState get_encoder_state() {
+inline EncoderState get_encoder_state() {
static millis_t Encoder_ms = 0;
const millis_t ms = millis();
if (PENDING(ms, Encoder_ms)) return ENCODER_DIFF_NO;
- const ENCODER_DiffState state = Encoder_ReceiveAnalyze();
+ const EncoderState state = Encoder_ReceiveAnalyze();
if (state != ENCODER_DIFF_NO) Encoder_ms = ms + ENCODER_WAIT_MS;
return state;
}
@@ -1302,7 +1321,7 @@ void HMI_Move_Done(const AxisEnum axis) {
}
void HMI_Move_X() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Move_X_scaled)) {
Draw_Edit_Float3(1, HMI_ValueStruct.Move_X_scaled);
@@ -1316,7 +1335,7 @@ void HMI_Move_X() {
}
void HMI_Move_Y() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Move_Y_scaled)) {
Draw_Edit_Float3(2, HMI_ValueStruct.Move_Y_scaled);
@@ -1330,7 +1349,7 @@ void HMI_Move_Y() {
}
void HMI_Move_Z() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Move_Z_scaled)) {
Draw_Edit_Float3(3, HMI_ValueStruct.Move_Z_scaled);
@@ -1347,7 +1366,7 @@ void HMI_Move_Z() {
void HMI_Move_E() {
static float last_E_scaled = 0;
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Move_E_scaled)) {
last_E_scaled = HMI_ValueStruct.Move_E_scaled;
@@ -1368,7 +1387,7 @@ void HMI_Move_Z() {
bool printer_busy() { return planner.movesplanned() || printingIsActive(); }
void HMI_Zoffset() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
uint8_t zoff_line;
switch (HMI_ValueStruct.show_mode) {
@@ -1401,7 +1420,7 @@ void HMI_Move_Z() {
#if HAS_HOTEND
void HMI_ETemp() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
uint8_t temp_line;
switch (HMI_ValueStruct.show_mode) {
@@ -1443,7 +1462,7 @@ void HMI_Move_Z() {
#if HAS_HEATED_BED
void HMI_BedTemp() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
uint8_t bed_line;
switch (HMI_ValueStruct.show_mode) {
@@ -1485,7 +1504,7 @@ void HMI_Move_Z() {
#if HAS_PREHEAT && HAS_FAN
void HMI_FanSpeed() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
uint8_t fan_line;
switch (HMI_ValueStruct.show_mode) {
@@ -1526,7 +1545,7 @@ void HMI_Move_Z() {
#endif // HAS_PREHEAT && HAS_FAN
void HMI_PrintSpeed() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.print_speed)) {
checkkey = Tune;
@@ -1544,7 +1563,7 @@ void HMI_PrintSpeed() {
#define LAST_AXIS TERN(HAS_HOTEND, E_AXIS, Z_AXIS)
void HMI_MaxFeedspeedXYZE() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Max_Feedspeed)) {
checkkey = MaxSpeed;
@@ -1563,7 +1582,7 @@ void HMI_MaxFeedspeedXYZE() {
}
void HMI_MaxAccelerationXYZE() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Max_Acceleration)) {
checkkey = MaxAcceleration;
@@ -1584,7 +1603,7 @@ void HMI_MaxAccelerationXYZE() {
#if HAS_CLASSIC_JERK
void HMI_MaxJerkXYZE() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Max_Jerk_scaled)) {
checkkey = MaxJerk;
@@ -1605,7 +1624,7 @@ void HMI_MaxAccelerationXYZE() {
#endif // HAS_CLASSIC_JERK
void HMI_StepXYZE() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, HMI_ValueStruct.Max_Step_scaled)) {
checkkey = Step;
@@ -1801,7 +1820,9 @@ void HMI_SDCardInit() { card.cdroot(); }
void MarlinUI::refresh() { /* Nothing to see here */ }
-#define ICON_Folder ICON_More
+#if HAS_LCD_BRIGHTNESS
+ void MarlinUI::_set_brightness() { DWIN_LCD_Brightness(backlight ? brightness : 0); }
+#endif
#if ENABLED(SCROLL_LONG_FILENAMES)
@@ -1823,7 +1844,7 @@ void MarlinUI::refresh() { /* Nothing to see here */ }
void Init_SDItem_Shift() {
shift_amt = 0;
- shift_ms = select_file.now > 0 && strlen(shift_name) > MENU_CHAR_LIMIT
+ shift_ms = select_file.now != CASE_BACK && strlen(shift_name) > MENU_CHAR_LIMIT
? millis() + 750UL : 0;
}
@@ -1836,7 +1857,7 @@ void Draw_SDItem(const uint16_t item, int16_t row=-1) {
if (row < 0) row = item + 1 + MROWS - index_file;
const bool is_subdir = !card.flag.workDirIsRoot;
if (is_subdir && item == 0) {
- Draw_Menu_Line(row, ICON_Folder, "..");
+ Draw_Menu_Line(row, ICON_Folder, F(".."));
return;
}
@@ -2062,51 +2083,51 @@ void Draw_Print_File_Menu() {
// Main Process
void HMI_MainMenu() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW) {
if (select_page.inc(4)) {
switch (select_page.now) {
- case 0: ICON_Print(); break;
- case 1: ICON_Print(); ICON_Prepare(); break;
- case 2: ICON_Prepare(); ICON_Control(); break;
- case 3: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
+ case PAGE_PRINT: ICON_Print(); break;
+ case PAGE_PREPARE: ICON_Print(); ICON_Prepare(); break;
+ case PAGE_CONTROL: ICON_Prepare(); ICON_Control(); break;
+ case PAGE_INFO_LEVELING: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
if (select_page.dec()) {
switch (select_page.now) {
- case 0: ICON_Print(); ICON_Prepare(); break;
- case 1: ICON_Prepare(); ICON_Control(); break;
- case 2: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
- case 3: TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
+ case PAGE_PRINT: ICON_Print(); ICON_Prepare(); break;
+ case PAGE_PREPARE: ICON_Prepare(); ICON_Control(); break;
+ case PAGE_CONTROL: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
+ case PAGE_INFO_LEVELING: TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_page.now) {
- case 0: // Print File
+ case PAGE_PRINT:
checkkey = SelectFile;
Draw_Print_File_Menu();
break;
- case 1: // Prepare
+ case PAGE_PREPARE:
checkkey = Prepare;
select_prepare.reset();
index_prepare = MROWS;
Draw_Prepare_Menu();
break;
- case 2: // Control
+ case PAGE_CONTROL:
checkkey = Control;
select_control.reset();
index_control = MROWS;
Draw_Control_Menu();
break;
- case 3: // Leveling or Info
+ case PAGE_INFO_LEVELING:
#if HAS_ONESTEP_LEVELING
checkkey = Leveling;
HMI_Leveling();
@@ -2122,7 +2143,7 @@ void HMI_MainMenu() {
// Select (and Print) File
void HMI_SelectFile() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
const uint16_t hasUpDir = !card.flag.workDirIsRoot;
@@ -2196,7 +2217,7 @@ void HMI_SelectFile() {
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
- if (select_file.now == 0) { // Back
+ if (select_file.now == CASE_BACK) { // Back
select_page.set(0);
Goto_MainMenu();
}
@@ -2242,7 +2263,7 @@ void HMI_SelectFile() {
// Printing
void HMI_Printing() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (HMI_flag.done_confirm_flag) {
@@ -2257,43 +2278,32 @@ void HMI_Printing() {
if (encoder_diffState == ENCODER_DIFF_CW) {
if (select_print.inc(3)) {
switch (select_print.now) {
- case 0: ICON_Tune(); break;
- case 1:
- ICON_Tune();
- ICON_ResumeOrPause();
- break;
- case 2:
- ICON_ResumeOrPause();
- ICON_Stop();
- break;
+ case PRINT_SETUP: ICON_Tune(); break;
+ case PRINT_PAUSE_RESUME: ICON_Tune(); ICON_ResumeOrPause(); break;
+ case PRINT_STOP: ICON_ResumeOrPause(); ICON_Stop(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
if (select_print.dec()) {
switch (select_print.now) {
- case 0:
- ICON_Tune();
- ICON_ResumeOrPause();
- break;
- case 1:
- ICON_ResumeOrPause();
- ICON_Stop();
- break;
- case 2: ICON_Stop(); break;
+ case PRINT_SETUP: ICON_Tune(); ICON_ResumeOrPause(); break;
+ case PRINT_PAUSE_RESUME: ICON_ResumeOrPause(); ICON_Stop(); break;
+ case PRINT_STOP: ICON_Stop(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_print.now) {
- case 0: // Tune
+ case PRINT_SETUP:
checkkey = Tune;
HMI_ValueStruct.show_mode = 0;
select_tune.reset();
index_tune = MROWS;
Draw_Tune_Menu();
break;
- case 1: // Pause
+
+ case PRINT_PAUSE_RESUME:
if (HMI_flag.pause_flag) {
ICON_Pause();
@@ -2317,7 +2327,7 @@ void HMI_Printing() {
}
break;
- case 2: // Stop
+ case PRINT_STOP:
HMI_flag.select_flag = true;
checkkey = Print_window;
Popup_window_PauseOrStop();
@@ -2331,7 +2341,7 @@ void HMI_Printing() {
// Pause and Stop window
void HMI_PauseOrStop() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW)
@@ -2339,14 +2349,14 @@ void HMI_PauseOrStop() {
else if (encoder_diffState == ENCODER_DIFF_CCW)
Draw_Select_Highlight(true);
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
- if (select_print.now == 1) { // pause window
+ if (select_print.now == PRINT_PAUSE_RESUME) {
if (HMI_flag.select_flag) {
HMI_flag.pause_action = true;
- queue.inject_P(PSTR("M25"));
+ queue.inject(F("M25"));
}
Goto_PrintProcess();
}
- else if (select_print.now == 2) { // stop window
+ else if (select_print.now == PRINT_STOP) {
if (HMI_flag.select_flag) {
checkkey = Back_Main;
wait_for_heatup = wait_for_user = false; // Stop waiting for heating/user
@@ -2395,8 +2405,8 @@ void Draw_Move_Menu() {
#endif
}
- Draw_Back_First(select_axis.now == 0);
- if (select_axis.now) Draw_Menu_Cursor(select_axis.now);
+ Draw_Back_First(select_axis.now == CASE_BACK);
+ if (select_axis.now != CASE_BACK) Draw_Menu_Cursor(select_axis.now);
// Draw separators and icons
LOOP_L_N(i, 3 + ENABLED(HAS_HOTEND)) Draw_Menu_Line(i + 1, ICON_MoveX + i);
@@ -2413,7 +2423,7 @@ void Item_Adv_HomeOffsets(const uint8_t row) {
Item_AreaCopy(1, 76, 102, 87, row); // "Set Home Offsets"
#endif
}
- Draw_Menu_Line(row, ICON_HomeOff);
+ Draw_Menu_Line(row, ICON_HomeOffset);
Draw_More_Icon(row);
}
@@ -2430,7 +2440,7 @@ void Item_Adv_HomeOffsets(const uint8_t row) {
say_probe_offs_en(row);
#endif
}
- Draw_Menu_Line(row, ICON_ProbeOff);
+ Draw_Menu_Line(row, ICON_ProbeOffset);
Draw_More_Icon(row);
}
@@ -2506,7 +2516,7 @@ void Draw_AdvancedSettings_Menu() {
#endif
}
- if (AVISI(0)) Draw_Back_First(select_advset.now == 0);
+ if (AVISI(0)) Draw_Back_First(select_advset.now == CASE_BACK);
if (AVISI(ADVSET_CASE_HOMEOFF)) Item_Adv_HomeOffsets(ASCROL(ADVSET_CASE_HOMEOFF)); // Set Home Offsets >
#if HAS_ONESTEP_LEVELING
if (AVISI(ADVSET_CASE_PROBEOFF)) Item_Adv_ProbeOffsets(ASCROL(ADVSET_CASE_PROBEOFF)); // Probe Offsets >
@@ -2516,7 +2526,7 @@ void Draw_AdvancedSettings_Menu() {
#if ENABLED(POWER_LOSS_RECOVERY)
if (AVISI(ADVSET_CASE_PWRLOSSR)) Item_Adv_PLR(ASCROL(ADVSET_CASE_PWRLOSSR)); // Power-loss recovery
#endif
- if (select_advset.now) Draw_Menu_Cursor(ASCROL(select_advset.now));
+ if (select_advset.now != CASE_BACK) Draw_Menu_Cursor(ASCROL(select_advset.now));
}
void Item_HomeOffs_X(const uint8_t row) {
@@ -2525,12 +2535,12 @@ void Item_HomeOffs_X(const uint8_t row) {
}
else {
#ifdef USE_STRING_TITLES
- Draw_Menu_LineF(row, ICON_HomeOffX, GET_TEXT_F(MSG_HOME_OFFSET_X));
+ Draw_Menu_Line(row, ICON_HomeOffsetX, GET_TEXT_F(MSG_HOME_OFFSET_X));
#else
say_home_offs_en(row); say_x_en(75, row); // "Home Offset X"
#endif
}
- Draw_Menu_Line(row, ICON_HomeOff);
+ Draw_Menu_Line(row, ICON_HomeOffset);
Draw_Edit_Signed_Float3(row, HMI_ValueStruct.Home_OffX_scaled);
}
@@ -2540,12 +2550,12 @@ void Item_HomeOffs_Y(const uint8_t row) {
}
else {
#ifdef USE_STRING_TITLES
- Draw_Menu_LineF(row, ICON_HomeOffY, GET_TEXT_F(MSG_HOME_OFFSET_Y));
+ Draw_Menu_Line(row, ICON_HomeOffsetY, GET_TEXT_F(MSG_HOME_OFFSET_Y));
#else
say_home_offs_en(row); say_y_en(75, row); // "Home Offset X"
#endif
}
- Draw_Menu_Line(row, ICON_HomeOff);
+ Draw_Menu_Line(row, ICON_HomeOffset);
Draw_Edit_Signed_Float3(row, HMI_ValueStruct.Home_OffY_scaled);
}
@@ -2555,12 +2565,12 @@ void Item_HomeOffs_Z(const uint8_t row) {
}
else {
#ifdef USE_STRING_TITLES
- Draw_Menu_LineF(row, ICON_HomeOffZ, GET_TEXT_F(MSG_HOME_OFFSET_Z));
+ Draw_Menu_Line(row, ICON_HomeOffsetZ, GET_TEXT_F(MSG_HOME_OFFSET_Z));
#else
say_home_offs_en(row); say_z_en(75, row); // "Home Offset Z"
#endif
}
- Draw_Menu_Line(row, ICON_HomeOff);
+ Draw_Menu_Line(row, ICON_HomeOffset);
Draw_Edit_Signed_Float3(row, HMI_ValueStruct.Home_OffZ_scaled);
}
@@ -2576,18 +2586,18 @@ void Draw_HomeOff_Menu() {
DWIN_Frame_TitleCopy(1, 401, 91, 12); // "Home Offsets"
#endif
}
- Draw_Back_First(select_item.now == 0);
+ Draw_Back_First(select_item.now == CASE_BACK);
Item_HomeOffs_X(1); // "Home Offset X"
Item_HomeOffs_Y(2); // "Home Offset Y"
Item_HomeOffs_Z(3); // "Home Offset Z"
- if (select_item.now) Draw_Menu_Cursor(select_item.now);
+ if (select_item.now != CASE_BACK) Draw_Menu_Cursor(select_item.now);
}
#if HAS_ONESTEP_LEVELING
void Draw_ProbeOff_Menu() {
Clear_Main_Window();
- Draw_Back_First(select_item.now == 0);
+ Draw_Back_First(select_item.now == CASE_BACK);
if (false && HMI_IsChinese()) {
// TODO: Chinese "Probe Offsets"
}
@@ -2598,8 +2608,8 @@ void Draw_HomeOff_Menu() {
DWIN_Frame_TitleCopy(124, 431, 91, 12); // "Probe Offsets"
#endif
#ifdef USE_STRING_TITLES
- Draw_Menu_LineF(1, ICON_ProbeOffX, GET_TEXT_F(MSG_ZPROBE_XOFFSET)); // Probe X Offset
- Draw_Menu_LineF(2, ICON_ProbeOffY, GET_TEXT_F(MSG_ZPROBE_YOFFSET)); // Probe Y Offset
+ Draw_Menu_Line(1, ICON_ProbeOffsetX, GET_TEXT_F(MSG_ZPROBE_XOFFSET)); // Probe X Offset
+ Draw_Menu_Line(2, ICON_ProbeOffsetY, GET_TEXT_F(MSG_ZPROBE_YOFFSET)); // Probe Y Offset
#else
say_probe_offs_en(1); say_x_en(75, 1); // "Probe Offset X"
say_probe_offs_en(2); say_y_en(75, 2); // "Probe Offset Y"
@@ -2609,8 +2619,9 @@ void Draw_HomeOff_Menu() {
Draw_Edit_Signed_Float3(1, HMI_ValueStruct.Probe_OffX_scaled);
Draw_Edit_Signed_Float3(2, HMI_ValueStruct.Probe_OffY_scaled);
- if (select_item.now) Draw_Menu_Cursor(select_item.now);
+ if (select_item.now != CASE_BACK) Draw_Menu_Cursor(select_item.now);
}
+
#endif
#include "../../../libs/buzzer.h"
@@ -2629,7 +2640,7 @@ void HMI_AudioFeedback(const bool success=true) {
// Prepare
void HMI_Prepare() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -2682,11 +2693,11 @@ void HMI_Prepare() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_prepare.now) {
- case 0: // Back
+ case CASE_BACK:
select_page.set(1);
Goto_MainMenu();
break;
- case PREPARE_CASE_MOVE: // Axis move
+ case PREPARE_CASE_MOVE:
checkkey = AxisMove;
select_axis.reset();
Draw_Move_Menu();
@@ -2699,9 +2710,9 @@ void HMI_Prepare() {
Draw_Edit_Signed_Float3(4, HMI_ValueStruct.Move_E_scaled);
#endif
break;
- case PREPARE_CASE_DISA: // Disable steppers
- queue.inject_P(PSTR("M84"));
- break;
+
+ case PREPARE_CASE_DISA: queue.inject(F("M84")); break;
+
case PREPARE_CASE_HOME: // Homing
checkkey = Last_Prepare;
index_prepare = MROWS;
@@ -2709,7 +2720,7 @@ void HMI_Prepare() {
Popup_Window_Home();
break;
#if HAS_ZOFFSET_ITEM
- case PREPARE_CASE_ZOFF: // Z-offset
+ case PREPARE_CASE_ZOFF:
#if EITHER(HAS_BED_PROBE, BABYSTEPPING)
checkkey = Homeoffset;
HMI_ValueStruct.show_mode = -4;
@@ -2718,30 +2729,30 @@ void HMI_Prepare() {
EncoderRate.enabled = true;
#else
// Apply workspace offset, making the current position 0,0,0
- queue.inject_P(PSTR("G92 X0 Y0 Z0"));
+ queue.inject(F("G92 X0 Y0 Z0"));
HMI_AudioFeedback();
#endif
break;
#endif
#if HAS_PREHEAT
- case PREPARE_CASE_PLA: // PLA preheat
+ case PREPARE_CASE_PLA:
TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0));
TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[0].bed_temp));
TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed));
break;
- case PREPARE_CASE_ABS: // ABS preheat
+ case PREPARE_CASE_ABS:
TERN_(HAS_HOTEND, thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0));
TERN_(HAS_HEATED_BED, thermalManager.setTargetBed(ui.material_preset[1].bed_temp));
TERN_(HAS_FAN, thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed));
break;
- case PREPARE_CASE_COOL: // Cool
+ case PREPARE_CASE_COOL:
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
#if HAS_HOTEND || HAS_HEATED_BED
thermalManager.disable_all_heaters();
#endif
break;
#endif
- case PREPARE_CASE_LANG: // Toggle Language
+ case PREPARE_CASE_LANG:
HMI_ToggleLanguage();
Draw_Prepare_Menu();
break;
@@ -2814,8 +2825,8 @@ void Draw_Temperature_Menu() {
#endif
}
- Draw_Back_First(select_temp.now == 0);
- if (select_temp.now) Draw_Menu_Cursor(select_temp.now);
+ Draw_Back_First(select_temp.now == CASE_BACK);
+ if (select_temp.now != CASE_BACK) Draw_Menu_Cursor(select_temp.now);
// Draw icons and lines
uint8_t i = 0;
@@ -2843,7 +2854,7 @@ void Draw_Temperature_Menu() {
// Control
void HMI_Control() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -2884,41 +2895,41 @@ void HMI_Control() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_control.now) {
- case 0: // Back
+ case CASE_BACK:
select_page.set(2);
Goto_MainMenu();
break;
- case CONTROL_CASE_TEMP: // Temperature
+ case CONTROL_CASE_TEMP:
checkkey = TemperatureID;
HMI_ValueStruct.show_mode = -1;
select_temp.reset();
Draw_Temperature_Menu();
break;
- case CONTROL_CASE_MOVE: // Motion
+ case CONTROL_CASE_MOVE:
checkkey = Motion;
select_motion.reset();
Draw_Motion_Menu();
break;
#if ENABLED(EEPROM_SETTINGS)
- case CONTROL_CASE_SAVE: { // Write EEPROM
+ case CONTROL_CASE_SAVE: {
const bool success = settings.save();
HMI_AudioFeedback(success);
} break;
- case CONTROL_CASE_LOAD: { // Read EEPROM
+ case CONTROL_CASE_LOAD: {
const bool success = settings.load();
HMI_AudioFeedback(success);
} break;
- case CONTROL_CASE_RESET: // Reset EEPROM
+ case CONTROL_CASE_RESET:
settings.reset();
HMI_AudioFeedback();
break;
#endif
- case CONTROL_CASE_ADVSET: // Advanced Settings
+ case CONTROL_CASE_ADVSET:
checkkey = AdvSet;
select_advset.reset();
Draw_AdvancedSettings_Menu();
break;
- case CONTROL_CASE_INFO: // Info
+ case CONTROL_CASE_INFO:
checkkey = Info;
Draw_Info_Menu();
break;
@@ -2928,32 +2939,29 @@ void HMI_Control() {
DWIN_UpdateLCD();
}
-
#if HAS_ONESTEP_LEVELING
-
// Leveling
void HMI_Leveling() {
Popup_Window_Leveling();
DWIN_UpdateLCD();
#if defined(MAIN_MENU_ITEM_1_GCODE)
- queue.inject_P(PSTR(MAIN_MENU_ITEM_1_GCODE));
+ queue.inject(F(MAIN_MENU_ITEM_1_GCODE));
#else
- queue.inject_P(PSTR("G28O\nG29\nG28\nG1Z0"));
+ queue.inject(F("G28O\nG29\nG28\nG1Z0"));
#endif
}
-
#endif
// Axis Move
void HMI_AxisMove() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
#if ENABLED(PREVENT_COLD_EXTRUSION)
// popup window resume
- if (HMI_flag.ETempTooLow_flag) {
+ if (HMI_flag.cold_flag) {
if (encoder_diffState == ENCODER_DIFF_ENTER) {
- HMI_flag.ETempTooLow_flag = false;
+ HMI_flag.cold_flag = false;
HMI_ValueStruct.Move_E_scaled = current_position.e * MINUNITMULT;
Draw_Move_Menu();
Draw_Edit_Float3(1, HMI_ValueStruct.Move_X_scaled);
@@ -2975,7 +2983,7 @@ void HMI_AxisMove() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_axis.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = Prepare;
select_prepare.set(1);
index_prepare = MROWS;
@@ -3001,10 +3009,9 @@ void HMI_AxisMove() {
break;
#if HAS_HOTEND
case 4: // Extruder
- // window tips
- #ifdef PREVENT_COLD_EXTRUSION
+ #if ENABLED(PREVENT_COLD_EXTRUSION)
if (thermalManager.tooColdToExtrude(0)) {
- HMI_flag.ETempTooLow_flag = true;
+ HMI_flag.cold_flag = true;
Popup_Window_ETempTooLow();
DWIN_UpdateLCD();
return;
@@ -3023,7 +3030,7 @@ void HMI_AxisMove() {
// TemperatureID
void HMI_Temperature() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3035,14 +3042,14 @@ void HMI_Temperature() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_temp.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = Control;
select_control.set(1);
index_control = MROWS;
Draw_Control_Menu();
break;
#if HAS_HOTEND
- case TEMP_CASE_TEMP: // Nozzle temperature
+ case TEMP_CASE_TEMP:
checkkey = ETemp;
HMI_ValueStruct.E_Temp = thermalManager.degTargetHotend(0);
Draw_Edit_Integer3(1, HMI_ValueStruct.E_Temp, true);
@@ -3050,7 +3057,7 @@ void HMI_Temperature() {
break;
#endif
#if HAS_HEATED_BED
- case TEMP_CASE_BED: // Bed temperature
+ case TEMP_CASE_BED:
checkkey = BedTemp;
HMI_ValueStruct.Bed_Temp = thermalManager.degTargetBed();
Draw_Edit_Integer3(2, HMI_ValueStruct.Bed_Temp, true);
@@ -3058,7 +3065,7 @@ void HMI_Temperature() {
break;
#endif
#if HAS_FAN
- case TEMP_CASE_FAN: // Fan speed
+ case TEMP_CASE_FAN:
checkkey = FanSpeed;
HMI_ValueStruct.Fan_speed = thermalManager.fan_speed[0];
Draw_Edit_Integer3(3, HMI_ValueStruct.Fan_speed, true);
@@ -3066,7 +3073,7 @@ void HMI_Temperature() {
break;
#endif
#if HAS_HOTEND
- case TEMP_CASE_PLA: { // PLA preheat setting
+ case TEMP_CASE_PLA: {
checkkey = PLAPreheat;
select_PLA.reset();
HMI_ValueStruct.show_mode = -2;
@@ -3091,7 +3098,7 @@ void HMI_Temperature() {
}
else {
#ifdef USE_STRING_HEADINGS
- Draw_Title(PREHEAT_1_LABEL " Settings"); // TODO: GET_TEXT_F
+ Draw_Title(F(PREHEAT_1_LABEL " Settings")); // TODO: GET_TEXT_F
#else
DWIN_Frame_TitleCopy(56, 15, 85, 14); // "Temperature" TODO: "PLA Settings"
#endif
@@ -3170,7 +3177,7 @@ void HMI_Temperature() {
}
else {
#ifdef USE_STRING_HEADINGS
- Draw_Title("ABS Settings"); // TODO: GET_TEXT_F
+ Draw_Title(F("ABS Settings")); // TODO: GET_TEXT_F
#else
DWIN_Frame_TitleCopy(56, 15, 85, 14); // "Temperature" TODO: "ABS Settings"
#endif
@@ -3253,7 +3260,7 @@ void Draw_Max_Speed_Menu() {
}
else {
#ifdef USE_STRING_HEADINGS
- Draw_Title("Max Speed (mm/s)"); // TODO: GET_TEXT_F
+ Draw_Title(F("Max Speed (mm/s)")); // TODO: GET_TEXT_F
#else
DWIN_Frame_TitleCopy(144, 16, 46, 11); // "Max Speed (mm/s)"
#endif
@@ -3450,7 +3457,7 @@ void Draw_Steps_Menu() {
// Motion
void HMI_Motion() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3462,30 +3469,30 @@ void HMI_Motion() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_motion.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = Control;
select_control.set(CONTROL_CASE_MOVE);
index_control = MROWS;
Draw_Control_Menu();
break;
- case MOTION_CASE_RATE: // Max speed
+ case MOTION_CASE_RATE:
checkkey = MaxSpeed;
select_speed.reset();
Draw_Max_Speed_Menu();
break;
- case MOTION_CASE_ACCEL: // Max acceleration
+ case MOTION_CASE_ACCEL:
checkkey = MaxAcceleration;
select_acc.reset();
Draw_Max_Accel_Menu();
break;
#if HAS_CLASSIC_JERK
- case MOTION_CASE_JERK: // Max jerk
+ case MOTION_CASE_JERK:
checkkey = MaxJerk;
select_jerk.reset();
Draw_Max_Jerk_Menu();
break;
#endif
- case MOTION_CASE_STEPS: // Steps per mm
+ case MOTION_CASE_STEPS:
checkkey = Step;
select_step.reset();
Draw_Steps_Menu();
@@ -3498,7 +3505,7 @@ void HMI_Motion() {
// Advanced Settings
void HMI_AdvSet() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3537,7 +3544,7 @@ void HMI_AdvSet() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_advset.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = Control;
select_control.set(CONTROL_CASE_ADVSET);
index_control = CONTROL_CASE_ADVSET;
@@ -3545,7 +3552,7 @@ void HMI_AdvSet() {
break;
#if HAS_HOME_OFFSET
- case ADVSET_CASE_HOMEOFF: // Home Offsets
+ case ADVSET_CASE_HOMEOFF:
checkkey = HomeOff;
select_item.reset();
HMI_ValueStruct.Home_OffX_scaled = home_offset[X_AXIS] * 10;
@@ -3556,7 +3563,7 @@ void HMI_AdvSet() {
#endif
#if HAS_ONESTEP_LEVELING
- case ADVSET_CASE_PROBEOFF: // Probe Offsets
+ case ADVSET_CASE_PROBEOFF:
checkkey = ProbeOff;
select_item.reset();
HMI_ValueStruct.Probe_OffX_scaled = probe.offset.x * 10;
@@ -3566,21 +3573,21 @@ void HMI_AdvSet() {
#endif
#if HAS_HOTEND
- case ADVSET_CASE_HEPID: // Nozzle PID Autotune
+ case ADVSET_CASE_HEPID:
thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0);
thermalManager.PID_autotune(ui.material_preset[0].hotend_temp, H_E0, 10, true);
break;
#endif
#if HAS_HEATED_BED
- case ADVSET_CASE_BEDPID: // Bed PID Autotune
+ case ADVSET_CASE_BEDPID:
thermalManager.setTargetBed(ui.material_preset[0].bed_temp);
thermalManager.PID_autotune(ui.material_preset[0].bed_temp, H_BED, 10, true);
break;
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
- case ADVSET_CASE_PWRLOSSR: // Power-loss recovery
+ case ADVSET_CASE_PWRLOSSR:
recovery.enable(!recovery.enabled);
Draw_Checkbox_Line(ADVSET_CASE_PWRLOSSR + MROWS - index_advset, recovery.enabled);
break;
@@ -3595,7 +3602,7 @@ void HMI_AdvSet() {
// Home Offset
void HMI_HomeOff() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3607,7 +3614,7 @@ void HMI_AdvSet() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_item.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = AdvSet;
select_advset.set(ADVSET_CASE_HOMEOFF);
Draw_AdvancedSettings_Menu();
@@ -3634,7 +3641,7 @@ void HMI_AdvSet() {
}
void HMI_HomeOffN(const AxisEnum axis, float &posScaled, const_float_t lo, const_float_t hi) {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, posScaled)) {
@@ -3655,9 +3662,10 @@ void HMI_AdvSet() {
#endif // HAS_HOME_OFFSET
#if HAS_ONESTEP_LEVELING
+
// Probe Offset
void HMI_ProbeOff() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3669,7 +3677,7 @@ void HMI_AdvSet() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_item.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = AdvSet;
select_advset.set(ADVSET_CASE_PROBEOFF);
Draw_AdvancedSettings_Menu();
@@ -3679,7 +3687,7 @@ void HMI_AdvSet() {
Draw_Edit_Signed_Float3(1, HMI_ValueStruct.Probe_OffX_scaled, true);
EncoderRate.enabled = true;
break;
- case 2: // Probe Offset X
+ case 2: // Probe Offset Y
checkkey = ProbeOffY;
Draw_Edit_Signed_Float3(2, HMI_ValueStruct.Probe_OffY_scaled, true);
EncoderRate.enabled = true;
@@ -3690,7 +3698,7 @@ void HMI_AdvSet() {
}
void HMI_ProbeOffN(float &posScaled, float &offset_ref) {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (Apply_Encoder(encoder_diffState, posScaled)) {
@@ -3711,7 +3719,7 @@ void HMI_AdvSet() {
// Info
void HMI_Info() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_ENTER) {
#if HAS_ONESTEP_LEVELING
@@ -3728,7 +3736,7 @@ void HMI_Info() {
// Tune
void HMI_Tune() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3799,7 +3807,7 @@ void HMI_Tune() {
EncoderRate.enabled = true;
#else
// Apply workspace offset, making the current position 0,0,0
- queue.inject_P(PSTR("G92 X0 Y0 Z0"));
+ queue.inject(F("G92 X0 Y0 Z0"));
HMI_AudioFeedback();
#endif
break;
@@ -3814,7 +3822,7 @@ void HMI_Tune() {
// PLA Preheat
void HMI_PLAPreheatSetting() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3826,14 +3834,14 @@ void HMI_Tune() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_PLA.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = TemperatureID;
select_temp.now = TEMP_CASE_PLA;
HMI_ValueStruct.show_mode = -1;
Draw_Temperature_Menu();
break;
#if HAS_HOTEND
- case PREHEAT_CASE_TEMP: // Nozzle temperature
+ case PREHEAT_CASE_TEMP:
checkkey = ETemp;
HMI_ValueStruct.E_Temp = ui.material_preset[0].hotend_temp;
Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[0].hotend_temp, true);
@@ -3841,7 +3849,7 @@ void HMI_Tune() {
break;
#endif
#if HAS_HEATED_BED
- case PREHEAT_CASE_BED: // Bed temperature
+ case PREHEAT_CASE_BED:
checkkey = BedTemp;
HMI_ValueStruct.Bed_Temp = ui.material_preset[0].bed_temp;
Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[0].bed_temp, true);
@@ -3849,7 +3857,7 @@ void HMI_Tune() {
break;
#endif
#if HAS_FAN
- case PREHEAT_CASE_FAN: // Fan speed
+ case PREHEAT_CASE_FAN:
checkkey = FanSpeed;
HMI_ValueStruct.Fan_speed = ui.material_preset[0].fan_speed;
Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[0].fan_speed, true);
@@ -3857,7 +3865,7 @@ void HMI_Tune() {
break;
#endif
#if ENABLED(EEPROM_SETTINGS)
- case 4: { // Save PLA configuration
+ case PREHEAT_CASE_SAVE: {
const bool success = settings.save();
HMI_AudioFeedback(success);
} break;
@@ -3870,7 +3878,7 @@ void HMI_Tune() {
// ABS Preheat
void HMI_ABSPreheatSetting() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3882,14 +3890,14 @@ void HMI_Tune() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_ABS.now) {
- case 0: // Back
+ case CASE_BACK:
checkkey = TemperatureID;
select_temp.now = TEMP_CASE_ABS;
HMI_ValueStruct.show_mode = -1;
Draw_Temperature_Menu();
break;
#if HAS_HOTEND
- case PREHEAT_CASE_TEMP: // Set nozzle temperature
+ case PREHEAT_CASE_TEMP:
checkkey = ETemp;
HMI_ValueStruct.E_Temp = ui.material_preset[1].hotend_temp;
Draw_Edit_Integer3(PREHEAT_CASE_TEMP, ui.material_preset[1].hotend_temp, true);
@@ -3897,7 +3905,7 @@ void HMI_Tune() {
break;
#endif
#if HAS_HEATED_BED
- case PREHEAT_CASE_BED: // Set bed temperature
+ case PREHEAT_CASE_BED:
checkkey = BedTemp;
HMI_ValueStruct.Bed_Temp = ui.material_preset[1].bed_temp;
Draw_Edit_Integer3(PREHEAT_CASE_BED, ui.material_preset[1].bed_temp, true);
@@ -3905,7 +3913,7 @@ void HMI_Tune() {
break;
#endif
#if HAS_FAN
- case PREHEAT_CASE_FAN: // Set fan speed
+ case PREHEAT_CASE_FAN:
checkkey = FanSpeed;
HMI_ValueStruct.Fan_speed = ui.material_preset[1].fan_speed;
Draw_Edit_Integer3(PREHEAT_CASE_FAN, ui.material_preset[1].fan_speed, true);
@@ -3913,7 +3921,7 @@ void HMI_Tune() {
break;
#endif
#if ENABLED(EEPROM_SETTINGS)
- case PREHEAT_CASE_SAVE: { // Save ABS configuration
+ case PREHEAT_CASE_SAVE: {
const bool success = settings.save();
HMI_AudioFeedback(success);
} break;
@@ -3928,7 +3936,7 @@ void HMI_Tune() {
// Max Speed
void HMI_MaxSpeed() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3957,7 +3965,7 @@ void HMI_MaxSpeed() {
// Max Acceleration
void HMI_MaxAcceleration() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -3987,7 +3995,7 @@ void HMI_MaxAcceleration() {
#if HAS_CLASSIC_JERK
// Max Jerk
void HMI_MaxJerk() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -4017,7 +4025,7 @@ void HMI_MaxAcceleration() {
// Step
void HMI_Step() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
@@ -4108,7 +4116,7 @@ void EachMomentUpdate() {
TERN_(HAS_HEATED_BED, resume_bed_temp = thermalManager.degTargetBed());
thermalManager.disable_all_heaters();
#endif
- queue.inject_P(PSTR("G1 F1200 X0 Y0"));
+ queue.inject(F("G1 F1200 X0 Y0"));
}
if (card.isPrinting() && checkkey == PrintProcess) { // print process
@@ -4173,12 +4181,12 @@ void EachMomentUpdate() {
DWIN_UpdateLCD();
while (recovery_flag) {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_ENTER) {
recovery_flag = false;
if (HMI_flag.select_flag) break;
- TERN_(POWER_LOSS_RECOVERY, queue.inject_P(PSTR("M1000C")));
+ TERN_(POWER_LOSS_RECOVERY, queue.inject(F("M1000C")));
HMI_StartFrame(true);
return;
}
@@ -4191,7 +4199,7 @@ void EachMomentUpdate() {
select_print.set(0);
HMI_ValueStruct.show_mode = 0;
- queue.inject_P(PSTR("M1000"));
+ queue.inject(F("M1000"));
Goto_PrintProcess();
Draw_Status_Area(true);
}
@@ -4283,16 +4291,16 @@ void DWIN_CompletedLeveling() {
if (checkkey == Leveling) Goto_MainMenu();
}
-void DWIN_StatusChanged(const char *text) {
+void DWIN_StatusChanged(const char * const cstr/*=nullptr*/) {
DWIN_Draw_Rectangle(1, Color_Bg_Blue, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 24);
- const int8_t x = _MAX(0U, DWIN_WIDTH - strlen_P(text) * MENU_CHR_W) / 2;
- DWIN_Draw_String(false, font8x16, Color_White, Color_Bg_Blue, x, STATUS_Y + 3, F(text));
+ const int8_t x = _MAX(0U, DWIN_WIDTH - strlen(cstr) * MENU_CHR_W) / 2;
+ DWIN_Draw_String(false, font8x16, Color_White, Color_Bg_Blue, x, STATUS_Y + 3, cstr);
DWIN_UpdateLCD();
}
-void DWIN_StatusChanged_P(PGM_P const pstr) {
- char str[strlen_P((const char*)pstr) + 1];
- strcpy_P(str, (const char*)pstr);
+void DWIN_StatusChanged(FSTR_P const fstr) {
+ char str[strlen_P(FTOP(fstr)) + 1];
+ strcpy_P(str, FTOP(fstr));
DWIN_StatusChanged(str);
}
diff --git a/Marlin/src/lcd/e3v2/creality/dwin.h b/Marlin/src/lcd/e3v2/creality/dwin.h
index 69fe0d6bd6..d9ac0aa5fa 100644
--- a/Marlin/src/lcd/e3v2/creality/dwin.h
+++ b/Marlin/src/lcd/e3v2/creality/dwin.h
@@ -26,7 +26,7 @@
*/
#include "dwin_lcd.h"
-#include "rotary_encoder.h"
+#include "../common/encoder.h"
#include "../../../libs/BL24CXX.h"
#include "../../../inc/MarlinConfigPre.h"
@@ -144,24 +144,21 @@ typedef struct {
typedef struct {
uint8_t language;
- bool pause_flag:1;
- bool pause_action:1;
- bool print_finish:1;
+ bool pause_flag:1; // printing is paused
+ bool pause_action:1; // flag a pause action
+ bool print_finish:1; // print was finished
+ bool select_flag:1; // Popup button selected
+ bool home_flag:1; // homing in course
+ bool heat_flag:1; // 0: heating done 1: during heating
bool done_confirm_flag:1;
- bool select_flag:1;
- bool home_flag:1;
- bool heat_flag:1; // 0: heating done 1: during heating
#if ENABLED(PREVENT_COLD_EXTRUSION)
- bool ETempTooLow_flag:1;
- #endif
- #if HAS_LEVELING
- bool leveling_offset_flag:1;
+ bool cold_flag:1;
#endif
AxisEnum feedspeed_axis, acc_axis, jerk_axis, step_axis;
-} HMI_Flag_t;
+} HMI_flag_t;
extern HMI_value_t HMI_ValueStruct;
-extern HMI_Flag_t HMI_flag;
+extern HMI_flag_t HMI_flag;
#if HAS_HOTEND || HAS_HEATED_BED
// Popup message window
@@ -247,8 +244,8 @@ void HMI_Init();
void DWIN_Update();
void EachMomentUpdate();
void DWIN_HandleScreen();
-void DWIN_StatusChanged(const char *text);
-void DWIN_StatusChanged_P(PGM_P const pstr);
+void DWIN_StatusChanged(const char * const cstr=nullptr);
+void DWIN_StatusChanged(FSTR_P const fstr);
inline void DWIN_StartHoming() { HMI_flag.home_flag = true; }
diff --git a/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp
index 98de32191f..fee22932d2 100644
--- a/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp
+++ b/Marlin/src/lcd/e3v2/creality/dwin_lcd.cpp
@@ -35,94 +35,13 @@
#include "../../../inc/MarlinConfig.h"
#include "dwin_lcd.h"
-#include // for memset
//#define DEBUG_OUT 1
#include "../../../core/debug_out.h"
-// Make sure DWIN_SendBuf is large enough to hold the largest string plus draw command and tail.
-// Assume the narrowest (6 pixel) font and 2-byte gb2312-encoded characters.
-uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 8] = { 0xAA };
-uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C };
-uint8_t databuf[26] = { 0 };
-uint8_t receivedType;
-
-int recnum = 0;
-
-inline void DWIN_Byte(size_t &i, const uint16_t bval) {
- DWIN_SendBuf[++i] = bval;
-}
-
-inline void DWIN_Word(size_t &i, const uint16_t wval) {
- DWIN_SendBuf[++i] = wval >> 8;
- DWIN_SendBuf[++i] = wval & 0xFF;
-}
-
-inline void DWIN_Long(size_t &i, const uint32_t lval) {
- DWIN_SendBuf[++i] = (lval >> 24) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 16) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 8) & 0xFF;
- DWIN_SendBuf[++i] = lval & 0xFF;
-}
-
-inline void DWIN_String(size_t &i, char * const string) {
- const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, strlen(string));
- memcpy(&DWIN_SendBuf[i+1], string, len);
- i += len;
-}
-
-inline void DWIN_String(size_t &i, const __FlashStringHelper * string) {
- if (!string) return;
- const size_t len = strlen_P((PGM_P)string); // cast it to PGM_P, which is basically const char *, and measure it using the _P version of strlen.
- if (len == 0) return;
- memcpy(&DWIN_SendBuf[i+1], string, len);
- i += len;
-}
-
-// Send the data in the buffer and the packet end
-inline void DWIN_Send(size_t &i) {
- ++i;
- LOOP_L_N(n, i) { LCD_SERIAL.write(DWIN_SendBuf[n]); delayMicroseconds(1); }
- LOOP_L_N(n, 4) { LCD_SERIAL.write(DWIN_BufTail[n]); delayMicroseconds(1); }
-}
-
/*-------------------------------------- System variable function --------------------------------------*/
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void) {
- #ifndef LCD_BAUDRATE
- #define LCD_BAUDRATE 115200
- #endif
- LCD_SERIAL.begin(LCD_BAUDRATE);
- const millis_t serial_connect_timeout = millis() + 1000UL;
- while (!LCD_SERIAL.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
-
- size_t i = 0;
- DWIN_Byte(i, 0x00);
- DWIN_Send(i);
-
- while (LCD_SERIAL.available() > 0 && recnum < (signed)sizeof(databuf)) {
- databuf[recnum] = LCD_SERIAL.read();
- // ignore the invalid data
- if (databuf[0] != FHONE) { // prevent the program from running.
- if (recnum > 0) {
- recnum = 0;
- ZERO(databuf);
- }
- continue;
- }
- delay(10);
- recnum++;
- }
-
- return ( recnum >= 3
- && databuf[0] == FHONE
- && databuf[1] == '\0'
- && databuf[2] == 'O'
- && databuf[3] == 'K' );
-}
-
-void DWIN_Startup(void) {
+void DWIN_Startup() {
DEBUG_ECHOPGM("\r\nDWIN handshake ");
delay(750); // Delay here or init later in the boot process
if (DWIN_Handshake()) DEBUG_ECHOLNPGM("ok."); else DEBUG_ECHOLNPGM("error.");
@@ -133,255 +52,14 @@ void DWIN_Startup(void) {
DWIN_UpdateLCD();
}
-// Set the backlight luminance
-// luminance: (0x00-0xFF)
-void DWIN_Backlight_SetLuminance(const uint8_t luminance) {
- size_t i = 0;
- DWIN_Byte(i, 0x30);
- DWIN_Byte(i, _MAX(luminance, 0x1F));
- DWIN_Send(i);
-}
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir) {
- size_t i = 0;
- DWIN_Byte(i, 0x34);
- DWIN_Byte(i, 0x5A);
- DWIN_Byte(i, 0xA5);
- DWIN_Byte(i, dir);
- DWIN_Send(i);
-}
-
-// Update display
-void DWIN_UpdateLCD(void) {
- size_t i = 0;
- DWIN_Byte(i, 0x3D);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Drawing functions ----------------------------------------*/
-
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color) {
- size_t i = 0;
- DWIN_Byte(i, 0x01);
- DWIN_Word(i, color);
- DWIN_Send(i);
-}
-
-// Draw a point
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y) {
- size_t i = 0;
- DWIN_Byte(i, 0x02);
- DWIN_Word(i, color);
- DWIN_Byte(i, width);
- DWIN_Byte(i, height);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Send(i);
-}
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x03);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color,
- uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x05);
- DWIN_Byte(i, mode);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x09);
- DWIN_Byte(i, (mode << 7) | dir);
- DWIN_Word(i, dis);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// widthAdjust: true=self-adjust character width; false=no adjustment
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, char *string) {
- uint8_t widthAdjust = 0;
- size_t i = 0;
- DWIN_Byte(i, 0x11);
- // Bit 7: widthAdjust
- // Bit 6: bShow
- // Bit 5-4: Unused (0)
- // Bit 3-0: size
- DWIN_Byte(i, (widthAdjust * 0x80) | (bShow * 0x40) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_String(i, string);
- DWIN_Send(i);
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value) {
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- // Bit 7: bshow
- // Bit 6: 1 = signed; 0 = unsigned number;
- // Bit 5: zeroFill
- // Bit 4: zeroMode
- // Bit 3-0: size
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, 0); // fNum
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- #if 0
- for (char count = 0; count < 8; count++) {
- DWIN_Byte(i, value);
- value >>= 8;
- if (!(value & 0xFF)) break;
- }
- #else
- // Write a big-endian 64 bit integer
- const size_t p = i + 1;
- for (char count = 8; count--;) { // 7..0
- ++i;
- DWIN_SendBuf[p + count] = value;
- value >>= 8;
- }
- #endif
-
- DWIN_Send(i);
-}
-
-// Draw a floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
- //uint8_t *fvalue = (uint8_t*)&value;
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, fNum);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Long(i, value);
- /*
- DWIN_Byte(i, fvalue[3]);
- DWIN_Byte(i, fvalue[2]);
- DWIN_Byte(i, fvalue[1]);
- DWIN_Byte(i, fvalue[0]);
- */
- DWIN_Send(i);
-}
-
/*---------------------------------------- Picture related functions ----------------------------------------*/
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id) {
- size_t i = 0;
- DWIN_Word(i, 0x2200);
- DWIN_Byte(i, id);
- DWIN_Send(i); // AA 23 00 00 00 00 08 00 01 02 03 CC 33 C3 3C
-}
-
// Draw an Icon
// libID: Icon library ID
// picID: Icon ID
// x/y: Upper-left point
void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x23);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Byte(i, 0x80 | libID);
- //DWIN_Byte(i, libID);
- DWIN_Byte(i, picID);
- DWIN_Send(i);
-}
-
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id) {
- size_t i = 0;
- DWIN_Byte(i, 0x25);
- DWIN_Byte(i, n);
- DWIN_Byte(i, id);
- DWIN_Send(i);
+ DWIN_ICON_Show(true, false, false, libID, picID, x, y);
}
// Copy area from virtual display area to current screen
@@ -389,8 +67,7 @@ void DWIN_JPG_CacheToN(uint8_t n, uint8_t id) {
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
+void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
size_t i = 0;
DWIN_Byte(i, 0x27);
DWIN_Byte(i, 0x80 | cacheID);
@@ -403,73 +80,4 @@ void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
DWIN_Send(i);
}
-// Animate a series of icons
-// animID: Animation ID; 0x00-0x0F
-// animate: true on; false off;
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs, uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x28);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- // Bit 7: animation on or off
- // Bit 6: start from begin or end
- // Bit 5-4: unused (0)
- // Bit 3-0: animID
- DWIN_Byte(i, (animate * 0x80) | 0x40 | animID);
- DWIN_Byte(i, libID);
- DWIN_Byte(i, picIDs);
- DWIN_Byte(i, picIDe);
- DWIN_Byte(i, interval);
- DWIN_Send(i);
-}
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state) {
- size_t i = 0;
- DWIN_Byte(i, 0x29);
- DWIN_Word(i, state);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Memory functions ----------------------------------------*/
-// The LCD has an additional 32KB SRAM and 16KB Flash
-
-// Data can be written to the sram and save to one of the jpeg page files
-
-// Write Data Memory
-// command 0x31
-// Type: Write memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Write data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Data: data
-//
-// Flash writing returns 0xA5 0x4F 0x4B
-
-// Read Data Memory
-// command 0x32
-// Type: Read memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Read data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Length: leangth of data to read; 0x01-0xF0
-//
-// Response:
-// Type, Address, Length, Data
-
-// Write Picture Memory
-// Write the contents of the 32KB SRAM data memory into the designated image memory space
-// Issued: 0x5A, 0xA5, PIC_ID
-// Response: 0xA5 0x4F 0x4B
-//
-// command 0x33
-// 0x5A, 0xA5
-// PicId: Picture Memory location, 0x00-0x0F
-//
-// Flash writing returns 0xA5 0x4F 0x4B
-
#endif // DWIN_CREALITY_LCD
diff --git a/Marlin/src/lcd/e3v2/creality/dwin_lcd.h b/Marlin/src/lcd/e3v2/creality/dwin_lcd.h
index 262276f590..115781f094 100644
--- a/Marlin/src/lcd/e3v2/creality/dwin_lcd.h
+++ b/Marlin/src/lcd/e3v2/creality/dwin_lcd.h
@@ -29,338 +29,22 @@
* @brief 迪文屏控制操作函数
********************************************************************************/
-#include
-
-//#define USE_STRING_HEADINGS
-//#define USE_STRING_TITLES
-
-#define RECEIVED_NO_DATA 0x00
-#define RECEIVED_SHAKE_HAND_ACK 0x01
-
-#define FHONE 0xAA
-
-#define DWIN_SCROLL_UP 2
-#define DWIN_SCROLL_DOWN 3
-
#define DWIN_WIDTH 272
#define DWIN_HEIGHT 480
-// Picture ID
-#define Language_English 1
-#define Language_Chinese 2
-
-// ICON ID
-#define ICON 7 // Icon set file 7.ICO
-
-#define ICON_LOGO 0
-#define ICON_Print_0 1
-#define ICON_Print_1 2
-#define ICON_Prepare_0 3
-#define ICON_Prepare_1 4
-#define ICON_Control_0 5
-#define ICON_Control_1 6
-#define ICON_Leveling_0 7
-#define ICON_Leveling_1 8
-#define ICON_HotendTemp 9
-#define ICON_BedTemp 10
-#define ICON_Speed 11
-#define ICON_Zoffset 12
-#define ICON_Back 13
-#define ICON_File 14
-#define ICON_PrintTime 15
-#define ICON_RemainTime 16
-#define ICON_Setup_0 17
-#define ICON_Setup_1 18
-#define ICON_Pause_0 19
-#define ICON_Pause_1 20
-#define ICON_Continue_0 21
-#define ICON_Continue_1 22
-#define ICON_Stop_0 23
-#define ICON_Stop_1 24
-#define ICON_Bar 25
-#define ICON_More 26
-
-#define ICON_Axis 27
-#define ICON_CloseMotor 28
-#define ICON_Homing 29
-#define ICON_SetHome 30
-#define ICON_PLAPreheat 31
-#define ICON_ABSPreheat 32
-#define ICON_Cool 33
-#define ICON_Language 34
-
-#define ICON_MoveX 35
-#define ICON_MoveY 36
-#define ICON_MoveZ 37
-#define ICON_Extruder 38
-
-#define ICON_Temperature 40
-#define ICON_Motion 41
-#define ICON_WriteEEPROM 42
-#define ICON_ReadEEPROM 43
-#define ICON_ResumeEEPROM 44
-#define ICON_Info 45
-
-#define ICON_SetEndTemp 46
-#define ICON_SetBedTemp 47
-#define ICON_FanSpeed 48
-#define ICON_SetPLAPreheat 49
-#define ICON_SetABSPreheat 50
-
-#define ICON_MaxSpeed 51
-#define ICON_MaxAccelerated 52
-#define ICON_MaxJerk 53
-#define ICON_Step 54
-#define ICON_PrintSize 55
-#define ICON_Version 56
-#define ICON_Contact 57
-#define ICON_StockConfiguraton 58
-#define ICON_MaxSpeedX 59
-#define ICON_MaxSpeedY 60
-#define ICON_MaxSpeedZ 61
-#define ICON_MaxSpeedE 62
-#define ICON_MaxAccX 63
-#define ICON_MaxAccY 64
-#define ICON_MaxAccZ 65
-#define ICON_MaxAccE 66
-#define ICON_MaxSpeedJerkX 67
-#define ICON_MaxSpeedJerkY 68
-#define ICON_MaxSpeedJerkZ 69
-#define ICON_MaxSpeedJerkE 70
-#define ICON_StepX 71
-#define ICON_StepY 72
-#define ICON_StepZ 73
-#define ICON_StepE 74
-#define ICON_Setspeed 75
-#define ICON_SetZOffset 76
-#define ICON_Rectangle 77
-#define ICON_BLTouch 78
-#define ICON_TempTooLow 79
-#define ICON_AutoLeveling 80
-#define ICON_TempTooHigh 81
-#define ICON_NoTips_C 82
-#define ICON_NoTips_E 83
-#define ICON_Continue_C 84
-#define ICON_Continue_E 85
-#define ICON_Cancel_C 86
-#define ICON_Cancel_E 87
-#define ICON_Confirm_C 88
-#define ICON_Confirm_E 89
-#define ICON_Info_0 90
-#define ICON_Info_1 91
-
-#define ICON_AdvSet ICON_Language
-#define ICON_HomeOff ICON_AdvSet
-#define ICON_HomeOffX ICON_StepX
-#define ICON_HomeOffY ICON_StepY
-#define ICON_HomeOffZ ICON_StepZ
-#define ICON_ProbeOff ICON_AdvSet
-#define ICON_ProbeOffX ICON_StepX
-#define ICON_ProbeOffY ICON_StepY
-#define ICON_PIDNozzle ICON_SetEndTemp
-#define ICON_PIDbed ICON_SetBedTemp
-
-/**
- * 3-.0:The font size, 0x00-0x09, corresponds to the font size below:
- * 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28
- * 0x05=16*32 0x06=20*40 0x07=24*48 0x08=28*56 0x09=32*64
- */
-#define font6x12 0x00
-#define font8x16 0x01
-#define font10x20 0x02
-#define font12x24 0x03
-#define font14x28 0x04
-#define font16x32 0x05
-#define font20x40 0x06
-#define font24x48 0x07
-#define font28x56 0x08
-#define font32x64 0x09
+#include "../common/dwin_api.h"
+#include "../common/dwin_set.h"
+#include "../common/dwin_font.h"
+#include "../common/dwin_color.h"
#define DWIN_FONT_MENU font10x20
#define DWIN_FONT_STAT font10x20
#define DWIN_FONT_HEAD font10x20
#define DWIN_FONT_ALERT font14x28
-// Color
-#define Color_White 0xFFFF
-#define Color_Yellow 0xFF0F
-#define Color_Error_Red 0xB000 // Error!
-#define Color_Bg_Red 0xF00F // Red background color
-#define Color_Bg_Window 0x31E8 // Popup background color
-#define Color_Bg_Blue 0x1125 // Dark blue background color
-#define Color_Bg_Black 0x0841 // Black background color
-#define Color_IconBlue 0x45FA // Lighter blue that matches icons/accents
-#define Popup_Text_Color 0xD6BA // Popup font background color
-#define Line_Color 0x3A6A // Split line color
-#define Rectangle_Color 0xEE2F // Blue square cursor color
-#define Percent_Color 0xFE29 // Percentage color
-#define BarFill_Color 0x10E4 // Fill color of progress bar
-#define Select_Color 0x33BB // Selected color
-
-/*-------------------------------------- System variable function --------------------------------------*/
-
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void);
-
-// Common DWIN startup
-void DWIN_Startup(void);
-
-// Set the backlight luminance
-// luminance: (0x00-0xFF)
-void DWIN_Backlight_SetLuminance(const uint8_t luminance);
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir);
-
-// Update display
-void DWIN_UpdateLCD(void);
-
-/*---------------------------------------- Drawing functions ----------------------------------------*/
-
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color);
-
-// Draw a point
-// color: point color
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y);
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a Horizontal line
-// color: Line segment color
-// xStart/yStart: Start point
-// xLength: Line Length
-inline void DWIN_Draw_HLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart + xLength - 1, yStart);
-}
-
-// Draw a Vertical line
-// color: Line segment color
-// xStart/yStart: Start point
-// yLength: Line Length
-inline void DWIN_Draw_VLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t yLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart, yStart + yLength - 1);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a box
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xSize/ySize: box size
-inline void DWIN_Draw_Box(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xSize, uint16_t ySize) {
- DWIN_Draw_Rectangle(mode, color, xStart, yStart, xStart + xSize - 1, yStart + ySize - 1);
-}
-
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, char *string);
-
-class __FlashStringHelper;
-
-inline void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
- DWIN_Draw_String(bShow, size, color, bColor, x, y, (char *)title);
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value);
-
-// Draw a floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
-
-/*---------------------------------------- Picture related functions ----------------------------------------*/
-
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id);
-
-// Draw an Icon
-// libID: Icon library ID
-// picID: Icon ID
-// x/y: Upper-left point
-void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y);
-
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id);
-
-// Unzip the JPG picture to virtual display area #1
-// id: Picture ID
-inline void DWIN_JPG_CacheTo1(uint8_t id) { DWIN_JPG_CacheToN(1, id); }
-
// Copy area from virtual display area to current screen
// cacheID: virtual area number
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
-
-// Animate a series of icons
-// animID: Animation ID up to 16
-// animate: animation on or off
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs,
- uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval);
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state);
+void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
diff --git a/Marlin/src/lcd/e3v2/creality/rotary_encoder.cpp b/Marlin/src/lcd/e3v2/creality/rotary_encoder.cpp
deleted file mode 100644
index 6bb8d79be8..0000000000
--- a/Marlin/src/lcd/e3v2/creality/rotary_encoder.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-/*****************************************************************************
- * @file lcd/e3v2/creality/rotary_encoder.cpp
- * @author LEO / Creality3D
- * @date 2019/07/06
- * @version 2.0.1
- * @brief Rotary encoder functions
- *****************************************************************************/
-
-#include "../../../inc/MarlinConfigPre.h"
-
-#if ENABLED(DWIN_CREALITY_LCD)
-
-#include "rotary_encoder.h"
-#include "../../buttons.h"
-
-#include "../../../MarlinCore.h"
-#include "../../../HAL/shared/Delay.h"
-
-#if HAS_BUZZER
- #include "../../../libs/buzzer.h"
-#endif
-
-#include
-
-#ifndef ENCODER_PULSES_PER_STEP
- #define ENCODER_PULSES_PER_STEP 4
-#endif
-
-ENCODER_Rate EncoderRate;
-
-// Buzzer
-void Encoder_tick() {
- #if PIN_EXISTS(BEEPER)
- WRITE(BEEPER_PIN, HIGH);
- delay(10);
- WRITE(BEEPER_PIN, LOW);
- #endif
-}
-
-// Encoder initialization
-void Encoder_Configuration() {
- #if BUTTON_EXISTS(EN1)
- SET_INPUT_PULLUP(BTN_EN1);
- #endif
- #if BUTTON_EXISTS(EN2)
- SET_INPUT_PULLUP(BTN_EN2);
- #endif
- #if BUTTON_EXISTS(ENC)
- SET_INPUT_PULLUP(BTN_ENC);
- #endif
- #if PIN_EXISTS(BEEPER)
- SET_OUTPUT(BEEPER_PIN);
- #endif
-}
-
-// Analyze encoder value and return state
-ENCODER_DiffState Encoder_ReceiveAnalyze() {
- const millis_t now = millis();
- static uint8_t lastEncoderBits;
- uint8_t newbutton = 0;
- static signed char temp_diff = 0;
-
- ENCODER_DiffState temp_diffState = ENCODER_DIFF_NO;
- if (BUTTON_PRESSED(EN1)) newbutton |= EN_A;
- if (BUTTON_PRESSED(EN2)) newbutton |= EN_B;
- if (BUTTON_PRESSED(ENC)) {
- static millis_t next_click_update_ms;
- if (ELAPSED(now, next_click_update_ms)) {
- next_click_update_ms = millis() + 300;
- Encoder_tick();
- #if PIN_EXISTS(LCD_LED)
- //LED_Action();
- #endif
- const bool was_waiting = wait_for_user;
- wait_for_user = false;
- return was_waiting ? ENCODER_DIFF_NO : ENCODER_DIFF_ENTER;
- }
- else return ENCODER_DIFF_NO;
- }
- if (newbutton != lastEncoderBits) {
- switch (newbutton) {
- case ENCODER_PHASE_0:
- if (lastEncoderBits == ENCODER_PHASE_3) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_1) temp_diff--;
- break;
- case ENCODER_PHASE_1:
- if (lastEncoderBits == ENCODER_PHASE_0) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_2) temp_diff--;
- break;
- case ENCODER_PHASE_2:
- if (lastEncoderBits == ENCODER_PHASE_1) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_3) temp_diff--;
- break;
- case ENCODER_PHASE_3:
- if (lastEncoderBits == ENCODER_PHASE_2) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_0) temp_diff--;
- break;
- }
- lastEncoderBits = newbutton;
- }
-
- if (ABS(temp_diff) >= ENCODER_PULSES_PER_STEP) {
- #if ENABLED(REVERSE_ENCODER_DIRECTION)
- if (temp_diff > 0) temp_diffState = ENCODER_DIFF_CCW;
- else temp_diffState = ENCODER_DIFF_CW;
- #else
- if (temp_diff > 0) temp_diffState = ENCODER_DIFF_CW;
- else temp_diffState = ENCODER_DIFF_CCW;
- #endif
-
- #if ENABLED(ENCODER_RATE_MULTIPLIER)
-
- millis_t ms = millis();
- int32_t encoderMultiplier = 1;
-
- // if must encoder rati multiplier
- if (EncoderRate.enabled) {
- const float abs_diff = ABS(temp_diff),
- encoderMovementSteps = abs_diff / (ENCODER_PULSES_PER_STEP);
- if (EncoderRate.lastEncoderTime) {
- // Note that the rate is always calculated between two passes through the
- // loop and that the abs of the temp_diff value is tracked.
- const float encoderStepRate = encoderMovementSteps / float(ms - EncoderRate.lastEncoderTime) * 1000;
- if (encoderStepRate >= ENCODER_100X_STEPS_PER_SEC) encoderMultiplier = 100;
- else if (encoderStepRate >= ENCODER_10X_STEPS_PER_SEC) encoderMultiplier = 10;
- #if ENCODER_5X_STEPS_PER_SEC
- else if (encoderStepRate >= ENCODER_5X_STEPS_PER_SEC) encoderMultiplier = 5;
- #endif
- }
- EncoderRate.lastEncoderTime = ms;
- }
-
- #else
-
- constexpr int32_t encoderMultiplier = 1;
-
- #endif
-
- // EncoderRate.encoderMoveValue += (temp_diff * encoderMultiplier) / (ENCODER_PULSES_PER_STEP);
- EncoderRate.encoderMoveValue = (temp_diff * encoderMultiplier) / (ENCODER_PULSES_PER_STEP);
- if (EncoderRate.encoderMoveValue < 0) EncoderRate.encoderMoveValue = -EncoderRate.encoderMoveValue;
-
- temp_diff = 0;
- }
- return temp_diffState;
-}
-
-#if PIN_EXISTS(LCD_LED)
-
- // Take the low 24 valid bits 24Bit: G7 G6 G5 G4 G3 G2 G1 G0 R7 R6 R5 R4 R3 R2 R1 R0 B7 B6 B5 B4 B3 B2 B1 B0
- uint16_t LED_DataArray[LED_NUM];
-
- // LED light operation
- void LED_Action() {
- LED_Control(RGB_SCALE_WARM_WHITE,0x0F);
- delay(30);
- LED_Control(RGB_SCALE_WARM_WHITE,0x00);
- }
-
- // LED initialization
- void LED_Configuration() {
- SET_OUTPUT(LCD_LED_PIN);
- }
-
- // LED write data
- void LED_WriteData() {
- uint8_t tempCounter_LED, tempCounter_Bit;
- for (tempCounter_LED = 0; tempCounter_LED < LED_NUM; tempCounter_LED++) {
- for (tempCounter_Bit = 0; tempCounter_Bit < 24; tempCounter_Bit++) {
- if (LED_DataArray[tempCounter_LED] & (0x800000 >> tempCounter_Bit)) {
- LED_DATA_HIGH;
- DELAY_NS(300);
- LED_DATA_LOW;
- DELAY_NS(200);
- }
- else {
- LED_DATA_HIGH;
- LED_DATA_LOW;
- DELAY_NS(200);
- }
- }
- }
- }
-
- // LED control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- void LED_Control(const uint8_t RGB_Scale, const uint8_t luminance) {
- for (uint8_t i = 0; i < LED_NUM; i++) {
- LED_DataArray[i] = 0;
- switch (RGB_Scale) {
- case RGB_SCALE_R10_G7_B5: LED_DataArray[i] = (luminance * 10/10) << 8 | (luminance * 7/10) << 16 | luminance * 5/10; break;
- case RGB_SCALE_R10_G7_B4: LED_DataArray[i] = (luminance * 10/10) << 8 | (luminance * 7/10) << 16 | luminance * 4/10; break;
- case RGB_SCALE_R10_G8_B7: LED_DataArray[i] = (luminance * 10/10) << 8 | (luminance * 8/10) << 16 | luminance * 7/10; break;
- }
- }
- LED_WriteData();
- }
-
- // LED gradient control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- // change_Time: gradient time (ms)
- void LED_GraduallyControl(const uint8_t RGB_Scale, const uint8_t luminance, const uint16_t change_Interval) {
- struct { uint8_t g, r, b; } led_data[LED_NUM];
- for (uint8_t i = 0; i < LED_NUM; i++) {
- switch (RGB_Scale) {
- case RGB_SCALE_R10_G7_B5:
- led_data[i] = { luminance * 7/10, luminance * 10/10, luminance * 5/10 };
- break;
- case RGB_SCALE_R10_G7_B4:
- led_data[i] = { luminance * 7/10, luminance * 10/10, luminance * 4/10 };
- break;
- case RGB_SCALE_R10_G8_B7:
- led_data[i] = { luminance * 8/10, luminance * 10/10, luminance * 7/10 };
- break;
- }
- }
-
- struct { bool g, r, b; } led_flag = { false, false, false };
- for (uint8_t i = 0; i < LED_NUM; i++) {
- while (1) {
- const uint8_t g = uint8_t(LED_DataArray[i] >> 16),
- r = uint8_t(LED_DataArray[i] >> 8),
- b = uint8_t(LED_DataArray[i]);
- if (g == led_data[i].g) led_flag.g = true;
- else LED_DataArray[i] += (g > led_data[i].g) ? -0x010000 : 0x010000;
- if (r == led_data[i].r) led_flag.r = true;
- else LED_DataArray[i] += (r > led_data[i].r) ? -0x000100 : 0x000100;
- if (b == led_data[i].b) led_flag.b = true;
- else LED_DataArray[i] += (b > led_data[i].b) ? -0x000001 : 0x000001;
- LED_WriteData();
- if (led_flag.r && led_flag.g && led_flag.b) break;
- delay(change_Interval);
- }
- }
- }
-
-#endif // LCD_LED
-
-#endif // DWIN_CREALITY_LCD
diff --git a/Marlin/src/lcd/e3v2/creality/rotary_encoder.h b/Marlin/src/lcd/e3v2/creality/rotary_encoder.h
deleted file mode 100644
index 48e13b7ece..0000000000
--- a/Marlin/src/lcd/e3v2/creality/rotary_encoder.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-#pragma once
-
-/*****************************************************************************
- * @file lcd/e3v2/creality/rotary_encoder.h
- * @author LEO / Creality3D
- * @date 2019/07/06
- * @version 2.0.1
- * @brief Rotary encoder functions
- ****************************************************************************/
-
-#include "../../../inc/MarlinConfig.h"
-
-/*********************** Encoder Set ***********************/
-
-typedef struct {
- bool enabled = false;
- int encoderMoveValue = 0;
- millis_t lastEncoderTime = 0;
-} ENCODER_Rate;
-
-extern ENCODER_Rate EncoderRate;
-
-typedef enum {
- ENCODER_DIFF_NO = 0, // no state
- ENCODER_DIFF_CW = 1, // clockwise rotation
- ENCODER_DIFF_CCW = 2, // counterclockwise rotation
- ENCODER_DIFF_ENTER = 3 // click
-} ENCODER_DiffState;
-
-// Encoder initialization
-void Encoder_Configuration();
-
-// Analyze encoder value and return state
-ENCODER_DiffState Encoder_ReceiveAnalyze();
-
-/*********************** Encoder LED ***********************/
-
-#if PIN_EXISTS(LCD_LED)
-
- #define LED_NUM 4
- #define LED_DATA_HIGH WRITE(LCD_LED_PIN, 1)
- #define LED_DATA_LOW WRITE(LCD_LED_PIN, 0)
-
- #define RGB_SCALE_R10_G7_B5 1
- #define RGB_SCALE_R10_G7_B4 2
- #define RGB_SCALE_R10_G8_B7 3
- #define RGB_SCALE_NEUTRAL_WHITE RGB_SCALE_R10_G7_B5
- #define RGB_SCALE_WARM_WHITE RGB_SCALE_R10_G7_B4
- #define RGB_SCALE_COOL_WHITE RGB_SCALE_R10_G8_B7
-
- extern unsigned int LED_DataArray[LED_NUM];
-
- // LED light operation
- void LED_Action();
-
- // LED initialization
- void LED_Configuration();
-
- // LED write data
- void LED_WriteData();
-
- // LED control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- void LED_Control(const uint8_t RGB_Scale, const uint8_t luminance);
-
- // LED gradient control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- // change_Time: gradient time (ms)
- void LED_GraduallyControl(const uint8_t RGB_Scale, const uint8_t luminance, const uint16_t change_Interval);
-
-#endif // LCD_LED
diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp
index cea36e21d6..4035a78c93 100644
--- a/Marlin/src/lcd/e3v2/enhanced/dwin.cpp
+++ b/Marlin/src/lcd/e3v2/enhanced/dwin.cpp
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,11 +15,18 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/10
+ */
+
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(DWIN_CREALITY_LCD_ENHANCED)
@@ -54,7 +62,7 @@
#include "../../../feature/host_actions.h"
#endif
-#if HAS_ONESTEP_LEVELING
+#if HAS_MESH || HAS_ONESTEP_LEVELING
#include "../../../feature/bedlevel/bedlevel.h"
#endif
@@ -70,6 +78,10 @@
#include "../../../feature/powerloss.h"
#endif
+#if HAS_MESH
+ #include "meshviewer.h"
+#endif
+
#include
#include
#include
@@ -86,9 +98,6 @@
#define PAUSE_HEAT
-#define USE_STRING_HEADINGS
-#define USE_STRING_TITLES
-
#define MENU_CHAR_LIMIT 24
// Print speed limit
@@ -133,8 +142,20 @@ HMI_data_t HMI_data;
millis_t dwin_heat_time = 0;
-uint8_t checkkey = MainMenu;
-uint8_t last_checkkey = MainMenu;
+uint8_t checkkey = MainMenu, last_checkkey = MainMenu;
+
+enum SelectItem : uint8_t {
+ PAGE_PRINT = 0,
+ PAGE_PREPARE,
+ PAGE_CONTROL,
+ PAGE_INFO_LEVELING,
+ PAGE_COUNT,
+
+ PRINT_SETUP = 0,
+ PRINT_PAUSE_RESUME,
+ PRINT_STOP,
+ PRINT_COUNT
+};
typedef struct {
uint8_t now, last;
@@ -252,7 +273,7 @@ typedef struct { uint16_t x, y[2], w, h; } text_info_t;
void ICON_Button(const bool here, const int iconid, const frame_rect_t &ico, const text_info_t (&txt)[2]) {
const bool cn = HMI_IsChinese();
- DWIN_ICON_Show(1, 0, 0, ICON, iconid + here, ico.x, ico.y);
+ DWIN_ICON_Show(true, false, false, ICON, iconid + here, ico.x, ico.y);
if (here) DWIN_Draw_Rectangle(0, HMI_data.Highlight_Color, ico.x, ico.y, ico.x + ico.w - 1, ico.y + ico.h - 1);
DWIN_Frame_AreaCopy(1, txt[cn].x, txt[cn].y[here], txt[cn].x + txt[cn].w - 1, txt[cn].y[here] + txt[cn].h - 1, ico.x + (ico.w - txt[cn].w) / 2, (ico.y + ico.h - 28) - txt[cn].h/2);
}
@@ -266,7 +287,7 @@ void ICON_Print() {
{ 1, { 417, 449 }, 30, 14 },
{ 1, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 0, ICON_Print_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_PRINT, ICON_Print_0, ico, txt);
}
//
@@ -278,7 +299,7 @@ void ICON_Prepare() {
{ 33, { 417, 449 }, 51, 14 },
{ 31, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 1, ICON_Prepare_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_PREPARE, ICON_Prepare_0, ico, txt);
}
//
@@ -290,7 +311,7 @@ void ICON_Control() {
{ 85, { 417, 449 }, 46, 14 },
{ 61, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 2, ICON_Control_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_CONTROL, ICON_Control_0, ico, txt);
}
//
@@ -302,7 +323,7 @@ void ICON_StartInfo() {
{ 133, { 417, 449 }, 23, 14 },
{ 91, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 3, ICON_Info_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Info_0, ico, txt);
}
//
@@ -314,7 +335,7 @@ void ICON_Leveling() {
{ 88, { 433, 464 }, 36, 14 },
{ 211, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_page.now == 3, ICON_Leveling_0, ico, txt);
+ ICON_Button(select_page.now == PAGE_INFO_LEVELING, ICON_Leveling_0, ico, txt);
}
//
@@ -326,7 +347,7 @@ void ICON_Tune() {
{ 0, { 433, 464 }, 32, 14 },
{ 121, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_print.now == 0, ICON_Setup_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_SETUP, ICON_Setup_0, ico, txt);
}
//
@@ -338,7 +359,7 @@ void ICON_Pause() {
{ 157, { 417, 449 }, 39, 14 },
{ 181, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_print.now == 1, ICON_Pause_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Pause_0, ico, txt);
}
//
@@ -350,7 +371,7 @@ void ICON_Resume() {
{ 33, { 433, 464 }, 53, 14 },
{ 1, { 405, 447 }, 27, 15 }
};
- ICON_Button(select_print.now == 1, ICON_Continue_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_PAUSE_RESUME, ICON_Continue_0, ico, txt);
}
//
@@ -362,7 +383,7 @@ void ICON_Stop() {
{ 196, { 417, 449 }, 29, 14 },
{ 151, { 405, 447 }, 27, 12 }
};
- ICON_Button(select_print.now == 2, ICON_Stop_0, ico, txt);
+ ICON_Button(select_print.now == PRINT_STOP, ICON_Stop_0, ico, txt);
}
void Draw_Menu_Cursor(const uint8_t line) {
@@ -429,17 +450,17 @@ void Draw_Back_First(const bool is_sel=true) {
if (is_sel) Draw_Menu_Cursor(0);
}
-inline ENCODER_DiffState get_encoder_state() {
+inline EncoderState get_encoder_state() {
static millis_t Encoder_ms = 0;
const millis_t ms = millis();
if (PENDING(ms, Encoder_ms)) return ENCODER_DIFF_NO;
- const ENCODER_DiffState state = Encoder_ReceiveAnalyze();
+ const EncoderState state = Encoder_ReceiveAnalyze();
if (state != ENCODER_DIFF_NO) Encoder_ms = ms + ENCODER_WAIT_MS;
return state;
}
template
-inline bool Apply_Encoder(const ENCODER_DiffState &encoder_diffState, T &valref) {
+inline bool Apply_Encoder(const EncoderState &encoder_diffState, T &valref) {
if (encoder_diffState == ENCODER_DIFF_CW)
valref += EncoderRate.encoderMoveValue;
else if (encoder_diffState == ENCODER_DIFF_CCW)
@@ -465,24 +486,31 @@ void Clear_Popup_Area() {
DWIN_Draw_Rectangle(1, HMI_data.Background_Color, 0, 31, DWIN_WIDTH, DWIN_HEIGHT);
}
-void DWIN_Draw_Popup(uint8_t icon=0, const char * const msg1=nullptr, const char * const msg2=nullptr, uint8_t button=0) {
+void DWIN_Draw_Popup1(const uint8_t icon) {
DWINUI::ClearMenuArea();
Draw_Popup_Bkgd_60();
if (icon) DWINUI::Draw_Icon(icon, 101, 105);
- if (msg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, msg1);
- if (msg2) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 240, msg2);
+}
+void DWIN_Draw_Popup2(FSTR_P const fmsg2, uint8_t button) {
+ if (fmsg2) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 240, fmsg2);
if (button) DWINUI::Draw_Icon(button, 86, 280);
}
-void DWIN_Popup_Confirm(uint8_t icon, const char * const msg1, const char * const msg2) {
- HMI_SaveProcessID(WaitResponse);
- DWIN_Draw_Popup(icon, msg1, msg2, ICON_Confirm_E); // Button Confirm
- DWIN_UpdateLCD();
+void DWIN_Draw_Popup(const uint8_t icon, const char * const cmsg1, FSTR_P const fmsg2, uint8_t button) {
+ DWIN_Draw_Popup1(icon);
+ if (cmsg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, cmsg1);
+ DWIN_Draw_Popup2(fmsg2, button);
}
-void DWIN_Popup_Continue(uint8_t icon, const char * const msg1, const char * const msg2) {
+void DWIN_Draw_Popup(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fmsg2, uint8_t button) {
+ DWIN_Draw_Popup1(icon);
+ if (fmsg1) DWINUI::Draw_CenteredString(HMI_data.PopupTxt_Color, 210, fmsg1);
+ DWIN_Draw_Popup2(fmsg2, button);
+}
+
+void DWIN_Popup_Continue(const uint8_t icon, FSTR_P const fmsg1, FSTR_P const fmsg2) {
HMI_SaveProcessID(WaitResponse);
- DWIN_Draw_Popup(icon, msg1, msg2, ICON_Continue_E); // Button Continue
+ DWIN_Draw_Popup(icon, fmsg1, fmsg2, ICON_Continue_E); // Button Continue
DWIN_UpdateLCD();
}
@@ -500,7 +528,7 @@ void DWIN_Popup_Continue(uint8_t icon, const char * const msg1, const char * con
DWIN_UpdateLCD();
}
else
- DWIN_Popup_Confirm(ICON_TempTooLow, "Nozzle is too cold", "Preheat the hotend");
+ DWIN_Popup_Confirm(ICON_TempTooLow, F("Nozzle is too cold"), F("Preheat the hotend"));
}
#endif
@@ -537,14 +565,14 @@ void Popup_window_PauseOrStop() {
if (HMI_IsChinese()) {
DWINUI::ClearMenuArea();
Draw_Popup_Bkgd_60();
- if (select_print.now == 1) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150);
- else if (select_print.now == 2) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150);
+ if (select_print.now == PRINT_PAUSE_RESUME) DWIN_Frame_AreaCopy(1, 237, 338, 269, 356, 98, 150);
+ else if (select_print.now == PRINT_STOP) DWIN_Frame_AreaCopy(1, 221, 320, 253, 336, 98, 150);
DWIN_Frame_AreaCopy(1, 220, 304, 264, 319, 130, 150);
DWINUI::Draw_Icon(ICON_Confirm_C, 26, 280);
DWINUI::Draw_Icon(ICON_Cancel_C, 146, 280);
}
else {
- DWIN_Draw_Popup(ICON_BLTouch, "Please confirm",(select_print.now == 1) ? GET_TEXT(MSG_PAUSE_PRINT) : GET_TEXT(MSG_STOP_PRINT));
+ DWIN_Draw_Popup(ICON_BLTouch, F("Please confirm"), select_print.now == PRINT_PAUSE_RESUME ? GET_TEXT_F(MSG_PAUSE_PRINT) : GET_TEXT_F(MSG_STOP_PRINT));
DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280);
DWINUI::Draw_Icon(ICON_Cancel_E, 146, 280);
}
@@ -589,16 +617,9 @@ void Draw_Print_Labels() {
DWIN_Frame_AreaCopy(1, 65, 72, 128, 86, 176, 173); // Remain
}
else {
- #ifdef USE_STRING_TITLES
- Title.ShowCaption(GET_TEXT(MSG_PRINTING));
- DWINUI::Draw_String( 46, 173, F("Print Time"));
- DWINUI::Draw_String(181, 173, F("Remain"));
- #else
- const uint16_t y = 168;
- Title.FrameCopy(42, 0, 47, 14); // "Printing"
- DWIN_Frame_AreaCopy(1, 0, 44, 96, 58, 41, y); // Printing Time
- DWIN_Frame_AreaCopy(1, 98, 44, 152, 58, 176, y); // Remain
- #endif
+ Title.ShowCaption(GET_TEXT(MSG_PRINTING));
+ DWINUI::Draw_String( 46, 173, F("Print Time"));
+ DWINUI::Draw_String(181, 173, F("Remain"));
}
}
@@ -678,13 +699,8 @@ void Draw_Main_Menu() {
if (HMI_IsChinese())
Title.FrameCopy(2, 2, 26, 13); // "Home" etc
- else {
- #ifdef USE_STRING_HEADINGS
- Title.ShowCaption(MACHINE_NAME);
- #else
- Title.FrameCopy(0, 2, 40, 11); // "Home"
- #endif
- }
+ else
+ Title.ShowCaption(MACHINE_NAME);
DWINUI::Draw_Icon(ICON_LOGO, 71, 52); // CREALITY logo
@@ -697,7 +713,7 @@ void Draw_Main_Menu() {
void Goto_Main_Menu() {
checkkey = MainMenu;
- DWIN_StatusChanged(nullptr);
+ DWIN_StatusChanged();
Draw_Main_Menu();
}
@@ -765,15 +781,15 @@ void update_variable() {
// Tune page temperature update
#if HAS_HOTEND
if (_new_hotend_target)
- HotendTargetItem->Draw(CurrentMenu->line(HotendTargetItem->pos));
+ HotendTargetItem->draw(CurrentMenu->line(HotendTargetItem->pos));
#endif
#if HAS_HEATED_BED
if (_new_bed_target)
- BedTargetItem->Draw(CurrentMenu->line(BedTargetItem->pos));
+ BedTargetItem->draw(CurrentMenu->line(BedTargetItem->pos));
#endif
#if HAS_FAN
if (_new_fanspeed)
- FanSpeedItem->Draw(CurrentMenu->line(FanSpeedItem->pos));
+ FanSpeedItem->draw(CurrentMenu->line(FanSpeedItem->pos));
#endif
}
@@ -860,6 +876,10 @@ void HMI_SDCardInit() { card.cdroot(); }
void MarlinUI::refresh() { /* Nothing to see here */ }
+#if HAS_LCD_BRIGHTNESS
+ void MarlinUI::_set_brightness() { DWIN_LCD_Brightness(backlight ? brightness : 0); }
+#endif
+
#define ICON_Folder ICON_More
#if ENABLED(SCROLL_LONG_FILENAMES)
@@ -1075,11 +1095,7 @@ void Draw_Info_Menu() {
DWIN_Frame_AreaCopy(1, 58, 164, 113, 176, 105, 248); // "Contact Details"
}
else {
- #ifdef USE_STRING_HEADINGS
- Title.ShowCaption(GET_TEXT_F(MSG_INFO_SCREEN));
- #else
- Title.FrameCopy(192, 15, 23, 12); // "Info"
- #endif
+ Title.ShowCaption(GET_TEXT_F(MSG_INFO_SCREEN));
DWIN_Frame_AreaCopy(1, 120, 150, 146, 161, 124, 102); // "Size"
DWIN_Frame_AreaCopy(1, 146, 151, 254, 161, 82, 175); // "Firmware Version"
@@ -1098,59 +1114,50 @@ void Draw_Info_Menu() {
void Draw_Print_File_Menu() {
if (HMI_IsChinese())
Title.FrameCopy(0, 31, 56, 14); // "Print file"
- else {
- #ifdef USE_STRING_HEADINGS
- Title.ShowCaption(GET_TEXT_F(MSG_MEDIA_MENU));
- #else
- Title.FrameCopy(52, 31, 86, 11); // "Print file"
- #endif
- }
+ else
+ Title.ShowCaption(GET_TEXT_F(MSG_MEDIA_MENU));
Redraw_SD_List();
}
// Main Process
void HMI_MainMenu() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW) {
- if (select_page.inc(4)) {
+ if (select_page.inc(PAGE_COUNT)) {
switch (select_page.now) {
- case 0: ICON_Print(); break;
- case 1: ICON_Print(); ICON_Prepare(); break;
- case 2: ICON_Prepare(); ICON_Control(); break;
- case 3: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
+ case PAGE_PRINT: ICON_Print(); break;
+ case PAGE_PREPARE: ICON_Print(); ICON_Prepare(); break;
+ case PAGE_CONTROL: ICON_Prepare(); ICON_Control(); break;
+ case PAGE_INFO_LEVELING: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
if (select_page.dec()) {
switch (select_page.now) {
- case 0: ICON_Print(); ICON_Prepare(); break;
- case 1: ICON_Prepare(); ICON_Control(); break;
- case 2: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
- case 3: TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
+ case PAGE_PRINT: ICON_Print(); ICON_Prepare(); break;
+ case PAGE_PREPARE: ICON_Prepare(); ICON_Control(); break;
+ case PAGE_CONTROL: ICON_Control(); TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
+ case PAGE_INFO_LEVELING: TERN(HAS_ONESTEP_LEVELING, ICON_Leveling, ICON_StartInfo)(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_page.now) {
- case 0: // Print File
+ case PAGE_PRINT:
checkkey = SelectFile;
Draw_Print_File_Menu();
break;
- case 1: // Prepare
- Draw_Prepare_Menu();
- break;
+ case PAGE_PREPARE: Draw_Prepare_Menu(); break;
- case 2: // Control
- Draw_Control_Menu();
- break;
+ case PAGE_CONTROL: Draw_Control_Menu(); break;
- case 3: // Leveling or Info
+ case PAGE_INFO_LEVELING:
#if HAS_ONESTEP_LEVELING
- queue.inject_P(PSTR("G28XYO\nG28Z\nG29"));
+ queue.inject(F("G28XYO\nG28Z\nG29")); // TODO: 'G29' should be homing when needed. Does it make sense for every LCD to do this differently?
#else
checkkey = Info;
Draw_Info_Menu();
@@ -1163,7 +1170,7 @@ void HMI_MainMenu() {
// Select (and Print) File
void HMI_SelectFile() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
const uint16_t hasUpDir = !card.flag.workDirIsRoot;
@@ -1238,8 +1245,8 @@ void HMI_SelectFile() {
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
- if (select_file.now == 0) { // Back
- select_page.set(0);
+ if (select_file.now == 0) {
+ select_page.set(PAGE_PRINT);
Goto_Main_Menu();
}
else if (hasUpDir && select_file.now == 1) { // CD-Up
@@ -1276,54 +1283,41 @@ void HMI_SelectFile() {
DWIN_Print_Started(true);
}
}
-HMI_SelectFileExit:
+
+ HMI_SelectFileExit:
DWIN_UpdateLCD();
}
// Printing
void HMI_Printing() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
// Avoid flicker by updating only the previous menu
if (encoder_diffState == ENCODER_DIFF_CW) {
- if (select_print.inc(3)) {
+ if (select_print.inc(PRINT_COUNT)) {
switch (select_print.now) {
- case 0: ICON_Tune(); break;
- case 1:
- ICON_Tune();
- ICON_ResumeOrPause();
- break;
- case 2:
- ICON_ResumeOrPause();
- ICON_Stop();
- break;
+ case PRINT_SETUP: ICON_Tune(); break;
+ case PRINT_PAUSE_RESUME: ICON_Tune(); ICON_ResumeOrPause(); break;
+ case PRINT_STOP: ICON_ResumeOrPause(); ICON_Stop(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_CCW) {
if (select_print.dec()) {
switch (select_print.now) {
- case 0:
- ICON_Tune();
- ICON_ResumeOrPause();
- break;
- case 1:
- ICON_ResumeOrPause();
- ICON_Stop();
- break;
- case 2: ICON_Stop(); break;
+ case PRINT_SETUP: ICON_Tune(); ICON_ResumeOrPause(); break;
+ case PRINT_PAUSE_RESUME: ICON_ResumeOrPause(); ICON_Stop(); break;
+ case PRINT_STOP: ICON_Stop(); break;
}
}
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (select_print.now) {
- case 0: // Tune
- Draw_Tune_Menu();
- break;
- case 1: // Pause
+ case PRINT_SETUP: Draw_Tune_Menu(); break;
+ case PRINT_PAUSE_RESUME:
if (HMI_flag.pause_flag) {
ICON_Pause();
- #ifndef ADVANCED_PAUSE_FEATURE
+ #if DISABLED(ADVANCED_PAUSE_FEATURE)
char cmd[40];
cmd[0] = '\0';
#if BOTH(HAS_HEATED_BED, PAUSE_HEAT)
@@ -1346,7 +1340,7 @@ void HMI_Printing() {
}
break;
- case 2: // Stop
+ case PRINT_STOP:
HMI_flag.select_flag = true;
checkkey = PauseOrStop;
Popup_window_PauseOrStop();
@@ -1360,7 +1354,7 @@ void HMI_Printing() {
// Print done
void HMI_PrintDone() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_ENTER) {
dwin_abort_flag = true; // Reset feedrate, return to Home
@@ -1370,7 +1364,7 @@ void HMI_PrintDone() {
// Pause or Stop popup
void HMI_PauseOrStop() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW)
@@ -1378,18 +1372,18 @@ void HMI_PauseOrStop() {
else if (encoder_diffState == ENCODER_DIFF_CCW)
Draw_Select_Highlight(true);
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
- if (select_print.now == 1) { // pause window
+ if (select_print.now == PRINT_PAUSE_RESUME) {
if (HMI_flag.select_flag) {
HMI_flag.pause_action = true;
ICON_Resume();
- queue.inject_P(PSTR("M25"));
+ queue.inject(F("M25"));
}
else {
// cancel pause
}
Goto_PrintProcess();
}
- else if (select_print.now == 2) { // stop window
+ else if (select_print.now == PRINT_STOP) {
if (HMI_flag.select_flag) {
checkkey = MainMenu;
if (HMI_flag.home_flag) planner.synchronize(); // Wait for planner moves to finish!
@@ -1399,7 +1393,7 @@ void HMI_PauseOrStop() {
#ifdef ACTION_ON_CANCEL
host_action_cancel();
#endif
- DWIN_Draw_Popup(ICON_BLTouch, "Stopping..." , "Please wait until done.");
+ DWIN_Draw_Popup(ICON_BLTouch, F("Stopping...") , F("Please wait until done."));
}
else
Goto_PrintProcess(); // cancel stop
@@ -1433,13 +1427,13 @@ void Draw_Main_Area() {
#if ENABLED(ADVANCED_PAUSE_FEATURE)
case FilamentPurge: Draw_Popup_FilamentPurge(); break;
#endif
- case Locked: LockScreen.Draw(); break;
+ case Locked: lockScreen.draw(); break;
case Menu:
case SetInt:
case SetPInt:
case SetIntNoDraw:
case SetFloat:
- case SetPFloat: CurrentMenu->Draw(); break;
+ case SetPFloat: CurrentMenu->draw(); break;
default: break;
}
}
@@ -1452,7 +1446,7 @@ void HMI_ReturnScreen() {
}
void HMI_Popup() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_ENTER) {
wait_for_user = false;
@@ -1511,22 +1505,12 @@ void EachMomentUpdate() {
if (HMI_flag.pause_action && printingIsPaused() && !planner.has_blocks_queued()) {
HMI_flag.pause_action = false;
#if ENABLED(PAUSE_HEAT)
- if (sdprint) {
- TERN_(HAS_HOTEND, resume_hotend_temp = thermalManager.degTargetHotend(0));
- TERN_(HAS_HEATED_BED, resume_bed_temp = thermalManager.degTargetBed());
- }
- else {
- TERN_(HAS_HOTEND, resume_hotend_temp = thermalManager.wholeDegHotend(0));
- TERN_(HAS_HEATED_BED, resume_bed_temp = thermalManager.wholeDegBed());
- }
+ TERN_(HAS_HOTEND, resume_hotend_temp = sdprint ? thermalManager.degTargetHotend(0) : thermalManager.wholeDegHotend(0));
+ TERN_(HAS_HEATED_BED, resume_bed_temp = sdprint ? thermalManager.degTargetBed() : thermalManager.wholeDegBed());
TERN_(HAS_FAN, resume_fan = thermalManager.fan_speed[0]);
#endif
- #if DISABLED(ADVANCED_PAUSE_FEATURE)
- thermalManager.disable_all_heaters();
- #endif
- #if DISABLED(PARK_HEAD_ON_PAUSE)
- queue.inject_P(PSTR("G1 F1200 X0 Y0"));
- #endif
+ IF_DISABLED(ADVANCED_PAUSE_FEATURE, thermalManager.disable_all_heaters());
+ IF_DISABLED(PARK_HEAD_ON_PAUSE, queue.inject(F("G1 F1200 X0 Y0")));
}
if (checkkey == PrintProcess) { // print process
@@ -1565,7 +1549,7 @@ void EachMomentUpdate() {
else if (dwin_abort_flag && !HMI_flag.home_flag) { // Print Stop
dwin_abort_flag = false;
dwin_zoffset = BABY_Z_VAR;
- select_page.set(0);
+ select_page.set(PAGE_PRINT);
Goto_Main_Menu();
}
@@ -1599,12 +1583,12 @@ void EachMomentUpdate() {
DWIN_UpdateLCD();
while (recovery_flag) {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (encoder_diffState == ENCODER_DIFF_ENTER) {
recovery_flag = false;
if (HMI_flag.select_flag) break;
- TERN_(POWER_LOSS_RECOVERY, queue.inject_P(PSTR("M1000C")));
+ TERN_(POWER_LOSS_RECOVERY, queue.inject(F("M1000C")));
return HMI_StartFrame(true);
}
else
@@ -1615,8 +1599,8 @@ void EachMomentUpdate() {
watchdog_refresh();
}
- select_print.set(0);
- queue.inject_P(PSTR("M1000"));
+ select_print.set(PRINT_SETUP);
+ queue.inject(F("M1000"));
sdprint = true;
Goto_PrintProcess();
Draw_Status_Area(true);
@@ -1667,7 +1651,7 @@ void HMI_SaveProcessID(const uint8_t id) {
void DWIN_StartHoming() {
HMI_flag.home_flag = true;
HMI_SaveProcessID(Homing);
- DWIN_Draw_Popup(ICON_BLTouch, "Axis Homing", "Please wait until done.");
+ DWIN_Draw_Popup(ICON_BLTouch, F("Axis Homing"), F("Please wait until done."));
}
void DWIN_CompletedHoming() {
@@ -1682,13 +1666,13 @@ void DWIN_CompletedHoming() {
void DWIN_MeshLevelingStart() {
#if HAS_ONESTEP_LEVELING
HMI_SaveProcessID(Leveling);
- DWIN_Draw_Popup(ICON_AutoLeveling, GET_TEXT(MSG_BED_LEVELING), "Please wait until done.");
+ DWIN_Draw_Popup(ICON_AutoLeveling, GET_TEXT_F(MSG_BED_LEVELING), F("Please wait until done."));
#elif ENABLED(MESH_BED_LEVELING)
Draw_ManualMesh_Menu();
#endif
}
-void DWIN_CompletedLeveling() { HMI_ReturnScreen(); }
+void DWIN_CompletedLeveling() { TERN_(HAS_MESH, DWIN_MeshViewer()); }
#if HAS_MESH
void DWIN_MeshUpdate(const int8_t xpos, const int8_t ypos, const float zval) {
@@ -1705,27 +1689,27 @@ void DWIN_PidTuning(pidresult_t result) {
switch (result) {
case PID_BED_START:
HMI_SaveProcessID(NothingToDo);
- DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT(MSG_PID_AUTOTUNE), "for BED is running.");
+ DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for BED is running."));
break;
case PID_EXTR_START:
HMI_SaveProcessID(NothingToDo);
- DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT(MSG_PID_AUTOTUNE), "for Nozzle is running.");
+ DWIN_Draw_Popup(ICON_TempTooHigh, GET_TEXT_F(MSG_PID_AUTOTUNE), F("for Nozzle is running."));
break;
case PID_BAD_EXTRUDER_NUM:
checkkey = last_checkkey;
- DWIN_Popup_Confirm(ICON_TempTooLow, "PID Autotune failed!", "Bad extruder");
+ DWIN_Popup_Confirm(ICON_TempTooLow, F("PID Autotune failed!"), F("Bad extruder"));
break;
case PID_TUNING_TIMEOUT:
checkkey = last_checkkey;
- DWIN_Popup_Confirm(ICON_TempTooHigh, "Error", GET_TEXT(MSG_PID_TIMEOUT));
+ DWIN_Popup_Confirm(ICON_TempTooHigh, F("Error"), GET_TEXT_F(MSG_PID_TIMEOUT));
break;
case PID_TEMP_TOO_HIGH:
checkkey = last_checkkey;
- DWIN_Popup_Confirm(ICON_TempTooHigh, "PID Autotune failed!", "Temperature too high");
+ DWIN_Popup_Confirm(ICON_TempTooHigh, F("PID Autotune failed!"), F("Temperature too high"));
break;
case PID_DONE:
checkkey = last_checkkey;
- DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT(MSG_PID_AUTOTUNE), GET_TEXT(MSG_BUTTON_DONE));
+ DWIN_Popup_Confirm(ICON_TempTooLow, GET_TEXT_F(MSG_PID_AUTOTUNE), GET_TEXT_F(MSG_BUTTON_DONE));
break;
default:
checkkey = last_checkkey;
@@ -1735,7 +1719,6 @@ void DWIN_PidTuning(pidresult_t result) {
// Update filename on print
void DWIN_Print_Header(const char *text = nullptr) {
-
static char headertxt[31] = ""; // Print header text
if (text != nullptr) {
@@ -1754,7 +1737,7 @@ void Draw_Title(TitleClass* title) {
if (title->frameid)
DWIN_Frame_AreaCopy(title->frameid, title->frame.left, title->frame.top, title->frame.right, title->frame.bottom, 14, (TITLE_HEIGHT - (title->frame.bottom - title->frame.top)) / 2 - 1);
else
- DWIN_Draw_String(false, false, DWIN_FONT_HEAD, HMI_data.TitleTxt_color, HMI_data.TitleBg_color, 14, (TITLE_HEIGHT - DWINUI::Get_font_height(DWIN_FONT_HEAD)) / 2 - 1, title->caption);
+ DWIN_Draw_String(false, DWIN_FONT_HEAD, HMI_data.TitleTxt_color, HMI_data.TitleBg_color, 14, (TITLE_HEIGHT - DWINUI::fontHeight(DWIN_FONT_HEAD)) / 2 - 1, title->caption);
}
void Draw_Menu(MenuClass* menu) {
@@ -1765,7 +1748,7 @@ void Draw_Menu(MenuClass* menu) {
// Startup routines
void DWIN_Startup() {
- DWINUI::Init();
+ DWINUI::init();
DWINUI::onCursorDraw = Draw_Menu_Cursor;
DWINUI::onCursorErase = Erase_Menu_Cursor;
DWINUI::onTitleDraw = Draw_Title;
@@ -1773,20 +1756,20 @@ void DWIN_Startup() {
HMI_SetLanguage();
}
-void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text) {
+void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char * const text/*=nullptr*/) {
DWIN_Draw_Rectangle(1, bgcolor, 0, STATUS_Y, DWIN_WIDTH, STATUS_Y + 20);
if (text) DWINUI::Draw_CenteredString(color, STATUS_Y + 2, text);
DWIN_UpdateLCD();
}
// Update Status line
-void DWIN_StatusChanged(const char *text) {
- DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, text);
+void DWIN_StatusChanged(const char * const cstr/*=nullptr*/) {
+ DWIN_DrawStatusLine(HMI_data.StatusTxt_Color, HMI_data.StatusBg_Color, cstr);
}
-void DWIN_StatusChanged_P(PGM_P const pstr) {
- char str[strlen_P((const char*)pstr) + 1];
- strcpy_P(str, (const char*)pstr);
+void DWIN_StatusChanged(FSTR_P const fstr) {
+ char str[strlen_P(FTOP(fstr)) + 1];
+ strcpy_P(str, FTOP(fstr));
DWIN_StatusChanged(str);
}
@@ -1821,7 +1804,7 @@ void DWIN_Progress_Update() {
#if HAS_FILAMENT_SENSOR
// Filament Runout process
- void DWIN_FilamentRunout(const uint8_t extruder) { ui.set_status_P(GET_TEXT(MSG_RUNOUT_SENSOR)); }
+ void DWIN_FilamentRunout(const uint8_t extruder) { LCD_MESSAGE(MSG_RUNOUT_SENSOR); }
#endif
void DWIN_SetColorDefaults() {
@@ -1867,7 +1850,7 @@ void DWIN_LoadSettings(const char *buff) {
feedrate_percentage = 100;
}
-void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
+void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component) {
DWIN_Draw_Popup(ICON_BLTouch, lcd_error, lcd_component);
DWIN_UpdateLCD();
}
@@ -1888,35 +1871,36 @@ void DWIN_Redraw_screen() {
#if ENABLED(ADVANCED_PAUSE_FEATURE)
- void DWIN_Popup_Pause(const char *msg, uint8_t button = 0) {
+ void DWIN_Popup_Pause(FSTR_P const fmsg, uint8_t button = 0) {
HMI_SaveProcessID(button ? WaitResponse : NothingToDo);
- DWIN_Draw_Popup(ICON_BLTouch, "Advanced Pause", msg, button);
+ DWIN_Draw_Popup(ICON_BLTouch, F("Advanced Pause"), fmsg, button);
ui.reset_status(true);
}
void MarlinUI::pause_show_message(const PauseMessage message, const PauseMode mode/*=PAUSE_MODE_SAME*/, const uint8_t extruder/*=active_extruder*/) {
switch (message) {
- case PAUSE_MESSAGE_PARKING: DWIN_Popup_Pause(GET_TEXT(MSG_PAUSE_PRINT_PARKING)); break;
- case PAUSE_MESSAGE_CHANGING: DWIN_Popup_Pause(GET_TEXT(MSG_FILAMENT_CHANGE_INIT)); break;
- case PAUSE_MESSAGE_UNLOAD: DWIN_Popup_Pause(GET_TEXT(MSG_FILAMENT_CHANGE_UNLOAD)); break;
- case PAUSE_MESSAGE_WAITING: DWIN_Popup_Pause(GET_TEXT(MSG_ADVANCED_PAUSE_WAITING), ICON_Continue_E); break;
- case PAUSE_MESSAGE_INSERT: DWIN_Popup_Continue(ICON_BLTouch, "Advanced Pause", GET_TEXT(MSG_FILAMENT_CHANGE_INSERT)); break;
- case PAUSE_MESSAGE_LOAD: DWIN_Popup_Pause(GET_TEXT(MSG_FILAMENT_CHANGE_LOAD)); break;
- case PAUSE_MESSAGE_PURGE: DWIN_Popup_Pause(GET_TEXT(MSG_FILAMENT_CHANGE_PURGE)); break;
+ case PAUSE_MESSAGE_PARKING: DWIN_Popup_Pause(GET_TEXT_F(MSG_PAUSE_PRINT_PARKING)); break;
+ case PAUSE_MESSAGE_CHANGING: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_INIT)); break;
+ case PAUSE_MESSAGE_UNLOAD: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_UNLOAD)); break;
+ case PAUSE_MESSAGE_WAITING: DWIN_Popup_Pause(GET_TEXT_F(MSG_ADVANCED_PAUSE_WAITING), ICON_Continue_E); break;
+ case PAUSE_MESSAGE_INSERT: DWIN_Popup_Continue(ICON_BLTouch, F("Advanced Pause"), GET_TEXT_F(MSG_FILAMENT_CHANGE_INSERT)); break;
+ case PAUSE_MESSAGE_LOAD: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_LOAD)); break;
+ case PAUSE_MESSAGE_PURGE: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE)); break;
case PAUSE_MESSAGE_OPTION: DWIN_Popup_FilamentPurge(); break;
- case PAUSE_MESSAGE_RESUME: DWIN_Popup_Pause(GET_TEXT(MSG_FILAMENT_CHANGE_RESUME)); break;
- case PAUSE_MESSAGE_HEAT: DWIN_Popup_Pause(GET_TEXT(MSG_FILAMENT_CHANGE_HEAT), ICON_Continue_E); break;
- case PAUSE_MESSAGE_HEATING: ui.set_status_P(GET_TEXT(MSG_FILAMENT_CHANGE_HEATING)); break;
+ case PAUSE_MESSAGE_RESUME: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_RESUME)); break;
+ case PAUSE_MESSAGE_HEAT: DWIN_Popup_Pause(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEAT), ICON_Continue_E); break;
+ case PAUSE_MESSAGE_HEATING: LCD_MESSAGE(MSG_FILAMENT_CHANGE_HEATING); break;
case PAUSE_MESSAGE_STATUS: HMI_ReturnScreen(); break;
default: break;
}
}
void Draw_Popup_FilamentPurge() {
- DWIN_Draw_Popup(ICON_BLTouch, "Advanced Pause", "Purge or Continue?");
+ DWIN_Draw_Popup(ICON_BLTouch, F("Advanced Pause"), F("Purge or Continue?"));
DWINUI::Draw_Icon(ICON_Confirm_E, 26, 280);
DWINUI::Draw_Icon(ICON_Continue_E, 146, 280);
Draw_Select_Highlight(true);
+ DWIN_UpdateLCD();
}
// Handle responses such as:
@@ -1929,7 +1913,7 @@ void DWIN_Redraw_screen() {
}
void HMI_FilamentPurge() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW)
Draw_Select_Highlight(false);
@@ -1948,11 +1932,22 @@ void DWIN_Redraw_screen() {
#endif // ADVANCED_PAUSE_FEATURE
+#if HAS_MESH
+ void DWIN_MeshViewer() {
+ if (!leveling_is_valid())
+ DWIN_Popup_Continue(ICON_BLTouch, F("Mesh viewer"), F("No valid mesh"));
+ else {
+ HMI_SaveProcessID(WaitResponse);
+ MeshViewer.Draw();
+ }
+ }
+#endif
+
void HMI_LockScreen() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
- LockScreen.onEncoderState(encoder_diffState);
- if (LockScreen.isUnlocked()) {
+ lockScreen.onEncoder(encoder_diffState);
+ if (lockScreen.isUnlocked()) {
if (CurrentMenu == AdvancedSettings)
Draw_AdvancedSettings_Menu();
else
@@ -1963,7 +1958,7 @@ void HMI_LockScreen() {
void DWIN_LockScreen(const bool flag) {
HMI_flag.lock_flag = flag;
checkkey = Locked;
- LockScreen.Init();
+ lockScreen.init();
}
//
@@ -1981,7 +1976,6 @@ void DWIN_LockScreen(const bool flag) {
// LiveUpdate: live update function when the encoder changes
// Apply: update function when the encoder is pressed
void SetOnClick(uint8_t process, const int32_t lo, const int32_t hi, uint8_t dp, const int32_t val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
- last_checkkey = Menu;
checkkey = process;
HMI_value.MinValue = lo;
HMI_value.MaxValue = hi;
@@ -2014,7 +2008,7 @@ void SetValueOnClick(uint8_t process, const int32_t lo, const int32_t hi, const
void SetValueOnClick(uint8_t process, const float lo, const float hi, uint8_t dp, const float val, void (*Apply)() = nullptr, void (*LiveUpdate)() = nullptr) {
const int32_t value = round(val * POW(10, dp));
SetOnClick(process, lo * POW(10, dp), hi * POW(10, dp), dp, value, Apply, LiveUpdate);
- DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), val);
+ DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::fontWidth(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), val);
}
// Generic onclick event for integer values
@@ -2092,17 +2086,13 @@ void Goto_InfoMenu(){
Draw_Info_Menu();
}
-void DisableMotors() {
- queue.inject_P(PSTR("M84"));
-}
+void DisableMotors() { queue.inject(F("M84")); }
-void AutoHome() {
- queue.inject_P(G28_STR);
-}
+void AutoHome() { queue.inject_P(G28_STR); }
void SetHome() {
// Apply workspace offset, making the current position 0,0,0
- queue.inject_P(PSTR("G92 X0 Y0 Z0"));
+ queue.inject(F("G92 X0 Y0 Z0"));
HMI_AudioFeedback();
}
@@ -2116,9 +2106,11 @@ void SetHome() {
if (BABYSTEP_ALLOWED()) babystep.add_mm(Z_AXIS, dwin_zoffset - last_zoffset);
#endif
}
- #if EITHER(HAS_BED_PROBE, BABYSTEPPING)
- void SetZOffset() { SetPFloatOnClick(Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX, 2, ApplyZOffset, LiveZOffset); }
- #endif
+ #if EITHER(HAS_BED_PROBE, BABYSTEPPING)
+ void SetZOffset() {
+ SetPFloatOnClick(Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX, 2, ApplyZOffset, LiveZOffset);
+ }
+ #endif
#endif
#if HAS_PREHEAT
@@ -2187,9 +2179,9 @@ void SetMoveZto0() {
dtostrf(Y_CENTER, 1, 1, str_2)
#endif
);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
- ui.set_status_P(PSTR("Now adjust Z Offset"));
+ LCD_MESSAGE_F("Now adjust Z Offset");
HMI_AudioFeedback(true);
}
@@ -2200,7 +2192,7 @@ void SetPID(celsius_t t, heater_id_t h) {
dtostrf(X_CENTER, 1, 1, str_1),
dtostrf(Y_CENTER, 1, 1, str_2)
);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
thermalManager.PID_autotune(t, h, HMI_data.PidCycles, true);
}
@@ -2220,9 +2212,8 @@ void SetPID(celsius_t t, heater_id_t h) {
#endif
#if HAS_LCD_BRIGHTNESS
- void ApplyBrightness() { ui.set_brightness(HMI_value.Value); }
- void LiveBrightness() { DWIN_LCD_Brightness(HMI_value.Value); }
- void SetBrightness() { SetIntOnClick(MIN_LCD_BRIGHTNESS, MAX_LCD_BRIGHTNESS, ui.brightness, ApplyBrightness, LiveBrightness); }
+ void LiveBrightness() { ui.set_brightness(HMI_value.Value); }
+ void SetBrightness() { SetIntOnClick(LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, ui.brightness, nullptr, LiveBrightness); }
#endif
#if ENABLED(SOUND_MENU_ITEM)
@@ -2233,9 +2224,7 @@ void SetPID(celsius_t t, heater_id_t h) {
}
#endif
-void Goto_LockScreen() {
- DWIN_LockScreen(true);
-}
+void Goto_LockScreen() { DWIN_LockScreen(true); }
#if HAS_HOME_OFFSET
void ApplyHomeOffset() { set_home_offset(HMI_value.axis, HMI_value.Value / MINUNITMULT); }
@@ -2249,8 +2238,8 @@ void Goto_LockScreen() {
void SetProbeOffsetY() { SetPFloatOnClick(-50, 50, UNITFDIGITS); }
void SetProbeOffsetZ() { SetPFloatOnClick(-10, 10, 2); }
void ProbeTest() {
- ui.set_status_P(GET_TEXT(MSG_M48_TEST));
- queue.inject_P(PSTR("G28O\nM48 P10"));
+ LCD_MESSAGE(MSG_M48_TEST);
+ queue.inject(F("G28O\nM48 P10"));
}
#endif
@@ -2306,7 +2295,7 @@ void DWIN_ApplyColor() {
DWINUI::SetColors(HMI_data.Text_Color, HMI_data.Background_Color);
Draw_Status_Area(false);
Draw_SelectColors_Menu();
- ui.set_status_P(PSTR("Colors applied"));
+ LCD_MESSAGE_F("Colors applied");
}
void SetSpeed() { SetPIntOnClick(MIN_PRINT_SPEED, MAX_PRINT_SPEED); }
@@ -2327,28 +2316,30 @@ void SetSpeed() { SetPIntOnClick(MIN_PRINT_SPEED, MAX_PRINT_SPEED); }
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
+
void ChangeFilament() {
HMI_SaveProcessID(NothingToDo);
- queue.inject_P(PSTR("M600 B2"));
+ queue.inject(F("M600 B2"));
}
void ParkHead(){
- ui.set_status_P(GET_TEXT(MSG_FILAMENT_PARK_ENABLED));
- queue.inject_P(PSTR("G28O\nG27"));
+ LCD_MESSAGE(MSG_FILAMENT_PARK_ENABLED);
+ queue.inject(F("G28O\nG27"));
}
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
void UnloadFilament(){
- ui.set_status_P(GET_TEXT(MSG_FILAMENTUNLOAD));
- queue.inject_P(PSTR("M702 Z20"));
+ LCD_MESSAGE(MSG_FILAMENTUNLOAD);
+ queue.inject(F("M702 Z20"));
}
void LoadFilament(){
- ui.set_status_P(GET_TEXT(MSG_FILAMENTLOAD));
- queue.inject_P(PSTR("M701 Z20"));
+ LCD_MESSAGE(MSG_FILAMENTLOAD);
+ queue.inject(F("M701 Z20"));
}
#endif
-#endif
+
+#endif // ADVANCED_PAUSE_FEATURE
void SetFlow() { SetPIntOnClick(MIN_PRINT_FLOW, MAX_PRINT_FLOW); }
@@ -2368,30 +2359,30 @@ void LevBed(uint8_t point) {
switch (point) {
case 0:
- ui.set_status_P(GET_TEXT(MSG_LEVBED_FL));
+ LCD_MESSAGE(MSG_LEVBED_FL);
xpos = ypos = margin;
break;
case 1:
- ui.set_status_P(GET_TEXT(MSG_LEVBED_FR));
+ LCD_MESSAGE(MSG_LEVBED_FR);
xpos = X_BED_SIZE - margin; ypos = margin;
break;
case 2:
- ui.set_status_P(GET_TEXT(MSG_LEVBED_BR));
+ LCD_MESSAGE(MSG_LEVBED_BR);
xpos = X_BED_SIZE - margin; ypos = Y_BED_SIZE - margin;
break;
case 3:
- ui.set_status_P(GET_TEXT(MSG_LEVBED_BL));
+ LCD_MESSAGE(MSG_LEVBED_BL);
xpos = margin; ypos = Y_BED_SIZE - margin;
break;
case 4:
- ui.set_status_P(GET_TEXT(MSG_LEVBED_C));
+ LCD_MESSAGE(MSG_LEVBED_C);
xpos = X_BED_SIZE / 2; ypos = Y_BED_SIZE / 2;
break;
}
#if HAS_ONESTEP_LEVELING
planner.synchronize();
- gcode.process_subcommands_now_P(PSTR("M420S0\nG28O"));
+ gcode.process_subcommands_now(F("M420S0\nG28O"));
planner.synchronize();
zval = probe.probe_at_point(xpos, ypos, PROBE_PT_STOW);
sprintf_P(cmd, PSTR(fmt),
@@ -2399,7 +2390,7 @@ void LevBed(uint8_t point) {
dtostrf(ypos, 1, 1, str_2),
dtostrf(zval, 1, 2, str_3)
);
- ui.set_status_P(cmd);
+ ui.set_status(cmd);
#else
planner.synchronize();
sprintf_P(cmd, PSTR(fmt), xpos, ypos);
@@ -2414,13 +2405,14 @@ void LevBedBL() { LevBed(3); }
void LevBedC () { LevBed(4); }
#if ENABLED(MESH_BED_LEVELING)
+
void ManualMeshStart(){
- ui.set_status_P(GET_TEXT(MSG_UBL_BUILD_MESH_MENU));
- gcode.process_subcommands_now_P(PSTR("G28 XYO\nG28 Z\nM211 S0\nG29S1"));
+ LCD_MESSAGE(MSG_UBL_BUILD_MESH_MENU);
+ gcode.process_subcommands_now(F("G28 XYO\nG28 Z\nM211 S0\nG29S1"));
planner.synchronize();
#ifdef MANUAL_PROBE_START_Z
const uint8_t line = CurrentMenu->line(MMeshMoveZItem->pos);
- DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, 2, VALX - 2 * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(line), MANUAL_PROBE_START_Z);
+ DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, 2, VALX - 2 * DWINUI::fontWidth(DWIN_FONT_MENU), MBASE(line), MANUAL_PROBE_START_Z);
#endif
}
@@ -2434,16 +2426,17 @@ void LevBedC () { LevBed(4); }
void SetMMeshMoveZ() { SetPFloatOnClick(-1, 1, 2, planner.synchronize, LiveMeshMoveZ);}
void ManualMeshContinue(){
- gcode.process_subcommands_now_P(PSTR("G29S2"));
+ gcode.process_subcommands_now(F("G29S2"));
planner.synchronize();
- MMeshMoveZItem->Draw(CurrentMenu->line(MMeshMoveZItem->pos));
+ MMeshMoveZItem->draw(CurrentMenu->line(MMeshMoveZItem->pos));
}
void ManualMeshSave(){
- ui.set_status_P(GET_TEXT(MSG_UBL_STORAGE_MESH_MENU));
- queue.inject_P(PSTR("M211 S1\nM500"));
+ LCD_MESSAGE(MSG_UBL_STORAGE_MESH_MENU);
+ queue.inject(F("M211 S1\nM500"));
}
-#endif
+
+#endif // MESH_BED_LEVELING
#if HAS_PREHEAT
#if HAS_HOTEND
@@ -2516,6 +2509,7 @@ void SetStepsZ() { HMI_value.axis = Z_AXIS, SetPFloatOnClick( MIN_STEP, MAX_STEP
SetFloatOnClick(0, 1000, 2, value, ApplyPIDd);
}
#endif
+
// Menuitem Drawing functions =================================================
void onDrawMenuItem(MenuItemClass* menuitem, int8_t line) {
@@ -2554,7 +2548,7 @@ void onDrawPInt32Menu(MenuItemClass* menuitem, int8_t line) {
void onDrawFloatMenu(MenuItemClass* menuitem, int8_t line, uint8_t dp, const float value) {
onDrawMenuItem(menuitem, line);
- DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(line), value);
+ DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::fontWidth(DWIN_FONT_MENU), MBASE(line), value);
}
void onDrawPFloatMenu(MenuItemClass* menuitem, int8_t line) {
@@ -2721,7 +2715,6 @@ void onDrawGetColorItem(MenuItemClass* menuitem, int8_t line) {
void onDrawPIDi(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_i(*(float*)static_cast(menuitem)->value)); }
void onDrawPIDd(MenuItemClass* menuitem, int8_t line) { onDrawFloatMenu(menuitem, line, 2, unscalePID_d(*(float*)static_cast(menuitem)->value)); }
-
void onDrawSpeedItem(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) menuitem->SetFrame(1, 116, 164, 171, 176);
onDrawPIntMenu(menuitem, line);
@@ -2748,30 +2741,6 @@ void onDrawSpeedItem(MenuItemClass* menuitem, int8_t line) {
}
#endif
-void onDrawSpeed(MenuItemClass* menuitem, int8_t line) {
- if (HMI_IsChinese()) menuitem->SetFrame(1, 173, 133, 228, 147);
- onDrawSubMenu(menuitem, line);
-}
-
-void onDrawAcc(MenuItemClass* menuitem, int8_t line) {
- if (HMI_IsChinese()) {
- menuitem->SetFrame(1, 173, 133, 200, 147);
- DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line) + 1); // ...Acceleration
- }
- onDrawSubMenu(menuitem, line);
-}
-
-#if HAS_CLASSIC_JERK
- void onDrawJerk(MenuItemClass* menuitem, int8_t line) {
- if (HMI_IsChinese()) {
- menuitem->SetFrame(1, 173, 133, 200, 147);
- DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line) + 1); // ...
- DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 54, MBASE(line)); // ...Jerk
- }
- onDrawSubMenu(menuitem, line);
- }
-#endif
-
void onDrawSteps(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) menuitem->SetFrame(1, 153, 148, 194, 161);
onDrawSubMenu(menuitem, line);
@@ -2786,10 +2755,10 @@ void onDrawSteps(MenuItemClass* menuitem, int8_t line) {
#if HAS_PREHEAT
#if HAS_HOTEND
- void onDrawSetPreheatHotend(MenuItemClass* menuitem, int8_t line) {
- if (HMI_IsChinese()) menuitem->SetFrame(1, 1, 134, 56, 146);
- onDrawPIntMenu(menuitem, line);
- }
+ void onDrawSetPreheatHotend(MenuItemClass* menuitem, int8_t line) {
+ if (HMI_IsChinese()) menuitem->SetFrame(1, 1, 134, 56, 146);
+ onDrawPIntMenu(menuitem, line);
+ }
#endif
#if HAS_HEATED_BED
void onDrawSetPreheatBed(MenuItemClass* menuitem, int8_t line) {
@@ -2811,7 +2780,13 @@ void onDrawSteps(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) menuitem->SetFrame(1, 180, 89, 260, 100);
onDrawSubMenu(menuitem,line);
}
-#endif // HAS_HOTEND
+#endif // HAS_PREHEAT
+
+void onDrawSpeed(MenuItemClass* menuitem, int8_t line) {
+ if (HMI_IsChinese())
+ menuitem->SetFrame(1, 173, 133, 228, 147);
+ onDrawSubMenu(menuitem, line);
+}
void onDrawMaxSpeedX(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
@@ -2847,9 +2822,17 @@ void onDrawMaxSpeedZ(MenuItemClass* menuitem, int8_t line) {
}
#endif
+void onDrawAcc(MenuItemClass* menuitem, int8_t line) {
+ if (HMI_IsChinese()) {
+ menuitem->SetFrame(1, 173, 133, 200, 147);
+ DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line) + 1); // ...Acceleration
+ }
+ onDrawSubMenu(menuitem, line);
+}
+
void onDrawMaxAccelX(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 71, MBASE(line)); // X
}
@@ -2858,7 +2841,7 @@ void onDrawMaxAccelX(MenuItemClass* menuitem, int8_t line) {
void onDrawMaxAccelY(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 1, 150, 7, 160, LBLX + 71, MBASE(line)); // Y
}
@@ -2867,7 +2850,7 @@ void onDrawMaxAccelY(MenuItemClass* menuitem, int8_t line) {
void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 9, 150, 16, 160, LBLX + 71, MBASE(line)); // Z
}
@@ -2877,7 +2860,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
#if HAS_HOTEND
void onDrawMaxAccelE(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 28, 149, 69, 161, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 18, 150, 25, 160, LBLX + 71, MBASE(line)); // E
}
@@ -2886,9 +2869,19 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
#endif
#if HAS_CLASSIC_JERK
+
+ void onDrawJerk(MenuItemClass* menuitem, int8_t line) {
+ if (HMI_IsChinese()) {
+ menuitem->SetFrame(1, 173, 133, 200, 147);
+ DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line) + 1); // ...
+ DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 54, MBASE(line)); // ...Jerk
+ }
+ onDrawSubMenu(menuitem, line);
+ }
+
void onDrawMaxJerkX(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 83, MBASE(line));
@@ -2898,7 +2891,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
void onDrawMaxJerkY(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
DWIN_Frame_AreaCopy(1, 1, 150, 7, 160, LBLX + 83, MBASE(line));
@@ -2908,7 +2901,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
void onDrawMaxJerkZ(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
DWIN_Frame_AreaCopy(1, 9, 150, 16, 160, LBLX + 83, MBASE(line));
@@ -2919,7 +2912,7 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
#if HAS_HOTEND
void onDrawMaxJerkE(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 173, 133, 200, 147);
+ menuitem->SetFrame(1, 173, 133, 200, 147);
DWIN_Frame_AreaCopy(1, 1, 180, 28, 192, LBLX + 27, MBASE(line));
DWIN_Frame_AreaCopy(1, 202, 133, 228, 147, LBLX + 53, MBASE(line));
DWIN_Frame_AreaCopy(1, 18, 150, 25, 160, LBLX + 83, MBASE(line));
@@ -2927,11 +2920,12 @@ void onDrawMaxAccelZ(MenuItemClass* menuitem, int8_t line) {
onDrawPFloatMenu(menuitem, line);
}
#endif
+
#endif // HAS_CLASSIC_JERK
void onDrawStepsX(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 153, 148, 194, 161);
+ menuitem->SetFrame(1, 153, 148, 194, 161);
DWIN_Frame_AreaCopy(1, 229, 133, 236, 147, LBLX + 44, MBASE(line)); // X
}
onDrawPFloatMenu(menuitem, line);
@@ -2939,7 +2933,7 @@ void onDrawStepsX(MenuItemClass* menuitem, int8_t line) {
void onDrawStepsY(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 153, 148, 194, 161);
+ menuitem->SetFrame(1, 153, 148, 194, 161);
DWIN_Frame_AreaCopy(1, 1, 150, 7, 160, LBLX + 44, MBASE(line)); // Y
}
onDrawPFloatMenu(menuitem, line);
@@ -2947,7 +2941,7 @@ void onDrawStepsY(MenuItemClass* menuitem, int8_t line) {
void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 153, 148, 194, 161);
+ menuitem->SetFrame(1, 153, 148, 194, 161);
DWIN_Frame_AreaCopy(1, 9, 150, 16, 160, LBLX + 44, MBASE(line)); // Z
}
onDrawPFloatMenu(menuitem, line);
@@ -2956,7 +2950,7 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) {
#if HAS_HOTEND
void onDrawStepsE(MenuItemClass* menuitem, int8_t line) {
if (HMI_IsChinese()) {
- menuitem->SetFrame (1, 153, 148, 194, 161);
+ menuitem->SetFrame(1, 153, 148, 194, 161);
DWIN_Frame_AreaCopy(1, 18, 150, 25, 160, LBLX + 44, MBASE(line)); // E
}
onDrawPFloatMenu(menuitem, line);
@@ -2967,7 +2961,7 @@ void onDrawStepsZ(MenuItemClass* menuitem, int8_t line) {
// Generic menu control using the encoder
void HMI_Menu() {
- ENCODER_DiffState encoder_diffState = get_encoder_state();
+ EncoderState encoder_diffState = get_encoder_state();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_ENTER) {
if (CurrentMenu != nullptr) CurrentMenu->onClick();
@@ -2982,11 +2976,11 @@ void HMI_Menu() {
// 1 : live change
// 2 : apply change
int8_t HMI_GetIntNoDraw(const int32_t lo, const int32_t hi) {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
EncoderRate.enabled = false;
- checkkey = last_checkkey;
+ checkkey = Menu;
return 2;
}
LIMIT(HMI_value.Value, lo, hi);
@@ -3003,12 +2997,12 @@ int8_t HMI_GetIntNoDraw(const int32_t lo, const int32_t hi) {
// 1 : live change
// 2 : apply change
int8_t HMI_GetInt(const int32_t lo, const int32_t hi) {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
EncoderRate.enabled = false;
DWINUI::Draw_Int(HMI_data.Text_Color, HMI_data.Background_Color, 4 , VALX, MBASE(CurrentMenu->line()) - 1, HMI_value.Value);
- checkkey = last_checkkey;
+ checkkey = Menu;
return 2;
}
LIMIT(HMI_value.Value, lo, hi);
@@ -3048,7 +3042,7 @@ void HMI_SetPInt() {
} else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
}
-// Get an scaled float value using the encoder
+// Get a scaled float value using the encoder
// dp: decimal places
// lo: scaled low limit
// hi: scaled high limit
@@ -3057,53 +3051,49 @@ void HMI_SetPInt() {
// 1 : live change
// 2 : apply change
int8_t HMI_GetFloat(uint8_t dp, int32_t lo, int32_t hi) {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState != ENCODER_DIFF_NO) {
if (Apply_Encoder(encoder_diffState, HMI_value.Value)) {
EncoderRate.enabled = false;
- DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value / POW(10, dp));
- checkkey = last_checkkey;
+ DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Background_Color, 3, dp, VALX - dp * DWINUI::fontWidth(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value / POW(10, dp));
+ checkkey = Menu;
return 2;
}
LIMIT(HMI_value.Value, lo, hi);
- DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::Get_font_width(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value / POW(10, dp));
+ DWINUI::Draw_Signed_Float(HMI_data.Text_Color, HMI_data.Selected_Color, 3, dp, VALX - dp * DWINUI::fontWidth(DWIN_FONT_MENU), MBASE(CurrentMenu->line()), HMI_value.Value / POW(10, dp));
return 1;
}
return 0;
}
-// Set an scaled float using the encoder
+// Set a scaled float using the encoder
void HMI_SetFloat() {
- int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
+ const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
switch (val) {
- case 0: return; break;
+ case 0: return;
case 1: if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate(); break;
case 2: if (HMI_value.Apply != nullptr) HMI_value.Apply(); break;
}
}
-// Set an scaled float pointer variable using the encoder
+// Set a scaled float pointer variable using the encoder
void HMI_SetPFloat() {
- int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
+ const int8_t val = HMI_GetFloat(HMI_value.dp, HMI_value.MinValue, HMI_value.MaxValue);
if (!val) return;
- else if (val == 2) { // Apply
+ if (val == 2) { // Apply
*HMI_value.P_Float = HMI_value.Value / POW(10, HMI_value.dp);
if (HMI_value.Apply != nullptr) HMI_value.Apply();
- } else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
+ }
+ else if (HMI_value.LiveUpdate != nullptr) HMI_value.LiveUpdate();
}
// Menu Creation and Drawing functions ======================================================
-void SetMenuTitle(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* text) {
- if (HMI_IsChinese() && (cn.w != 0))
- CurrentMenu->MenuTitle.SetFrame(cn.x, cn.y, cn.w, cn.h);
- else {
- #ifdef USE_STRING_HEADINGS
- CurrentMenu->MenuTitle.SetCaption(text);
- #else
- if (en.w != 0) CurrentMenu->MenuTitle.SetFrame(en.x, en.y, en.w, en.h);
- #endif
- }
+void SetMenuTitle(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* fstr) {
+ if (HMI_IsChinese() && (cn.w != 0))
+ CurrentMenu->MenuTitle.SetFrame(cn.x, cn.y, cn.w, cn.h);
+ else
+ CurrentMenu->MenuTitle.SetCaption(fstr);
}
void Draw_Prepare_Menu() {
@@ -3113,35 +3103,35 @@ void Draw_Prepare_Menu() {
CurrentMenu = PrepareMenu;
SetMenuTitle({133, 1, 28, 13}, {179, 0, 48, 14}, GET_TEXT_F(MSG_PREPARE));
DWINUI::MenuItemsPrepare(13);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu);
#if ENABLED(ADVANCED_PAUSE_FEATURE)
- ADDMENUITEM(ICON_FilMan, GET_TEXT(MSG_FILAMENT_MAN), onDrawSubMenu, Draw_FilamentMan_Menu);
+ ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENT_MAN), onDrawSubMenu, Draw_FilamentMan_Menu);
#endif
- ADDMENUITEM(ICON_Axis, GET_TEXT(MSG_MOVE_AXIS), onDrawMoveSubMenu, Draw_Move_Menu);
- ADDMENUITEM(ICON_LevBed, GET_TEXT(MSG_BED_LEVELING), onDrawSubMenu, Draw_LevBedCorners_Menu);
- ADDMENUITEM(ICON_CloseMotor, GET_TEXT(MSG_DISABLE_STEPPERS), onDrawDisableMotors, DisableMotors);
- ADDMENUITEM(ICON_Homing, GET_TEXT(MSG_AUTO_HOME), onDrawAutoHome, AutoHome);
+ ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_MOVE_AXIS), onDrawMoveSubMenu, Draw_Move_Menu);
+ ADDMENUITEM(ICON_LevBed, GET_TEXT_F(MSG_BED_LEVELING), onDrawSubMenu, Draw_LevBedCorners_Menu);
+ ADDMENUITEM(ICON_CloseMotor, GET_TEXT_F(MSG_DISABLE_STEPPERS), onDrawDisableMotors, DisableMotors);
+ ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawAutoHome, AutoHome);
#if ENABLED(MESH_BED_LEVELING)
- ADDMENUITEM(ICON_ManualMesh, GET_TEXT(MSG_MANUAL_MESH), onDrawSubMenu, Draw_ManualMesh_Menu);
+ ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_MANUAL_MESH), onDrawSubMenu, Draw_ManualMesh_Menu);
#endif
#if HAS_ZOFFSET_ITEM
#if EITHER(HAS_BED_PROBE, BABYSTEPPING)
- ADDMENUITEM(ICON_SetZOffset, GET_TEXT(MSG_PROBE_WIZARD), onDrawSubMenu, Draw_ZOffsetWiz_Menu);
+ ADDMENUITEM(ICON_SetZOffset, GET_TEXT_F(MSG_PROBE_WIZARD), onDrawSubMenu, Draw_ZOffsetWiz_Menu);
#else
- ADDMENUITEM(ICON_SetHome, GET_TEXT(MSG_SET_HOME_OFFSETS), onDrawHomeOffset, SetHome);
+ ADDMENUITEM(ICON_SetHome, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawHomeOffset, SetHome);
#endif
#endif
#if HAS_HOTEND
- ADDMENUITEM(ICON_PLAPreheat, GET_TEXT(MSG_PREHEAT_1), onDrawPreheat1, SetPreheat0);
+ ADDMENUITEM(ICON_PLAPreheat, GET_TEXT_F(MSG_PREHEAT_1), onDrawPreheat1, SetPreheat0);
ADDMENUITEM(ICON_ABSPreheat, PSTR("Preheat " PREHEAT_2_LABEL), onDrawPreheat2, SetPreheat1);
- ADDMENUITEM(ICON_CustomPreheat, GET_TEXT(MSG_PREHEAT_CUSTOM), onDrawMenuItem, SetPreheat2);
+ ADDMENUITEM(ICON_CustomPreheat, GET_TEXT_F(MSG_PREHEAT_CUSTOM), onDrawMenuItem, SetPreheat2);
#endif
#if HAS_PREHEAT
- ADDMENUITEM(ICON_Cool, GET_TEXT(MSG_COOLDOWN), onDrawCooldown, SetCoolDown);
+ ADDMENUITEM(ICON_Cool, GET_TEXT_F(MSG_COOLDOWN), onDrawCooldown, SetCoolDown);
#endif
ADDMENUITEM(ICON_Language, PSTR("UI Language"), onDrawLanguage, SetLanguage);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_LevBedCorners_Menu() {
@@ -3152,14 +3142,14 @@ void Draw_LevBedCorners_Menu() {
CurrentMenu = LevBedMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_BED_TRAMMING)); // TODO: Chinese, English "Bed Tramming" JPG
DWINUI::MenuItemsPrepare(6);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
- ADDMENUITEM(ICON_Axis, GET_TEXT(MSG_LEVBED_FL), onDrawMenuItem, LevBedFL);
- ADDMENUITEM(ICON_Axis, GET_TEXT(MSG_LEVBED_FR), onDrawMenuItem, LevBedFR);
- ADDMENUITEM(ICON_Axis, GET_TEXT(MSG_LEVBED_BR), onDrawMenuItem, LevBedBR);
- ADDMENUITEM(ICON_Axis, GET_TEXT(MSG_LEVBED_BL), onDrawMenuItem, LevBedBL);
- ADDMENUITEM(ICON_Axis, GET_TEXT(MSG_LEVBED_C ), onDrawMenuItem, LevBedC );
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
+ ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FL), onDrawMenuItem, LevBedFL);
+ ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_FR), onDrawMenuItem, LevBedFR);
+ ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BR), onDrawMenuItem, LevBedBR);
+ ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_BL), onDrawMenuItem, LevBedBL);
+ ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_LEVBED_C ), onDrawMenuItem, LevBedC );
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_Control_Menu() {
@@ -3169,19 +3159,19 @@ void Draw_Control_Menu() {
CurrentMenu = ControlMenu;
SetMenuTitle({103, 1, 28, 14}, {128, 2, 49, 11}, GET_TEXT_F(MSG_CONTROL));
DWINUI::MenuItemsPrepare(9);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu);
- ADDMENUITEM(ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), onDrawTempSubMenu, Draw_Temperature_Menu);
- ADDMENUITEM(ICON_Motion, GET_TEXT(MSG_MOTION), onDrawMotionSubMenu, Draw_Motion_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_Main_Menu);
+ ADDMENUITEM(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawTempSubMenu, Draw_Temperature_Menu);
+ ADDMENUITEM(ICON_Motion, GET_TEXT_F(MSG_MOTION), onDrawMotionSubMenu, Draw_Motion_Menu);
#if ENABLED(EEPROM_SETTINGS)
- ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom);
- ADDMENUITEM(ICON_ReadEEPROM, GET_TEXT(MSG_LOAD_EEPROM), onDrawReadEeprom, ReadEeprom);
- ADDMENUITEM(ICON_ResumeEEPROM, GET_TEXT(MSG_RESTORE_DEFAULTS), onDrawResetEeprom, ResetEeprom);
+ ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom);
+ ADDMENUITEM(ICON_ReadEEPROM, GET_TEXT_F(MSG_LOAD_EEPROM), onDrawReadEeprom, ReadEeprom);
+ ADDMENUITEM(ICON_ResumeEEPROM, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawResetEeprom, ResetEeprom);
#endif
- ADDMENUITEM(ICON_Reboot, GET_TEXT(MSG_RESET_PRINTER), onDrawMenuItem, RebootPrinter);
- ADDMENUITEM(ICON_AdvSet, GET_TEXT(MSG_ADVANCED_SETTINGS), onDrawSubMenu, Draw_AdvancedSettings_Menu);
- ADDMENUITEM(ICON_Info, GET_TEXT(MSG_INFO_SCREEN), onDrawInfoSubMenu, Goto_InfoMenu);
+ ADDMENUITEM(ICON_Reboot, GET_TEXT_F(MSG_RESET_PRINTER), onDrawMenuItem, RebootPrinter);
+ ADDMENUITEM(ICON_AdvSet, GET_TEXT_F(MSG_ADVANCED_SETTINGS), onDrawSubMenu, Draw_AdvancedSettings_Menu);
+ ADDMENUITEM(ICON_Info, GET_TEXT_F(MSG_INFO_SCREEN), onDrawInfoSubMenu, Goto_InfoMenu);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_AdvancedSettings_Menu() {
@@ -3191,12 +3181,12 @@ void Draw_AdvancedSettings_Menu() {
CurrentMenu = AdvancedSettings;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ADVANCED_SETTINGS)); // TODO: Chinese, English "Advanced Settings" JPG
DWINUI::MenuItemsPrepare(11);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
#if HAS_HOME_OFFSET
- ADDMENUITEM(ICON_HomeOffset, GET_TEXT(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu);
+ ADDMENUITEM(ICON_HomeOffset, GET_TEXT_F(MSG_SET_HOME_OFFSETS), onDrawSubMenu, Draw_HomeOffset_Menu);
#endif
#if HAS_BED_PROBE
- ADDMENUITEM(ICON_ProbeSet, GET_TEXT(MSG_ZPROBE_SETTINGS), onDrawSubMenu, Draw_ProbeSet_Menu);
+ ADDMENUITEM(ICON_ProbeSet, GET_TEXT_F(MSG_ZPROBE_SETTINGS), onDrawSubMenu, Draw_ProbeSet_Menu);
#endif
#if HAS_HOTEND
ADDMENUITEM(ICON_PIDNozzle, F("Hotend PID Settings"), onDrawSubMenu, Draw_HotendPID_Menu);
@@ -3205,21 +3195,24 @@ void Draw_AdvancedSettings_Menu() {
ADDMENUITEM(ICON_PIDbed, F("Bed PID Settings"), onDrawSubMenu, Draw_BedPID_Menu);
#endif
#if HAS_FILAMENT_SENSOR
- ADDMENUITEM(ICON_FilSet, GET_TEXT(MSG_FILAMENT_SET), onDrawSubMenu, Draw_FilSet_Menu);
+ ADDMENUITEM(ICON_FilSet, GET_TEXT_F(MSG_FILAMENT_SET), onDrawSubMenu, Draw_FilSet_Menu);
#endif
#if ENABLED(POWER_LOSS_RECOVERY)
- ADDMENUITEM(ICON_Pwrlossr, F("Power-loss recovery"), onDrawPwrLossR, SetPwrLossr);
+ ADDMENUITEM(ICON_Pwrlossr, GET_TEXT_F(MSG_OUTAGE_RECOVERY), onDrawPwrLossR, SetPwrLossr);
#endif
#if HAS_LCD_BRIGHTNESS
- ADDMENUITEM_P(ICON_Brightness, F("LCD Brightness"), onDrawPInt8Menu, SetBrightness, &ui.brightness);
+ ADDMENUITEM_P(ICON_Brightness, GET_TEXT_F(MSG_BRIGHTNESS), onDrawPInt8Menu, SetBrightness, &ui.brightness);
#endif
ADDMENUITEM(ICON_Scolor, F("Select Colors"), onDrawSubMenu, Draw_SelectColors_Menu);
#if ENABLED(SOUND_MENU_ITEM)
ADDMENUITEM(ICON_Sound, F("Enable Sound"), onDrawEnableSound, SetEnableSound);
#endif
+ #if HAS_MESH
+ ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer);
+ #endif
ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, Goto_LockScreen);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_Move_Menu() {
@@ -3229,16 +3222,16 @@ void Draw_Move_Menu() {
CurrentMenu = MoveMenu;
SetMenuTitle({192, 1, 42, 14}, {231, 2, 35, 11}, GET_TEXT_F(MSG_MOVE_AXIS));
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
- ADDMENUITEM_P(ICON_MoveX, GET_TEXT(MSG_MOVE_X), onDrawMoveX, SetMoveX, ¤t_position.x);
- ADDMENUITEM_P(ICON_MoveY, GET_TEXT(MSG_MOVE_Y), onDrawMoveY, SetMoveY, ¤t_position.y);
- ADDMENUITEM_P(ICON_MoveZ, GET_TEXT(MSG_MOVE_Z), onDrawMoveZ, SetMoveZ, ¤t_position.z);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
+ ADDMENUITEM_P(ICON_MoveX, GET_TEXT_F(MSG_MOVE_X), onDrawMoveX, SetMoveX, ¤t_position.x);
+ ADDMENUITEM_P(ICON_MoveY, GET_TEXT_F(MSG_MOVE_Y), onDrawMoveY, SetMoveY, ¤t_position.y);
+ ADDMENUITEM_P(ICON_MoveZ, GET_TEXT_F(MSG_MOVE_Z), onDrawMoveZ, SetMoveZ, ¤t_position.z);
#if HAS_HOTEND
- ADDMENUITEM_P(ICON_Extruder, GET_TEXT(MSG_MOVE_E), onDrawMoveE, SetMoveE, ¤t_position.e);
+ ADDMENUITEM_P(ICON_Extruder, GET_TEXT_F(MSG_MOVE_E), onDrawMoveE, SetMoveE, ¤t_position.e);
#endif
}
- CurrentMenu->Draw();
- if (!all_axes_trusted()) ui.set_status_P(PSTR("WARNING: position is unknow"));
+ CurrentMenu->draw();
+ if (!all_axes_trusted()) LCD_MESSAGE_F("WARNING: position is unknown");
}
#if HAS_HOME_OFFSET
@@ -3249,12 +3242,12 @@ void Draw_Move_Menu() {
CurrentMenu = HomeOffMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_SET_HOME_OFFSETS)); // TODO: Chinese, English "Set Home Offsets" JPG
DWINUI::MenuItemsPrepare(4);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
- ADDMENUITEM_P(ICON_HomeOffsetX, GET_TEXT(MSG_HOME_OFFSET_X), onDrawPFloatMenu, SetHomeOffsetX, &home_offset[X_AXIS]);
- ADDMENUITEM_P(ICON_HomeOffsetY, GET_TEXT(MSG_HOME_OFFSET_Y), onDrawPFloatMenu, SetHomeOffsetY, &home_offset[Y_AXIS]);
- ADDMENUITEM_P(ICON_HomeOffsetZ, GET_TEXT(MSG_HOME_OFFSET_Z), onDrawPFloatMenu, SetHomeOffsetZ, &home_offset[Z_AXIS]);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
+ ADDMENUITEM_P(ICON_HomeOffsetX, GET_TEXT_F(MSG_HOME_OFFSET_X), onDrawPFloatMenu, SetHomeOffsetX, &home_offset[X_AXIS]);
+ ADDMENUITEM_P(ICON_HomeOffsetY, GET_TEXT_F(MSG_HOME_OFFSET_Y), onDrawPFloatMenu, SetHomeOffsetY, &home_offset[Y_AXIS]);
+ ADDMENUITEM_P(ICON_HomeOffsetZ, GET_TEXT_F(MSG_HOME_OFFSET_Z), onDrawPFloatMenu, SetHomeOffsetZ, &home_offset[Z_AXIS]);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#endif
@@ -3266,13 +3259,13 @@ void Draw_Move_Menu() {
CurrentMenu = ProbeSetMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_ZPROBE_SETTINGS)); // TODO: Chinese, English "Probe Settings" JPG
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
- ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x);
- ADDMENUITEM_P(ICON_ProbeOffsetY, GET_TEXT(MSG_ZPROBE_YOFFSET), onDrawPFloatMenu, SetProbeOffsetY, &probe.offset.y);
- ADDMENUITEM_P(ICON_ProbeOffsetZ, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetProbeOffsetZ, &probe.offset.z);
- ADDMENUITEM(ICON_ProbeTest, GET_TEXT(MSG_M48_TEST), onDrawMenuItem, ProbeTest);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
+ ADDMENUITEM_P(ICON_ProbeOffsetX, GET_TEXT_F(MSG_ZPROBE_XOFFSET), onDrawPFloatMenu, SetProbeOffsetX, &probe.offset.x);
+ ADDMENUITEM_P(ICON_ProbeOffsetY, GET_TEXT_F(MSG_ZPROBE_YOFFSET), onDrawPFloatMenu, SetProbeOffsetY, &probe.offset.y);
+ ADDMENUITEM_P(ICON_ProbeOffsetZ, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetProbeOffsetZ, &probe.offset.z);
+ ADDMENUITEM(ICON_ProbeTest, GET_TEXT_F(MSG_M48_TEST), onDrawMenuItem, ProbeTest);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#endif
@@ -3284,9 +3277,9 @@ void Draw_Move_Menu() {
CurrentMenu = FilSetMenu;
CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_FILAMENT_SET));
DWINUI::MenuItemsPrepare(6);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
#if HAS_FILAMENT_SENSOR
- ADDMENUITEM(ICON_Runout, GET_TEXT(MSG_RUNOUT_ENABLE), onDrawRunoutEnable, SetRunoutEnable);
+ ADDMENUITEM(ICON_Runout, GET_TEXT_F(MSG_RUNOUT_ENABLE), onDrawRunoutEnable, SetRunoutEnable);
#endif
#if HAS_FILAMENT_RUNOUT_DISTANCE
ADDMENUITEM_P(ICON_Runout, F("Runout Distance"), onDrawPFloatMenu, SetRunoutDistance, &runout.runout_distance());
@@ -3295,13 +3288,14 @@ void Draw_Move_Menu() {
ADDMENUITEM_P(ICON_ExtrudeMinT, F("Extrude Min Temp."), onDrawPIntMenu, SetExtMinT, &HMI_data.ExtMinT);
#endif
#if ENABLED(ADVANCED_PAUSE_FEATURE)
- ADDMENUITEM_P(ICON_FilLoad, GET_TEXT(MSG_FILAMENT_LOAD), onDrawPFloatMenu, SetFilLoad, &fc_settings[0].load_length);
- ADDMENUITEM_P(ICON_FilUnload, GET_TEXT(MSG_FILAMENT_UNLOAD), onDrawPFloatMenu, SetFilUnload, &fc_settings[0].unload_length);
+ ADDMENUITEM_P(ICON_FilLoad, GET_TEXT_F(MSG_FILAMENT_LOAD), onDrawPFloatMenu, SetFilLoad, &fc_settings[0].load_length);
+ ADDMENUITEM_P(ICON_FilUnload, GET_TEXT_F(MSG_FILAMENT_UNLOAD), onDrawPFloatMenu, SetFilUnload, &fc_settings[0].unload_length);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
-#endif
+#endif // HAS_FILAMENT_SENSOR
+
void Draw_SelectColors_Menu() {
checkkey = Menu;
if (SelectColorMenu == nullptr) SelectColorMenu = new MenuClass();
@@ -3309,8 +3303,8 @@ void Draw_SelectColors_Menu() {
CurrentMenu = SelectColorMenu;
SetMenuTitle({0}, {0}, F("Select Colors")); // TODO: Chinese, English "Select Color" JPG
DWINUI::MenuItemsPrepare(20);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
- ADDMENUITEM(ICON_StockConfiguration, GET_TEXT(MSG_RESTORE_DEFAULTS), onDrawMenuItem, RestoreDefaultsColors);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_AdvancedSettings_Menu);
+ ADDMENUITEM(ICON_StockConfiguration, GET_TEXT_F(MSG_RESTORE_DEFAULTS), onDrawMenuItem, RestoreDefaultsColors);
ADDMENUITEM_P(0, "Screen Background", onDrawSelColorItem, SelColor, &HMI_data.Background_Color);
ADDMENUITEM_P(0, "Cursor", onDrawSelColorItem, SelColor, &HMI_data.Cursor_color);
ADDMENUITEM_P(0, "Title Background", onDrawSelColorItem, SelColor, &HMI_data.TitleBg_color);
@@ -3330,7 +3324,7 @@ void Draw_SelectColors_Menu() {
ADDMENUITEM_P(0, "Indicator value", onDrawSelColorItem, SelColor, &HMI_data.Indicator_Color);
ADDMENUITEM_P(0, "Coordinate value", onDrawSelColorItem, SelColor, &HMI_data.Coordinate_Color);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_GetColor_Menu() {
@@ -3340,13 +3334,13 @@ void Draw_GetColor_Menu() {
CurrentMenu = GetColorMenu;
SetMenuTitle({0}, {0}, F("Get Color")); // TODO: Chinese, English "Get Color" JPG
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor);
- ADDMENUITEM(ICON_Cancel, GET_TEXT(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, DWIN_ApplyColor);
+ ADDMENUITEM(ICON_Cancel, GET_TEXT_F(MSG_BUTTON_CANCEL), onDrawMenuItem, Draw_SelectColors_Menu);
ADDMENUITEM(0, "Red", onDrawGetColorItem, SetRGBColor);
ADDMENUITEM(1, "Green", onDrawGetColorItem, SetRGBColor);
ADDMENUITEM(2, "Blue", onDrawGetColorItem, SetRGBColor);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
DWIN_Draw_Rectangle(1, *HMI_value.P_Int, 20, 315, DWIN_WIDTH - 20, 335);
}
@@ -3357,30 +3351,30 @@ void Draw_Tune_Menu() {
CurrentMenu = TuneMenu;
SetMenuTitle({73, 2, 28, 12}, {94, 2, 33, 11}, GET_TEXT_F(MSG_TUNE)); // TODO: Chinese, English "Tune" JPG
DWINUI::MenuItemsPrepare(10);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess);
- ADDMENUITEM_P(ICON_Speed, GET_TEXT(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Goto_PrintProcess);
+ ADDMENUITEM_P(ICON_Speed, GET_TEXT_F(MSG_SPEED), onDrawSpeedItem, SetSpeed, &feedrate_percentage);
#if HAS_HOTEND
- HotendTargetItem = ADDMENUITEM_P(ICON_HotendTemp, GET_TEXT(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target);
+ HotendTargetItem = ADDMENUITEM_P(ICON_HotendTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target);
#endif
#if HAS_HEATED_BED
- BedTargetItem = ADDMENUITEM_P(ICON_BedTemp, GET_TEXT(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target);
+ BedTargetItem = ADDMENUITEM_P(ICON_BedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target);
#endif
#if HAS_FAN
- FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]);
+ FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]);
#endif
#if HAS_ZOFFSET_ITEM && EITHER(HAS_BED_PROBE, BABYSTEPPING)
- ADDMENUITEM_P(ICON_Zoffset, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawZOffset, SetZOffset, &BABY_Z_VAR);
+ ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawZOffset, SetZOffset, &BABY_Z_VAR);
#endif
- ADDMENUITEM_P(ICON_Flow, GET_TEXT(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
+ ADDMENUITEM_P(ICON_Flow, GET_TEXT_F(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
#if ENABLED(ADVANCED_PAUSE_FEATURE)
- ADDMENUITEM(ICON_FilMan, GET_TEXT(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament);
+ ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament);
#endif
ADDMENUITEM(ICON_Lock, F("Lock Screen"), onDrawMenuItem, Goto_LockScreen);
#if HAS_LCD_BRIGHTNESS
ADDMENUITEM_P(ICON_Brightness, F("LCD Brightness"), onDrawPInt8Menu, SetBrightness, &ui.brightness);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_Motion_Menu() {
@@ -3390,16 +3384,16 @@ void Draw_Motion_Menu() {
CurrentMenu = MotionMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_MOTION)); // TODO: Chinese, English "Motion" JPG
DWINUI::MenuItemsPrepare(6);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
- ADDMENUITEM(ICON_MaxSpeed, GET_TEXT(MSG_SPEED), onDrawSpeed, Draw_MaxSpeed_Menu);
- ADDMENUITEM(ICON_MaxAccelerated, GET_TEXT(MSG_ACCELERATION), onDrawAcc, Draw_MaxAccel_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
+ ADDMENUITEM(ICON_MaxSpeed, GET_TEXT_F(MSG_SPEED), onDrawSpeed, Draw_MaxSpeed_Menu);
+ ADDMENUITEM(ICON_MaxAccelerated, GET_TEXT_F(MSG_ACCELERATION), onDrawAcc, Draw_MaxAccel_Menu);
#if HAS_CLASSIC_JERK
- ADDMENUITEM(ICON_MaxJerk, GET_TEXT(MSG_JERK), onDrawJerk, Draw_MaxJerk_Menu);
+ ADDMENUITEM(ICON_MaxJerk, GET_TEXT_F(MSG_JERK), onDrawJerk, Draw_MaxJerk_Menu);
#endif
- ADDMENUITEM(ICON_Step, GET_TEXT(MSG_STEPS_PER_MM), onDrawSteps, Draw_Steps_Menu);
- ADDMENUITEM_P(ICON_Flow, GET_TEXT(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
+ ADDMENUITEM(ICON_Step, GET_TEXT_F(MSG_STEPS_PER_MM), onDrawSteps, Draw_Steps_Menu);
+ ADDMENUITEM_P(ICON_Flow, GET_TEXT_F(MSG_FLOW), onDrawPIntMenu, SetFlow, &planner.flow_percentage[0]);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#if ENABLED(ADVANCED_PAUSE_FEATURE)
@@ -3410,15 +3404,15 @@ void Draw_Motion_Menu() {
CurrentMenu = FilamentMenu;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_FILAMENT_MAN)); // TODO: Chinese, English "Filament Management" JPG
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
- ADDMENUITEM(ICON_Park, GET_TEXT(MSG_FILAMENT_PARK_ENABLED), onDrawMenuItem, ParkHead);
- ADDMENUITEM(ICON_FilMan, GET_TEXT(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
+ ADDMENUITEM(ICON_Park, GET_TEXT_F(MSG_FILAMENT_PARK_ENABLED), onDrawMenuItem, ParkHead);
+ ADDMENUITEM(ICON_FilMan, GET_TEXT_F(MSG_FILAMENTCHANGE), onDrawMenuItem, ChangeFilament);
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
- ADDMENUITEM(ICON_FilUnload, GET_TEXT(MSG_FILAMENTUNLOAD), onDrawMenuItem, UnloadFilament);
- ADDMENUITEM(ICON_FilLoad, GET_TEXT(MSG_FILAMENTLOAD), onDrawMenuItem, LoadFilament);
+ ADDMENUITEM(ICON_FilUnload, GET_TEXT_F(MSG_FILAMENTUNLOAD), onDrawMenuItem, UnloadFilament);
+ ADDMENUITEM(ICON_FilLoad, GET_TEXT_F(MSG_FILAMENTLOAD), onDrawMenuItem, LoadFilament);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#endif
@@ -3430,38 +3424,40 @@ void Draw_Motion_Menu() {
CurrentMenu = ManualMesh;
SetMenuTitle({0}, {0}, GET_TEXT_F(MSG_MANUAL_MESH)); // TODO: Chinese, English "Manual Mesh Leveling" JPG
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
- ADDMENUITEM(ICON_ManualMesh, GET_TEXT(MSG_LEVEL_BED), onDrawMenuItem, ManualMeshStart);
- MMeshMoveZItem = ADDMENUITEM_P(ICON_Zoffset, GET_TEXT(MSG_MOVE_Z), onDrawMMeshMoveZ, SetMMeshMoveZ, ¤t_position.z);
- ADDMENUITEM(ICON_Axis, GET_TEXT(MSG_UBL_CONTINUE_MESH), onDrawMenuItem, ManualMeshContinue);
- ADDMENUITEM(ICON_MeshSave, GET_TEXT(MSG_UBL_SAVE_MESH), onDrawMenuItem, ManualMeshSave);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Prepare_Menu);
+ ADDMENUITEM(ICON_ManualMesh, GET_TEXT_F(MSG_LEVEL_BED), onDrawMenuItem, ManualMeshStart);
+ MMeshMoveZItem = ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_MOVE_Z), onDrawMMeshMoveZ, SetMMeshMoveZ, ¤t_position.z);
+ ADDMENUITEM(ICON_Axis, GET_TEXT_F(MSG_UBL_CONTINUE_MESH), onDrawMenuItem, ManualMeshContinue);
+ ADDMENUITEM(ICON_MeshViewer, GET_TEXT_F(MSG_MESH_VIEW), onDrawSubMenu, DWIN_MeshViewer);
+ ADDMENUITEM(ICON_MeshSave, GET_TEXT_F(MSG_UBL_SAVE_MESH), onDrawMenuItem, ManualMeshSave);
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#endif
#if HAS_PREHEAT
- void Draw_Preheat_Menu(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* text) {
+
+ void Draw_Preheat_Menu(frame_rect_t cn, frame_rect_t en, const __FlashStringHelper* fstr) {
checkkey = Menu;
if (CurrentMenu != PreheatMenu) {
CurrentMenu = PreheatMenu;
- SetMenuTitle(cn, en, text);
+ SetMenuTitle(cn, en, fstr);
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Temperature_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Temperature_Menu);
#if HAS_HOTEND
- ADDMENUITEM_P(ICON_SetEndTemp, GET_TEXT(MSG_UBL_SET_TEMP_HOTEND), onDrawSetPreheatHotend, SetPreheatEndTemp, &ui.material_preset[HMI_value.Preheat].hotend_temp);
+ ADDMENUITEM_P(ICON_SetEndTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawSetPreheatHotend, SetPreheatEndTemp, &ui.material_preset[HMI_value.Preheat].hotend_temp);
#endif
#if HAS_HEATED_BED
- ADDMENUITEM_P(ICON_SetBedTemp, GET_TEXT(MSG_UBL_SET_TEMP_BED), onDrawSetPreheatBed, SetPreheatBedTemp, &ui.material_preset[HMI_value.Preheat].bed_temp);
+ ADDMENUITEM_P(ICON_SetBedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawSetPreheatBed, SetPreheatBedTemp, &ui.material_preset[HMI_value.Preheat].bed_temp);
#endif
#if HAS_FAN
- ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT(MSG_FAN_SPEED), onDrawSetPreheatFan, SetPreheatFanSpeed, &ui.material_preset[HMI_value.Preheat].fan_speed);
+ ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawSetPreheatFan, SetPreheatFanSpeed, &ui.material_preset[HMI_value.Preheat].fan_speed);
#endif
#if ENABLED(EEPROM_SETTINGS)
- ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom);
+ ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawWriteEeprom, WriteEeprom);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_Preheat1_Menu() {
@@ -3485,7 +3481,7 @@ void Draw_Motion_Menu() {
}
#endif
-#endif
+#endif // HAS_PREHEAT
void Draw_Temperature_Menu() {
checkkey = Menu;
@@ -3494,15 +3490,15 @@ void Draw_Temperature_Menu() {
CurrentMenu = TemperatureMenu;
SetMenuTitle({236, 2, 28, 12}, {56, 15, 85, 14}, GET_TEXT_F(MSG_TEMPERATURE));
DWINUI::MenuItemsPrepare(7);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Control_Menu);
#if HAS_HOTEND
- HotendTargetItem = ADDMENUITEM_P(ICON_SetEndTemp, GET_TEXT(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target);
+ HotendTargetItem = ADDMENUITEM_P(ICON_SetEndTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_HOTEND), onDrawHotendTemp, SetHotendTemp, &thermalManager.temp_hotend[0].target);
#endif
#if HAS_HEATED_BED
- BedTargetItem = ADDMENUITEM_P(ICON_SetBedTemp, GET_TEXT(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target);
+ BedTargetItem = ADDMENUITEM_P(ICON_SetBedTemp, GET_TEXT_F(MSG_UBL_SET_TEMP_BED), onDrawBedTemp, SetBedTemp, &thermalManager.temp_bed.target);
#endif
#if HAS_FAN
- FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]);
+ FanSpeedItem = ADDMENUITEM_P(ICON_FanSpeed, GET_TEXT_F(MSG_FAN_SPEED), onDrawFanSpeed, SetFanSpeed, &thermalManager.fan_speed[0]);
#endif
#if HAS_HOTEND
ADDMENUITEM(ICON_SetPLAPreheat, F(PREHEAT_1_LABEL " Preheat Settings"), onDrawPLAPreheatSubMenu, Draw_Preheat1_Menu);
@@ -3512,7 +3508,7 @@ void Draw_Temperature_Menu() {
#endif
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_MaxSpeed_Menu() {
@@ -3522,15 +3518,15 @@ void Draw_MaxSpeed_Menu() {
CurrentMenu = MaxSpeedMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_MAXSPEED));
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
- ADDMENUITEM_P(ICON_MaxSpeedX, GET_TEXT(MSG_MAXSPEED_X), onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]);
- ADDMENUITEM_P(ICON_MaxSpeedY, GET_TEXT(MSG_MAXSPEED_Y), onDrawMaxSpeedY, SetMaxSpeedY, &planner.settings.max_feedrate_mm_s[Y_AXIS]);
- ADDMENUITEM_P(ICON_MaxSpeedZ, GET_TEXT(MSG_MAXSPEED_Z), onDrawMaxSpeedZ, SetMaxSpeedZ, &planner.settings.max_feedrate_mm_s[Z_AXIS]);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
+ ADDMENUITEM_P(ICON_MaxSpeedX, GET_TEXT_F(MSG_MAXSPEED_X), onDrawMaxSpeedX, SetMaxSpeedX, &planner.settings.max_feedrate_mm_s[X_AXIS]);
+ ADDMENUITEM_P(ICON_MaxSpeedY, GET_TEXT_F(MSG_MAXSPEED_Y), onDrawMaxSpeedY, SetMaxSpeedY, &planner.settings.max_feedrate_mm_s[Y_AXIS]);
+ ADDMENUITEM_P(ICON_MaxSpeedZ, GET_TEXT_F(MSG_MAXSPEED_Z), onDrawMaxSpeedZ, SetMaxSpeedZ, &planner.settings.max_feedrate_mm_s[Z_AXIS]);
#if HAS_HOTEND
- ADDMENUITEM_P(ICON_MaxSpeedE, GET_TEXT(MSG_MAXSPEED_E), onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[Z_AXIS]);
+ ADDMENUITEM_P(ICON_MaxSpeedE, GET_TEXT_F(MSG_MAXSPEED_E), onDrawMaxSpeedE, SetMaxSpeedE, &planner.settings.max_feedrate_mm_s[Z_AXIS]);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
void Draw_MaxAccel_Menu() {
@@ -3540,15 +3536,15 @@ void Draw_MaxAccel_Menu() {
CurrentMenu = MaxAccelMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_ACCELERATION));
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
- ADDMENUITEM_P(ICON_MaxAccX, GET_TEXT(MSG_AMAX_A), onDrawMaxAccelX, SetMaxAccelX, &planner.settings.max_acceleration_mm_per_s2[X_AXIS]);
- ADDMENUITEM_P(ICON_MaxAccY, GET_TEXT(MSG_AMAX_B), onDrawMaxAccelY, SetMaxAccelY, &planner.settings.max_acceleration_mm_per_s2[Y_AXIS]);
- ADDMENUITEM_P(ICON_MaxAccZ, GET_TEXT(MSG_AMAX_C), onDrawMaxAccelZ, SetMaxAccelZ, &planner.settings.max_acceleration_mm_per_s2[Z_AXIS]);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
+ ADDMENUITEM_P(ICON_MaxAccX, GET_TEXT_F(MSG_AMAX_A), onDrawMaxAccelX, SetMaxAccelX, &planner.settings.max_acceleration_mm_per_s2[X_AXIS]);
+ ADDMENUITEM_P(ICON_MaxAccY, GET_TEXT_F(MSG_AMAX_B), onDrawMaxAccelY, SetMaxAccelY, &planner.settings.max_acceleration_mm_per_s2[Y_AXIS]);
+ ADDMENUITEM_P(ICON_MaxAccZ, GET_TEXT_F(MSG_AMAX_C), onDrawMaxAccelZ, SetMaxAccelZ, &planner.settings.max_acceleration_mm_per_s2[Z_AXIS]);
#if HAS_HOTEND
- ADDMENUITEM_P(ICON_MaxAccE, GET_TEXT(MSG_AMAX_E), onDrawMaxAccelE, SetMaxAccelE, &planner.settings.max_acceleration_mm_per_s2[E_AXIS]);
+ ADDMENUITEM_P(ICON_MaxAccE, GET_TEXT_F(MSG_AMAX_E), onDrawMaxAccelE, SetMaxAccelE, &planner.settings.max_acceleration_mm_per_s2[E_AXIS]);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#if HAS_CLASSIC_JERK
@@ -3559,15 +3555,15 @@ void Draw_MaxAccel_Menu() {
CurrentMenu = MaxJerkMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_JERK));
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
- ADDMENUITEM_P(ICON_MaxSpeedJerkX, GET_TEXT(MSG_VA_JERK), onDrawMaxJerkX, SetMaxJerkX, &planner.max_jerk[X_AXIS]);
- ADDMENUITEM_P(ICON_MaxSpeedJerkY, GET_TEXT(MSG_VB_JERK), onDrawMaxJerkY, SetMaxJerkY, &planner.max_jerk[Y_AXIS]);
- ADDMENUITEM_P(ICON_MaxSpeedJerkZ, GET_TEXT(MSG_VC_JERK), onDrawMaxJerkZ, SetMaxJerkZ, &planner.max_jerk[Z_AXIS]);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
+ ADDMENUITEM_P(ICON_MaxSpeedJerkX, GET_TEXT_F(MSG_VA_JERK), onDrawMaxJerkX, SetMaxJerkX, &planner.max_jerk[X_AXIS]);
+ ADDMENUITEM_P(ICON_MaxSpeedJerkY, GET_TEXT_F(MSG_VB_JERK), onDrawMaxJerkY, SetMaxJerkY, &planner.max_jerk[Y_AXIS]);
+ ADDMENUITEM_P(ICON_MaxSpeedJerkZ, GET_TEXT_F(MSG_VC_JERK), onDrawMaxJerkZ, SetMaxJerkZ, &planner.max_jerk[Z_AXIS]);
#if HAS_HOTEND
- ADDMENUITEM_P(ICON_MaxSpeedJerkE, GET_TEXT(MSG_VE_JERK), onDrawMaxJerkE, SetMaxJerkE, &planner.max_jerk[E_AXIS]);
+ ADDMENUITEM_P(ICON_MaxSpeedJerkE, GET_TEXT_F(MSG_VE_JERK), onDrawMaxJerkE, SetMaxJerkE, &planner.max_jerk[E_AXIS]);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#endif
@@ -3578,15 +3574,15 @@ void Draw_Steps_Menu() {
CurrentMenu = StepsMenu;
SetMenuTitle({1, 16, 28, 13}, {144, 16, 46, 11}, GET_TEXT_F(MSG_STEPS_PER_MM));
DWINUI::MenuItemsPrepare(5);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
- ADDMENUITEM_P(ICON_StepX, GET_TEXT(MSG_A_STEPS), onDrawStepsX, SetStepsX, &planner.settings.axis_steps_per_mm[X_AXIS]);
- ADDMENUITEM_P(ICON_StepY, GET_TEXT(MSG_B_STEPS), onDrawStepsY, SetStepsY, &planner.settings.axis_steps_per_mm[Y_AXIS]);
- ADDMENUITEM_P(ICON_StepZ, GET_TEXT(MSG_C_STEPS), onDrawStepsZ, SetStepsZ, &planner.settings.axis_steps_per_mm[Z_AXIS]);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawBack, Draw_Motion_Menu);
+ ADDMENUITEM_P(ICON_StepX, GET_TEXT_F(MSG_A_STEPS), onDrawStepsX, SetStepsX, &planner.settings.axis_steps_per_mm[X_AXIS]);
+ ADDMENUITEM_P(ICON_StepY, GET_TEXT_F(MSG_B_STEPS), onDrawStepsY, SetStepsY, &planner.settings.axis_steps_per_mm[Y_AXIS]);
+ ADDMENUITEM_P(ICON_StepZ, GET_TEXT_F(MSG_C_STEPS), onDrawStepsZ, SetStepsZ, &planner.settings.axis_steps_per_mm[Z_AXIS]);
#if HAS_HOTEND
- ADDMENUITEM_P(ICON_StepE, GET_TEXT(MSG_E_STEPS), onDrawStepsE, SetStepsE, &planner.settings.axis_steps_per_mm[E_AXIS]);
+ ADDMENUITEM_P(ICON_StepE, GET_TEXT_F(MSG_E_STEPS), onDrawStepsE, SetStepsE, &planner.settings.axis_steps_per_mm[E_AXIS]);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#if HAS_HOTEND
@@ -3597,18 +3593,18 @@ void Draw_Steps_Menu() {
CurrentMenu = HotendPIDMenu;
CurrentMenu->MenuTitle.SetCaption(F("Hotend PID Settings"));
DWINUI::MenuItemsPrepare(8);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
ADDMENUITEM(ICON_PIDNozzle, F("Hotend PID"), onDrawMenuItem, HotendPID);
ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_hotend[0].pid.Kp);
ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_hotend[0].pid.Ki);
ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_hotend[0].pid.Kd);
- ADDMENUITEM_P(ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), onDrawPIntMenu, SetHotendPidT, &HMI_data.HotendPidT);
- ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
+ ADDMENUITEM_P(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawPIntMenu, SetHotendPidT, &HMI_data.HotendPidT);
+ ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT_F(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
#if ENABLED(EEPROM_SETTINGS)
- ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom);
+ ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#endif
@@ -3620,18 +3616,18 @@ void Draw_Steps_Menu() {
CurrentMenu = BedPIDMenu;
CurrentMenu->MenuTitle.SetCaption(F("Bed PID Settings"));
DWINUI::MenuItemsPrepare(8);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_AdvancedSettings_Menu);
ADDMENUITEM(ICON_PIDNozzle, F("Bed PID"), onDrawMenuItem,BedPID);
ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KP), onDrawPFloat2Menu, SetKp, &thermalManager.temp_bed.pid.Kp);
ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KI), onDrawPIDi, SetKi, &thermalManager.temp_bed.pid.Ki);
ADDMENUITEM_P(ICON_PIDValue, F("Set" STR_KD), onDrawPIDd, SetKd, &thermalManager.temp_bed.pid.Kd);
- ADDMENUITEM_P(ICON_Temperature, GET_TEXT(MSG_TEMPERATURE), onDrawPIntMenu, SetBedPidT, &HMI_data.BedPidT);
- ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
+ ADDMENUITEM_P(ICON_Temperature, GET_TEXT_F(MSG_TEMPERATURE), onDrawPIntMenu, SetBedPidT, &HMI_data.BedPidT);
+ ADDMENUITEM_P(ICON_PIDcycles, GET_TEXT_F(MSG_PID_CYCLE), onDrawPIntMenu, SetPidCycles, &HMI_data.PidCycles);
#if ENABLED(EEPROM_SETTINGS)
- ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom);
+ ADDMENUITEM(ICON_WriteEEPROM, GET_TEXT_F(MSG_STORE_EEPROM), onDrawMenuItem, WriteEeprom);
#endif
}
- CurrentMenu->Draw();
+ CurrentMenu->draw();
}
#endif
@@ -3643,15 +3639,14 @@ void Draw_Steps_Menu() {
CurrentMenu = ZOffsetWizMenu;
CurrentMenu->MenuTitle.SetCaption(GET_TEXT_F(MSG_PROBE_WIZARD));
DWINUI::MenuItemsPrepare(4);
- ADDMENUITEM(ICON_Back, GET_TEXT(MSG_BUTTON_BACK), onDrawMenuItem, Draw_Prepare_Menu);
- ADDMENUITEM(ICON_Homing, GET_TEXT(MSG_AUTO_HOME), onDrawMenuItem, AutoHome);
+ ADDMENUITEM(ICON_Back, GET_TEXT_F(MSG_BUTTON_BACK), onDrawMenuItem, Draw_Prepare_Menu);
+ ADDMENUITEM(ICON_Homing, GET_TEXT_F(MSG_AUTO_HOME), onDrawMenuItem, AutoHome);
ADDMENUITEM(ICON_MoveZ0, F("Move Z to Home"), onDrawMenuItem, SetMoveZto0);
- ADDMENUITEM_P(ICON_Zoffset, GET_TEXT(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR);
+ ADDMENUITEM_P(ICON_Zoffset, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), onDrawPFloat2Menu, SetZOffset, &BABY_Z_VAR);
}
- CurrentMenu->Draw();
- if (!axis_is_trusted(Z_AXIS)) ui.set_status_P(PSTR("WARNING: Z position is unknow, move Z to home"));
+ CurrentMenu->draw();
+ if (!axis_is_trusted(Z_AXIS)) LCD_MESSAGE_F("WARNING: Z position unknown, move Z to home");
}
#endif
-
#endif // DWIN_CREALITY_LCD_ENHANCED
diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin.h b/Marlin/src/lcd/e3v2/enhanced/dwin.h
index db4cc2121f..0908417117 100644
--- a/Marlin/src/lcd/e3v2/enhanced/dwin.h
+++ b/Marlin/src/lcd/e3v2/enhanced/dwin.h
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,15 +15,22 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#pragma once
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/08
+ */
+
#include "../../../inc/MarlinConfigPre.h"
#include "dwinui.h"
-#include "rotary_encoder.h"
+#include "../common/encoder.h"
#include "../../../libs/BL24CXX.h"
#if ANY(HAS_HOTEND, HAS_HEATED_BED, HAS_FAN) && PREHEAT_COUNT
@@ -79,11 +87,6 @@ enum pidresult_t : uint8_t {
PID_DONE
};
-// Picture ID
-#define Start_Process 0
-#define Language_English 1
-#define Language_Chinese 2
-
#define DWIN_CHINESE 123
#define DWIN_ENGLISH 0
@@ -120,12 +123,16 @@ typedef struct {
uint16_t Barfill_Color = Def_Barfill_Color;
uint16_t Indicator_Color = Def_Indicator_Color;
uint16_t Coordinate_Color = Def_Coordinate_Color;
- TERN_(HAS_HOTEND, int16_t HotendPidT = PREHEAT_1_TEMP_HOTEND);
- TERN_(HAS_HOTEND, int16_t PidCycles = 10);
+ #if HAS_HOTEND
+ int16_t HotendPidT = PREHEAT_1_TEMP_HOTEND;
+ int16_t PidCycles = 10;
+ #endif
#ifdef PREHEAT_1_TEMP_BED
int16_t BedPidT = PREHEAT_1_TEMP_BED;
#endif
- TERN_(PREVENT_COLD_EXTRUSION, int16_t ExtMinT = EXTRUDE_MINTEMP);
+ #if ENABLED(PREVENT_COLD_EXTRUSION)
+ int16_t ExtMinT = EXTRUDE_MINTEMP;
+ #endif
} HMI_data_t;
typedef struct {
@@ -145,27 +152,13 @@ extern HMI_data_t HMI_data;
extern uint8_t checkkey;
extern millis_t dwin_heat_time;
-// Popup windows
-void DWIN_Popup_Confirm(uint8_t icon, const char * const msg1, const char * const msg2);
-#if HAS_HOTEND || HAS_HEATED_BED
- void DWIN_Popup_Temperature(const bool toohigh);
-#endif
-TERN_(HAS_HOTEND, void Popup_Window_ETempTooLow());
-void Popup_Window_Resume();
-
// SD Card
void HMI_SDCardInit();
void HMI_SDCardUpdate();
-// Main Process
-//void Icon_print();
-//void Icon_control();
-//void Icon_leveling(bool value);
-
// Other
void Goto_PrintProcess();
void Goto_Main_Menu();
-void update_variable();
void Draw_Select_Highlight(const bool sel);
void Draw_Status_Area(const bool with_update); // Status Area
void Draw_Main_Area(); // Redraw main area;
@@ -178,22 +171,17 @@ void HMI_ReturnScreen(); // Return to previous screen before popups
void ApplyExtMinT();
void HMI_SetLanguageCache(); // Set the languaje image cache
-//void HMI_Leveling(); // Level the page
-//void HMI_LevBedCorners(); // Tramming menu
-//void HMI_Info(); // Information menu
-
-
void HMI_Init();
void HMI_Popup();
void HMI_SaveProcessID(const uint8_t id);
void HMI_AudioFeedback(const bool success=true);
-void DWIN_Startup();
-void DWIN_Update();
void EachMomentUpdate();
+void update_variable();
void DWIN_HandleScreen();
-void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text);
-void DWIN_StatusChanged(const char * const text);
-void DWIN_StatusChanged_P(PGM_P const text);
+void DWIN_Update();
+void DWIN_DrawStatusLine(const uint16_t color, const uint16_t bgcolor, const char *text=nullptr);
+void DWIN_StatusChanged(const char * const cstr=nullptr);
+void DWIN_StatusChanged(FSTR_P const fstr);
void DWIN_StartHoming();
void DWIN_CompletedHoming();
#if HAS_MESH
@@ -224,6 +212,9 @@ void DWIN_RebootScreen();
// Utility and extensions
void HMI_LockScreen();
void DWIN_LockScreen(const bool flag = true);
+#if HAS_MESH
+ void DWIN_MeshViewer();
+#endif
// HMI user control functions
void HMI_Menu();
@@ -239,27 +230,61 @@ void Draw_AdvancedSettings_Menu();
void Draw_Prepare_Menu();
void Draw_Move_Menu();
void Draw_LevBedCorners_Menu();
-TERN_(HAS_HOME_OFFSET, void Draw_HomeOffset_Menu());
-TERN_(HAS_BED_PROBE, void Draw_ProbeSet_Menu());
-TERN_(HAS_FILAMENT_SENSOR, void Draw_FilSet_Menu());
+#if HAS_HOME_OFFSET
+ void Draw_HomeOffset_Menu();
+#endif
+#if HAS_BED_PROBE
+ void Draw_ProbeSet_Menu();
+#endif
+#if HAS_FILAMENT_SENSOR
+ void Draw_FilSet_Menu();
+#endif
void Draw_SelectColors_Menu();
void Draw_GetColor_Menu();
void Draw_Tune_Menu();
void Draw_Motion_Menu();
-TERN_(ADVANCED_PAUSE_FEATURE, void Draw_FilamentMan_Menu());
-TERN_(MESH_BED_LEVELING, void Draw_ManualMesh_Menu());
+#if ENABLED(ADVANCED_PAUSE_FEATURE)
+ void Draw_FilamentMan_Menu();
+#endif
+#if ENABLED(MESH_BED_LEVELING)
+ void Draw_ManualMesh_Menu();
+#endif
#if HAS_HOTEND
void Draw_Preheat1_Menu();
void Draw_Preheat2_Menu();
void Draw_Preheat3_Menu();
+ void Draw_HotendPID_Menu();
#endif
void Draw_Temperature_Menu();
void Draw_MaxSpeed_Menu();
void Draw_MaxAccel_Menu();
-TERN_(HAS_CLASSIC_JERK, void Draw_MaxJerk_Menu());
+#if HAS_CLASSIC_JERK
+ void Draw_MaxJerk_Menu();
+#endif
void Draw_Steps_Menu();
-TERN_(HAS_HOTEND, void Draw_HotendPID_Menu());
-TERN_(HAS_HEATED_BED, void Draw_BedPID_Menu());
+#if HAS_HEATED_BED
+ void Draw_BedPID_Menu();
+#endif
#if EITHER(HAS_BED_PROBE, BABYSTEPPING)
void Draw_ZOffsetWiz_Menu();
#endif
+
+// Popup windows
+
+void DWIN_Draw_Popup(const uint8_t icon, const char * const cmsg1, FSTR_P const fmsg2, uint8_t button=0);
+void DWIN_Draw_Popup(const uint8_t icon, FSTR_P const fmsg1=nullptr, FSTR_P const fmsg2=nullptr, uint8_t button=0);
+
+template
+void DWIN_Popup_Confirm(const uint8_t icon, T amsg1, U amsg2) {
+ HMI_SaveProcessID(WaitResponse);
+ DWIN_Draw_Popup(icon, amsg1, amsg2, ICON_Confirm_E); // Button Confirm
+ DWIN_UpdateLCD();
+}
+
+#if HAS_HOTEND || HAS_HEATED_BED
+ void DWIN_Popup_Temperature(const bool toohigh);
+#endif
+#if HAS_HOTEND
+ void Popup_Window_ETempTooLow();
+#endif
+void Popup_Window_Resume();
diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp
index b9246523ce..93477be0b8 100644
--- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp
+++ b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.cpp
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,18 +15,17 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
-/********************************************************************************
- * @file lcd/e3v2/enhanced/dwin_lcd.cpp
- * @author LEO / Creality3D - Enhanced by Miguel A. Risco-Castillo
- * @date 2021/09/08
- * @version 2.2.1
- * @brief DWIN screen control functions
- ********************************************************************************/
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/08
+ */
#include "../../../inc/MarlinConfigPre.h"
@@ -34,297 +34,6 @@
#include "../../../inc/MarlinConfig.h"
#include "dwin_lcd.h"
-#include // for memset
-
-//#define DEBUG_OUT 1
-#include "../../../core/debug_out.h"
-
-// Make sure DWIN_SendBuf is large enough to hold the largest string plus draw command and tail.
-// Assume the narrowest (6 pixel) font and 2-byte gb2312-encoded characters.
-uint8_t DWIN_SendBuf[11 + DWIN_DataLength] = { 0xAA };
-uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C };
-uint8_t databuf[26] = { 0 };
-uint8_t receivedType;
-
-int recnum = 0;
-
-inline void DWIN_Byte(size_t &i, const uint16_t bval) {
- DWIN_SendBuf[++i] = bval;
-}
-
-inline void DWIN_Word(size_t &i, const uint16_t wval) {
- DWIN_SendBuf[++i] = wval >> 8;
- DWIN_SendBuf[++i] = wval & 0xFF;
-}
-
-inline void DWIN_Long(size_t &i, const uint32_t lval) {
- DWIN_SendBuf[++i] = (lval >> 24) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 16) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 8) & 0xFF;
- DWIN_SendBuf[++i] = lval & 0xFF;
-}
-
-inline void DWIN_String(size_t &i, const char * const string, uint16_t rlimit = 0xFFFF) {
- if (!string) return;
- const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, _MIN(strlen(string), rlimit));
- if (len == 0) return;
- memcpy(&DWIN_SendBuf[i+1], string, len);
- i += len;
-}
-
-inline void DWIN_String(size_t &i, const __FlashStringHelper * string, uint16_t rlimit = 0xFFFF) {
- if (!string) return;
- const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, _MIN(rlimit, strlen_P((PGM_P)string))); // cast it to PGM_P, which is basically const char *, and measure it using the _P version of strlen.
- if (len == 0) return;
- memcpy(&DWIN_SendBuf[i+1], string, len);
- i += len;
-}
-
-// Send the data in the buffer and the packet end
-inline void DWIN_Send(size_t &i) {
- ++i;
- LOOP_L_N(n, i) { LCD_SERIAL.write(DWIN_SendBuf[n]); delayMicroseconds(1); }
- LOOP_L_N(n, 4) { LCD_SERIAL.write(DWIN_BufTail[n]); delayMicroseconds(1); }
-}
-
-/*-------------------------------------- System variable function --------------------------------------*/
-
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void) {
- #ifndef LCD_BAUDRATE
- #define LCD_BAUDRATE 115200
- #endif
- LCD_SERIAL.begin(LCD_BAUDRATE);
- const millis_t serial_connect_timeout = millis() + 1000UL;
- while (!LCD_SERIAL.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
-
- size_t i = 0;
- DWIN_Byte(i, 0x00);
- DWIN_Send(i);
-
- while (LCD_SERIAL.available() > 0 && recnum < (signed)sizeof(databuf)) {
- databuf[recnum] = LCD_SERIAL.read();
- // ignore the invalid data
- if (databuf[0] != FHONE) { // prevent the program from running.
- if (recnum > 0) {
- recnum = 0;
- ZERO(databuf);
- }
- continue;
- }
- delay(10);
- recnum++;
- }
-
- return ( recnum >= 3
- && databuf[0] == FHONE
- && databuf[1] == '\0'
- && databuf[2] == 'O'
- && databuf[3] == 'K' );
-}
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir) {
- size_t i = 0;
- DWIN_Byte(i, 0x34);
- DWIN_Byte(i, 0x5A);
- DWIN_Byte(i, 0xA5);
- DWIN_Byte(i, dir);
- DWIN_Send(i);
-}
-
-// Update display
-void DWIN_UpdateLCD(void) {
- size_t i = 0;
- DWIN_Byte(i, 0x3D);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Drawing functions ----------------------------------------*/
-
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color) {
- size_t i = 0;
- DWIN_Byte(i, 0x01);
- DWIN_Word(i, color);
- DWIN_Send(i);
-}
-
-// Draw a point
-// color: point color
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y) {
- size_t i = 0;
- DWIN_Byte(i, 0x02);
- DWIN_Word(i, color);
- DWIN_Byte(i, width);
- DWIN_Byte(i, height);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Send(i);
-}
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x03);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color,
- uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x05);
- DWIN_Byte(i, mode);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x09);
- DWIN_Byte(i, (mode << 7) | dir);
- DWIN_Word(i, dis);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// widthAdjust: true=self-adjust character width; false=no adjustment
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-// rlimit: For draw less chars than string length use rlimit
-void DWIN_Draw_String(bool widthAdjust, bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const char * const string, uint16_t rlimit) {
- size_t i = 0;
- DWIN_Byte(i, 0x11);
- // Bit 7: widthAdjust
- // Bit 6: bShow
- // Bit 5-4: Unused (0)
- // Bit 3-0: size
- DWIN_Byte(i, (widthAdjust * 0x80) | (bShow * 0x40) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_String(i, string, rlimit);
- DWIN_Send(i);
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, long value) {
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- // Bit 7: bshow
- // Bit 6: 1 = signed; 0 = unsigned number;
- // Bit 5: zeroFill
- // Bit 4: zeroMode
- // Bit 3-0: size
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, 0); // fNum
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- #if 0
- for (char count = 0; count < 8; count++) {
- DWIN_Byte(i, value);
- value >>= 8;
- if (!(value & 0xFF)) break;
- }
- #else
- // Write a big-endian 64 bit integer
- const size_t p = i + 1;
- for (char count = 8; count--;) { // 7..0
- ++i;
- DWIN_SendBuf[p + count] = value;
- value >>= 8;
- }
- #endif
-
- DWIN_Send(i);
-}
-
-// Draw a positive floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Scaled positive float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, fNum);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Long(i, value);
- DWIN_Send(i);
-}
-// value: positive float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
- const long val = round(value * POW(10, fNum));
- DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, val);
-}
/*---------------------------------------- Picture related functions ----------------------------------------*/
@@ -339,73 +48,23 @@ void DWIN_Draw_QR(uint8_t QR_Pixel, uint16_t x, uint16_t y, char *string) {
DWIN_Word(i, x);
DWIN_Word(i, y);
DWIN_Byte(i, QR_Pixel);
- DWIN_String(i, string);
+ DWIN_Text(i, string);
DWIN_Send(i);
}
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id) {
- size_t i = 0;
- DWIN_Word(i, 0x2200);
- DWIN_Byte(i, id);
- DWIN_Send(i);
-}
-
-// Draw an Icon
-// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
-// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
-// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
+// Draw an Icon with transparent background
// libID: Icon library ID
// picID: Icon ID
// x/y: Upper-left point
-void DWIN_ICON_Show(uint8_t IBD, uint8_t BIR, uint8_t BFI, uint8_t libID, uint8_t picID, uint16_t x, uint16_t y) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x23);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Byte(i, IBD%2<<7 | BIR%2<<6 | BFI%2<<5 | libID);
- DWIN_Byte(i, picID);
- DWIN_Send(i);
-}
-
-// Draw an Icon from SRAM
-// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
-// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
-// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
-// x/y: Upper-left point
-// addr: SRAM address
-void DWIN_ICON_Show(uint8_t IBD, uint8_t BIR, uint8_t BFI, uint16_t x, uint16_t y, uint16_t addr) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x24);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Byte(i, IBD%2<<7 | BIR%2<<6 | BFI%2<<5 | 0x00);
- DWIN_Word(i, addr);
- DWIN_Send(i);
-}
-
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id) {
- size_t i = 0;
- DWIN_Byte(i, 0x25);
- DWIN_Byte(i, n);
- DWIN_Byte(i, id);
- DWIN_Send(i);
+void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y) {
+ DWIN_ICON_Show(false, false, true, libID, picID, x, y);
}
// Copy area from current virtual display area to current screen
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
+void DWIN_Frame_AreaCopy(uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
size_t i = 0;
DWIN_Byte(i, 0x26);
DWIN_Word(i, xStart);
@@ -425,11 +84,10 @@ void DWIN_Frame_AreaCopy(uint16_t xStart, uint16_t yStart,
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t IBD, uint8_t BIR, uint8_t BFI, uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
+void DWIN_Frame_AreaCopy(bool IBD, bool BIR, bool BFI, uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
size_t i = 0;
DWIN_Byte(i, 0x27);
- DWIN_Byte(i, IBD%2<<7 | BIR%2<<6 | BFI%2<<5 | cacheID);
+ DWIN_Byte(i, (IBD & 1) << 7 | (BIR & 1) << 6 | (BFI & 1) << 5 | cacheID);
DWIN_Word(i, xStart);
DWIN_Word(i, yStart);
DWIN_Word(i, xEnd);
@@ -439,48 +97,13 @@ void DWIN_Frame_AreaCopy(uint8_t IBD, uint8_t BIR, uint8_t BFI, uint8_t cacheID,
DWIN_Send(i);
}
-// Animate a series of icons
-// animID: Animation ID; 0x00-0x0F
-// animate: true on; false off;
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs, uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x28);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- // Bit 7: animation on or off
- // Bit 6: start from begin or end
- // Bit 5-4: unused (0)
- // Bit 3-0: animID
- DWIN_Byte(i, (animate * 0x80) | 0x40 | animID);
- DWIN_Byte(i, libID);
- DWIN_Byte(i, picIDs);
- DWIN_Byte(i, picIDe);
- DWIN_Byte(i, interval);
- DWIN_Send(i);
-}
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state) {
- size_t i = 0;
- DWIN_Byte(i, 0x29);
- DWIN_Word(i, state);
- DWIN_Send(i);
-}
-
-// Set LCD Brightness 0x00-0xFF
-void DWIN_LCD_Brightness(const uint8_t brightness) {
- size_t i = 0;
- DWIN_Byte(i, 0x30);
- DWIN_Byte(i, brightness);
- DWIN_Send(i);
+// Copy area from virtual display area to current screen with transparent background
+// cacheID: virtual area number
+// xStart/yStart: Upper-left of virtual area
+// xEnd/yEnd: Lower-right of virtual area
+// x/y: Screen paste point
+void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
+ DWIN_Frame_AreaCopy(false, false, true, cacheID, xStart, yStart, xEnd, yEnd, x, y);
}
// Write buffer data to the SRAM or Flash
@@ -524,47 +147,14 @@ void DWIN_SRAMToPic(uint8_t picID) {
//--------------------------Test area -------------------------
-// void DWIN_ReadSRAM(uint16_t addr, uint8_t length, const char * const data) {
-// size_t i = 0;
-// DWIN_Byte(i, 0x32);
-// DWIN_Byte(i, 0x5A); // 0x5A Read from SRAM - 0xA5 Read from Flash
-// DWIN_Word(i, addr); // 0x0000 to 0x7FFF
-// const size_t len = _MIN(0xF0, length);
-// DWIN_Byte(i, len);
-// DWIN_Send(i);
-// }
-
-/*---------------------------------------- Memory functions ----------------------------------------*/
-// The LCD has an additional 32KB SRAM and 16KB Flash
-
-// Data can be written to the sram and save to one of the jpeg page files
-
-// Write Data Memory
-// command 0x31
-// Type: Write memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Write data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Data: data
-//
-// Flash writing returns 0xA5 0x4F 0x4B
-
-// Read Data Memory
-// command 0x32
-// Type: Read memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Read data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Length: leangth of data to read; 0x01-0xF0
-//
-// Response:
-// Type, Address, Length, Data
-
-// Write Picture Memory
-// Write the contents of the 32KB SRAM data memory into the designated image memory space
-// Issued: 0x5A, 0xA5, PIC_ID
-// Response: 0xA5 0x4F 0x4B
-//
-// command 0x33
-// 0x5A, 0xA5
-// PicId: Picture Memory location, 0x00-0x0F
-//
-// Flash writing returns 0xA5 0x4F 0x4B
+//void DWIN_ReadSRAM(uint16_t addr, uint8_t length, const char * const data) {
+// size_t i = 0;
+// DWIN_Byte(i, 0x32);
+// DWIN_Byte(i, 0x5A); // 0x5A Read from SRAM - 0xA5 Read from Flash
+// DWIN_Word(i, addr); // 0x0000 to 0x7FFF
+// const size_t len = _MIN(0xF0, length);
+// DWIN_Byte(i, len);
+// DWIN_Send(i);
+//}
#endif // DWIN_CREALITY_LCD_ENHANCED
diff --git a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h
index c66416a7ed..c49f23af45 100644
--- a/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h
+++ b/Marlin/src/lcd/e3v2/enhanced/dwin_lcd.h
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,169 +15,20 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
-
-/********************************************************************************
- * @file lcd/e3v2/enhanced/dwin_lcd.h
- * @author LEO / Creality3D - Enhanced by Miguel A. Risco-Castillo
- * @date 2021/08/09
- * @version 2.2.1
- * @brief DWIN screen control functions
- ********************************************************************************/
-
#pragma once
-#include
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/08
+ */
-#define RECEIVED_NO_DATA 0x00
-#define RECEIVED_SHAKE_HAND_ACK 0x01
-
-#define FHONE 0xAA
-
-#define DWIN_SCROLL_UP 2
-#define DWIN_SCROLL_DOWN 3
-
-#define DWIN_WIDTH 272
-#define DWIN_HEIGHT 480
-
-#define DWIN_DataLength (DWIN_WIDTH / 6 * 2)
-
-/*-------------------------------------- System variable function --------------------------------------*/
-
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void);
-
-// Set the backlight luminance
-// luminance: (0x00-0xFF)
-void DWIN_Backlight_SetLuminance(const uint8_t luminance);
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir);
-
-// Update display
-void DWIN_UpdateLCD(void);
-
-/*---------------------------------------- Drawing functions ----------------------------------------*/
-
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color);
-
-// Draw a point
-// color: point color
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y);
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a Horizontal line
-// color: Line segment color
-// xStart/yStart: Start point
-// xLength: Line Length
-inline void DWIN_Draw_HLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart + xLength - 1, yStart);
-}
-
-// Draw a Vertical line
-// color: Line segment color
-// xStart/yStart: Start point
-// yLength: Line Length
-inline void DWIN_Draw_VLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t yLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart, yStart + yLength - 1);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a box
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xSize/ySize: box size
-inline void DWIN_Draw_Box(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xSize, uint16_t ySize) {
- DWIN_Draw_Rectangle(mode, color, xStart, yStart, xStart + xSize - 1, yStart + ySize - 1);
-}
-
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// widthAdjust: true=self-adjust character width; false=no adjustment
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-// rlimit: For draw less chars than string length use rlimit
-void DWIN_Draw_String(bool widthAdjust, bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const char * const string, uint16_t rlimit = 0xFFFF);
-inline void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const char * const string, uint16_t rlimit = 0xFFFF) {
- DWIN_Draw_String(0, bShow, size, color, bColor, x, y, string, rlimit);
-}
-
-class __FlashStringHelper;
-
-inline void DWIN_Draw_String(bool widthAdjust, bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
- DWIN_Draw_String(widthAdjust, bShow, size, color, bColor, x, y, (char *)title);
-}
-inline void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
- DWIN_Draw_String(0, bShow, size, color, bColor, x, y, (char *)title);
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, long value);
-
-// Draw a positive floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Scaled positive float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
-// value: positive float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value);
-
-/*---------------------------------------- Picture related functions ----------------------------------------*/
+#include "../common/dwin_api.h"
// Display QR code
// The size of the QR code is (46*QR_Pixel)*(46*QR_Pixel) dot matrix
@@ -185,54 +37,29 @@ void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_
// str: multi-bit data
void DWIN_Draw_QR(uint8_t QR_Pixel, uint16_t x, uint16_t y, char *string);
-inline void DWIN_Draw_QR(uint8_t QR_Pixel, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
+inline void DWIN_Draw_QR(uint8_t QR_Pixel, uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_QR(QR_Pixel, x, y, (char *)title);
}
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id);
+// Copy area from virtual display area to current screen
+// cacheID: virtual area number
+// xStart/yStart: Upper-left of virtual area
+// xEnd/yEnd: Lower-right of virtual area
+// x/y: Screen paste point
+void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
-// Draw an Icon
-// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
-// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
-// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
-// libID: Icon library ID
-// picID: Icon ID
-// x/y: Upper-left point
-void DWIN_ICON_Show(uint8_t IBD, uint8_t BIR, uint8_t BFI, uint8_t libID, uint8_t picID, uint16_t x, uint16_t y);
-
-// Draw an Icon with transparent background
-// libID: Icon library ID
-// picID: Icon ID
-// x/y: Upper-left point
-inline void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y) {
- DWIN_ICON_Show(0, 0, 1, libID, picID, x, y);
-}
-
-// Draw an Icon from SRAM
-// IBD: The icon background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
-// BIR: Background image restoration: 0=Background image is not restored, 1=Automatically use virtual display area image for background restoration
-// BFI: Background filtering strength: 0=normal, 1=enhanced, (only valid when the icon background display=0)
-// x/y: Upper-left point
-// addr: SRAM address
-void DWIN_ICON_Show(uint8_t IBD, uint8_t BIR, uint8_t BFI, uint16_t x, uint16_t y, uint16_t addr);
-
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id);
-
-// Unzip the JPG picture to virtual display area #1
-// id: Picture ID
-inline void DWIN_JPG_CacheTo1(uint8_t id) { DWIN_JPG_CacheToN(1, id); }
+// Copy area from virtual display area to current screen
+// cacheID: virtual area number
+// xStart/yStart: Upper-left of virtual area
+// xEnd/yEnd: Lower-right of virtual area
+// x/y: Screen paste point
+void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
// Copy area from current virtual display area to current screen
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
+void DWIN_Frame_AreaCopy(uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
// Copy area from virtual display area to current screen
// IBD: background display: 0=Background filtering is not displayed, 1=Background display \\When setting the background filtering not to display, the background must be pure black
@@ -242,36 +69,7 @@ void DWIN_Frame_AreaCopy(uint16_t xStart, uint16_t yStart,
// xStart/yStart: Upper-left of virtual area
// xEnd/yEnd: Lower-right of virtual area
// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t IBD, uint8_t BIR, uint8_t BFI, uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
-
-// Copy area from virtual display area to current screen with transparent background
-// cacheID: virtual area number
-// xStart/yStart: Upper-left of virtual area
-// xEnd/yEnd: Lower-right of virtual area
-// x/y: Screen paste point
-inline void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
- DWIN_Frame_AreaCopy(0, 0, 1, cacheID, xStart, yStart, xEnd, yEnd, x, y);
-}
-
-// Animate a series of icons
-// animID: Animation ID up to 16
-// animate: animation on or off
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs,
- uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval);
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state);
-
-// Set LCD Brightness 0x00-0x0F
-void DWIN_LCD_Brightness(const uint8_t brightness);
+void DWIN_Frame_AreaCopy(bool IBD, bool BIR, bool BFI, uint8_t cacheID, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
// Write buffer data to the SRAM or Flash
// mem: 0x5A=32KB SRAM, 0xA5=16KB Flash
diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp
index 85353bed28..6c46eb31f1 100644
--- a/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp
+++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.cpp
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.3
- * Date: 2021/08/09
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,17 +15,23 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/08
+ */
+
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(DWIN_CREALITY_LCD_ENHANCED)
#include "../../../inc/MarlinConfig.h"
-#include "../../../core/macros.h"
#include "dwin_lcd.h"
#include "dwinui.h"
@@ -48,7 +55,7 @@ void (*DWINUI::onCursorDraw)(uint8_t line)=nullptr;
void (*DWINUI::onTitleDraw)(TitleClass* title)=nullptr;
void (*DWINUI::onMenuDraw)(MenuClass* menu)=nullptr;
-void DWINUI::Init(void) {
+void DWINUI::init() {
DEBUG_ECHOPGM("\r\nDWIN handshake ");
delay(750); // Delay here or init later in the boot process
const bool success = DWIN_Handshake();
@@ -65,12 +72,12 @@ void DWINUI::Init(void) {
}
// Set text/number font
-void DWINUI::SetFont(uint8_t cfont) {
+void DWINUI::setFont(uint8_t cfont) {
font = cfont;
}
// Get font character width
-uint8_t DWINUI::Get_font_width(uint8_t cfont) {
+uint8_t DWINUI::fontWidth(uint8_t cfont) {
switch (cfont) {
case font6x12 : return 6;
case font8x16 : return 8;
@@ -87,7 +94,7 @@ uint8_t DWINUI::Get_font_width(uint8_t cfont) {
}
// Get font character heigh
-uint8_t DWINUI::Get_font_height(uint8_t cfont) {
+uint8_t DWINUI::fontHeight(uint8_t cfont) {
switch (cfont) {
case font6x12 : return 12;
case font8x16 : return 16;
@@ -105,12 +112,12 @@ uint8_t DWINUI::Get_font_height(uint8_t cfont) {
// Get screen x coodinates from text column
uint16_t DWINUI::ColToX(uint8_t col) {
- return col * Get_font_width(font);
+ return col * fontWidth(font);
}
// Get screen y coodinates from text row
uint16_t DWINUI::RowToY(uint8_t row) {
- return row * Get_font_height(font);
+ return row * fontHeight(font);
}
// Set text/number color
@@ -151,7 +158,7 @@ void DWINUI::MoveBy(xy_int_t point) {
// Draw a Centered string using DWIN_WIDTH
void DWINUI::Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, const char * const string) {
- const int8_t x = _MAX(0U, DWIN_WIDTH - strlen_P(string) * Get_font_width(size)) / 2 - 1;
+ const int8_t x = _MAX(0U, DWIN_WIDTH - strlen_P(string) * fontWidth(size)) / 2 - 1;
DWIN_Draw_String(bShow, size, color, bColor, x, y, string);
}
@@ -159,7 +166,7 @@ void DWINUI::Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint1
void DWINUI::Draw_Char(const char c) {
const char string[2] = { c, 0};
DWIN_Draw_String(false, font, textcolor, backcolor, cursor.x, cursor.y, string, 1);
- MoveBy(Get_font_width(font), 0);
+ MoveBy(fontWidth(font), 0);
}
// Draw a string at cursor position
@@ -168,11 +175,11 @@ void DWINUI::Draw_Char(const char c) {
// rlimit: For draw less chars than string length use rlimit
void DWINUI::Draw_String(const char * const string, uint16_t rlimit) {
DWIN_Draw_String(false, font, textcolor, backcolor, cursor.x, cursor.y, string, rlimit);
- MoveBy(strlen(string) * Get_font_width(font), 0);
+ MoveBy(strlen(string) * fontWidth(font), 0);
}
void DWINUI::Draw_String(uint16_t color, const char * const string, uint16_t rlimit) {
DWIN_Draw_String(false, font, color, backcolor, cursor.x, cursor.y, string, rlimit);
- MoveBy(strlen(string) * Get_font_width(font), 0);
+ MoveBy(strlen(string) * fontWidth(font), 0);
}
// Draw a signed floating point number
@@ -186,14 +193,8 @@ void DWINUI::Draw_String(uint16_t color, const char * const string, uint16_t rli
// x/y: Upper-left point
// value: Float value
void DWINUI::Draw_Signed_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
- if (value < 0) {
- DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, -value);
- DWIN_Draw_String(bShow, size, color, bColor, x - 6, y, F("-"));
- }
- else {
- DWIN_Draw_String(bShow, size, color, bColor, x - 6, y, F(" "));
- DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, value);
- }
+ DWIN_Draw_FloatValue(bShow, zeroFill, zeroMode, size, color, bColor, iNum, fNum, x, y, value < 0 ? -value : value);
+ DWIN_Draw_String(bShow, size, color, bColor, x - 6, y, value < 0 ? F("-") : F(" "));
}
// Draw a circle
@@ -239,7 +240,7 @@ void DWINUI::Draw_FillCircle(uint16_t bcolor, uint16_t x,uint16_t y,uint8_t r) {
// Color Interpolator
// val : Interpolator minv..maxv
// minv : Minimum value
-// maxv : Maximun value
+// maxv : Maximum value
// color1 : Start color
// color2 : End color
uint16_t DWINUI::ColorInt(int16_t val, int16_t minv, int16_t maxv, uint16_t color1, uint16_t color2) {
@@ -255,7 +256,7 @@ uint16_t DWINUI::ColorInt(int16_t val, int16_t minv, int16_t maxv, uint16_t colo
// Color Interpolator through Red->Yellow->Green->Blue
// val : Interpolator minv..maxv
// minv : Minimum value
-// maxv : Maximun value
+// maxv : Maximum value
uint16_t DWINUI::RainbowInt(int16_t val, int16_t minv, int16_t maxv) {
uint8_t B,G,R;
const uint8_t maxB = 28;
@@ -292,7 +293,7 @@ uint16_t DWINUI::RainbowInt(int16_t val, int16_t minv, int16_t maxv) {
// x/y: Upper-left point
// mode : 0 : unchecked, 1 : checked
void DWINUI::Draw_Checkbox(uint16_t color, uint16_t bcolor, uint16_t x, uint16_t y, bool checked=false) {
- DWIN_Draw_String(false, true, font8x16, color, bcolor, x + 4, y, checked ? F("x") : F(" "));
+ DWIN_Draw_String(true, font8x16, color, bcolor, x + 4, y, checked ? F("x") : F(" "));
DWIN_Draw_Rectangle(0, color, x + 2, y + 2, x + 17, y + 17);
}
@@ -332,7 +333,7 @@ MenuItemClass* DWINUI::MenuItemsAdd(MenuItemClass* menuitem) {
TitleClass Title;
-void TitleClass::Draw() {
+void TitleClass::draw() {
if (DWINUI::onTitleDraw != nullptr) (*DWINUI::onTitleDraw)(this);
}
@@ -346,7 +347,7 @@ void TitleClass::SetCaption(const char * const title) {
void TitleClass::ShowCaption(const char * const title) {
SetCaption(title);
- Draw();
+ draw();
}
void TitleClass::SetFrame(uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) {
@@ -361,7 +362,7 @@ void TitleClass::SetFrame(uint16_t x, uint16_t y, uint16_t w, uint16_t h) {
void TitleClass::FrameCopy(uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) {
SetFrame(id, x1, y1, x2, y2);
- Draw();
+ draw();
}
void TitleClass::FrameCopy(uint16_t x, uint16_t y, uint16_t w, uint16_t h) {
@@ -375,11 +376,11 @@ MenuClass::MenuClass() {
topline = 0;
}
-void MenuClass::Draw() {
- MenuTitle.Draw();
+void MenuClass::draw() {
+ MenuTitle.draw();
if (DWINUI::onMenuDraw != nullptr) (*DWINUI::onMenuDraw)(this);
for (uint8_t i = 0; i < MenuItemCount; i++)
- MenuItems[i]->Draw(i - topline);
+ MenuItems[i]->draw(i - topline);
if (DWINUI::onCursorDraw != nullptr) DWINUI::onCursorDraw(line());
DWIN_UpdateLCD();
}
@@ -393,12 +394,12 @@ void MenuClass::onScroll(bool dir) {
if ((sel - topline) == TROWS) {
DWIN_Frame_AreaMove(1, DWIN_SCROLL_UP, MLINE, DWINUI::backcolor, 0, TITLE_HEIGHT + 1, DWIN_WIDTH, STATUS_Y - 1);
topline++;
- MenuItems[sel]->Draw(TROWS - 1);
+ MenuItems[sel]->draw(TROWS - 1);
}
if ((sel < topline)) {
DWIN_Frame_AreaMove(1, DWIN_SCROLL_DOWN, MLINE, DWINUI::backcolor, 0, TITLE_HEIGHT + 1, DWIN_WIDTH, STATUS_Y - 1);
topline--;
- MenuItems[sel]->Draw(0);
+ MenuItems[sel]->draw(0);
}
selected = sel;
if (DWINUI::onCursorDraw != nullptr) DWINUI::onCursorDraw(line());
@@ -440,7 +441,7 @@ void MenuItemClass::SetFrame(uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2,
frame = { x1, y1, x2, y2 };
}
-void MenuItemClass::Draw(int8_t line) {
+void MenuItemClass::draw(int8_t line) {
if (line < 0 || line >= TROWS) return;
if (onDraw != nullptr) (*onDraw)(this, line);
};
diff --git a/Marlin/src/lcd/e3v2/enhanced/dwinui.h b/Marlin/src/lcd/e3v2/enhanced/dwinui.h
index 1ec51bec22..8cbb66fdf0 100644
--- a/Marlin/src/lcd/e3v2/enhanced/dwinui.h
+++ b/Marlin/src/lcd/e3v2/enhanced/dwinui.h
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.3
- * Date: 2021/08/09
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,117 +15,26 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#pragma once
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/08
+ */
+
#include "../../../core/types.h"
#include "dwin_lcd.h"
-
-// ICON ID
-#define ICON 7 // Icon set file 7.ICO
-
-#define ICON_LOGO 0
-#define ICON_Print_0 1
-#define ICON_Print_1 2
-#define ICON_Prepare_0 3
-#define ICON_Prepare_1 4
-#define ICON_Control_0 5
-#define ICON_Control_1 6
-#define ICON_Leveling_0 7
-#define ICON_Leveling_1 8
-#define ICON_HotendTemp 9
-#define ICON_BedTemp 10
-#define ICON_Speed 11
-#define ICON_Zoffset 12
-#define ICON_Back 13
-#define ICON_File 14
-#define ICON_PrintTime 15
-#define ICON_RemainTime 16
-#define ICON_Setup_0 17
-#define ICON_Setup_1 18
-#define ICON_Pause_0 19
-#define ICON_Pause_1 20
-#define ICON_Continue_0 21
-#define ICON_Continue_1 22
-#define ICON_Stop_0 23
-#define ICON_Stop_1 24
-#define ICON_Bar 25
-#define ICON_More 26
-
-#define ICON_Axis 27
-#define ICON_CloseMotor 28
-#define ICON_Homing 29
-#define ICON_SetHome 30
-#define ICON_PLAPreheat 31
-#define ICON_ABSPreheat 32
-#define ICON_Cool 33
-#define ICON_Language 34
-
-#define ICON_MoveX 35
-#define ICON_MoveY 36
-#define ICON_MoveZ 37
-#define ICON_Extruder 38
-
-#define ICON_Temperature 40
-#define ICON_Motion 41
-#define ICON_WriteEEPROM 42
-#define ICON_ReadEEPROM 43
-#define ICON_ResumeEEPROM 44
-#define ICON_Info 45
-
-#define ICON_SetEndTemp 46
-#define ICON_SetBedTemp 47
-#define ICON_FanSpeed 48
-#define ICON_SetPLAPreheat 49
-#define ICON_SetABSPreheat 50
-
-#define ICON_MaxSpeed 51
-#define ICON_MaxAccelerated 52
-#define ICON_MaxJerk 53
-#define ICON_Step 54
-#define ICON_PrintSize 55
-#define ICON_Version 56
-#define ICON_Contact 57
-#define ICON_StockConfiguration 58
-#define ICON_MaxSpeedX 59
-#define ICON_MaxSpeedY 60
-#define ICON_MaxSpeedZ 61
-#define ICON_MaxSpeedE 62
-#define ICON_MaxAccX 63
-#define ICON_MaxAccY 64
-#define ICON_MaxAccZ 65
-#define ICON_MaxAccE 66
-#define ICON_MaxSpeedJerkX 67
-#define ICON_MaxSpeedJerkY 68
-#define ICON_MaxSpeedJerkZ 69
-#define ICON_MaxSpeedJerkE 70
-#define ICON_StepX 71
-#define ICON_StepY 72
-#define ICON_StepZ 73
-#define ICON_StepE 74
-#define ICON_Setspeed 75
-#define ICON_SetZOffset 76
-#define ICON_Rectangle 77
-#define ICON_BLTouch 78
-#define ICON_TempTooLow 79
-#define ICON_AutoLeveling 80
-#define ICON_TempTooHigh 81
-#define ICON_NoTips_C 82
-#define ICON_NoTips_E 83
-#define ICON_Continue_C 84
-#define ICON_Continue_E 85
-#define ICON_Cancel_C 86
-#define ICON_Cancel_E 87
-#define ICON_Confirm_C 88
-#define ICON_Confirm_E 89
-#define ICON_Info_0 90
-#define ICON_Info_1 91
+#include "../common/dwin_set.h"
+#include "../common/dwin_font.h"
+#include "../common/dwin_color.h"
// Extra Icons
-#define ICON_AdvSet ICON_Language
#define ICON_Brightness ICON_Motion
#define ICON_Cancel ICON_StockConfiguration
#define ICON_CustomPreheat ICON_SetEndTemp
@@ -135,24 +45,16 @@
#define ICON_FilSet ICON_ResumeEEPROM
#define ICON_FilUnload ICON_ReadEEPROM
#define ICON_Flow ICON_StepE
-#define ICON_HomeOffset ICON_AdvSet
-#define ICON_HomeOffsetX ICON_StepX
-#define ICON_HomeOffsetY ICON_StepY
-#define ICON_HomeOffsetZ ICON_StepZ
#define ICON_LevBed ICON_SetEndTemp
#define ICON_Lock ICON_Cool
#define ICON_ManualMesh ICON_HotendTemp
#define ICON_MeshNext ICON_Axis
#define ICON_MeshSave ICON_WriteEEPROM
+#define ICON_MeshViewer ICON_HotendTemp
#define ICON_MoveZ0 ICON_HotendTemp
#define ICON_Park ICON_Motion
-#define ICON_PIDbed ICON_SetBedTemp
#define ICON_PIDcycles ICON_ResumeEEPROM
-#define ICON_PIDNozzle ICON_SetEndTemp
#define ICON_PIDValue ICON_Contact
-#define ICON_ProbeOffsetX ICON_StepX
-#define ICON_ProbeOffsetY ICON_StepY
-#define ICON_ProbeOffsetZ ICON_StepZ
#define ICON_ProbeSet ICON_SetEndTemp
#define ICON_ProbeTest ICON_SetEndTemp
#define ICON_Pwrlossr ICON_Motion
@@ -162,47 +64,6 @@
#define ICON_SetCustomPreheat ICON_SetEndTemp
#define ICON_Sound ICON_Cool
-/**
- * 3-.0:The font size, 0x00-0x09, corresponds to the font size below:
- * 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28
- * 0x05=16*32 0x06=20*40 0x07=24*48 0x08=28*56 0x09=32*64
- */
-#define font6x12 0x00
-#define font8x16 0x01
-#define font10x20 0x02
-#define font12x24 0x03
-#define font14x28 0x04
-#define font16x32 0x05
-#define font20x40 0x06
-#define font24x48 0x07
-#define font28x56 0x08
-#define font32x64 0x09
-
-// Extended and default UI Colors
-#define RGB(R,G,B) (R << 11) | (G << 5) | (B) // R,B: 0..31; G: 0..63
-#define GetRColor(color) ((color >> 11) & 0x1F)
-#define GetGColor(color) ((color >> 5) & 0x3F)
-#define GetBColor(color) ((color >> 0) & 0x1F)
-
-#define Color_White 0xFFFF
-#define Color_Bg_Window 0x31E8 // Popup background color
-#define Color_Bg_Blue 0x1125 // Dark blue background color
-#define Color_Bg_Black 0x0841 // Black background color
-#define Color_Bg_Red 0xF00F // Red background color
-#define Popup_Text_Color 0xD6BA // Popup font background color
-#define Line_Color 0x3A6A // Split line color
-#define Rectangle_Color 0xEE2F // Blue square cursor color
-#define Percent_Color 0xFE29 // Percentage color
-#define BarFill_Color 0x10E4 // Fill color of progress bar
-#define Select_Color 0x33BB // Selected color
-
-#define Color_Black 0
-#define Color_Red RGB(31,0,0)
-#define Color_Yellow RGB(31,63,0)
-#define Color_Green RGB(0,63,0)
-#define Color_Aqua RGB(0,63,31)
-#define Color_Blue RGB(0,0,31)
-
// Default UI Colors
#define Def_Background_Color Color_Bg_Black
#define Def_Cursor_color Rectangle_Color
@@ -223,7 +84,7 @@
#define Def_Indicator_Color Color_White
#define Def_Coordinate_Color Color_White
-//UI elements defines and constants
+// UI element defines and constants
#define DWIN_FONT_MENU font8x16
#define DWIN_FONT_STAT font10x20
#define DWIN_FONT_HEAD font10x20
@@ -262,11 +123,11 @@ public:
char caption[32] = "";
uint8_t frameid = 0;
rect_t frame = {0};
- void Draw();
+ void draw();
void SetCaption(const char * const title);
- inline void SetCaption(const __FlashStringHelper * title) { SetCaption((char *)title); }
+ inline void SetCaption(FSTR_P title) { SetCaption((char *)title); }
void ShowCaption(const char * const title);
- inline void ShowCaption(const __FlashStringHelper * title) { ShowCaption((char *)title); }
+ inline void ShowCaption(FSTR_P title) { ShowCaption((char *)title); }
void SetFrame(uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
void SetFrame(uint16_t x, uint16_t y, uint16_t w, uint16_t h);
void FrameCopy(uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
@@ -286,11 +147,11 @@ public:
void (*onClick)() = nullptr;
MenuItemClass() {};
MenuItemClass(uint8_t cicon, const char * const text=nullptr, void (*ondraw)(MenuItemClass* menuitem, int8_t line)=nullptr, void (*onclick)()=nullptr);
- MenuItemClass(uint8_t cicon, const __FlashStringHelper * text = nullptr, void (*ondraw)(MenuItemClass* menuitem, int8_t line)=nullptr, void (*onclick)()=nullptr) : MenuItemClass(cicon, (char*)text, ondraw, onclick){}
+ MenuItemClass(uint8_t cicon, FSTR_P text = nullptr, void (*ondraw)(MenuItemClass* menuitem, int8_t line)=nullptr, void (*onclick)()=nullptr) : MenuItemClass(cicon, FTOP(text), ondraw, onclick){}
MenuItemClass(uint8_t cicon, uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, void (*ondraw)(MenuItemClass* menuitem, int8_t line)=nullptr, void (*onclick)()=nullptr);
void SetFrame(uint8_t id, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
virtual ~MenuItemClass(){};
- virtual void Draw(int8_t line);
+ virtual void draw(int8_t line);
};
class MenuItemPtrClass: public MenuItemClass {
@@ -298,7 +159,7 @@ public:
void *value = nullptr;
using MenuItemClass::MenuItemClass;
MenuItemPtrClass(uint8_t cicon, const char * const text, void (*ondraw)(MenuItemClass* menuitem, int8_t line), void (*onclick)(), void* val);
- MenuItemPtrClass(uint8_t cicon, const __FlashStringHelper * text, void (*ondraw)(MenuItemClass* menuitem, int8_t line), void (*onclick)(), void* val) : MenuItemPtrClass(cicon, (char*)text, ondraw, onclick, val){}
+ MenuItemPtrClass(uint8_t cicon, FSTR_P text, void (*ondraw)(MenuItemClass* menuitem, int8_t line), void (*onclick)(), void* val) : MenuItemPtrClass(cicon, FTOP(text), ondraw, onclick, val){}
};
class MenuClass {
@@ -310,7 +171,7 @@ public:
virtual ~MenuClass(){};
inline int8_t line() { return selected - topline; };
inline int8_t line(uint8_t pos) {return pos - topline; };
- void Draw();
+ void draw();
void onScroll(bool dir);
void onClick();
MenuItemClass* SelectedItem();
@@ -330,16 +191,16 @@ namespace DWINUI {
extern void (*onMenuDraw)(MenuClass* menu);
// DWIN LCD Initialization
- void Init(void);
+ void init();
// Set text/number font
- void SetFont(uint8_t cfont);
+ void setFont(uint8_t cfont);
// Get font character width
- uint8_t Get_font_width(uint8_t cfont);
+ uint8_t fontWidth(uint8_t cfont);
// Get font character heigh
- uint8_t Get_font_height(uint8_t cfont);
+ uint8_t fontHeight(uint8_t cfont);
// Get screen x coodinates from text column
uint16_t ColToX(uint8_t col);
@@ -398,7 +259,7 @@ namespace DWINUI {
}
inline void Draw_Int(uint8_t iNum, long value) {
DWIN_Draw_IntValue(false, true, 0, font, textcolor, backcolor, iNum, cursor.x, cursor.y, value);
- MoveBy(iNum * Get_font_width(font), 0);
+ MoveBy(iNum * fontWidth(font), 0);
}
inline void Draw_Int(uint8_t iNum, uint16_t x, uint16_t y, long value) {
DWIN_Draw_IntValue(false, true, 0, font, textcolor, backcolor, iNum, x, y, value);
@@ -429,7 +290,7 @@ namespace DWINUI {
}
inline void Draw_Float(uint8_t iNum, uint8_t fNum, float value) {
DWIN_Draw_FloatValue(false, true, 0, font, textcolor, backcolor, iNum, fNum, cursor.x, cursor.y, value);
- MoveBy((iNum + fNum + 1) * Get_font_width(font), 0);
+ MoveBy((iNum + fNum + 1) * fontWidth(font), 0);
}
inline void Draw_Float(uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
DWIN_Draw_FloatValue(false, true, 0, font, textcolor, backcolor, iNum, fNum, x, y, value);
@@ -457,7 +318,7 @@ namespace DWINUI {
void Draw_Signed_Float(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color, uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value);
inline void Draw_Signed_Float(uint8_t iNum, uint8_t fNum, float value) {
Draw_Signed_Float(false, true, 0, font, textcolor, backcolor, iNum, fNum, cursor.x, cursor.y, value);
- MoveBy((iNum + fNum + 1) * Get_font_width(font), 0);
+ MoveBy((iNum + fNum + 1) * fontWidth(font), 0);
}
inline void Draw_Signed_Float(uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, float value) {
Draw_Signed_Float(false, true, 0, font, textcolor, backcolor, iNum, fNum, x, y, value);
@@ -491,25 +352,25 @@ namespace DWINUI {
inline void Draw_String(uint16_t x, uint16_t y, const char * const string) {
DWIN_Draw_String(false, font, textcolor, backcolor, x, y, string);
}
- inline void Draw_String(uint16_t x, uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_String(uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(false, font, textcolor, backcolor, x, y, (char *)title);
}
inline void Draw_String(uint16_t color, uint16_t x, uint16_t y, const char * const string) {
DWIN_Draw_String(false, font, color, backcolor, x, y, string);
}
- inline void Draw_String(uint16_t color, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_String(uint16_t color, uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(false, font, color, backcolor, x, y, (char *)title);
}
inline void Draw_String(uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const char * const string) {
DWIN_Draw_String(true, font, color, bgcolor, x, y, string);
}
- inline void Draw_String(uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_String(uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(true, font, color, bgcolor, x, y, (char *)title);
}
inline void Draw_String(uint8_t size, uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const char * const string) {
DWIN_Draw_String(true, size, color, bgcolor, x, y, string);
}
- inline void Draw_String(uint8_t size, uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_String(uint8_t size, uint16_t color, uint16_t bgcolor, uint16_t x, uint16_t y, FSTR_P title) {
DWIN_Draw_String(true, size, color, bgcolor, x, y, (char *)title);
}
@@ -521,7 +382,7 @@ namespace DWINUI {
// y: Upper coordinate of the string
// *string: The string
void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, const char * const string);
- inline void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_CenteredString(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t y, FSTR_P title) {
Draw_CenteredString(bShow, size, color, bColor, y, (char *)title);
}
inline void Draw_CenteredString(uint16_t color, uint16_t bcolor, uint16_t y, const char * const string) {
@@ -530,25 +391,25 @@ namespace DWINUI {
inline void Draw_CenteredString(uint8_t size, uint16_t color, uint16_t y, const char * const string) {
Draw_CenteredString(false, size, color, backcolor, y, string);
}
- inline void Draw_CenteredString(uint8_t size, uint16_t color, uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_CenteredString(uint8_t size, uint16_t color, uint16_t y, FSTR_P title) {
Draw_CenteredString(false, size, color, backcolor, y, (char *)title);
}
inline void Draw_CenteredString(uint16_t color, uint16_t y, const char * const string) {
Draw_CenteredString(false, font, color, backcolor, y, string);
}
- inline void Draw_CenteredString(uint16_t color, uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_CenteredString(uint16_t color, uint16_t y, FSTR_P title) {
Draw_CenteredString(false, font, color, backcolor, y, (char *)title);
}
inline void Draw_CenteredString(uint16_t y, const char * const string) {
Draw_CenteredString(false, font, textcolor, backcolor, y, string);
}
- inline void Draw_CenteredString(uint16_t y, const __FlashStringHelper *title) {
+ inline void Draw_CenteredString(uint16_t y, FSTR_P title) {
Draw_CenteredString(false, font, textcolor, backcolor, y, (char *)title);
}
// Draw a circle
// Color: circle color
- // x: the abscissa of the center of the circle
+ // x: abscissa of the center of the circle
// y: ordinate of the center of the circle
// r: circle radius
void Draw_Circle(uint16_t color, uint16_t x,uint16_t y,uint8_t r);
@@ -569,7 +430,7 @@ namespace DWINUI {
// Color Interpolator
// val : Interpolator minv..maxv
// minv : Minimum value
- // maxv : Maximun value
+ // maxv : Maximum value
// color1 : Start color
// color2 : End color
uint16_t ColorInt(int16_t val, int16_t minv, int16_t maxv, uint16_t color1, uint16_t color2);
@@ -578,7 +439,7 @@ namespace DWINUI {
// Draw a circle filled with color
// bcolor: fill color
- // x: the abscissa of the center of the circle
+ // x: abscissa of the center of the circle
// y: ordinate of the center of the circle
// r: circle radius
void Draw_FillCircle(uint16_t bcolor, uint16_t x,uint16_t y,uint8_t r);
@@ -589,7 +450,7 @@ namespace DWINUI {
// Color Interpolator through Red->Yellow->Green->Blue
// val : Interpolator minv..maxv
// minv : Minimum value
- // maxv : Maximun value
+ // maxv : Maximum value
uint16_t RainbowInt(int16_t val, int16_t minv, int16_t maxv);
// Write buffer data to the SRAM
diff --git a/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp b/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp
index 2615a05881..ca772184f1 100644
--- a/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp
+++ b/Marlin/src/lcd/e3v2/enhanced/lockscreen.cpp
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,11 +15,18 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/08
+ */
+
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(DWIN_CREALITY_LCD_ENHANCED)
@@ -29,15 +37,18 @@
#include "dwin.h"
#include "lockscreen.h"
-LockScreenClass LockScreen;
+LockScreenClass lockScreen;
-void LockScreenClass::Init() {
- Lock_Pos = 0;
+uint8_t LockScreenClass::lock_pos = 0;
+bool LockScreenClass::unlocked = false;
+
+void LockScreenClass::init() {
+ lock_pos = 0;
unlocked = false;
- Draw();
+ draw();
}
-void LockScreenClass::Draw() {
+void LockScreenClass::draw() {
Title.SetCaption(PSTR("Lock Screen"));
DWINUI::ClearMenuArea();
DWINUI::Draw_Icon(ICON_LOGO, 71, 120); // CREALITY logo
@@ -45,25 +56,20 @@ void LockScreenClass::Draw() {
DWINUI::Draw_CenteredString(Color_White, 200, F("Scroll to unlock."));
DWINUI::Draw_CenteredString(Color_White, 240, F("-> | <-"));
DWIN_Draw_Box(1, HMI_data.Barfill_Color, 0, 260, DWIN_WIDTH, 20);
- DWIN_Draw_VLine(Color_Yellow, Lock_Pos * DWIN_WIDTH / 255, 260, 20);
+ DWIN_Draw_VLine(Color_Yellow, lock_pos * DWIN_WIDTH / 255, 260, 20);
DWIN_UpdateLCD();
}
-void LockScreenClass::onEncoderState(ENCODER_DiffState encoder_diffState) {
- if (encoder_diffState == ENCODER_DIFF_CW) {
- Lock_Pos += 8;
- }
- else if (encoder_diffState == ENCODER_DIFF_CCW) {
- Lock_Pos -= 8;
- }
- else if (encoder_diffState == ENCODER_DIFF_ENTER) {
- unlocked = (Lock_Pos == 128);
+void LockScreenClass::onEncoder(EncoderState encoder_diffState) {
+ switch (encoder_diffState) {
+ case ENCODER_DIFF_CW: lock_pos += 8; break;
+ case ENCODER_DIFF_CCW: lock_pos -= 8; break;
+ case ENCODER_DIFF_ENTER: unlocked = (lock_pos == 128); break;
+ default: break;
}
DWIN_Draw_Box(1, HMI_data.Barfill_Color, 0, 260, DWIN_WIDTH, 20);
- DWIN_Draw_VLine(Color_Yellow, Lock_Pos * DWIN_WIDTH / 255, 260, 20);
+ DWIN_Draw_VLine(Color_Yellow, lock_pos * DWIN_WIDTH / 255, 260, 20);
DWIN_UpdateLCD();
}
-bool LockScreenClass::isUnlocked() { return unlocked; }
-
#endif // DWIN_CREALITY_LCD_ENHANCED
diff --git a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h b/Marlin/src/lcd/e3v2/enhanced/lockscreen.h
index 32a0cc3e5a..f0c4c1fde8 100644
--- a/Marlin/src/lcd/e3v2/enhanced/lockscreen.h
+++ b/Marlin/src/lcd/e3v2/enhanced/lockscreen.h
@@ -1,12 +1,13 @@
/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,22 +15,31 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU Lesser General Public License
+ * You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#pragma once
-#include "../../../core/types.h"
+/**
+ * DWIN UI Enhanced implementation
+ * Author: Miguel A. Risco-Castillo
+ * Version: 3.6.3
+ * Date: 2021/09/08
+ */
+
+#include "../common/encoder.h"
+#include
class LockScreenClass {
private:
- uint8_t Lock_Pos = 0;
- bool unlocked = false;
+ static bool unlocked;
+ static uint8_t lock_pos;
public:
- void Init();
- void onEncoderState(ENCODER_DiffState encoder_diffState);
- void Draw();
- bool isUnlocked();
+ static void init();
+ static void onEncoder(EncoderState encoder_diffState);
+ static void draw();
+ static inline bool isUnlocked() { return unlocked; }
};
-extern LockScreenClass LockScreen;
+
+extern LockScreenClass lockScreen;
diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp
new file mode 100644
index 0000000000..d874db79ca
--- /dev/null
+++ b/Marlin/src/lcd/e3v2/enhanced/meshviewer.cpp
@@ -0,0 +1,75 @@
+/**
+ * DWIN Mesh Viewer
+ * Author: Miguel A. Risco-Castillo
+ * version: 2.5
+ * Date: 2021/09/27
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "../../../inc/MarlinConfigPre.h"
+
+#if BOTH(DWIN_CREALITY_LCD_ENHANCED, HAS_MESH)
+
+#include "meshviewer.h"
+
+#include "../../../core/types.h"
+#include "../../marlinui.h"
+#include "dwin_lcd.h"
+#include "dwinui.h"
+#include "dwin.h"
+#include "../../../feature/bedlevel/bedlevel.h"
+
+MeshViewerClass MeshViewer;
+
+void MeshViewerClass::Draw() {
+ const int8_t mx = 30, my = 30; // Margins
+ const int16_t stx = (DWIN_WIDTH - 2 * mx) / (GRID_MAX_POINTS_X - 1), // Steps
+ sty = (DWIN_WIDTH - 2 * my) / (GRID_MAX_POINTS_Y - 1);
+ int8_t zmesh[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y], maxz =-127, minz = 127;
+ #define px(xp) (mx + (xp) * stx)
+ #define py(yp) (30 + DWIN_WIDTH - my - (yp) * sty)
+ #define rm(z) ((((z) - minz) * 10 / _MAX(1, (maxz - minz))) + 10)
+ #define DrawMeshValue(xp, yp, zv) DWINUI::Draw_Signed_Float(font6x12, 1, 2, px(xp) - 12, py(yp) - 6, zv)
+ #define DrawMeshHLine(yp) DWIN_Draw_HLine(HMI_data.SplitLine_Color, px(0), py(yp), DWIN_WIDTH - 2 * mx)
+ #define DrawMeshVLine(xp) DWIN_Draw_VLine(HMI_data.SplitLine_Color, px(xp), py(GRID_MAX_POINTS_Y - 1), DWIN_WIDTH - 2 * my)
+ GRID_LOOP(x, y) {
+ const float v = Z_VALUES(x,y) * 100;
+ zmesh[x][y] = v;
+ NOLESS(maxz, v);
+ NOMORE(minz, v);
+ }
+ Title.ShowCaption(F("Mesh viewer"));
+ DWINUI::ClearMenuArea();
+ DWINUI::Draw_Icon(ICON_Continue_E, 86, 305);
+ DWIN_Draw_Rectangle(0, HMI_data.SplitLine_Color, px(0), py(0), px(GRID_MAX_POINTS_X - 1), py(GRID_MAX_POINTS_Y - 1));
+ LOOP_S_L_N(x, 1, GRID_MAX_POINTS_X - 1) DrawMeshVLine(x);
+ LOOP_S_L_N(y, 1, GRID_MAX_POINTS_Y - 1) DrawMeshHLine(y);
+ LOOP_L_N(y, GRID_MAX_POINTS_Y) {
+ watchdog_refresh();
+ LOOP_L_N(x, GRID_MAX_POINTS_X) {
+ uint16_t color = DWINUI::RainbowInt(zmesh[x][y], _MIN(-5, minz), _MAX(5, maxz));
+ DWINUI::Draw_FillCircle(color, px(x), py(y), rm(zmesh[x][y]));
+ DrawMeshValue(x, y, Z_VALUES(x,y));
+ }
+ }
+ char str_1[6], str_2[6] = "";
+ ui.status_printf(0, F("Mesh minZ: %s, maxZ: %s"),
+ dtostrf((float)minz / 100, 1, 2, str_1),
+ dtostrf((float)maxz / 100, 1, 2, str_2)
+ );
+}
+
+#endif // DWIN_CREALITY_LCD_ENHANCED && HAS_MESH
diff --git a/Marlin/src/lcd/e3v2/enhanced/meshviewer.h b/Marlin/src/lcd/e3v2/enhanced/meshviewer.h
new file mode 100644
index 0000000000..4f7a6ae1d2
--- /dev/null
+++ b/Marlin/src/lcd/e3v2/enhanced/meshviewer.h
@@ -0,0 +1,28 @@
+/**
+ * DWIN Mesh Viewer
+ * Author: Miguel A. Risco-Castillo
+ * version: 2.5
+ * Date: 2021/09/27
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+class MeshViewerClass {
+public:
+ void Draw();
+};
+
+extern MeshViewerClass MeshViewer;
diff --git a/Marlin/src/lcd/e3v2/enhanced/rotary_encoder.cpp b/Marlin/src/lcd/e3v2/enhanced/rotary_encoder.cpp
deleted file mode 100644
index de478f79f4..0000000000
--- a/Marlin/src/lcd/e3v2/enhanced/rotary_encoder.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see .
- *
- */
-
-/*****************************************************************************
- * @file lcd/e3v2/enhanced/rotary_encoder.cpp
- * @author LEO / Creality3D
- * @date 2019/07/06
- * @version 2.0.1
- * @brief Rotary encoder functions
- *****************************************************************************/
-
-#include "../../../inc/MarlinConfigPre.h"
-
-#if ENABLED(DWIN_CREALITY_LCD_ENHANCED)
-
-#include "rotary_encoder.h"
-#include "../../buttons.h"
-
-#include "../../../MarlinCore.h"
-#include "../../../HAL/shared/Delay.h"
-
-#if HAS_BUZZER
- #include "../../../libs/buzzer.h"
-#endif
-
-#include
-
-#ifndef ENCODER_PULSES_PER_STEP
- #define ENCODER_PULSES_PER_STEP 4
-#endif
-
-#if ENABLED(SOUND_MENU_ITEM)
- #include "../../marlinui.h"
-#endif
-
-ENCODER_Rate EncoderRate;
-
-// Buzzer
-void Encoder_tick() {
- #if PIN_EXISTS(BEEPER)
- if (TERN1(SOUND_MENU_ITEM, ui.buzzer_enabled)) {
- WRITE(BEEPER_PIN, HIGH);
- delay(10);
- WRITE(BEEPER_PIN, LOW);
- }
- #endif
-}
-
-// Encoder initialization
-void Encoder_Configuration() {
- #if BUTTON_EXISTS(EN1)
- SET_INPUT_PULLUP(BTN_EN1);
- #endif
- #if BUTTON_EXISTS(EN2)
- SET_INPUT_PULLUP(BTN_EN2);
- #endif
- #if BUTTON_EXISTS(ENC)
- SET_INPUT_PULLUP(BTN_ENC);
- #endif
- #if PIN_EXISTS(BEEPER)
- SET_OUTPUT(BEEPER_PIN);
- #endif
-}
-
-// Analyze encoder value and return state
-ENCODER_DiffState Encoder_ReceiveAnalyze() {
- const millis_t now = millis();
- static uint8_t lastEncoderBits;
- uint8_t newbutton = 0;
- static signed char temp_diff = 0;
-
- ENCODER_DiffState temp_diffState = ENCODER_DIFF_NO;
- if (BUTTON_PRESSED(EN1)) newbutton |= EN_A;
- if (BUTTON_PRESSED(EN2)) newbutton |= EN_B;
- if (BUTTON_PRESSED(ENC)) {
- static millis_t next_click_update_ms;
- if (ELAPSED(now, next_click_update_ms)) {
- next_click_update_ms = millis() + 300;
- Encoder_tick();
- #if PIN_EXISTS(LCD_LED)
- //LED_Action();
- #endif
- const bool was_waiting = wait_for_user;
- wait_for_user = false;
- return was_waiting ? ENCODER_DIFF_NO : ENCODER_DIFF_ENTER;
- }
- else return ENCODER_DIFF_NO;
- }
- if (newbutton != lastEncoderBits) {
- switch (newbutton) {
- case ENCODER_PHASE_0:
- if (lastEncoderBits == ENCODER_PHASE_3) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_1) temp_diff--;
- break;
- case ENCODER_PHASE_1:
- if (lastEncoderBits == ENCODER_PHASE_0) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_2) temp_diff--;
- break;
- case ENCODER_PHASE_2:
- if (lastEncoderBits == ENCODER_PHASE_1) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_3) temp_diff--;
- break;
- case ENCODER_PHASE_3:
- if (lastEncoderBits == ENCODER_PHASE_2) temp_diff++;
- else if (lastEncoderBits == ENCODER_PHASE_0) temp_diff--;
- break;
- }
- lastEncoderBits = newbutton;
- }
-
- if (ABS(temp_diff) >= ENCODER_PULSES_PER_STEP) {
- if (temp_diff > 0) temp_diffState = ENCODER_DIFF_CW;
- else temp_diffState = ENCODER_DIFF_CCW;
-
- #if ENABLED(ENCODER_RATE_MULTIPLIER)
-
- millis_t ms = millis();
- int32_t encoderMultiplier = 1;
-
- // if must encoder rati multiplier
- if (EncoderRate.enabled) {
- const float abs_diff = ABS(temp_diff),
- encoderMovementSteps = abs_diff / (ENCODER_PULSES_PER_STEP);
- if (EncoderRate.lastEncoderTime) {
- // Note that the rate is always calculated between two passes through the
- // loop and that the abs of the temp_diff value is tracked.
- const float encoderStepRate = encoderMovementSteps / float(ms - EncoderRate.lastEncoderTime) * 1000;
- if (encoderStepRate >= ENCODER_100X_STEPS_PER_SEC) encoderMultiplier = 100;
- else if (encoderStepRate >= ENCODER_10X_STEPS_PER_SEC) encoderMultiplier = 10;
- #if ENCODER_5X_STEPS_PER_SEC
- else if (encoderStepRate >= ENCODER_5X_STEPS_PER_SEC) encoderMultiplier = 5;
- #endif
- }
- EncoderRate.lastEncoderTime = ms;
- }
-
- #else
-
- constexpr int32_t encoderMultiplier = 1;
-
- #endif
-
- // EncoderRate.encoderMoveValue += (temp_diff * encoderMultiplier) / (ENCODER_PULSES_PER_STEP);
- EncoderRate.encoderMoveValue = (temp_diff * encoderMultiplier) / (ENCODER_PULSES_PER_STEP);
- if (EncoderRate.encoderMoveValue < 0) EncoderRate.encoderMoveValue = -EncoderRate.encoderMoveValue;
-
- temp_diff = 0;
- }
- return temp_diffState;
-}
-
-#if PIN_EXISTS(LCD_LED)
-
- // Take the low 24 valid bits 24Bit: G7 G6 G5 G4 G3 G2 G1 G0 R7 R6 R5 R4 R3 R2 R1 R0 B7 B6 B5 B4 B3 B2 B1 B0
- uint16_t LED_DataArray[LED_NUM];
-
- // LED light operation
- void LED_Action() {
- LED_Control(RGB_SCALE_WARM_WHITE,0x0F);
- delay(30);
- LED_Control(RGB_SCALE_WARM_WHITE,0x00);
- }
-
- // LED initialization
- void LED_Configuration() {
- SET_OUTPUT(LCD_LED_PIN);
- }
-
- // LED write data
- void LED_WriteData() {
- uint8_t tempCounter_LED, tempCounter_Bit;
- for (tempCounter_LED = 0; tempCounter_LED < LED_NUM; tempCounter_LED++) {
- for (tempCounter_Bit = 0; tempCounter_Bit < 24; tempCounter_Bit++) {
- if (LED_DataArray[tempCounter_LED] & (0x800000 >> tempCounter_Bit)) {
- LED_DATA_HIGH;
- DELAY_NS(300);
- LED_DATA_LOW;
- DELAY_NS(200);
- }
- else {
- LED_DATA_HIGH;
- LED_DATA_LOW;
- DELAY_NS(200);
- }
- }
- }
- }
-
- // LED control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- void LED_Control(const uint8_t RGB_Scale, const uint8_t luminance) {
- for (uint8_t i = 0; i < LED_NUM; i++) {
- LED_DataArray[i] = 0;
- switch (RGB_Scale) {
- case RGB_SCALE_R10_G7_B5: LED_DataArray[i] = (luminance * 10/10) << 8 | (luminance * 7/10) << 16 | luminance * 5/10; break;
- case RGB_SCALE_R10_G7_B4: LED_DataArray[i] = (luminance * 10/10) << 8 | (luminance * 7/10) << 16 | luminance * 4/10; break;
- case RGB_SCALE_R10_G8_B7: LED_DataArray[i] = (luminance * 10/10) << 8 | (luminance * 8/10) << 16 | luminance * 7/10; break;
- }
- }
- LED_WriteData();
- }
-
- // LED gradient control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- // change_Time: gradient time (ms)
- void LED_GraduallyControl(const uint8_t RGB_Scale, const uint8_t luminance, const uint16_t change_Interval) {
- struct { uint8_t g, r, b; } led_data[LED_NUM];
- for (uint8_t i = 0; i < LED_NUM; i++) {
- switch (RGB_Scale) {
- case RGB_SCALE_R10_G7_B5:
- led_data[i] = { luminance * 7/10, luminance * 10/10, luminance * 5/10 };
- break;
- case RGB_SCALE_R10_G7_B4:
- led_data[i] = { luminance * 7/10, luminance * 10/10, luminance * 4/10 };
- break;
- case RGB_SCALE_R10_G8_B7:
- led_data[i] = { luminance * 8/10, luminance * 10/10, luminance * 7/10 };
- break;
- }
- }
-
- struct { bool g, r, b; } led_flag = { false, false, false };
- for (uint8_t i = 0; i < LED_NUM; i++) {
- while (1) {
- const uint8_t g = uint8_t(LED_DataArray[i] >> 16),
- r = uint8_t(LED_DataArray[i] >> 8),
- b = uint8_t(LED_DataArray[i]);
- if (g == led_data[i].g) led_flag.g = true;
- else LED_DataArray[i] += (g > led_data[i].g) ? -0x010000 : 0x010000;
- if (r == led_data[i].r) led_flag.r = true;
- else LED_DataArray[i] += (r > led_data[i].r) ? -0x000100 : 0x000100;
- if (b == led_data[i].b) led_flag.b = true;
- else LED_DataArray[i] += (b > led_data[i].b) ? -0x000001 : 0x000001;
- LED_WriteData();
- if (led_flag.r && led_flag.g && led_flag.b) break;
- delay(change_Interval);
- }
- }
- }
-
-#endif // LCD_LED
-
-#endif // DWIN_CREALITY_LCD_ENHANCED
diff --git a/Marlin/src/lcd/e3v2/enhanced/rotary_encoder.h b/Marlin/src/lcd/e3v2/enhanced/rotary_encoder.h
deleted file mode 100644
index c500cfe5bb..0000000000
--- a/Marlin/src/lcd/e3v2/enhanced/rotary_encoder.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * DWIN UI Enhanced implementation
- * Author: Miguel A. Risco-Castillo
- * Version: 3.6.1
- * Date: 2021/08/29
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see .
- *
- */
-#pragma once
-
-/*****************************************************************************
- * @file lcd/e3v2/enhanced/rotary_encoder.h
- * @author LEO / Creality3D
- * @date 2019/07/06
- * @version 2.0.1
- * @brief Rotary encoder functions
- ****************************************************************************/
-
-#include "../../../inc/MarlinConfig.h"
-
-/*********************** Encoder Set ***********************/
-
-typedef struct {
- bool enabled = false;
- int encoderMoveValue = 0;
- millis_t lastEncoderTime = 0;
-} ENCODER_Rate;
-
-extern ENCODER_Rate EncoderRate;
-
-typedef enum {
- ENCODER_DIFF_NO = 0, // no state
- ENCODER_DIFF_CW = 1, // clockwise rotation
- ENCODER_DIFF_CCW = 2, // counterclockwise rotation
- ENCODER_DIFF_ENTER = 3 // click
-} ENCODER_DiffState;
-
-// Encoder initialization
-void Encoder_Configuration();
-
-// Analyze encoder value and return state
-ENCODER_DiffState Encoder_ReceiveAnalyze();
-
-/*********************** Encoder LED ***********************/
-
-#if PIN_EXISTS(LCD_LED)
-
- #define LED_NUM 4
- #define LED_DATA_HIGH WRITE(LCD_LED_PIN, 1)
- #define LED_DATA_LOW WRITE(LCD_LED_PIN, 0)
-
- #define RGB_SCALE_R10_G7_B5 1
- #define RGB_SCALE_R10_G7_B4 2
- #define RGB_SCALE_R10_G8_B7 3
- #define RGB_SCALE_NEUTRAL_WHITE RGB_SCALE_R10_G7_B5
- #define RGB_SCALE_WARM_WHITE RGB_SCALE_R10_G7_B4
- #define RGB_SCALE_COOL_WHITE RGB_SCALE_R10_G8_B7
-
- extern unsigned int LED_DataArray[LED_NUM];
-
- // LED light operation
- void LED_Action();
-
- // LED initialization
- void LED_Configuration();
-
- // LED write data
- void LED_WriteData();
-
- // LED control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- void LED_Control(const uint8_t RGB_Scale, const uint8_t luminance);
-
- // LED gradient control
- // RGB_Scale: RGB color ratio
- // luminance: brightness (0~0xFF)
- // change_Time: gradient time (ms)
- void LED_GraduallyControl(const uint8_t RGB_Scale, const uint8_t luminance, const uint16_t change_Interval);
-
-#endif // LCD_LED
diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp
index 7607c1728a..db64753cc9 100644
--- a/Marlin/src/lcd/e3v2/jyersui/dwin.cpp
+++ b/Marlin/src/lcd/e3v2/jyersui/dwin.cpp
@@ -40,6 +40,9 @@
#include "../../../libs/buzzer.h"
#include "../../../inc/Conditionals_post.h"
+//#define DEBUG_OUT 1
+#include "../../../core/debug_out.h"
+
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#include "../../../feature/pause.h"
#endif
@@ -141,15 +144,24 @@ constexpr float default_steps[] = DEFAULT_AXIS_STEPS_PER_UNIT;
constexpr float default_max_jerk[] = { DEFAULT_XJERK, DEFAULT_YJERK, DEFAULT_ZJERK, DEFAULT_EJERK };
#endif
-uint8_t active_menu = MainMenu;
-uint8_t last_menu = MainMenu;
-uint8_t selection = 0;
-uint8_t last_selection = 0;
+enum SelectItem : uint8_t {
+ PAGE_PRINT = 0,
+ PAGE_PREPARE,
+ PAGE_CONTROL,
+ PAGE_INFO_LEVELING,
+ PAGE_COUNT,
+
+ PRINT_SETUP = 0,
+ PRINT_PAUSE_RESUME,
+ PRINT_STOP,
+ PRINT_COUNT
+};
+
+uint8_t active_menu = MainMenu, last_menu = MainMenu;
+uint8_t selection = 0, last_selection = 0;
uint8_t scrollpos = 0;
-uint8_t process = Main;
-uint8_t last_process = Main;
-PopupID popup;
-PopupID last_popup;
+uint8_t process = Main, last_process = Main;
+PopupID popup, last_popup;
void (*funcpointer)() = nullptr;
void *valuepointer = nullptr;
@@ -191,12 +203,11 @@ CrealityDWINClass CrealityDWIN;
uint8_t mesh_y = 0;
#if ENABLED(AUTO_BED_LEVELING_UBL)
- bed_mesh_t &mesh_z_values = ubl.z_values;
uint8_t tilt_grid = 1;
void manual_value_update(bool undefined=false) {
sprintf_P(cmd, PSTR("M421 I%i J%i Z%s %s"), mesh_x, mesh_y, dtostrf(current_position.z, 1, 3, str_1), undefined ? "N" : "");
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
}
@@ -204,11 +215,11 @@ CrealityDWINClass CrealityDWIN;
struct linear_fit_data lsf_results;
incremental_LSF_reset(&lsf_results);
GRID_LOOP(x, y) {
- if (!isnan(mesh_z_values[x][y])) {
+ if (!isnan(Z_VALUES_ARR[x][y])) {
xy_pos_t rpos;
rpos.x = ubl.mesh_index_to_xpos(x);
rpos.y = ubl.mesh_index_to_ypos(y);
- incremental_LSF(&lsf_results, rpos, mesh_z_values[x][y]);
+ incremental_LSF(&lsf_results, rpos, Z_VALUES_ARR[x][y]);
}
}
@@ -223,7 +234,7 @@ CrealityDWINClass CrealityDWIN;
GRID_LOOP(i, j) {
float mx = ubl.mesh_index_to_xpos(i),
my = ubl.mesh_index_to_ypos(j),
- mz = mesh_z_values[i][j];
+ mz = Z_VALUES_ARR[i][j];
if (DEBUGGING(LEVELING)) {
DEBUG_ECHOPAIR_F("before rotation = [", mx, 7);
@@ -247,17 +258,16 @@ CrealityDWINClass CrealityDWIN;
DEBUG_DELAY(20);
}
- mesh_z_values[i][j] = mz - lsf_results.D;
+ Z_VALUES_ARR[i][j] = mz - lsf_results.D;
}
return false;
}
#else
- bed_mesh_t &mesh_z_values = z_values;
void manual_value_update() {
sprintf_P(cmd, PSTR("G29 I%i J%i Z%s"), mesh_x, mesh_y, dtostrf(current_position.z, 1, 3, str_1));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
}
@@ -266,18 +276,18 @@ CrealityDWINClass CrealityDWIN;
void manual_move(bool zmove=false) {
if (zmove) {
planner.synchronize();
- current_position.z = goto_mesh_value ? mesh_z_values[mesh_x][mesh_y] : Z_CLEARANCE_BETWEEN_PROBES;
+ current_position.z = goto_mesh_value ? Z_VALUES_ARR[mesh_x][mesh_y] : Z_CLEARANCE_BETWEEN_PROBES;
planner.buffer_line(current_position, homing_feedrate(Z_AXIS), active_extruder);
planner.synchronize();
}
else {
CrealityDWIN.Popup_Handler(MoveWait);
sprintf_P(cmd, PSTR("G0 F300 Z%s"), dtostrf(Z_CLEARANCE_BETWEEN_PROBES, 1, 3, str_1));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
sprintf_P(cmd, PSTR("G42 F4000 I%i J%i"), mesh_x, mesh_y);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
- current_position.z = goto_mesh_value ? mesh_z_values[mesh_x][mesh_y] : Z_CLEARANCE_BETWEEN_PROBES;
+ current_position.z = goto_mesh_value ? Z_VALUES_ARR[mesh_x][mesh_y] : Z_CLEARANCE_BETWEEN_PROBES;
planner.buffer_line(current_position, homing_feedrate(Z_AXIS), active_extruder);
planner.synchronize();
CrealityDWIN.Redraw_Menu();
@@ -287,8 +297,8 @@ CrealityDWINClass CrealityDWIN;
float get_max_value() {
float max = __FLT_MIN__;
GRID_LOOP(x, y) {
- if (!isnan(mesh_z_values[x][y]) && mesh_z_values[x][y] > max)
- max = mesh_z_values[x][y];
+ if (!isnan(Z_VALUES_ARR[x][y]) && Z_VALUES_ARR[x][y] > max)
+ max = Z_VALUES_ARR[x][y];
}
return max;
}
@@ -296,8 +306,8 @@ CrealityDWINClass CrealityDWIN;
float get_min_value() {
float min = __FLT_MAX__;
GRID_LOOP(x, y) {
- if (!isnan(mesh_z_values[x][y]) && mesh_z_values[x][y] < min)
- min = mesh_z_values[x][y];
+ if (!isnan(Z_VALUES_ARR[x][y]) && Z_VALUES_ARR[x][y] < min)
+ min = Z_VALUES_ARR[x][y];
}
return min;
}
@@ -326,12 +336,12 @@ CrealityDWINClass CrealityDWIN;
const auto end_x_px = start_x_px + cell_width_px - 1 - gridline_width;
const auto start_y_px = padding_y_top + (GRID_MAX_POINTS_Y - y - 1) * cell_height_px;
const auto end_y_px = start_y_px + cell_height_px - 1 - gridline_width;
- DWIN_Draw_Rectangle(1, // RGB565 colors: http://www.barth-dev.de/online/rgb565-color-picker/
- isnan(mesh_z_values[x][y]) ? Color_Grey : ( // gray if undefined
- (mesh_z_values[x][y] < 0 ?
- (uint16_t)round(0x1F * -mesh_z_values[x][y] / (!viewer_asymmetric_range ? range : v_min)) << 11 : // red if mesh point value is negative
- (uint16_t)round(0x3F * mesh_z_values[x][y] / (!viewer_asymmetric_range ? range : v_max)) << 5) | // green if mesh point value is positive
- _MIN(0x1F, (((uint8_t)abs(mesh_z_values[x][y]) / 10) * 4))), // + blue stepping for every mm
+ DWIN_Draw_Rectangle(1, // RGB565 colors: http://www.barth-dev.de/online/rgb565-color-picker/
+ isnan(Z_VALUES_ARR[x][y]) ? Color_Grey : ( // gray if undefined
+ (Z_VALUES_ARR[x][y] < 0 ?
+ (uint16_t)round(0x1F * -Z_VALUES_ARR[x][y] / (!viewer_asymmetric_range ? range : v_min)) << 11 : // red if mesh point value is negative
+ (uint16_t)round(0x3F * Z_VALUES_ARR[x][y] / (!viewer_asymmetric_range ? range : v_max)) << 5) | // green if mesh point value is positive
+ _MIN(0x1F, (((uint8_t)abs(Z_VALUES_ARR[x][y]) / 10) * 4))), // + blue stepping for every mm
start_x_px, start_y_px, end_x_px, end_y_px
);
@@ -341,18 +351,18 @@ CrealityDWINClass CrealityDWIN;
// Draw value text on
if (viewer_print_value) {
int8_t offset_x, offset_y = cell_height_px / 2 - 6;
- if (isnan(mesh_z_values[x][y])) { // undefined
- DWIN_Draw_String(false, false, font6x12, Color_White, Color_Bg_Blue, start_x_px + cell_width_px / 2 - 5, start_y_px + offset_y, F("X"));
+ if (isnan(Z_VALUES_ARR[x][y])) { // undefined
+ DWIN_Draw_String(false, font6x12, Color_White, Color_Bg_Blue, start_x_px + cell_width_px / 2 - 5, start_y_px + offset_y, F("X"));
}
else { // has value
if (GRID_MAX_POINTS_X < 10)
- sprintf_P(buf, PSTR("%s"), dtostrf(abs(mesh_z_values[x][y]), 1, 2, str_1));
+ sprintf_P(buf, PSTR("%s"), dtostrf(abs(Z_VALUES_ARR[x][y]), 1, 2, str_1));
else
- sprintf_P(buf, PSTR("%02i"), (uint16_t)(abs(mesh_z_values[x][y] - (int16_t)mesh_z_values[x][y]) * 100));
+ sprintf_P(buf, PSTR("%02i"), (uint16_t)(abs(Z_VALUES_ARR[x][y] - (int16_t)Z_VALUES_ARR[x][y]) * 100));
offset_x = cell_width_px / 2 - 3 * (strlen(buf)) - 2;
if (!(GRID_MAX_POINTS_X < 10))
- DWIN_Draw_String(false, false, font6x12, Color_White, Color_Bg_Blue, start_x_px - 2 + offset_x, start_y_px + offset_y /*+ square / 2 - 6*/, F("."));
- DWIN_Draw_String(false, false, font6x12, Color_White, Color_Bg_Blue, start_x_px + 1 + offset_x, start_y_px + offset_y /*+ square / 2 - 6*/, buf);
+ DWIN_Draw_String(false, font6x12, Color_White, Color_Bg_Blue, start_x_px - 2 + offset_x, start_y_px + offset_y /*+ square / 2 - 6*/, F("."));
+ DWIN_Draw_String(false, font6x12, Color_White, Color_Bg_Blue, start_x_px + 1 + offset_x, start_y_px + offset_y /*+ square / 2 - 6*/, buf);
}
safe_delay(10);
LCD_SERIAL.flushTX();
@@ -406,16 +416,11 @@ void CrealityDWINClass::Draw_Float(float value, uint8_t row, bool selected/*=fal
const uint16_t bColor = (selected) ? Select_Color : Color_Bg_Black;
const uint16_t xpos = 240 - (digits * 8);
DWIN_Draw_Rectangle(1, Color_Bg_Black, 194, MBASE(row), 234 - (digits * 8), MBASE(row) + 16);
- if (isnan(value)) {
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, Color_White, bColor, xpos - 8, MBASE(row), F(" NaN"));
- }
- else if (value < 0) {
- DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, Color_White, bColor, digits - log10(minunit) + 1, log10(minunit), xpos, MBASE(row), -value * minunit);
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, Color_White, bColor, xpos - 8, MBASE(row), F("-"));
- }
+ if (isnan(value))
+ DWIN_Draw_String(true, DWIN_FONT_MENU, Color_White, bColor, xpos - 8, MBASE(row), F(" NaN"));
else {
- DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, Color_White, bColor, digits - log10(minunit) + 1, log10(minunit), xpos, MBASE(row), value * minunit);
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, Color_White, bColor, xpos - 8, MBASE(row), F(" "));
+ DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, Color_White, bColor, digits - log10(minunit) + 1, log10(minunit), xpos, MBASE(row), (value < 0 ? -value : value) * minunit);
+ DWIN_Draw_String(true, DWIN_FONT_MENU, Color_White, bColor, xpos - 8, MBASE(row), value < 0 ? F("-") : F(" "));
}
}
@@ -423,7 +428,7 @@ void CrealityDWINClass::Draw_Option(uint8_t value, const char * const * options,
uint16_t bColor = (selected) ? Select_Color : Color_Bg_Black;
uint16_t tColor = (color) ? GetColor(value, Color_White, false) : Color_White;
DWIN_Draw_Rectangle(1, bColor, 202, MBASE(row) + 14, 258, MBASE(row) - 2);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, tColor, bColor, 202, MBASE(row) - 1, options[value]);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, tColor, bColor, 202, MBASE(row) - 1, options[value]);
}
uint16_t CrealityDWINClass::GetColor(uint8_t color, uint16_t original, bool light/*=false*/) {
@@ -465,19 +470,35 @@ uint16_t CrealityDWINClass::GetColor(uint8_t color, uint16_t original, bool ligh
return Color_White;
}
-void CrealityDWINClass::Draw_Title(const char * title) {
- DWIN_Draw_String(false, false, DWIN_FONT_HEAD, GetColor(eeprom_settings.menu_top_txt, Color_White, false), Color_Bg_Blue, (DWIN_WIDTH - strlen(title) * STAT_CHR_W) / 2, 5, title);
+void CrealityDWINClass::Draw_Title(const char * ctitle) {
+ DWIN_Draw_String(false, DWIN_FONT_HEAD, GetColor(eeprom_settings.menu_top_txt, Color_White, false), Color_Bg_Blue, (DWIN_WIDTH - strlen(ctitle) * STAT_CHR_W) / 2, 5, ctitle);
+}
+void CrealityDWINClass::Draw_Title(FSTR_P const ftitle) {
+ DWIN_Draw_String(false, DWIN_FONT_HEAD, GetColor(eeprom_settings.menu_top_txt, Color_White, false), Color_Bg_Blue, (DWIN_WIDTH - strlen_P(FTOP(ftitle)) * STAT_CHR_W) / 2, 5, ftitle);
+}
+
+void _Decorate_Menu_Item(uint8_t row, uint8_t icon, bool more) {
+ if (icon) DWIN_ICON_Show(ICON, icon, 26, MBASE(row) - 3); //Draw Menu Icon
+ if (more) DWIN_ICON_Show(ICON, ICON_More, 226, MBASE(row) - 3); // Draw More Arrow
+ DWIN_Draw_Line(CrealityDWIN.GetColor(CrealityDWIN.eeprom_settings.menu_split_line, Line_Color, true), 16, MBASE(row) + 33, 256, MBASE(row) + 33); // Draw Menu Line
}
void CrealityDWINClass::Draw_Menu_Item(uint8_t row, uint8_t icon/*=0*/, const char * label1, const char * label2, bool more/*=false*/, bool centered/*=false*/) {
- const uint8_t label_offset_y = !(label1 && label2) ? 0 : MENU_CHR_H * 3 / 5;
- const uint8_t label1_offset_x = !centered ? LBLX : LBLX * 4/5 + _MAX(LBLX * 1U/5, (DWIN_WIDTH - LBLX - (label1 ? strlen(label1) : 0) * MENU_CHR_W) / 2);
- const uint8_t label2_offset_x = !centered ? LBLX : LBLX * 4/5 + _MAX(LBLX * 1U/5, (DWIN_WIDTH - LBLX - (label2 ? strlen(label2) : 0) * MENU_CHR_W) / 2);
- if (label1) DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, label1_offset_x, MBASE(row) - 1 - label_offset_y, label1); // Draw Label
- if (label2) DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, label2_offset_x, MBASE(row) - 1 + label_offset_y, label2); // Draw Label
- if (icon) DWIN_ICON_Show(ICON, icon, 26, MBASE(row) - 3); //Draw Menu Icon
- if (more) DWIN_ICON_Show(ICON, ICON_More, 226, MBASE(row) - 3); // Draw More Arrow
- DWIN_Draw_Line(GetColor(eeprom_settings.menu_split_line, Line_Color, true), 16, MBASE(row) + 33, 256, MBASE(row) + 33); // Draw Menu Line
+ const uint8_t label_offset_y = (label1 || label2) ? MENU_CHR_H * 3 / 5 : 0,
+ label1_offset_x = !centered ? LBLX : LBLX * 4/5 + _MAX(LBLX * 1U/5, (DWIN_WIDTH - LBLX - (label1 ? strlen(label1) : 0) * MENU_CHR_W) / 2),
+ label2_offset_x = !centered ? LBLX : LBLX * 4/5 + _MAX(LBLX * 1U/5, (DWIN_WIDTH - LBLX - (label2 ? strlen(label2) : 0) * MENU_CHR_W) / 2);
+ if (label1) DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, label1_offset_x, MBASE(row) - 1 - label_offset_y, label1); // Draw Label
+ if (label2) DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, label2_offset_x, MBASE(row) - 1 + label_offset_y, label2); // Draw Label
+ _Decorate_Menu_Item(row, icon, more);
+}
+
+void CrealityDWINClass::Draw_Menu_Item(uint8_t row, uint8_t icon/*=0*/, FSTR_P const flabel1, FSTR_P const flabel2, bool more/*=false*/, bool centered/*=false*/) {
+ const uint8_t label_offset_y = (flabel1 || flabel2) ? MENU_CHR_H * 3 / 5 : 0,
+ label1_offset_x = !centered ? LBLX : LBLX * 4/5 + _MAX(LBLX * 1U/5, (DWIN_WIDTH - LBLX - (flabel1 ? strlen_P(FTOP(flabel1)) : 0) * MENU_CHR_W) / 2),
+ label2_offset_x = !centered ? LBLX : LBLX * 4/5 + _MAX(LBLX * 1U/5, (DWIN_WIDTH - LBLX - (flabel2 ? strlen_P(FTOP(flabel2)) : 0) * MENU_CHR_W) / 2);
+ if (flabel1) DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, label1_offset_x, MBASE(row) - 1 - label_offset_y, flabel1); // Draw Label
+ if (flabel2) DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, label2_offset_x, MBASE(row) - 1 + label_offset_y, flabel2); // Draw Label
+ _Decorate_Menu_Item(row, icon, more);
}
void CrealityDWINClass::Draw_Checkbox(uint8_t row, bool value) {
@@ -538,50 +559,49 @@ void CrealityDWINClass::Main_Menu_Icons() {
if (selection == 0) {
DWIN_ICON_Show(ICON, ICON_Print_1, 17, 130);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 17, 130, 126, 229);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 52, 200, F("Print"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 52, 200, F("Print"));
}
else {
DWIN_ICON_Show(ICON, ICON_Print_0, 17, 130);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 52, 200, F("Print"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 52, 200, F("Print"));
}
if (selection == 1) {
DWIN_ICON_Show(ICON, ICON_Prepare_1, 145, 130);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 145, 130, 254, 229);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 170, 200, F("Prepare"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 170, 200, F("Prepare"));
}
else {
DWIN_ICON_Show(ICON, ICON_Prepare_0, 145, 130);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 170, 200, F("Prepare"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 170, 200, F("Prepare"));
}
if (selection == 2) {
DWIN_ICON_Show(ICON, ICON_Control_1, 17, 246);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 17, 246, 126, 345);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 43, 317, F("Control"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 43, 317, F("Control"));
}
else {
DWIN_ICON_Show(ICON, ICON_Control_0, 17, 246);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 43, 317, F("Control"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 43, 317, F("Control"));
}
#if HAS_ABL_OR_UBL
if (selection == 3) {
DWIN_ICON_Show(ICON, ICON_Leveling_1, 145, 246);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 145, 246, 254, 345);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 179, 317, F("Level"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 179, 317, F("Level"));
}
else {
DWIN_ICON_Show(ICON, ICON_Leveling_0, 145, 246);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 179, 317, F("Level"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 179, 317, F("Level"));
}
#else
if (selection == 3) {
DWIN_ICON_Show(ICON, ICON_Info_1, 145, 246);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 145, 246, 254, 345);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 181, 317, F("Info"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 181, 317, F("Info"));
}
else {
DWIN_ICON_Show(ICON, ICON_Info_0, 145, 246);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 181, 317, F("Info"));
- //DWIN_Frame_AreaCopy(1, 132, 423, 159, 435, 186, 318);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 181, 317, F("Info"));
}
#endif
}
@@ -601,41 +621,41 @@ void CrealityDWINClass::Print_Screen_Icons() {
if (selection == 0) {
DWIN_ICON_Show(ICON, ICON_Setup_1, 8, 252);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 8, 252, 87, 351);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 30, 322, F("Tune"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 30, 322, F("Tune"));
}
else {
DWIN_ICON_Show(ICON, ICON_Setup_0, 8, 252);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 30, 322, F("Tune"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 30, 322, F("Tune"));
}
if (selection == 2) {
DWIN_ICON_Show(ICON, ICON_Stop_1, 184, 252);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 184, 252, 263, 351);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 205, 322, F("Stop"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 205, 322, F("Stop"));
}
else {
DWIN_ICON_Show(ICON, ICON_Stop_0, 184, 252);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 205, 322, F("Stop"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 205, 322, F("Stop"));
}
if (paused) {
if (selection == 1) {
DWIN_ICON_Show(ICON, ICON_Continue_1, 96, 252);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 96, 252, 175, 351);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Print"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Print"));
}
else {
DWIN_ICON_Show(ICON, ICON_Continue_0, 96, 252);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Print"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Print"));
}
}
else {
if (selection == 1) {
DWIN_ICON_Show(ICON, ICON_Pause_1, 96, 252);
DWIN_Draw_Rectangle(0, GetColor(eeprom_settings.highlight_box, Color_White), 96, 252, 175, 351);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Pause"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Pause"));
}
else {
DWIN_ICON_Show(ICON, ICON_Pause_0, 96, 252);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Pause"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Blue, 114, 322, F("Pause"));
}
}
}
@@ -649,8 +669,8 @@ void CrealityDWINClass::Draw_Print_Screen() {
Print_Screen_Icons();
DWIN_ICON_Show(ICON, ICON_PrintTime, 14, 171);
DWIN_ICON_Show(ICON, ICON_RemainTime, 147, 169);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, 41, 163, "Elapsed");
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, 176, 163, "Remaining");
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, 41, 163, F("Elapsed"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, 176, 163, F("Remaining"));
Update_Status_Bar(true);
Draw_Print_ProgressBar();
Draw_Print_ProgressElapsed();
@@ -678,14 +698,14 @@ void CrealityDWINClass::Draw_Print_Filename(const bool reset/*=false*/) {
dispname[len] = '\0';
DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80);
const int8_t npos = (DWIN_WIDTH - 30 * MENU_CHR_W) / 2;
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, dispname);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, dispname);
if (-pos >= 30) namescrl = 0;
namescrl++;
}
else {
DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 50, DWIN_WIDTH - 8, 80);
const int8_t npos = (DWIN_WIDTH - strlen(filename) * MENU_CHR_W) / 2;
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, filename);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, Color_White, Color_Bg_Black, npos, 60, filename);
}
}
}
@@ -695,7 +715,7 @@ void CrealityDWINClass::Draw_Print_ProgressBar() {
DWIN_ICON_Show(ICON, ICON_Bar, 15, 93);
DWIN_Draw_Rectangle(1, BarFill_Color, 16 + printpercent * 240 / 100, 93, 256, 113);
DWIN_Draw_IntValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_percent, Percent_Color), Color_Bg_Black, 3, 109, 133, printpercent);
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_percent, Percent_Color), Color_Bg_Black, 133, 133, "%");
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_percent, Percent_Color), Color_Bg_Black, 133, 133, F("%"));
}
#if ENABLED(USE_M73_REMAINING_TIME)
@@ -705,11 +725,11 @@ void CrealityDWINClass::Draw_Print_ProgressBar() {
DWIN_Draw_IntValue(true, true, 1, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 2, 176, 187, remainingtime / 3600);
DWIN_Draw_IntValue(true, true, 1, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 2, 200, 187, (remainingtime % 3600) / 60);
if (eeprom_settings.time_format_textual) {
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 192, 187, "h");
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 216, 187, "m");
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 192, 187, F("h"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 216, 187, F("m"));
}
else
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 192, 187, ":");
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 192, 187, F(":"));
}
#endif
@@ -719,11 +739,11 @@ void CrealityDWINClass::Draw_Print_ProgressElapsed() {
DWIN_Draw_IntValue(true, true, 1, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 2, 42, 187, elapsed.value / 3600);
DWIN_Draw_IntValue(true, true, 1, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 2, 66, 187, (elapsed.value % 3600) / 60);
if (eeprom_settings.time_format_textual) {
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 58, 187, "h");
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 82, 187, "m");
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 58, 187, F("h"));
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 82, 187, F("m"));
}
else
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 58, 187, ":");
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.progress_time, Color_White), Color_Bg_Black, 58, 187, F(":"));
}
void CrealityDWINClass::Draw_Print_confirm() {
@@ -738,7 +758,7 @@ void CrealityDWINClass::Draw_Print_confirm() {
void CrealityDWINClass::Draw_SD_Item(uint8_t item, uint8_t row) {
if (item == 0)
- Draw_Menu_Item(0, ICON_Back, card.flag.workDirIsRoot ? "Back" : "..");
+ Draw_Menu_Item(0, ICON_Back, card.flag.workDirIsRoot ? F("Back") : F(".."));
else {
card.getfilename_sorted(SD_ORDER(item - 1, card.get_num_Files()));
char * const filename = card.longest_filename();
@@ -768,9 +788,9 @@ void CrealityDWINClass::Draw_SD_List(bool removed/*=false*/) {
Draw_SD_Item(i, i);
}
else {
- Draw_Menu_Item(0, ICON_Back, "Back");
+ Draw_Menu_Item(0, ICON_Back, F("Back"));
DWIN_Draw_Rectangle(1, Color_Bg_Red, 10, MBASE(3) - 10, DWIN_WIDTH - 10, MBASE(4));
- DWIN_Draw_String(false, false, font16x32, Color_Yellow, Color_Bg_Red, ((DWIN_WIDTH) - 8 * 16) / 2, MBASE(3), "No Media");
+ DWIN_Draw_String(false, font16x32, Color_Yellow, Color_Bg_Red, ((DWIN_WIDTH) - 8 * 16) / 2, MBASE(3), F("No Media"));
}
DWIN_Draw_Rectangle(1, GetColor(eeprom_settings.cursor_color, Rectangle_Color), 0, MBASE(0) - 18, 14, MBASE(0) + 33);
}
@@ -786,7 +806,7 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) {
hotend = -1;
hotendtarget = -1;
DWIN_ICON_Show(ICON, ICON_HotendTemp, 10, 383);
- DWIN_Draw_String(false, false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 25 + 3 * STAT_CHR_W + 5, 384, F("/"));
+ DWIN_Draw_String(false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 25 + 3 * STAT_CHR_W + 5, 384, F("/"));
}
if (thermalManager.temp_hotend[0].celsius != hotend) {
hotend = thermalManager.temp_hotend[0].celsius;
@@ -801,7 +821,7 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) {
if (icons) {
flow = -1;
DWIN_ICON_Show(ICON, ICON_StepE, 112, 417);
- DWIN_Draw_String(false, false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 116 + 5 * STAT_CHR_W + 2, 417, F("%"));
+ DWIN_Draw_String(false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 116 + 5 * STAT_CHR_W + 2, 417, F("%"));
}
if (planner.flow_percentage[0] != flow) {
flow = planner.flow_percentage[0];
@@ -816,7 +836,7 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) {
bed = -1;
bedtarget = -1;
DWIN_ICON_Show(ICON, ICON_BedTemp, 10, 416);
- DWIN_Draw_String(false, false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 25 + 3 * STAT_CHR_W + 5, 417, F("/"));
+ DWIN_Draw_String(false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 25 + 3 * STAT_CHR_W + 5, 417, F("/"));
}
if (thermalManager.temp_bed.celsius != bed) {
bed = thermalManager.temp_bed.celsius;
@@ -851,14 +871,8 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) {
}
if (zoffsetvalue != offset) {
offset = zoffsetvalue;
- if (zoffsetvalue < 0) {
- DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 2, 2, 207, 417, -zoffsetvalue * 100);
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 205, 419, "-");
- }
- else {
- DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 2, 2, 207, 417, zoffsetvalue* 100);
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 205, 419, " ");
- }
+ DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 2, 2, 207, 417, (zoffsetvalue < 0 ? -zoffsetvalue : zoffsetvalue) * 100);
+ DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 205, 419, zoffsetvalue < 0 ? F("-") : F(" "));
}
#endif
@@ -866,7 +880,7 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) {
if (icons) {
feedrate = -1;
DWIN_ICON_Show(ICON, ICON_Speed, 113, 383);
- DWIN_Draw_String(false, false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 116 + 5 * STAT_CHR_W + 2, 384, F("%"));
+ DWIN_Draw_String(false, DWIN_FONT_STAT, GetColor(eeprom_settings.status_area_text, Color_White), Color_Bg_Black, 116 + 5 * STAT_CHR_W + 2, 384, F("%"));
}
if (feedrate_percentage != feedrate) {
feedrate = feedrate_percentage;
@@ -888,28 +902,28 @@ void CrealityDWINClass::Draw_Status_Area(bool icons/*=false*/) {
if (update_x) {
x = current_position.x;
if ((update_x = axis_should_home(X_AXIS) && ui.get_blink()))
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 35, 459, " -?- ");
+ DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 35, 459, F(" -?- "));
else
DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 1, 35, 459, current_position.x * 10);
}
if (update_y) {
y = current_position.y;
if ((update_y = axis_should_home(Y_AXIS) && ui.get_blink()))
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 120, 459, " -?- ");
+ DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 120, 459, F(" -?- "));
else
DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 1, 120, 459, current_position.y * 10);
}
if (update_z) {
z = current_position.z;
if ((update_z = axis_should_home(Z_AXIS) && ui.get_blink()))
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 205, 459, " -?- ");
+ DWIN_Draw_String(true, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 205, 459, F(" -?- "));
else
DWIN_Draw_FloatValue(true, true, 0, DWIN_FONT_MENU, GetColor(eeprom_settings.coordinates_text, Color_White), Color_Bg_Black, 3, 2, 205, 459, (current_position.z>=0) ? current_position.z * 100 : 0);
}
DWIN_UpdateLCD();
}
-void CrealityDWINClass::Draw_Popup(PGM_P const line1, PGM_P const line2, PGM_P const line3, uint8_t mode, uint8_t icon/*=0*/) {
+void CrealityDWINClass::Draw_Popup(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, uint8_t mode, uint8_t icon/*=0*/) {
if (process != Confirm && process != Popup && process != Wait) last_process = process;
if ((process == Menu || process == Wait) && mode == Popup) last_selection = selection;
process = mode;
@@ -918,25 +932,25 @@ void CrealityDWINClass::Draw_Popup(PGM_P const line1, PGM_P const line2, PGM_P c
DWIN_Draw_Rectangle(1, Color_Bg_Window, 14, 60, 258, 350);
const uint8_t ypos = (mode == Popup || mode == Confirm) ? 150 : 230;
if (icon > 0) DWIN_ICON_Show(ICON, icon, 101, 105);
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, Popup_Text_Color, Color_Bg_Window, (272 - 8 * strlen_P(line1)) / 2, ypos, line1);
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, Popup_Text_Color, Color_Bg_Window, (272 - 8 * strlen_P(line2)) / 2, ypos + 30, line2);
- DWIN_Draw_String(false, true, DWIN_FONT_MENU, Popup_Text_Color, Color_Bg_Window, (272 - 8 * strlen_P(line3)) / 2, ypos + 60, line3);
+ DWIN_Draw_String(true, DWIN_FONT_MENU, Popup_Text_Color, Color_Bg_Window, (272 - 8 * strlen_P(FTOP(line1))) / 2, ypos, line1);
+ DWIN_Draw_String(true, DWIN_FONT_MENU, Popup_Text_Color, Color_Bg_Window, (272 - 8 * strlen_P(FTOP(line2))) / 2, ypos + 30, line2);
+ DWIN_Draw_String(true, DWIN_FONT_MENU, Popup_Text_Color, Color_Bg_Window, (272 - 8 * strlen_P(FTOP(line3))) / 2, ypos + 60, line3);
if (mode == Popup) {
selection = 0;
DWIN_Draw_Rectangle(1, Confirm_Color, 26, 280, 125, 317);
DWIN_Draw_Rectangle(1, Cancel_Color, 146, 280, 245, 317);
- DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Window, 39, 290, "Confirm");
- DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Window, 165, 290, "Cancel");
+ DWIN_Draw_String(false, DWIN_FONT_STAT, Color_White, Color_Bg_Window, 39, 290, F("Confirm"));
+ DWIN_Draw_String(false, DWIN_FONT_STAT, Color_White, Color_Bg_Window, 165, 290, F("Cancel"));
Popup_Select();
}
else if (mode == Confirm) {
DWIN_Draw_Rectangle(1, Confirm_Color, 87, 280, 186, 317);
- DWIN_Draw_String(false, false, DWIN_FONT_STAT, Color_White, Color_Bg_Window, 96, 290, "Continue");
+ DWIN_Draw_String(false, DWIN_FONT_STAT, Color_White, Color_Bg_Window, 96, 290, F("Continue"));
}
}
-void MarlinUI::kill_screen(PGM_P const error, PGM_P const component) {
- CrealityDWIN.Draw_Popup(PSTR("Printer Kill Reason:"), error, PSTR("Restart Required"), Wait, ICON_BLTouch);
+void MarlinUI::kill_screen(FSTR_P const error, FSTR_P const) {
+ CrealityDWIN.Draw_Popup(F("Printer Kill Reason:"), error, F("Restart Required"), Wait, ICON_BLTouch);
}
void CrealityDWINClass::Popup_Select() {
@@ -976,12 +990,12 @@ void CrealityDWINClass::Update_Status_Bar(bool refresh/*=false*/) {
if (process == Print) {
DWIN_Draw_Rectangle(1, Color_Grey, 8, 214, DWIN_WIDTH - 8, 238);
const int8_t npos = (DWIN_WIDTH - 30 * MENU_CHR_W) / 2;
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 219, dispmsg);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 219, dispmsg);
}
else {
DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 352, DWIN_WIDTH - 8, 376);
const int8_t npos = (DWIN_WIDTH - 30 * MENU_CHR_W) / 2;
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 357, dispmsg);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 357, dispmsg);
}
if (-pos >= 30) msgscrl = 0;
msgscrl++;
@@ -992,12 +1006,12 @@ void CrealityDWINClass::Update_Status_Bar(bool refresh/*=false*/) {
if (process == Print) {
DWIN_Draw_Rectangle(1, Color_Grey, 8, 214, DWIN_WIDTH - 8, 238);
const int8_t npos = (DWIN_WIDTH - strlen(statusmsg) * MENU_CHR_W) / 2;
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 219, statusmsg);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 219, statusmsg);
}
else {
DWIN_Draw_Rectangle(1, Color_Bg_Black, 8, 352, DWIN_WIDTH - 8, 376);
const int8_t npos = (DWIN_WIDTH - strlen(statusmsg) * MENU_CHR_W) / 2;
- DWIN_Draw_String(false, false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 357, statusmsg);
+ DWIN_Draw_String(false, DWIN_FONT_MENU, GetColor(eeprom_settings.status_bar_text, Color_White), Color_Bg_Black, npos, 357, statusmsg);
}
}
}
@@ -1027,31 +1041,31 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREPARE_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Main_Menu(1);
break;
case PREPARE_MOVE:
if (draw)
- Draw_Menu_Item(row, ICON_Axis, "Move", nullptr, true);
+ Draw_Menu_Item(row, ICON_Axis, F("Move"), nullptr, true);
else
Draw_Menu(Move);
break;
case PREPARE_DISABLE:
if (draw)
- Draw_Menu_Item(row, ICON_CloseMotor, "Disable Stepper");
+ Draw_Menu_Item(row, ICON_CloseMotor, F("Disable Stepper"));
else
- queue.inject_P(PSTR("M84"));
+ queue.inject(F("M84"));
break;
case PREPARE_HOME:
if (draw)
- Draw_Menu_Item(row, ICON_SetHome, "Homing", nullptr, true);
+ Draw_Menu_Item(row, ICON_SetHome, F("Homing"), nullptr, true);
else
Draw_Menu(HomeMenu);
break;
case PREPARE_MANUALLEVEL:
if (draw)
- Draw_Menu_Item(row, ICON_PrintSize, "Manual Leveling", nullptr, true);
+ Draw_Menu_Item(row, ICON_PrintSize, F("Manual Leveling"), nullptr, true);
else {
if (axes_should_home()) {
Popup_Handler(Home);
@@ -1068,7 +1082,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_ZOFFSET_ITEM
case PREPARE_ZOFFSET:
if (draw)
- Draw_Menu_Item(row, ICON_Zoffset, "Z-Offset", nullptr, true);
+ Draw_Menu_Item(row, ICON_Zoffset, F("Z-Offset"), nullptr, true);
else {
#if HAS_LEVELING
level_state = planner.leveling_active;
@@ -1082,13 +1096,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_PREHEAT
case PREPARE_PREHEAT:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, "Preheat", nullptr, true);
+ Draw_Menu_Item(row, ICON_Temperature, F("Preheat"), nullptr, true);
else
Draw_Menu(Preheat);
break;
case PREPARE_COOLDOWN:
if (draw)
- Draw_Menu_Item(row, ICON_Cool, "Cooldown");
+ Draw_Menu_Item(row, ICON_Cool, F("Cooldown"));
else {
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
thermalManager.disable_all_heaters();
@@ -1099,7 +1113,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(ADVANCED_PAUSE_FEATURE)
case PREPARE_CHANGEFIL:
if (draw) {
- Draw_Menu_Item(row, ICON_ResumeEEPROM, "Change Filament"
+ Draw_Menu_Item(row, ICON_ResumeEEPROM, F("Change Filament")
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
, nullptr, true
#endif
@@ -1118,7 +1132,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
}
Popup_Handler(FilChange);
sprintf_P(cmd, PSTR("M600 B1 R%i"), thermalManager.temp_hotend[0].target);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
}
#endif
}
@@ -1140,13 +1154,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case HOME_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Prepare, PREPARE_HOME);
break;
case HOME_ALL:
if (draw)
- Draw_Menu_Item(row, ICON_Homing, "Home All");
+ Draw_Menu_Item(row, ICON_Homing, F("Home All"));
else {
Popup_Handler(Home);
gcode.home_all_axes(true);
@@ -1155,39 +1169,39 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case HOME_X:
if (draw)
- Draw_Menu_Item(row, ICON_MoveX, "Home X");
+ Draw_Menu_Item(row, ICON_MoveX, F("Home X"));
else {
Popup_Handler(Home);
- gcode.process_subcommands_now_P(PSTR("G28 X"));
+ gcode.process_subcommands_now(F("G28 X"));
planner.synchronize();
Redraw_Menu();
}
break;
case HOME_Y:
if (draw)
- Draw_Menu_Item(row, ICON_MoveY, "Home Y");
+ Draw_Menu_Item(row, ICON_MoveY, F("Home Y"));
else {
Popup_Handler(Home);
- gcode.process_subcommands_now_P(PSTR("G28 Y"));
+ gcode.process_subcommands_now(F("G28 Y"));
planner.synchronize();
Redraw_Menu();
}
break;
case HOME_Z:
if (draw)
- Draw_Menu_Item(row, ICON_MoveZ,"Home Z");
+ Draw_Menu_Item(row, ICON_MoveZ, F("Home Z"));
else {
Popup_Handler(Home);
- gcode.process_subcommands_now_P(PSTR("G28 Z"));
+ gcode.process_subcommands_now(F("G28 Z"));
planner.synchronize();
Redraw_Menu();
}
break;
case HOME_SET:
if (draw)
- Draw_Menu_Item(row, ICON_SetHome, "Set Home Position");
+ Draw_Menu_Item(row, ICON_SetHome, F("Set Home Position"));
else {
- gcode.process_subcommands_now_P(PSTR("G92 X0 Y0 Z0"));
+ gcode.process_subcommands_now(F("G92 X0 Y0 Z0"));
AudioFeedback();
}
break;
@@ -1208,7 +1222,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case MOVE_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else {
#if HAS_BED_PROBE
probe_deployed = false;
@@ -1219,7 +1233,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MOVE_X:
if (draw) {
- Draw_Menu_Item(row, ICON_MoveX, "Move X");
+ Draw_Menu_Item(row, ICON_MoveX, F("Move X"));
Draw_Float(current_position.x, row, false);
}
else
@@ -1227,7 +1241,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MOVE_Y:
if (draw) {
- Draw_Menu_Item(row, ICON_MoveY, "Move Y");
+ Draw_Menu_Item(row, ICON_MoveY, F("Move Y"));
Draw_Float(current_position.y, row);
}
else
@@ -1235,7 +1249,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MOVE_Z:
if (draw) {
- Draw_Menu_Item(row, ICON_MoveZ, "Move Z");
+ Draw_Menu_Item(row, ICON_MoveZ, F("Move Z"));
Draw_Float(current_position.z, row);
}
else
@@ -1245,7 +1259,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HOTEND
case MOVE_E:
if (draw) {
- Draw_Menu_Item(row, ICON_Extruder, "Extruder");
+ Draw_Menu_Item(row, ICON_Extruder, F("Extruder"));
current_position.e = 0;
sync_plan_position();
Draw_Float(current_position.e, row);
@@ -1271,7 +1285,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_BED_PROBE
case MOVE_P:
if (draw) {
- Draw_Menu_Item(row, ICON_StockConfiguraton, "Probe");
+ Draw_Menu_Item(row, ICON_StockConfiguration, F("Probe"));
Draw_Checkbox(row, probe_deployed);
}
else {
@@ -1284,7 +1298,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
case MOVE_LIVE:
if (draw) {
- Draw_Menu_Item(row, ICON_Axis, "Live Movement");
+ Draw_Menu_Item(row, ICON_Axis, F("Live Movement"));
Draw_Checkbox(row, livemove);
}
else {
@@ -1312,7 +1326,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case MLEVEL_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else {
TERN_(HAS_LEVELING, set_bed_leveling_enabled(level_state));
Draw_Menu(Prepare, PREPARE_MANUALLEVEL);
@@ -1321,7 +1335,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_BED_PROBE
case MLEVEL_PROBE:
if (draw) {
- Draw_Menu_Item(row, ICON_Zoffset, "Use Probe");
+ Draw_Menu_Item(row, ICON_Zoffset, F("Use Probe"));
Draw_Checkbox(row, use_probe);
}
else {
@@ -1346,20 +1360,20 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#endif
case MLEVEL_BL:
if (draw)
- Draw_Menu_Item(row, ICON_AxisBL, "Bottom Left");
+ Draw_Menu_Item(row, ICON_AxisBL, F("Bottom Left"));
else {
Popup_Handler(MoveWait);
if (use_probe) {
#if HAS_BED_PROBE
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MIN, 1, 3, str_1), dtostrf(PROBE_Y_MIN, 1, 3, str_2));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Popup_Handler(ManualProbing);
#endif
}
else {
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s\nG0 F300 Z%s"), dtostrf(corner_pos, 1, 3, str_1), dtostrf(corner_pos, 1, 3, str_2), dtostrf(mlev_z_pos, 1, 3, str_3));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Redraw_Menu();
}
@@ -1367,20 +1381,20 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MLEVEL_TL:
if (draw)
- Draw_Menu_Item(row, ICON_AxisTL, "Top Left");
+ Draw_Menu_Item(row, ICON_AxisTL, F("Top Left"));
else {
Popup_Handler(MoveWait);
if (use_probe) {
#if HAS_BED_PROBE
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MIN, 1, 3, str_1), dtostrf(PROBE_Y_MAX, 1, 3, str_2));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Popup_Handler(ManualProbing);
#endif
}
else {
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s\nG0 F300 Z%s"), dtostrf(corner_pos, 1, 3, str_1), dtostrf((Y_BED_SIZE + Y_MIN_POS) - corner_pos, 1, 3, str_2), dtostrf(mlev_z_pos, 1, 3, str_3));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Redraw_Menu();
}
@@ -1388,20 +1402,20 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MLEVEL_TR:
if (draw)
- Draw_Menu_Item(row, ICON_AxisTR, "Top Right");
+ Draw_Menu_Item(row, ICON_AxisTR, F("Top Right"));
else {
Popup_Handler(MoveWait);
if (use_probe) {
#if HAS_BED_PROBE
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MAX, 1, 3, str_1), dtostrf(PROBE_Y_MAX, 1, 3, str_2));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Popup_Handler(ManualProbing);
#endif
}
else {
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s\nG0 F300 Z%s"), dtostrf((X_BED_SIZE + X_MIN_POS) - corner_pos, 1, 3, str_1), dtostrf((Y_BED_SIZE + Y_MIN_POS) - corner_pos, 1, 3, str_2), dtostrf(mlev_z_pos, 1, 3, str_3));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Redraw_Menu();
}
@@ -1409,20 +1423,20 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MLEVEL_BR:
if (draw)
- Draw_Menu_Item(row, ICON_AxisBR, "Bottom Right");
+ Draw_Menu_Item(row, ICON_AxisBR, F("Bottom Right"));
else {
Popup_Handler(MoveWait);
if (use_probe) {
#if HAS_BED_PROBE
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(PROBE_X_MAX, 1, 3, str_1), dtostrf(PROBE_Y_MIN, 1, 3, str_2));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Popup_Handler(ManualProbing);
#endif
}
else {
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s\nG0 F300 Z%s"), dtostrf((X_BED_SIZE + X_MIN_POS) - corner_pos, 1, 3, str_1), dtostrf(corner_pos, 1, 3, str_2), dtostrf(mlev_z_pos, 1, 3, str_3));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Redraw_Menu();
}
@@ -1430,20 +1444,20 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MLEVEL_C:
if (draw)
- Draw_Menu_Item(row, ICON_AxisC, "Center");
+ Draw_Menu_Item(row, ICON_AxisC, F("Center"));
else {
Popup_Handler(MoveWait);
if (use_probe) {
#if HAS_BED_PROBE
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s"), dtostrf(X_MAX_POS / 2.0f - probe.offset.x, 1, 3, str_1), dtostrf(Y_MAX_POS / 2.0f - probe.offset.y, 1, 3, str_2));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Popup_Handler(ManualProbing);
#endif
}
else {
sprintf_P(cmd, PSTR("G0 F4000\nG0 Z10\nG0 X%s Y%s\nG0 F300 Z%s"), dtostrf((X_BED_SIZE + X_MIN_POS) / 2.0f, 1, 3, str_1), dtostrf((Y_BED_SIZE + Y_MIN_POS) / 2.0f, 1, 3, str_2), dtostrf(mlev_z_pos, 1, 3, str_3));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Redraw_Menu();
}
@@ -1451,7 +1465,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MLEVEL_ZPOS:
if (draw) {
- Draw_Menu_Item(row, ICON_SetZOffset, "Z Position");
+ Draw_Menu_Item(row, ICON_SetZOffset, F("Z Position"));
Draw_Float(mlev_z_pos, row, false, 100);
}
else
@@ -1474,7 +1488,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case ZOFFSET_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else {
liveadjust = false;
TERN_(HAS_LEVELING, set_bed_leveling_enabled(level_state));
@@ -1483,26 +1497,26 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case ZOFFSET_HOME:
if (draw)
- Draw_Menu_Item(row, ICON_Homing, "Home Z Axis");
+ Draw_Menu_Item(row, ICON_Homing, F("Home Z Axis"));
else {
Popup_Handler(Home);
- gcode.process_subcommands_now_P(PSTR("G28 Z"));
+ gcode.process_subcommands_now(F("G28 Z"));
Popup_Handler(MoveWait);
#if ENABLED(Z_SAFE_HOMING)
planner.synchronize();
sprintf_P(cmd, PSTR("G0 F4000 X%s Y%s"), dtostrf(Z_SAFE_HOMING_X_POINT, 1, 3, str_1), dtostrf(Z_SAFE_HOMING_Y_POINT, 1, 3, str_2));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
#else
- gcode.process_subcommands_now_P(PSTR("G0 F4000 X117.5 Y117.5"));
+ gcode.process_subcommands_now(F("G0 F4000 X117.5 Y117.5"));
#endif
- gcode.process_subcommands_now_P(PSTR("G0 F300 Z0"));
+ gcode.process_subcommands_now(F("G0 F300 Z0"));
planner.synchronize();
Redraw_Menu();
}
break;
case ZOFFSET_MODE:
if (draw) {
- Draw_Menu_Item(row, ICON_Zoffset, "Live Adjustment");
+ Draw_Menu_Item(row, ICON_Zoffset, F("Live Adjustment"));
Draw_Checkbox(row, liveadjust);
}
else {
@@ -1515,11 +1529,11 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(Z_SAFE_HOMING)
planner.synchronize();
sprintf_P(cmd, PSTR("G0 F4000 X%s Y%s"), dtostrf(Z_SAFE_HOMING_X_POINT, 1, 3, str_1), dtostrf(Z_SAFE_HOMING_Y_POINT, 1, 3, str_2));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
#else
- gcode.process_subcommands_now_P(PSTR("G0 F4000 X117.5 Y117.5"));
+ gcode.process_subcommands_now(F("G0 F4000 X117.5 Y117.5"));
#endif
- gcode.process_subcommands_now_P(PSTR("G0 F300 Z0"));
+ gcode.process_subcommands_now(F("G0 F300 Z0"));
planner.synchronize();
Redraw_Menu();
}
@@ -1529,7 +1543,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case ZOFFSET_OFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_SetZOffset, "Z Offset");
+ Draw_Menu_Item(row, ICON_SetZOffset, F("Z Offset"));
Draw_Float(zoffsetvalue, row, false, 100);
}
else
@@ -1537,11 +1551,11 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case ZOFFSET_UP:
if (draw)
- Draw_Menu_Item(row, ICON_Axis, "Microstep Up");
+ Draw_Menu_Item(row, ICON_Axis, F("Microstep Up"));
else {
if (zoffsetvalue < MAX_Z_OFFSET) {
if (liveadjust) {
- gcode.process_subcommands_now_P(PSTR("M290 Z0.01"));
+ gcode.process_subcommands_now(F("M290 Z0.01"));
planner.synchronize();
}
zoffsetvalue += 0.01;
@@ -1551,11 +1565,11 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case ZOFFSET_DOWN:
if (draw)
- Draw_Menu_Item(row, ICON_AxisD, "Microstep Down");
+ Draw_Menu_Item(row, ICON_AxisD, F("Microstep Down"));
else {
if (zoffsetvalue > MIN_Z_OFFSET) {
if (liveadjust) {
- gcode.process_subcommands_now_P(PSTR("M290 Z-0.01"));
+ gcode.process_subcommands_now(F("M290 Z-0.01"));
planner.synchronize();
}
zoffsetvalue -= 0.01;
@@ -1566,7 +1580,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(EEPROM_SETTINGS)
case ZOFFSET_SAVE:
if (draw)
- Draw_Menu_Item(row, ICON_WriteEEPROM, "Save");
+ Draw_Menu_Item(row, ICON_WriteEEPROM, F("Save"));
else
AudioFeedback(settings.save());
break;
@@ -1589,13 +1603,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREHEAT_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Prepare, PREPARE_PREHEAT);
break;
case PREHEAT_MODE:
if (draw) {
- Draw_Menu_Item(row, ICON_Homing, "Preheat Mode");
+ Draw_Menu_Item(row, ICON_Homing, F("Preheat Mode"));
Draw_Option(preheatmode, preheat_modes, row);
}
else
@@ -1605,7 +1619,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 1
case PREHEAT_1:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_1_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_1_LABEL));
else {
thermalManager.disable_all_heaters();
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
@@ -1623,7 +1637,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 2
case PREHEAT_2:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_2_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_2_LABEL));
else {
thermalManager.disable_all_heaters();
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
@@ -1641,7 +1655,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 3
case PREHEAT_3:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_3_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_3_LABEL));
else {
thermalManager.disable_all_heaters();
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
@@ -1659,7 +1673,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 4
case PREHEAT_4:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_4_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_4_LABEL));
else {
thermalManager.disable_all_heaters();
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
@@ -1677,7 +1691,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 5
case PREHEAT_5:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_5_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_5_LABEL));
else {
thermalManager.disable_all_heaters();
TERN_(HAS_FAN, thermalManager.zero_fan_speeds());
@@ -1707,13 +1721,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case CHANGEFIL_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Prepare, PREPARE_CHANGEFIL);
break;
case CHANGEFIL_LOAD:
if (draw)
- Draw_Menu_Item(row, ICON_WriteEEPROM, "Load Filament");
+ Draw_Menu_Item(row, ICON_WriteEEPROM, F("Load Filament"));
else {
if (thermalManager.temp_hotend[0].target < thermalManager.extrude_min_temp)
Popup_Handler(ETemp);
@@ -1723,7 +1737,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
thermalManager.wait_for_hotend(0);
}
Popup_Handler(FilLoad);
- gcode.process_subcommands_now_P(PSTR("M701"));
+ gcode.process_subcommands_now(F("M701"));
planner.synchronize();
Redraw_Menu();
}
@@ -1731,7 +1745,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case CHANGEFIL_UNLOAD:
if (draw)
- Draw_Menu_Item(row, ICON_ReadEEPROM, "Unload Filament");
+ Draw_Menu_Item(row, ICON_ReadEEPROM, F("Unload Filament"));
else {
if (thermalManager.temp_hotend[0].target < thermalManager.extrude_min_temp) {
Popup_Handler(ETemp);
@@ -1742,7 +1756,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
thermalManager.wait_for_hotend(0);
}
Popup_Handler(FilLoad, true);
- gcode.process_subcommands_now_P(PSTR("M702"));
+ gcode.process_subcommands_now(F("M702"));
planner.synchronize();
Redraw_Menu();
}
@@ -1750,7 +1764,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case CHANGEFIL_CHANGE:
if (draw)
- Draw_Menu_Item(row, ICON_ResumeEEPROM, "Change Filament");
+ Draw_Menu_Item(row, ICON_ResumeEEPROM, F("Change Filament"));
else {
if (thermalManager.temp_hotend[0].target < thermalManager.extrude_min_temp)
Popup_Handler(ETemp);
@@ -1761,7 +1775,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
}
Popup_Handler(FilChange);
sprintf_P(cmd, PSTR("M600 B1 R%i"), thermalManager.temp_hotend[0].target);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
}
}
break;
@@ -1785,50 +1799,50 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case CONTROL_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Main_Menu(2);
break;
case CONTROL_TEMP:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, "Temperature", nullptr, true);
+ Draw_Menu_Item(row, ICON_Temperature, F("Temperature"), nullptr, true);
else
Draw_Menu(TempMenu);
break;
case CONTROL_MOTION:
if (draw)
- Draw_Menu_Item(row, ICON_Motion, "Motion", nullptr, true);
+ Draw_Menu_Item(row, ICON_Motion, F("Motion"), nullptr, true);
else
Draw_Menu(Motion);
break;
case CONTROL_VISUAL:
if (draw)
- Draw_Menu_Item(row, ICON_PrintSize, "Visual", nullptr, true);
+ Draw_Menu_Item(row, ICON_PrintSize, F("Visual"), nullptr, true);
else
Draw_Menu(Visual);
break;
case CONTROL_ADVANCED:
if (draw)
- Draw_Menu_Item(row, ICON_Version, "Advanced", nullptr, true);
+ Draw_Menu_Item(row, ICON_Version, F("Advanced"), nullptr, true);
else
Draw_Menu(Advanced);
break;
#if ENABLED(EEPROM_SETTINGS)
case CONTROL_SAVE:
if (draw)
- Draw_Menu_Item(row, ICON_WriteEEPROM, "Store Settings");
+ Draw_Menu_Item(row, ICON_WriteEEPROM, F("Store Settings"));
else
AudioFeedback(settings.save());
break;
case CONTROL_RESTORE:
if (draw)
- Draw_Menu_Item(row, ICON_ReadEEPROM, "Restore Settings");
+ Draw_Menu_Item(row, ICON_ReadEEPROM, F("Restore Settings"));
else
AudioFeedback(settings.load());
break;
case CONTROL_RESET:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, "Reset to Defaults");
+ Draw_Menu_Item(row, ICON_Temperature, F("Reset to Defaults"));
else {
settings.reset();
AudioFeedback();
@@ -1837,7 +1851,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#endif
case CONTROL_INFO:
if (draw)
- Draw_Menu_Item(row, ICON_Info, "Info");
+ Draw_Menu_Item(row, ICON_Info, F("Info"));
else
Draw_Menu(Info);
break;
@@ -1861,14 +1875,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case TEMP_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Control, CONTROL_TEMP);
break;
#if HAS_HOTEND
case TEMP_HOTEND:
if (draw) {
- Draw_Menu_Item(row, ICON_SetEndTemp, "Hotend");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Hotend"));
Draw_Float(thermalManager.temp_hotend[0].target, row, false, 1);
}
else
@@ -1878,7 +1892,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case TEMP_BED:
if (draw) {
- Draw_Menu_Item(row, ICON_SetBedTemp, "Bed");
+ Draw_Menu_Item(row, ICON_SetBedTemp, F("Bed"));
Draw_Float(thermalManager.temp_bed.target, row, false, 1);
}
else
@@ -1888,7 +1902,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_FAN
case TEMP_FAN:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Fan");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Fan"));
Draw_Float(thermalManager.fan_speed[0], row, false, 1);
}
else
@@ -1898,7 +1912,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HOTEND || HAS_HEATED_BED
case TEMP_PID:
if (draw)
- Draw_Menu_Item(row, ICON_Step, "PID", nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F("PID"), nullptr, true);
else
Draw_Menu(PID);
break;
@@ -1906,7 +1920,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 1
case TEMP_PREHEAT1:
if (draw)
- Draw_Menu_Item(row, ICON_Step, PREHEAT_1_LABEL, nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F(PREHEAT_1_LABEL), nullptr, true);
else
Draw_Menu(Preheat1);
break;
@@ -1914,7 +1928,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 2
case TEMP_PREHEAT2:
if (draw)
- Draw_Menu_Item(row, ICON_Step, PREHEAT_2_LABEL, nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F(PREHEAT_2_LABEL), nullptr, true);
else
Draw_Menu(Preheat2);
break;
@@ -1922,7 +1936,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 3
case TEMP_PREHEAT3:
if (draw)
- Draw_Menu_Item(row, ICON_Step, PREHEAT_3_LABEL, nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F(PREHEAT_3_LABEL), nullptr, true);
else
Draw_Menu(Preheat3);
break;
@@ -1930,7 +1944,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 4
case TEMP_PREHEAT4:
if (draw)
- Draw_Menu_Item(row, ICON_Step, PREHEAT_4_LABEL, nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F(PREHEAT_4_LABEL), nullptr, true);
else
Draw_Menu(Preheat4);
break;
@@ -1938,7 +1952,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 5
case TEMP_PREHEAT5:
if (draw)
- Draw_Menu_Item(row, ICON_Step, PREHEAT_5_LABEL, nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F(PREHEAT_5_LABEL), nullptr, true);
else
Draw_Menu(Preheat5);
break;
@@ -1960,14 +1974,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PID_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(TempMenu, TEMP_PID);
break;
#if HAS_HOTEND
case PID_HOTEND:
if (draw)
- Draw_Menu_Item(row, ICON_HotendTemp, "Hotend", nullptr, true);
+ Draw_Menu_Item(row, ICON_HotendTemp, F("Hotend"), nullptr, true);
else
Draw_Menu(HotendPID);
break;
@@ -1975,14 +1989,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case PID_BED:
if (draw)
- Draw_Menu_Item(row, ICON_BedTemp, "Bed", nullptr, true);
+ Draw_Menu_Item(row, ICON_BedTemp, F("Bed"), nullptr, true);
else
Draw_Menu(BedPID);
break;
#endif
case PID_CYCLES:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Cycles");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Cycles"));
Draw_Float(PID_cycles, row, false, 1);
}
else
@@ -2008,24 +2022,24 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case HOTENDPID_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(PID, PID_HOTEND);
break;
case HOTENDPID_TUNE:
if (draw)
- Draw_Menu_Item(row, ICON_HotendTemp, "Autotune");
+ Draw_Menu_Item(row, ICON_HotendTemp, F("Autotune"));
else {
Popup_Handler(PIDWait);
sprintf_P(cmd, PSTR("M303 E0 C%i S%i U1"), PID_cycles, PID_e_temp);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Redraw_Menu();
}
break;
case HOTENDPID_TEMP:
if (draw) {
- Draw_Menu_Item(row, ICON_Temperature, "Temperature");
+ Draw_Menu_Item(row, ICON_Temperature, F("Temperature"));
Draw_Float(PID_e_temp, row, false, 1);
}
else
@@ -2033,7 +2047,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case HOTENDPID_KP:
if (draw) {
- Draw_Menu_Item(row, ICON_Version, "Kp Value");
+ Draw_Menu_Item(row, ICON_Version, F("Kp Value"));
Draw_Float(thermalManager.temp_hotend[0].pid.Kp, row, false, 100);
}
else
@@ -2041,7 +2055,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case HOTENDPID_KI:
if (draw) {
- Draw_Menu_Item(row, ICON_Version, "Ki Value");
+ Draw_Menu_Item(row, ICON_Version, F("Ki Value"));
Draw_Float(unscalePID_i(thermalManager.temp_hotend[0].pid.Ki), row, false, 100);
}
else
@@ -2049,7 +2063,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case HOTENDPID_KD:
if (draw) {
- Draw_Menu_Item(row, ICON_Version, "Kd Value");
+ Draw_Menu_Item(row, ICON_Version, F("Kd Value"));
Draw_Float(unscalePID_d(thermalManager.temp_hotend[0].pid.Kd), row, false, 100);
}
else
@@ -2075,24 +2089,24 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case BEDPID_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(PID, PID_BED);
break;
case BEDPID_TUNE:
if (draw)
- Draw_Menu_Item(row, ICON_HotendTemp, "Autotune");
+ Draw_Menu_Item(row, ICON_HotendTemp, F("Autotune"));
else {
Popup_Handler(PIDWait);
sprintf_P(cmd, PSTR("M303 E-1 C%i S%i U1"), PID_cycles, PID_bed_temp);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
planner.synchronize();
Redraw_Menu();
}
break;
case BEDPID_TEMP:
if (draw) {
- Draw_Menu_Item(row, ICON_Temperature, "Temperature");
+ Draw_Menu_Item(row, ICON_Temperature, F("Temperature"));
Draw_Float(PID_bed_temp, row, false, 1);
}
else
@@ -2100,7 +2114,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case BEDPID_KP:
if (draw) {
- Draw_Menu_Item(row, ICON_Version, "Kp Value");
+ Draw_Menu_Item(row, ICON_Version, F("Kp Value"));
Draw_Float(thermalManager.temp_bed.pid.Kp, row, false, 100);
}
else {
@@ -2109,7 +2123,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case BEDPID_KI:
if (draw) {
- Draw_Menu_Item(row, ICON_Version, "Ki Value");
+ Draw_Menu_Item(row, ICON_Version, F("Ki Value"));
Draw_Float(unscalePID_i(thermalManager.temp_bed.pid.Ki), row, false, 100);
}
else
@@ -2117,7 +2131,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case BEDPID_KD:
if (draw) {
- Draw_Menu_Item(row, ICON_Version, "Kd Value");
+ Draw_Menu_Item(row, ICON_Version, F("Kd Value"));
Draw_Float(unscalePID_d(thermalManager.temp_bed.pid.Kd), row, false, 100);
}
else
@@ -2139,14 +2153,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREHEAT1_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(TempMenu, TEMP_PREHEAT1);
break;
#if HAS_HOTEND
case PREHEAT1_HOTEND:
if (draw) {
- Draw_Menu_Item(row, ICON_SetEndTemp, "Hotend");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Hotend"));
Draw_Float(ui.material_preset[0].hotend_temp, row, false, 1);
}
else
@@ -2156,7 +2170,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case PREHEAT1_BED:
if (draw) {
- Draw_Menu_Item(row, ICON_SetBedTemp, "Bed");
+ Draw_Menu_Item(row, ICON_SetBedTemp, F("Bed"));
Draw_Float(ui.material_preset[0].bed_temp, row, false, 1);
}
else
@@ -2166,7 +2180,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_FAN
case PREHEAT1_FAN:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Fan");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Fan"));
Draw_Float(ui.material_preset[0].fan_speed, row, false, 1);
}
else
@@ -2189,14 +2203,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREHEAT2_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(TempMenu, TEMP_PREHEAT2);
break;
#if HAS_HOTEND
case PREHEAT2_HOTEND:
if (draw) {
- Draw_Menu_Item(row, ICON_SetEndTemp, "Hotend");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Hotend"));
Draw_Float(ui.material_preset[1].hotend_temp, row, false, 1);
}
else
@@ -2206,7 +2220,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case PREHEAT2_BED:
if (draw) {
- Draw_Menu_Item(row, ICON_SetBedTemp, "Bed");
+ Draw_Menu_Item(row, ICON_SetBedTemp, F("Bed"));
Draw_Float(ui.material_preset[1].bed_temp, row, false, 1);
}
else
@@ -2216,7 +2230,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_FAN
case PREHEAT2_FAN:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Fan");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Fan"));
Draw_Float(ui.material_preset[1].fan_speed, row, false, 1);
}
else
@@ -2239,14 +2253,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREHEAT3_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(TempMenu, TEMP_PREHEAT3);
break;
#if HAS_HOTEND
case PREHEAT3_HOTEND:
if (draw) {
- Draw_Menu_Item(row, ICON_SetEndTemp, "Hotend");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Hotend"));
Draw_Float(ui.material_preset[2].hotend_temp, row, false, 1);
}
else
@@ -2256,7 +2270,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case PREHEAT3_BED:
if (draw) {
- Draw_Menu_Item(row, ICON_SetBedTemp, "Bed");
+ Draw_Menu_Item(row, ICON_SetBedTemp, F("Bed"));
Draw_Float(ui.material_preset[2].bed_temp, row, false, 1);
}
else
@@ -2266,7 +2280,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_FAN
case PREHEAT3_FAN:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Fan");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Fan"));
Draw_Float(ui.material_preset[2].fan_speed, row, false, 1);
}
else
@@ -2289,14 +2303,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREHEAT4_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(TempMenu, TEMP_PREHEAT4);
break;
#if HAS_HOTEND
case PREHEAT4_HOTEND:
if (draw) {
- Draw_Menu_Item(row, ICON_SetEndTemp, "Hotend");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Hotend"));
Draw_Float(ui.material_preset[3].hotend_temp, row, false, 1);
}
else
@@ -2306,7 +2320,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case PREHEAT4_BED:
if (draw) {
- Draw_Menu_Item(row, ICON_SetBedTemp, "Bed");
+ Draw_Menu_Item(row, ICON_SetBedTemp, F("Bed"));
Draw_Float(ui.material_preset[3].bed_temp, row, false, 1);
}
else
@@ -2316,7 +2330,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_FAN
case PREHEAT4_FAN:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Fan");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Fan"));
Draw_Float(ui.material_preset[3].fan_speed, row, false, 1);
}
else
@@ -2339,14 +2353,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREHEAT5_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(TempMenu, TEMP_PREHEAT5);
break;
#if HAS_HOTEND
case PREHEAT5_HOTEND:
if (draw) {
- Draw_Menu_Item(row, ICON_SetEndTemp, "Hotend");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Hotend"));
Draw_Float(ui.material_preset[4].hotend_temp, row, false, 1);
}
else
@@ -2356,7 +2370,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case PREHEAT5_BED:
if (draw) {
- Draw_Menu_Item(row, ICON_SetBedTemp, "Bed");
+ Draw_Menu_Item(row, ICON_SetBedTemp, F("Bed"));
Draw_Float(ui.material_preset[4].bed_temp, row, false, 1);
}
else
@@ -2366,7 +2380,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_FAN
case PREHEAT5_FAN:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Fan");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Fan"));
Draw_Float(ui.material_preset[4].fan_speed, row, false, 1);
}
else
@@ -2391,46 +2405,46 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case MOTION_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Control, CONTROL_MOTION);
break;
case MOTION_HOMEOFFSETS:
if (draw)
- Draw_Menu_Item(row, ICON_SetHome, "Home Offsets", nullptr, true);
+ Draw_Menu_Item(row, ICON_SetHome, F("Home Offsets"), nullptr, true);
else
Draw_Menu(HomeOffsets);
break;
case MOTION_SPEED:
if (draw)
- Draw_Menu_Item(row, ICON_MaxSpeed, "Max Speed", nullptr, true);
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Max Speed"), nullptr, true);
else
Draw_Menu(MaxSpeed);
break;
case MOTION_ACCEL:
if (draw)
- Draw_Menu_Item(row, ICON_MaxAccelerated, "Max Acceleration", nullptr, true);
+ Draw_Menu_Item(row, ICON_MaxAccelerated, F("Max Acceleration"), nullptr, true);
else
Draw_Menu(MaxAcceleration);
break;
#if HAS_CLASSIC_JERK
case MOTION_JERK:
if (draw)
- Draw_Menu_Item(row, ICON_MaxJerk, "Max Jerk", nullptr, true);
+ Draw_Menu_Item(row, ICON_MaxJerk, F("Max Jerk"), nullptr, true);
else
Draw_Menu(MaxJerk);
break;
#endif
case MOTION_STEPS:
if (draw)
- Draw_Menu_Item(row, ICON_Step, "Steps/mm", nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F("Steps/mm"), nullptr, true);
else
Draw_Menu(Steps);
break;
#if HAS_HOTEND
case MOTION_FLOW:
if (draw) {
- Draw_Menu_Item(row, ICON_Speed, "Flow Rate");
+ Draw_Menu_Item(row, ICON_Speed, F("Flow Rate"));
Draw_Float(planner.flow_percentage[0], row, false, 1);
}
else
@@ -2450,13 +2464,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case HOMEOFFSETS_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Motion, MOTION_HOMEOFFSETS);
break;
case HOMEOFFSETS_XOFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_StepX, "X Offset");
+ Draw_Menu_Item(row, ICON_StepX, F("X Offset"));
Draw_Float(home_offset.x, row, false, 100);
}
else
@@ -2464,7 +2478,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case HOMEOFFSETS_YOFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_StepY, "Y Offset");
+ Draw_Menu_Item(row, ICON_StepY, F("Y Offset"));
Draw_Float(home_offset.y, row, false, 100);
}
else
@@ -2484,13 +2498,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case SPEED_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Motion, MOTION_SPEED);
break;
case SPEED_X:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedX, "X Axis");
+ Draw_Menu_Item(row, ICON_MaxSpeedX, F("X Axis"));
Draw_Float(planner.settings.max_feedrate_mm_s[X_AXIS], row, false, 1);
}
else
@@ -2500,7 +2514,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_Y_AXIS
case SPEED_Y:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedY, "Y Axis");
+ Draw_Menu_Item(row, ICON_MaxSpeedY, F("Y Axis"));
Draw_Float(planner.settings.max_feedrate_mm_s[Y_AXIS], row, false, 1);
}
else
@@ -2511,7 +2525,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_Z_AXIS
case SPEED_Z:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedZ, "Z Axis");
+ Draw_Menu_Item(row, ICON_MaxSpeedZ, F("Z Axis"));
Draw_Float(planner.settings.max_feedrate_mm_s[Z_AXIS], row, false, 1);
}
else
@@ -2522,7 +2536,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HOTEND
case SPEED_E:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedE, "Extruder");
+ Draw_Menu_Item(row, ICON_MaxSpeedE, F("Extruder"));
Draw_Float(planner.settings.max_feedrate_mm_s[E_AXIS], row, false, 1);
}
else
@@ -2544,13 +2558,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case ACCEL_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Motion, MOTION_ACCEL);
break;
case ACCEL_X:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxAccX, "X Axis");
+ Draw_Menu_Item(row, ICON_MaxAccX, F("X Axis"));
Draw_Float(planner.settings.max_acceleration_mm_per_s2[X_AXIS], row, false, 1);
}
else
@@ -2558,7 +2572,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case ACCEL_Y:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxAccY, "Y Axis");
+ Draw_Menu_Item(row, ICON_MaxAccY, F("Y Axis"));
Draw_Float(planner.settings.max_acceleration_mm_per_s2[Y_AXIS], row, false, 1);
}
else
@@ -2566,7 +2580,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case ACCEL_Z:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxAccZ, "Z Axis");
+ Draw_Menu_Item(row, ICON_MaxAccZ, F("Z Axis"));
Draw_Float(planner.settings.max_acceleration_mm_per_s2[Z_AXIS], row, false, 1);
}
else
@@ -2575,7 +2589,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HOTEND
case ACCEL_E:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxAccE, "Extruder");
+ Draw_Menu_Item(row, ICON_MaxAccE, F("Extruder"));
Draw_Float(planner.settings.max_acceleration_mm_per_s2[E_AXIS], row, false, 1);
}
else
@@ -2597,13 +2611,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case JERK_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Motion, MOTION_JERK);
break;
case JERK_X:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedJerkX, "X Axis");
+ Draw_Menu_Item(row, ICON_MaxSpeedJerkX, F("X Axis"));
Draw_Float(planner.max_jerk[X_AXIS], row, false, 10);
}
else
@@ -2611,7 +2625,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case JERK_Y:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedJerkY, "Y Axis");
+ Draw_Menu_Item(row, ICON_MaxSpeedJerkY, F("Y Axis"));
Draw_Float(planner.max_jerk[Y_AXIS], row, false, 10);
}
else
@@ -2619,7 +2633,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case JERK_Z:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedJerkZ, "Z Axis");
+ Draw_Menu_Item(row, ICON_MaxSpeedJerkZ, F("Z Axis"));
Draw_Float(planner.max_jerk[Z_AXIS], row, false, 10);
}
else
@@ -2628,7 +2642,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HOTEND
case JERK_E:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeedJerkE, "Extruder");
+ Draw_Menu_Item(row, ICON_MaxSpeedJerkE, F("Extruder"));
Draw_Float(planner.max_jerk[E_AXIS], row, false, 10);
}
else
@@ -2650,13 +2664,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case STEPS_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Motion, MOTION_STEPS);
break;
case STEPS_X:
if (draw) {
- Draw_Menu_Item(row, ICON_StepX, "X Axis");
+ Draw_Menu_Item(row, ICON_StepX, F("X Axis"));
Draw_Float(planner.settings.axis_steps_per_mm[X_AXIS], row, false, 10);
}
else
@@ -2664,7 +2678,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case STEPS_Y:
if (draw) {
- Draw_Menu_Item(row, ICON_StepY, "Y Axis");
+ Draw_Menu_Item(row, ICON_StepY, F("Y Axis"));
Draw_Float(planner.settings.axis_steps_per_mm[Y_AXIS], row, false, 10);
}
else
@@ -2672,7 +2686,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case STEPS_Z:
if (draw) {
- Draw_Menu_Item(row, ICON_StepZ, "Z Axis");
+ Draw_Menu_Item(row, ICON_StepZ, F("Z Axis"));
Draw_Float(planner.settings.axis_steps_per_mm[Z_AXIS], row, false, 10);
}
else
@@ -2681,7 +2695,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HOTEND
case STEPS_E:
if (draw) {
- Draw_Menu_Item(row, ICON_StepE, "Extruder");
+ Draw_Menu_Item(row, ICON_StepE, F("Extruder"));
Draw_Float(planner.settings.axis_steps_per_mm[E_AXIS], row, false, 10);
}
else
@@ -2703,27 +2717,27 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case VISUAL_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Control, CONTROL_VISUAL);
break;
case VISUAL_BACKLIGHT:
if (draw)
- Draw_Menu_Item(row, ICON_Brightness, "Display Off");
+ Draw_Menu_Item(row, ICON_Brightness, F("Display Off"));
else
ui.set_brightness(0);
break;
case VISUAL_BRIGHTNESS:
if (draw) {
- Draw_Menu_Item(row, ICON_Brightness, "LCD Brightness");
+ Draw_Menu_Item(row, ICON_Brightness, F("LCD Brightness"));
Draw_Float(ui.brightness, row, false, 1);
}
else
- Modify_Value(ui.brightness, MIN_LCD_BRIGHTNESS, MAX_LCD_BRIGHTNESS, 1, ui.refresh_brightness);
+ Modify_Value(ui.brightness, LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, 1, ui.refresh_brightness);
break;
case VISUAL_TIME_FORMAT:
if (draw) {
- Draw_Menu_Item(row, ICON_PrintTime, "Progress as __h__m");
+ Draw_Menu_Item(row, ICON_PrintTime, F("Progress as __h__m"));
Draw_Checkbox(row, eeprom_settings.time_format_textual);
}
else {
@@ -2733,7 +2747,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case VISUAL_COLOR_THEMES:
if (draw)
- Draw_Menu_Item(row, ICON_MaxSpeed, "UI Color Settings", nullptr, true);
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("UI Color Settings"), nullptr, true);
else
Draw_Menu(ColorSettings);
break;
@@ -2759,13 +2773,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case COLORSETTINGS_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Visual, VISUAL_COLOR_THEMES);
break;
case COLORSETTINGS_CURSOR:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Cursor");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Cursor"));
Draw_Option(eeprom_settings.cursor_color, color_names, row, false, true);
}
else
@@ -2773,7 +2787,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_SPLIT_LINE:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Menu Split Line");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Menu Split Line"));
Draw_Option(eeprom_settings.menu_split_line, color_names, row, false, true);
}
else
@@ -2781,7 +2795,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_MENU_TOP_TXT:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Menu Header Text");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Menu Header Text"));
Draw_Option(eeprom_settings.menu_top_txt, color_names, row, false, true);
}
else
@@ -2789,7 +2803,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_MENU_TOP_BG:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Menu Header Bg");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Menu Header Bg"));
Draw_Option(eeprom_settings.menu_top_bg, color_names, row, false, true);
}
else
@@ -2797,7 +2811,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_HIGHLIGHT_BORDER:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Highlight Box");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Highlight Box"));
Draw_Option(eeprom_settings.highlight_box, color_names, row, false, true);
}
else
@@ -2805,7 +2819,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_PROGRESS_PERCENT:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Progress Percent");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Progress Percent"));
Draw_Option(eeprom_settings.progress_percent, color_names, row, false, true);
}
else
@@ -2813,7 +2827,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_PROGRESS_TIME:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Progress Time");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Progress Time"));
Draw_Option(eeprom_settings.progress_time, color_names, row, false, true);
}
else
@@ -2821,7 +2835,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_PROGRESS_STATUS_BAR:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Status Bar Text");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Status Bar Text"));
Draw_Option(eeprom_settings.status_bar_text, color_names, row, false, true);
}
else
@@ -2829,7 +2843,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_PROGRESS_STATUS_AREA:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Status Area Text");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Status Area Text"));
Draw_Option(eeprom_settings.status_area_text, color_names, row, false, true);
}
else
@@ -2837,7 +2851,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_PROGRESS_COORDINATES:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Coordinates Text");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Coordinates Text"));
Draw_Option(eeprom_settings.coordinates_text, color_names, row, false, true);
}
else
@@ -2845,7 +2859,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case COLORSETTINGS_PROGRESS_COORDINATES_LINE:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxSpeed, "Coordinates Line");
+ Draw_Menu_Item(row, ICON_MaxSpeed, F("Coordinates Line"));
Draw_Option(eeprom_settings.coordinates_split_line, color_names, row, false, true);
}
else
@@ -2857,7 +2871,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
case Advanced:
#define ADVANCED_BACK 0
- #define ADVANCED_BEEPER (ADVANCED_BACK + 1)
+ #define ADVANCED_BEEPER (ADVANCED_BACK + ENABLED(SOUND_MENU_ITEM))
#define ADVANCED_PROBE (ADVANCED_BEEPER + ENABLED(HAS_BED_PROBE))
#define ADVANCED_CORNER (ADVANCED_PROBE + 1)
#define ADVANCED_LA (ADVANCED_CORNER + ENABLED(LIN_ADVANCE))
@@ -2872,26 +2886,28 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case ADVANCED_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Control, CONTROL_ADVANCED);
break;
- case ADVANCED_BEEPER:
- if (draw) {
- Draw_Menu_Item(row, ICON_Version, "LCD Beeper");
- Draw_Checkbox(row, eeprom_settings.beeperenable);
- }
- else {
- eeprom_settings.beeperenable = !eeprom_settings.beeperenable;
- Draw_Checkbox(row, eeprom_settings.beeperenable);
- }
- break;
+ #if ENABLED(SOUND_MENU_ITEM)
+ case ADVANCED_BEEPER:
+ if (draw) {
+ Draw_Menu_Item(row, ICON_Version, F("LCD Beeper"));
+ Draw_Checkbox(row, ui.buzzer_enabled);
+ }
+ else {
+ ui.buzzer_enabled = !ui.buzzer_enabled;
+ Draw_Checkbox(row, ui.buzzer_enabled);
+ }
+ break;
+ #endif
#if HAS_BED_PROBE
case ADVANCED_PROBE:
if (draw)
- Draw_Menu_Item(row, ICON_StepX, "Probe", nullptr, true);
+ Draw_Menu_Item(row, ICON_StepX, F("Probe"), nullptr, true);
else
Draw_Menu(ProbeMenu);
break;
@@ -2899,7 +2915,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
case ADVANCED_CORNER:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxAccelerated, "Bed Screw Inset");
+ Draw_Menu_Item(row, ICON_MaxAccelerated, F("Bed Screw Inset"));
Draw_Float(corner_pos, row, false, 10);
}
else
@@ -2909,7 +2925,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(LIN_ADVANCE)
case ADVANCED_LA:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxAccelerated, "Lin Advance Kp");
+ Draw_Menu_Item(row, ICON_MaxAccelerated, F("Lin Advance Kp"));
Draw_Float(planner.extruder_advance_K[0], row, false, 100);
}
else
@@ -2920,7 +2936,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(ADVANCED_PAUSE_FEATURE)
case ADVANCED_LOAD:
if (draw) {
- Draw_Menu_Item(row, ICON_WriteEEPROM, "Load Length");
+ Draw_Menu_Item(row, ICON_WriteEEPROM, F("Load Length"));
Draw_Float(fc_settings[0].load_length, row, false, 1);
}
else
@@ -2928,7 +2944,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case ADVANCED_UNLOAD:
if (draw) {
- Draw_Menu_Item(row, ICON_ReadEEPROM, "Unload Length");
+ Draw_Menu_Item(row, ICON_ReadEEPROM, F("Unload Length"));
Draw_Float(fc_settings[0].unload_length, row, false, 1);
}
else
@@ -2939,7 +2955,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(PREVENT_COLD_EXTRUSION)
case ADVANCED_COLD_EXTRUDE:
if (draw) {
- Draw_Menu_Item(row, ICON_Cool, "Min Extrusion T");
+ Draw_Menu_Item(row, ICON_Cool, F("Min Extrusion T"));
Draw_Float(thermalManager.extrude_min_temp, row, false, 1);
}
else {
@@ -2952,7 +2968,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
case ADVANCED_FILSENSORENABLED:
if (draw) {
- Draw_Menu_Item(row, ICON_Extruder, "Filament Sensor");
+ Draw_Menu_Item(row, ICON_Extruder, F("Filament Sensor"));
Draw_Checkbox(row, runout.enabled);
}
else {
@@ -2964,7 +2980,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(HAS_FILAMENT_RUNOUT_DISTANCE)
case ADVANCED_FILSENSORDISTANCE:
if (draw) {
- Draw_Menu_Item(row, ICON_MaxAccE, "Runout Distance");
+ Draw_Menu_Item(row, ICON_MaxAccE, F("Runout Distance"));
Draw_Float(runout.runout_distance(), row, false, 10);
}
else
@@ -2976,7 +2992,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(POWER_LOSS_RECOVERY)
case ADVANCED_POWER_LOSS:
if (draw) {
- Draw_Menu_Item(row, ICON_Motion, "Power-loss recovery");
+ Draw_Menu_Item(row, ICON_Motion, F("Power-loss recovery"));
Draw_Checkbox(row, recovery.enabled);
}
else {
@@ -3003,14 +3019,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PROBE_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Advanced, ADVANCED_PROBE);
break;
case PROBE_XOFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_StepX, "Probe X Offset");
+ Draw_Menu_Item(row, ICON_StepX, F("Probe X Offset"));
Draw_Float(probe.offset.x, row, false, 10);
}
else
@@ -3018,7 +3034,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case PROBE_YOFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_StepY, "Probe Y Offset");
+ Draw_Menu_Item(row, ICON_StepY, F("Probe Y Offset"));
Draw_Float(probe.offset.y, row, false, 10);
}
else
@@ -3026,15 +3042,15 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case PROBE_TEST:
if (draw)
- Draw_Menu_Item(row, ICON_StepY, "M48 Probe Test");
+ Draw_Menu_Item(row, ICON_StepY, F("M48 Probe Test"));
else {
sprintf_P(cmd, PSTR("G28O\nM48 X%s Y%s P%i"), dtostrf((X_BED_SIZE + X_MIN_POS) / 2.0f, 1, 3, str_1), dtostrf((Y_BED_SIZE + Y_MIN_POS) / 2.0f, 1, 3, str_2), testcount);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
}
break;
case PROBE_TEST_COUNT:
if (draw) {
- Draw_Menu_Item(row, ICON_StepY, "Probe Test Count");
+ Draw_Menu_Item(row, ICON_StepY, F("Probe Test Count"));
Draw_Float(testcount, row, false, 1);
}
else
@@ -3058,7 +3074,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case INFO_BACK:
if (draw) {
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
#if ENABLED(PRINTCOUNTER)
char row1[50], row2[50], buf[32];
@@ -3075,9 +3091,9 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
Draw_Menu_Item(INFO_PRINTTIME, ICON_PrintTime, row1, row2, false, true);
#endif
- Draw_Menu_Item(INFO_SIZE, ICON_PrintSize, MACHINE_SIZE, nullptr, false, true);
- Draw_Menu_Item(INFO_VERSION, ICON_Version, SHORT_BUILD_VERSION, nullptr, false, true);
- Draw_Menu_Item(INFO_CONTACT, ICON_Contact, CORP_WEBSITE, nullptr, false, true);
+ Draw_Menu_Item(INFO_SIZE, ICON_PrintSize, F(MACHINE_SIZE), nullptr, false, true);
+ Draw_Menu_Item(INFO_VERSION, ICON_Version, F(SHORT_BUILD_VERSION), nullptr, false, true);
+ Draw_Menu_Item(INFO_CONTACT, ICON_Contact, F(CORP_WEBSITE), nullptr, false, true);
}
else {
if (menu == Info)
@@ -3107,13 +3123,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case LEVELING_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Main_Menu(3);
break;
case LEVELING_ACTIVE:
if (draw) {
- Draw_Menu_Item(row, ICON_StockConfiguraton, "Leveling Active");
+ Draw_Menu_Item(row, ICON_StockConfiguration, F("Leveling Active"));
Draw_Checkbox(row, planner.leveling_active);
}
else {
@@ -3132,7 +3148,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if BOTH(HAS_BED_PROBE, AUTO_BED_LEVELING_UBL)
case LEVELING_GET_TILT:
if (draw)
- Draw_Menu_Item(row, ICON_Tilt, "Autotilt Current Mesh");
+ Draw_Menu_Item(row, ICON_Tilt, F("Autotilt Current Mesh"));
else {
if (ubl.storage_slot < 0) {
Popup_Handler(MeshSlot);
@@ -3141,11 +3157,12 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
Popup_Handler(Home);
gcode.home_all_axes(true);
Popup_Handler(Level);
- if (mesh_conf.tilt_grid > 1)
+ if (mesh_conf.tilt_grid > 1) {
sprintf_P(cmd, PSTR("G29 J%i"), mesh_conf.tilt_grid);
+ gcode.process_subcommands_now(cmd);
+ }
else
- sprintf_P(cmd, PSTR("G29 J"));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(F("G29 J"));
planner.synchronize();
Redraw_Menu();
}
@@ -3153,7 +3170,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#endif
case LEVELING_GET_MESH:
if (draw)
- Draw_Menu_Item(row, ICON_Mesh, "Create New Mesh");
+ Draw_Menu_Item(row, ICON_Mesh, F("Create New Mesh"));
else {
Popup_Handler(Home);
gcode.home_all_axes(true);
@@ -3173,8 +3190,8 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#endif
#if HAS_BED_PROBE
Popup_Handler(Level);
- gcode.process_subcommands_now_P(PSTR("G29 P0\nG29 P1"));
- gcode.process_subcommands_now_P(PSTR("G29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nM420 S1"));
+ gcode.process_subcommands_now(F("G29 P0\nG29 P1"));
+ gcode.process_subcommands_now(F("G29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nG29 P3\nM420 S1"));
planner.synchronize();
Update_Status("Probed all reachable points");
Popup_Handler(SaveLevel);
@@ -3189,7 +3206,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#endif
#elif HAS_BED_PROBE
Popup_Handler(Level);
- gcode.process_subcommands_now_P(PSTR("G29"));
+ gcode.process_subcommands_now(F("G29"));
planner.synchronize();
Popup_Handler(SaveLevel);
#else
@@ -3197,7 +3214,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
set_bed_leveling_enabled(false);
gridpoint = 1;
Popup_Handler(MoveWait);
- gcode.process_subcommands_now_P(PSTR("G29"));
+ gcode.process_subcommands_now(F("G29"));
planner.synchronize();
Draw_Menu(ManualMesh);
#endif
@@ -3205,7 +3222,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_MANUAL:
if (draw)
- Draw_Menu_Item(row, ICON_Mesh, "Manual Tuning", nullptr, true);
+ Draw_Menu_Item(row, ICON_Mesh, F("Manual Tuning"), nullptr, true);
else {
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
if (!leveling_is_valid()) {
@@ -3246,7 +3263,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_VIEW:
if (draw)
- Draw_Menu_Item(row, ICON_Mesh, "Mesh Viewer", nullptr, true);
+ Draw_Menu_Item(row, ICON_Mesh, GET_TEXT(MSG_MESH_VIEW), nullptr, true);
else {
#if ENABLED(AUTO_BED_LEVELING_UBL)
if (ubl.storage_slot < 0) {
@@ -3259,14 +3276,14 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_SETTINGS:
if (draw)
- Draw_Menu_Item(row, ICON_Step, "Leveling Settings", nullptr, true);
+ Draw_Menu_Item(row, ICON_Step, F("Leveling Settings"), nullptr, true);
else
Draw_Menu(LevelSettings);
break;
#if ENABLED(AUTO_BED_LEVELING_UBL)
case LEVELING_SLOT:
if (draw) {
- Draw_Menu_Item(row, ICON_PrintSize, "Mesh Slot");
+ Draw_Menu_Item(row, ICON_PrintSize, F("Mesh Slot"));
Draw_Float(ubl.storage_slot, row, false, 1);
}
else
@@ -3274,26 +3291,26 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_LOAD:
if (draw)
- Draw_Menu_Item(row, ICON_ReadEEPROM, "Load Mesh");
+ Draw_Menu_Item(row, ICON_ReadEEPROM, F("Load Mesh"));
else {
if (ubl.storage_slot < 0) {
Popup_Handler(MeshSlot);
break;
}
- gcode.process_subcommands_now_P(PSTR("G29 L"));
+ gcode.process_subcommands_now(F("G29 L"));
planner.synchronize();
AudioFeedback(true);
}
break;
case LEVELING_SAVE:
if (draw)
- Draw_Menu_Item(row, ICON_WriteEEPROM, "Save Mesh");
+ Draw_Menu_Item(row, ICON_WriteEEPROM, F("Save Mesh"));
else {
if (ubl.storage_slot < 0) {
Popup_Handler(MeshSlot);
break;
}
- gcode.process_subcommands_now_P(PSTR("G29 S"));
+ gcode.process_subcommands_now(F("G29 S"));
planner.synchronize();
AudioFeedback(true);
}
@@ -3313,19 +3330,19 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case LEVELING_VIEW_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Leveling, LEVELING_VIEW);
break;
case LEVELING_VIEW_MESH:
if (draw)
- Draw_Menu_Item(row, ICON_PrintSize, "Mesh Viewer", nullptr, true);
+ Draw_Menu_Item(row, ICON_PrintSize, GET_TEXT(MSG_MESH_VIEW), nullptr, true);
else
Draw_Menu(MeshViewer);
break;
case LEVELING_VIEW_TEXT:
if (draw) {
- Draw_Menu_Item(row, ICON_Contact, "Viewer Show Values");
+ Draw_Menu_Item(row, ICON_Contact, F("Viewer Show Values"));
Draw_Checkbox(row, mesh_conf.viewer_print_value);
}
else {
@@ -3335,7 +3352,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_VIEW_ASYMMETRIC:
if (draw) {
- Draw_Menu_Item(row, ICON_Axis, "Viewer Asymmetric");
+ Draw_Menu_Item(row, ICON_Axis, F("Viewer Asymmetric"));
Draw_Checkbox(row, mesh_conf.viewer_asymmetric_range);
}
else {
@@ -3359,13 +3376,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case LEVELING_SETTINGS_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Menu(Leveling, LEVELING_SETTINGS);
break;
case LEVELING_SETTINGS_FADE:
if (draw) {
- Draw_Menu_Item(row, ICON_Fade, "Fade Mesh within");
+ Draw_Menu_Item(row, ICON_Fade, F("Fade Mesh within"));
Draw_Float(planner.z_fade_height, row, false, 1);
}
else {
@@ -3378,7 +3395,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(AUTO_BED_LEVELING_UBL)
case LEVELING_SETTINGS_TILT:
if (draw) {
- Draw_Menu_Item(row, ICON_Tilt, "Tilting Grid Size");
+ Draw_Menu_Item(row, ICON_Tilt, F("Tilting Grid Size"));
Draw_Float(mesh_conf.tilt_grid, row, false, 1);
}
else
@@ -3386,23 +3403,23 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_SETTINGS_PLANE:
if (draw)
- Draw_Menu_Item(row, ICON_ResumeEEPROM, "Convert Mesh to Plane");
+ Draw_Menu_Item(row, ICON_ResumeEEPROM, F("Convert Mesh to Plane"));
else {
if (mesh_conf.create_plane_from_mesh()) break;
- gcode.process_subcommands_now_P(PSTR("M420 S1"));
+ gcode.process_subcommands_now(F("M420 S1"));
planner.synchronize();
AudioFeedback(true);
}
break;
case LEVELING_SETTINGS_ZERO:
if (draw)
- Draw_Menu_Item(row, ICON_Mesh, "Zero Current Mesh");
+ Draw_Menu_Item(row, ICON_Mesh, F("Zero Current Mesh"));
else
- ZERO(mesh_conf.mesh_z_values);
+ ZERO(Z_VALUES_ARR);
break;
case LEVELING_SETTINGS_UNDEF:
if (draw)
- Draw_Menu_Item(row, ICON_Mesh, "Clear Current Mesh");
+ Draw_Menu_Item(row, ICON_Mesh, F("Clear Current Mesh"));
else
ubl.invalidate();
break;
@@ -3416,7 +3433,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
if (item == MESHVIEW_BACK) {
if (draw) {
- Draw_Menu_Item(0, ICON_Back, "Back");
+ Draw_Menu_Item(0, ICON_Back, F("Back"));
mesh_conf.Draw_Bed_Mesh();
mesh_conf.Set_Mesh_Viewer_Status();
}
@@ -3443,7 +3460,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case LEVELING_M_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else {
set_bed_leveling_enabled(level_state);
TERN_(AUTO_BED_LEVELING_BILINEAR, refresh_bed_level());
@@ -3452,7 +3469,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_M_X:
if (draw) {
- Draw_Menu_Item(row, ICON_MoveX, "Mesh Point X");
+ Draw_Menu_Item(row, ICON_MoveX, F("Mesh Point X"));
Draw_Float(mesh_conf.mesh_x, row, 0, 1);
}
else
@@ -3460,7 +3477,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_M_Y:
if (draw) {
- Draw_Menu_Item(row, ICON_MoveY, "Mesh Point Y");
+ Draw_Menu_Item(row, ICON_MoveY, F("Mesh Point Y"));
Draw_Float(mesh_conf.mesh_y, row, 0, 1);
}
else
@@ -3468,7 +3485,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_M_NEXT:
if (draw)
- Draw_Menu_Item(row, ICON_More, "Next Point");
+ Draw_Menu_Item(row, ICON_More, F("Next Point"));
else {
if (mesh_conf.mesh_x != (GRID_MAX_POINTS_X - 1) || mesh_conf.mesh_y != (GRID_MAX_POINTS_Y - 1)) {
if ((mesh_conf.mesh_x == (GRID_MAX_POINTS_X - 1) && mesh_conf.mesh_y % 2 == 0) || (mesh_conf.mesh_x == 0 && mesh_conf.mesh_y % 2 == 1))
@@ -3483,42 +3500,42 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case LEVELING_M_OFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_SetZOffset, "Point Z Offset");
- Draw_Float(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], row, false, 100);
+ Draw_Menu_Item(row, ICON_SetZOffset, F("Point Z Offset"));
+ Draw_Float(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], row, false, 100);
}
else {
- if (isnan(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y]))
- mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] = 0;
- Modify_Value(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], MIN_Z_OFFSET, MAX_Z_OFFSET, 100);
+ if (isnan(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y]))
+ Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] = 0;
+ Modify_Value(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], MIN_Z_OFFSET, MAX_Z_OFFSET, 100);
}
break;
case LEVELING_M_UP:
if (draw)
- Draw_Menu_Item(row, ICON_Axis, "Microstep Up");
- else if (mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] < MAX_Z_OFFSET) {
- mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] += 0.01;
- gcode.process_subcommands_now_P(PSTR("M290 Z0.01"));
+ Draw_Menu_Item(row, ICON_Axis, F("Microstep Up"));
+ else if (Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] < MAX_Z_OFFSET) {
+ Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] += 0.01;
+ gcode.process_subcommands_now(F("M290 Z0.01"));
planner.synchronize();
current_position.z += 0.01f;
sync_plan_position();
- Draw_Float(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 1, false, 100);
+ Draw_Float(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 1, false, 100);
}
break;
case LEVELING_M_DOWN:
if (draw)
- Draw_Menu_Item(row, ICON_AxisD, "Microstep Down");
- else if (mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] > MIN_Z_OFFSET) {
- mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] -= 0.01;
- gcode.process_subcommands_now_P(PSTR("M290 Z-0.01"));
+ Draw_Menu_Item(row, ICON_AxisD, F("Microstep Down"));
+ else if (Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] > MIN_Z_OFFSET) {
+ Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] -= 0.01;
+ gcode.process_subcommands_now(F("M290 Z-0.01"));
planner.synchronize();
current_position.z -= 0.01f;
sync_plan_position();
- Draw_Float(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 2, false, 100);
+ Draw_Float(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 2, false, 100);
}
break;
case LEVELING_M_GOTO_VALUE:
if (draw) {
- Draw_Menu_Item(row, ICON_StockConfiguraton, "Go to Mesh Z Value");
+ Draw_Menu_Item(row, ICON_StockConfiguration, F("Go to Mesh Z Value"));
Draw_Checkbox(row, mesh_conf.goto_mesh_value);
}
else {
@@ -3531,7 +3548,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(AUTO_BED_LEVELING_UBL)
case LEVELING_M_UNDEF:
if (draw)
- Draw_Menu_Item(row, ICON_ResumeEEPROM, "Clear Point Value");
+ Draw_Menu_Item(row, ICON_ResumeEEPROM, F("Clear Point Value"));
else {
mesh_conf.manual_value_update(true);
Redraw_Menu(false);
@@ -3556,7 +3573,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case UBL_M_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else {
set_bed_leveling_enabled(level_state);
Draw_Menu(Leveling, LEVELING_GET_MESH);
@@ -3565,9 +3582,9 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
case UBL_M_NEXT:
if (draw) {
if (mesh_conf.mesh_x != (GRID_MAX_POINTS_X - 1) || mesh_conf.mesh_y != (GRID_MAX_POINTS_Y - 1))
- Draw_Menu_Item(row, ICON_More, "Next Point");
+ Draw_Menu_Item(row, ICON_More, F("Next Point"));
else
- Draw_Menu_Item(row, ICON_More, "Save Mesh");
+ Draw_Menu_Item(row, ICON_More, F("Save Mesh"));
}
else {
if (mesh_conf.mesh_x != (GRID_MAX_POINTS_X - 1) || mesh_conf.mesh_y != (GRID_MAX_POINTS_Y - 1)) {
@@ -3580,7 +3597,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
mesh_conf.manual_move();
}
else {
- gcode.process_subcommands_now_P(PSTR("G29 S"));
+ gcode.process_subcommands_now(F("G29 S"));
planner.synchronize();
AudioFeedback(true);
Draw_Menu(Leveling, LEVELING_GET_MESH);
@@ -3589,7 +3606,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case UBL_M_PREV:
if (draw)
- Draw_Menu_Item(row, ICON_More, "Previous Point");
+ Draw_Menu_Item(row, ICON_More, F("Previous Point"));
else {
if (mesh_conf.mesh_x != 0 || mesh_conf.mesh_y != 0) {
if ((mesh_conf.mesh_x == (GRID_MAX_POINTS_X - 1) && mesh_conf.mesh_y % 2 == 1) || (mesh_conf.mesh_x == 0 && mesh_conf.mesh_y % 2 == 0))
@@ -3604,37 +3621,37 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case UBL_M_OFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_SetZOffset, "Point Z Offset");
- Draw_Float(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], row, false, 100);
+ Draw_Menu_Item(row, ICON_SetZOffset, F("Point Z Offset"));
+ Draw_Float(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], row, false, 100);
}
else {
- if (isnan(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y]))
- mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] = 0;
- Modify_Value(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], MIN_Z_OFFSET, MAX_Z_OFFSET, 100);
+ if (isnan(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y]))
+ Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] = 0;
+ Modify_Value(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], MIN_Z_OFFSET, MAX_Z_OFFSET, 100);
}
break;
case UBL_M_UP:
if (draw)
- Draw_Menu_Item(row, ICON_Axis, "Microstep Up");
- else if (mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] < MAX_Z_OFFSET) {
- mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] += 0.01;
- gcode.process_subcommands_now_P(PSTR("M290 Z0.01"));
+ Draw_Menu_Item(row, ICON_Axis, F("Microstep Up"));
+ else if (Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] < MAX_Z_OFFSET) {
+ Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] += 0.01;
+ gcode.process_subcommands_now(F("M290 Z0.01"));
planner.synchronize();
current_position.z += 0.01f;
sync_plan_position();
- Draw_Float(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 1, false, 100);
+ Draw_Float(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 1, false, 100);
}
break;
case UBL_M_DOWN:
if (draw)
- Draw_Menu_Item(row, ICON_Axis, "Microstep Down");
- else if (mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] > MIN_Z_OFFSET) {
- mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y] -= 0.01;
- gcode.process_subcommands_now_P(PSTR("M290 Z-0.01"));
+ Draw_Menu_Item(row, ICON_Axis, F("Microstep Down"));
+ else if (Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] > MIN_Z_OFFSET) {
+ Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y] -= 0.01;
+ gcode.process_subcommands_now(F("M290 Z-0.01"));
planner.synchronize();
current_position.z -= 0.01f;
sync_plan_position();
- Draw_Float(mesh_conf.mesh_z_values[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 2, false, 100);
+ Draw_Float(Z_VALUES_ARR[mesh_conf.mesh_x][mesh_conf.mesh_y], row - 2, false, 100);
}
break;
}
@@ -3655,9 +3672,9 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case MMESH_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Cancel");
+ Draw_Menu_Item(row, ICON_Back, F("Cancel"));
else {
- gcode.process_subcommands_now_P(PSTR("G29 A"));
+ gcode.process_subcommands_now(F("G29 A"));
planner.synchronize();
set_bed_leveling_enabled(level_state);
Draw_Menu(Leveling, LEVELING_GET_MESH);
@@ -3666,19 +3683,19 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
case MMESH_NEXT:
if (draw) {
if (gridpoint < GRID_MAX_POINTS)
- Draw_Menu_Item(row, ICON_More, "Next Point");
+ Draw_Menu_Item(row, ICON_More, F("Next Point"));
else
- Draw_Menu_Item(row, ICON_More, "Save Mesh");
+ Draw_Menu_Item(row, ICON_More, F("Save Mesh"));
}
else if (gridpoint < GRID_MAX_POINTS) {
Popup_Handler(MoveWait);
- gcode.process_subcommands_now_P(PSTR("G29"));
+ gcode.process_subcommands_now(F("G29"));
planner.synchronize();
gridpoint++;
Redraw_Menu();
}
else {
- gcode.process_subcommands_now_P(PSTR("G29"));
+ gcode.process_subcommands_now(F("G29"));
planner.synchronize();
AudioFeedback(settings.save());
Draw_Menu(Leveling, LEVELING_GET_MESH);
@@ -3686,7 +3703,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MMESH_OFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_SetZOffset, "Z Position");
+ Draw_Menu_Item(row, ICON_SetZOffset, F("Z Position"));
current_position.z = MANUAL_PROBE_START_Z;
Draw_Float(current_position.z, row, false, 100);
}
@@ -3695,9 +3712,9 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MMESH_UP:
if (draw)
- Draw_Menu_Item(row, ICON_Axis, "Microstep Up");
+ Draw_Menu_Item(row, ICON_Axis, F("Microstep Up"));
else if (current_position.z < MAX_Z_OFFSET) {
- gcode.process_subcommands_now_P(PSTR("M290 Z0.01"));
+ gcode.process_subcommands_now(F("M290 Z0.01"));
planner.synchronize();
current_position.z += 0.01f;
sync_plan_position();
@@ -3706,9 +3723,9 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case MMESH_DOWN:
if (draw)
- Draw_Menu_Item(row, ICON_AxisD, "Microstep Down");
+ Draw_Menu_Item(row, ICON_AxisD, F("Microstep Down"));
else if (current_position.z > MIN_Z_OFFSET) {
- gcode.process_subcommands_now_P(PSTR("M290 Z-0.01"));
+ gcode.process_subcommands_now(F("M290 Z-0.01"));
planner.synchronize();
current_position.z -= 0.01f;
sync_plan_position();
@@ -3724,10 +3741,10 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
if (mesh_y % 2 == 1)
mesh_x = GRID_MAX_POINTS_X - mesh_x - 1;
- const float currval = mesh_conf.mesh_z_values[mesh_x][mesh_y];
+ const float currval = Z_VALUES_ARR[mesh_x][mesh_y];
if (draw) {
- Draw_Menu_Item(row, ICON_Zoffset, "Goto Mesh Value");
+ Draw_Menu_Item(row, ICON_Zoffset, F("Goto Mesh Value"));
Draw_Float(currval, row, false, 100);
}
else if (!isnan(currval)) {
@@ -3762,13 +3779,13 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case TUNE_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Back");
+ Draw_Menu_Item(row, ICON_Back, F("Back"));
else
Draw_Print_Screen();
break;
case TUNE_SPEED:
if (draw) {
- Draw_Menu_Item(row, ICON_Speed, "Print Speed");
+ Draw_Menu_Item(row, ICON_Speed, F("Print Speed"));
Draw_Float(feedrate_percentage, row, false, 1);
}
else
@@ -3778,7 +3795,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HOTEND
case TUNE_FLOW:
if (draw) {
- Draw_Menu_Item(row, ICON_Speed, "Flow Rate");
+ Draw_Menu_Item(row, ICON_Speed, F("Flow Rate"));
Draw_Float(planner.flow_percentage[0], row, false, 1);
}
else
@@ -3786,7 +3803,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case TUNE_HOTEND:
if (draw) {
- Draw_Menu_Item(row, ICON_SetEndTemp, "Hotend");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Hotend"));
Draw_Float(thermalManager.temp_hotend[0].target, row, false, 1);
}
else
@@ -3797,7 +3814,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_HEATED_BED
case TUNE_BED:
if (draw) {
- Draw_Menu_Item(row, ICON_SetBedTemp, "Bed");
+ Draw_Menu_Item(row, ICON_SetBedTemp, F("Bed"));
Draw_Float(thermalManager.temp_bed.target, row, false, 1);
}
else
@@ -3808,7 +3825,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_FAN
case TUNE_FAN:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Fan");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Fan"));
Draw_Float(thermalManager.fan_speed[0], row, false, 1);
}
else
@@ -3819,7 +3836,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if HAS_ZOFFSET_ITEM
case TUNE_ZOFFSET:
if (draw) {
- Draw_Menu_Item(row, ICON_FanSpeed, "Z-Offset");
+ Draw_Menu_Item(row, ICON_FanSpeed, F("Z-Offset"));
Draw_Float(zoffsetvalue, row, false, 100);
}
else
@@ -3827,18 +3844,18 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case TUNE_ZUP:
if (draw)
- Draw_Menu_Item(row, ICON_Axis, "Z-Offset Up");
+ Draw_Menu_Item(row, ICON_Axis, F("Z-Offset Up"));
else if (zoffsetvalue < MAX_Z_OFFSET) {
- gcode.process_subcommands_now_P(PSTR("M290 Z0.01"));
+ gcode.process_subcommands_now(F("M290 Z0.01"));
zoffsetvalue += 0.01;
Draw_Float(zoffsetvalue, row - 1, false, 100);
}
break;
case TUNE_ZDOWN:
if (draw)
- Draw_Menu_Item(row, ICON_AxisD, "Z-Offset Down");
+ Draw_Menu_Item(row, ICON_AxisD, F("Z-Offset Down"));
else if (zoffsetvalue > MIN_Z_OFFSET) {
- gcode.process_subcommands_now_P(PSTR("M290 Z-0.01"));
+ gcode.process_subcommands_now(F("M290 Z-0.01"));
zoffsetvalue -= 0.01;
Draw_Float(zoffsetvalue, row - 2, false, 100);
}
@@ -3848,7 +3865,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
case TUNE_CHANGEFIL:
if (draw)
- Draw_Menu_Item(row, ICON_ResumeEEPROM, "Change Filament");
+ Draw_Menu_Item(row, ICON_ResumeEEPROM, F("Change Filament"));
else
Popup_Handler(ConfFilChange);
break;
@@ -3857,7 +3874,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
case TUNE_FILSENSORENABLED:
if (draw) {
- Draw_Menu_Item(row, ICON_Extruder, "Filament Sensor");
+ Draw_Menu_Item(row, ICON_Extruder, F("Filament Sensor"));
Draw_Checkbox(row, runout.enabled);
}
else {
@@ -3869,17 +3886,17 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
case TUNE_BACKLIGHT_OFF:
if (draw)
- Draw_Menu_Item(row, ICON_Brightness, "Display Off");
+ Draw_Menu_Item(row, ICON_Brightness, F("Display Off"));
else
ui.set_brightness(0);
break;
case TUNE_BACKLIGHT:
if (draw) {
- Draw_Menu_Item(row, ICON_Brightness, "LCD Brightness");
+ Draw_Menu_Item(row, ICON_Brightness, F("LCD Brightness"));
Draw_Float(ui.brightness, row, false, 1);
}
else
- Modify_Value(ui.brightness, MIN_LCD_BRIGHTNESS, MAX_LCD_BRIGHTNESS, 1, ui.refresh_brightness);
+ Modify_Value(ui.brightness, LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, 1, ui.refresh_brightness);
break;
}
break;
@@ -3899,7 +3916,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
switch (item) {
case PREHEATHOTEND_BACK:
if (draw)
- Draw_Menu_Item(row, ICON_Back, "Cancel");
+ Draw_Menu_Item(row, ICON_Back, F("Cancel"));
else {
thermalManager.setTargetHotend(0, 0);
thermalManager.set_fan_speed(0, 0);
@@ -3908,7 +3925,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
break;
case PREHEATHOTEND_CONTINUE:
if (draw)
- Draw_Menu_Item(row, ICON_SetEndTemp, "Continue");
+ Draw_Menu_Item(row, ICON_SetEndTemp, F("Continue"));
else {
Popup_Handler(Heating);
thermalManager.wait_for_hotend(0);
@@ -3916,27 +3933,27 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
case Prepare:
Popup_Handler(FilChange);
sprintf_P(cmd, PSTR("M600 B1 R%i"), thermalManager.temp_hotend[0].target);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
break;
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
case ChangeFilament:
switch (last_selection) {
case CHANGEFIL_LOAD:
Popup_Handler(FilLoad);
- gcode.process_subcommands_now_P("M701");
+ gcode.process_subcommands_now(F("M701"));
planner.synchronize();
Redraw_Menu(true, true, true);
break;
case CHANGEFIL_UNLOAD:
Popup_Handler(FilLoad, true);
- gcode.process_subcommands_now_P("M702");
+ gcode.process_subcommands_now(F("M702"));
planner.synchronize();
Redraw_Menu(true, true, true);
break;
case CHANGEFIL_CHANGE:
Popup_Handler(FilChange);
sprintf_P(cmd, PSTR("M600 B1 R%i"), thermalManager.temp_hotend[0].target);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
break;
}
break;
@@ -3950,7 +3967,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 1
case PREHEATHOTEND_1:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_1_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_1_LABEL));
else {
thermalManager.setTargetHotend(ui.material_preset[0].hotend_temp, 0);
thermalManager.set_fan_speed(0, ui.material_preset[0].fan_speed);
@@ -3960,7 +3977,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 2
case PREHEATHOTEND_2:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_2_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_2_LABEL));
else {
thermalManager.setTargetHotend(ui.material_preset[1].hotend_temp, 0);
thermalManager.set_fan_speed(0, ui.material_preset[1].fan_speed);
@@ -3970,7 +3987,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 3
case PREHEATHOTEND_3:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_3_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_3_LABEL));
else {
thermalManager.setTargetHotend(ui.material_preset[2].hotend_temp, 0);
thermalManager.set_fan_speed(0, ui.material_preset[2].fan_speed);
@@ -3980,7 +3997,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 4
case PREHEATHOTEND_4:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_4_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_4_LABEL));
else {
thermalManager.setTargetHotend(ui.material_preset[3].hotend_temp, 0);
thermalManager.set_fan_speed(0, ui.material_preset[3].fan_speed);
@@ -3990,7 +4007,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#if PREHEAT_COUNT >= 5
case PREHEATHOTEND_5:
if (draw)
- Draw_Menu_Item(row, ICON_Temperature, PREHEAT_5_LABEL);
+ Draw_Menu_Item(row, ICON_Temperature, F(PREHEAT_5_LABEL));
else {
thermalManager.setTargetHotend(ui.material_preset[4].hotend_temp, 0);
thermalManager.set_fan_speed(0, ui.material_preset[4].fan_speed);
@@ -3999,7 +4016,7 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
#endif
case PREHEATHOTEND_CUSTOM:
if (draw) {
- Draw_Menu_Item(row, ICON_Temperature, "Custom");
+ Draw_Menu_Item(row, ICON_Temperature, F("Custom"));
Draw_Float(thermalManager.temp_hotend[0].target, row, false, 1);
}
else
@@ -4010,81 +4027,81 @@ void CrealityDWINClass::Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw/
}
}
-const char * CrealityDWINClass::Get_Menu_Title(uint8_t menu) {
+FSTR_P CrealityDWINClass::Get_Menu_Title(uint8_t menu) {
switch (menu) {
- case MainMenu: return "Main Menu";
- case Prepare: return "Prepare";
- case HomeMenu: return "Homing Menu";
- case Move: return "Move";
- case ManualLevel: return "Manual Leveling";
+ case MainMenu: return F("Main Menu");
+ case Prepare: return F("Prepare");
+ case HomeMenu: return F("Homing Menu");
+ case Move: return F("Move");
+ case ManualLevel: return F("Manual Leveling");
#if HAS_ZOFFSET_ITEM
- case ZOffset: return "Z Offset";
+ case ZOffset: return F("Z Offset");
#endif
#if HAS_PREHEAT
- case Preheat: return "Preheat";
+ case Preheat: return F("Preheat");
#endif
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
- case ChangeFilament: return "Change Filament";
+ case ChangeFilament: return F("Change Filament");
#endif
- case Control: return "Control";
- case TempMenu: return "Temperature";
+ case Control: return F("Control");
+ case TempMenu: return F("Temperature");
#if HAS_HOTEND || HAS_HEATED_BED
- case PID: return "PID Menu";
+ case PID: return F("PID Menu");
#endif
#if HAS_HOTEND
- case HotendPID: return "Hotend PID Settings";
+ case HotendPID: return F("Hotend PID Settings");
#endif
#if HAS_HEATED_BED
- case BedPID: return "Bed PID Settings";
+ case BedPID: return F("Bed PID Settings");
#endif
#if PREHEAT_COUNT >= 1
- case Preheat1: return (PREHEAT_1_LABEL " Settings");
+ case Preheat1: return F(PREHEAT_1_LABEL " Settings");
#endif
#if PREHEAT_COUNT >= 2
- case Preheat2: return (PREHEAT_2_LABEL " Settings");
+ case Preheat2: return F(PREHEAT_2_LABEL " Settings");
#endif
#if PREHEAT_COUNT >= 3
- case Preheat3: return (PREHEAT_3_LABEL " Settings");
+ case Preheat3: return F(PREHEAT_3_LABEL " Settings");
#endif
#if PREHEAT_COUNT >= 4
- case Preheat4: return (PREHEAT_4_LABEL " Settings");
+ case Preheat4: return F(PREHEAT_4_LABEL " Settings");
#endif
#if PREHEAT_COUNT >= 5
- case Preheat5: return (PREHEAT_5_LABEL " Settings");
+ case Preheat5: return F(PREHEAT_5_LABEL " Settings");
#endif
- case Motion: return "Motion Settings";
- case HomeOffsets: return "Home Offsets";
- case MaxSpeed: return "Max Speed";
- case MaxAcceleration: return "Max Acceleration";
+ case Motion: return F("Motion Settings");
+ case HomeOffsets: return F("Home Offsets");
+ case MaxSpeed: return F("Max Speed");
+ case MaxAcceleration: return F("Max Acceleration");
#if HAS_CLASSIC_JERK
- case MaxJerk: return "Max Jerk";
+ case MaxJerk: return F("Max Jerk");
#endif
- case Steps: return "Steps/mm";
- case Visual: return "Visual Settings";
- case Advanced: return "Advanced Settings";
+ case Steps: return F("Steps/mm");
+ case Visual: return F("Visual Settings");
+ case Advanced: return F("Advanced Settings");
#if HAS_BED_PROBE
- case ProbeMenu: return "Probe Menu";
+ case ProbeMenu: return F("Probe Menu");
#endif
- case ColorSettings: return "UI Color Settings";
- case Info: return "Info";
- case InfoMain: return "Info";
+ case ColorSettings: return F("UI Color Settings");
+ case Info: return F("Info");
+ case InfoMain: return F("Info");
#if HAS_MESH
- case Leveling: return "Leveling";
- case LevelView: return "Mesh View";
- case LevelSettings: return "Leveling Settings";
- case MeshViewer: return "Mesh Viewer";
- case LevelManual: return "Manual Tuning";
+ case Leveling: return F("Leveling");
+ case LevelView: return GET_TEXT_F(MSG_MESH_VIEW);
+ case LevelSettings: return F("Leveling Settings");
+ case MeshViewer: return GET_TEXT_F(MSG_MESH_VIEW);
+ case LevelManual: return F("Manual Tuning");
#endif
#if ENABLED(AUTO_BED_LEVELING_UBL) && !HAS_BED_PROBE
- case UBLMesh: return "UBL Bed Leveling";
+ case UBLMesh: return F("UBL Bed Leveling");
#endif
#if ENABLED(PROBE_MANUALLY)
- case ManualMesh: return "Mesh Bed Leveling";
+ case ManualMesh: return F("Mesh Bed Leveling");
#endif
- case Tune: return "Tune";
- case PreheatHotend: return "Preheat Hotend";
+ case Tune: return F("Tune");
+ case PreheatHotend: return F("Preheat Hotend");
}
- return "";
+ return F("");
}
uint8_t CrealityDWINClass::Get_Menu_Size(uint8_t menu) {
@@ -4168,25 +4185,25 @@ uint8_t CrealityDWINClass::Get_Menu_Size(uint8_t menu) {
void CrealityDWINClass::Popup_Handler(PopupID popupid, bool option/*=false*/) {
popup = last_popup = popupid;
switch (popupid) {
- case Pause: Draw_Popup(PSTR("Pause Print"), PSTR(""), PSTR(""), Popup); break;
- case Stop: Draw_Popup(PSTR("Stop Print"), PSTR(""), PSTR(""), Popup); break;
- case Resume: Draw_Popup(PSTR("Resume Print?"), PSTR("Looks Like the last"), PSTR("print was interupted."), Popup); break;
- case ConfFilChange: Draw_Popup(PSTR("Confirm Filament Change"), PSTR(""), PSTR(""), Popup); break;
- case PurgeMore: Draw_Popup(PSTR("Purge more filament?"), PSTR("(Cancel to finish process)"), PSTR(""), Popup); break;
- case SaveLevel: Draw_Popup(PSTR("Leveling Complete"), PSTR("Save to EEPROM?"), PSTR(""), Popup); break;
- case MeshSlot: Draw_Popup(PSTR("Mesh slot not selected"), PSTR("(Confirm to select slot 0)"), PSTR(""), Popup); break;
- case ETemp: Draw_Popup(PSTR("Nozzle is too cold"), PSTR("Open Preheat Menu?"), PSTR(""), Popup); break;
- case ManualProbing: Draw_Popup(PSTR("Manual Probing"), PSTR("(Confirm to probe)"), PSTR("(cancel to exit)"), Popup); break;
- case Level: Draw_Popup(PSTR("Auto Bed Leveling"), PSTR("Please wait until done."), PSTR(""), Wait, ICON_AutoLeveling); break;
- case Home: Draw_Popup(option ? PSTR("Parking") : PSTR("Homing"), PSTR("Please wait until done."), PSTR(""), Wait, ICON_BLTouch); break;
- case MoveWait: Draw_Popup(PSTR("Moving to Point"), PSTR("Please wait until done."), PSTR(""), Wait, ICON_BLTouch); break;
- case Heating: Draw_Popup(PSTR("Heating"), PSTR("Please wait until done."), PSTR(""), Wait, ICON_BLTouch); break;
- case FilLoad: Draw_Popup(option ? PSTR("Unloading Filament") : PSTR("Loading Filament"), PSTR("Please wait until done."), PSTR(""), Wait, ICON_BLTouch); break;
- case FilChange: Draw_Popup(PSTR("Filament Change"), PSTR("Please wait for prompt."), PSTR(""), Wait, ICON_BLTouch); break;
- case TempWarn: Draw_Popup(option ? PSTR("Nozzle temp too low!") : PSTR("Nozzle temp too high!"), PSTR(""), PSTR(""), Wait, option ? ICON_TempTooLow : ICON_TempTooHigh); break;
- case Runout: Draw_Popup(PSTR("Filament Runout"), PSTR(""), PSTR(""), Wait, ICON_BLTouch); break;
- case PIDWait: Draw_Popup(PSTR("PID Autotune"), PSTR("in process"), PSTR("Please wait until done."), Wait, ICON_BLTouch); break;
- case Resuming: Draw_Popup(PSTR("Resuming Print"), PSTR("Please wait until done."), PSTR(""), Wait, ICON_BLTouch); break;
+ case Pause: Draw_Popup(F("Pause Print"), F(""), F(""), Popup); break;
+ case Stop: Draw_Popup(F("Stop Print"), F(""), F(""), Popup); break;
+ case Resume: Draw_Popup(F("Resume Print?"), F("Looks Like the last"), F("print was interupted."), Popup); break;
+ case ConfFilChange: Draw_Popup(F("Confirm Filament Change"), F(""), F(""), Popup); break;
+ case PurgeMore: Draw_Popup(F("Purge more filament?"), F("(Cancel to finish process)"), F(""), Popup); break;
+ case SaveLevel: Draw_Popup(F("Leveling Complete"), F("Save to EEPROM?"), F(""), Popup); break;
+ case MeshSlot: Draw_Popup(F("Mesh slot not selected"), F("(Confirm to select slot 0)"), F(""), Popup); break;
+ case ETemp: Draw_Popup(F("Nozzle is too cold"), F("Open Preheat Menu?"), F(""), Popup); break;
+ case ManualProbing: Draw_Popup(F("Manual Probing"), F("(Confirm to probe)"), F("(cancel to exit)"), Popup); break;
+ case Level: Draw_Popup(F("Auto Bed Leveling"), F("Please wait until done."), F(""), Wait, ICON_AutoLeveling); break;
+ case Home: Draw_Popup(option ? F("Parking") : F("Homing"), F("Please wait until done."), F(""), Wait, ICON_BLTouch); break;
+ case MoveWait: Draw_Popup(F("Moving to Point"), F("Please wait until done."), F(""), Wait, ICON_BLTouch); break;
+ case Heating: Draw_Popup(F("Heating"), F("Please wait until done."), F(""), Wait, ICON_BLTouch); break;
+ case FilLoad: Draw_Popup(option ? F("Unloading Filament") : F("Loading Filament"), F("Please wait until done."), F(""), Wait, ICON_BLTouch); break;
+ case FilChange: Draw_Popup(F("Filament Change"), F("Please wait for prompt."), F(""), Wait, ICON_BLTouch); break;
+ case TempWarn: Draw_Popup(option ? F("Nozzle temp too low!") : F("Nozzle temp too high!"), F(""), F(""), Wait, option ? ICON_TempTooLow : ICON_TempTooHigh); break;
+ case Runout: Draw_Popup(F("Filament Runout"), F(""), F(""), Wait, ICON_BLTouch); break;
+ case PIDWait: Draw_Popup(F("PID Autotune"), F("in process"), F("Please wait until done."), Wait, ICON_BLTouch); break;
+ case Resuming: Draw_Popup(F("Resuming Print"), F("Please wait until done."), F(""), Wait, ICON_BLTouch); break;
default: break;
}
}
@@ -4194,11 +4211,11 @@ void CrealityDWINClass::Popup_Handler(PopupID popupid, bool option/*=false*/) {
void CrealityDWINClass::Confirm_Handler(PopupID popupid) {
popup = popupid;
switch (popupid) {
- case FilInsert: Draw_Popup(PSTR("Insert Filament"), PSTR("Press to Continue"), PSTR(""), Confirm); break;
- case HeaterTime: Draw_Popup(PSTR("Heater Timed Out"), PSTR("Press to Reheat"), PSTR(""), Confirm); break;
- case UserInput: Draw_Popup(PSTR("Waiting for Input"), PSTR("Press to Continue"), PSTR(""), Confirm); break;
- case LevelError: Draw_Popup(PSTR("Couldn't enable Leveling"), PSTR("(Valid mesh must exist)"), PSTR(""), Confirm); break;
- case InvalidMesh: Draw_Popup(PSTR("Valid mesh must exist"), PSTR("before tuning can be"), PSTR("performed"), Confirm); break;
+ case FilInsert: Draw_Popup(F("Insert Filament"), F("Press to Continue"), F(""), Confirm); break;
+ case HeaterTime: Draw_Popup(F("Heater Timed Out"), F("Press to Reheat"), F(""), Confirm); break;
+ case UserInput: Draw_Popup(F("Waiting for Input"), F("Press to Continue"), F(""), Confirm); break;
+ case LevelError: Draw_Popup(F("Couldn't enable Leveling"), F("(Valid mesh must exist)"), F(""), Confirm); break;
+ case InvalidMesh: Draw_Popup(F("Valid mesh must exist"), F("before tuning can be"), F("performed"), Confirm); break;
default: break;
}
}
@@ -4206,9 +4223,9 @@ void CrealityDWINClass::Confirm_Handler(PopupID popupid) {
/* Navigation and Control */
void CrealityDWINClass::Main_Menu_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
- if (encoder_diffState == ENCODER_DIFF_CW && selection < 3) {
+ if (encoder_diffState == ENCODER_DIFF_CW && selection < PAGE_COUNT - 1) {
selection++; // Select Down
Main_Menu_Icons();
}
@@ -4218,16 +4235,16 @@ void CrealityDWINClass::Main_Menu_Control() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER)
switch (selection) {
- case 0: card.mount(); Draw_SD_List(); break;
- case 1: Draw_Menu(Prepare); break;
- case 2: Draw_Menu(Control); break;
- case 3: Draw_Menu(TERN(HAS_MESH, Leveling, InfoMain)); break;
+ case PAGE_PRINT: card.mount(); Draw_SD_List(); break;
+ case PAGE_PREPARE: Draw_Menu(Prepare); break;
+ case PAGE_CONTROL: Draw_Menu(Control); break;
+ case PAGE_INFO_LEVELING: Draw_Menu(TERN(HAS_MESH, Leveling, InfoMain)); break;
}
DWIN_UpdateLCD();
}
void CrealityDWINClass::Menu_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW && selection < Get_Menu_Size(active_menu)) {
DWIN_Draw_Rectangle(1, Color_Bg_Black, 0, MBASE(selection - scrollpos) - 18, 14, MBASE(selection - scrollpos) + 33);
@@ -4255,7 +4272,7 @@ void CrealityDWINClass::Menu_Control() {
}
void CrealityDWINClass::Value_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW)
tempvalue += EncoderRate.encoderMoveValue;
@@ -4275,7 +4292,7 @@ void CrealityDWINClass::Value_Control() {
}
else if (active_menu == Tune && selection == TUNE_ZOFFSET) {
sprintf_P(cmd, PSTR("M290 Z%s"), dtostrf((tempvalue / valueunit - zoffsetvalue), 1, 3, str_1));
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
}
if (TERN0(HAS_HOTEND, valuepointer == &thermalManager.temp_hotend[0].pid.Ki) || TERN0(HAS_HEATED_BED, valuepointer == &thermalManager.temp_bed.pid.Ki))
tempvalue = scalePID_i(tempvalue);
@@ -4320,7 +4337,7 @@ void CrealityDWINClass::Value_Control() {
}
void CrealityDWINClass::Option_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW)
tempvalue += EncoderRate.encoderMoveValue;
@@ -4359,7 +4376,7 @@ void CrealityDWINClass::Option_Control() {
}
void CrealityDWINClass::File_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
static uint8_t filescrl = 0;
if (encoder_diffState == ENCODER_DIFF_NO) {
if (selection > 0) {
@@ -4447,9 +4464,9 @@ void CrealityDWINClass::File_Control() {
}
void CrealityDWINClass::Print_Screen_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
- if (encoder_diffState == ENCODER_DIFF_CW && selection < 2) {
+ if (encoder_diffState == ENCODER_DIFF_CW && selection < PRINT_COUNT - 1) {
selection++; // Select Down
Print_Screen_Icons();
}
@@ -4459,11 +4476,11 @@ void CrealityDWINClass::Print_Screen_Control() {
}
else if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (selection) {
- case 0:
+ case PRINT_SETUP:
Draw_Menu(Tune);
Update_Status_Bar(true);
break;
- case 1:
+ case PRINT_PAUSE_RESUME:
if (paused) {
if (sdprint) {
wait_for_user = false;
@@ -4474,15 +4491,15 @@ void CrealityDWINClass::Print_Screen_Control() {
char cmnd[20];
#if HAS_HEATED_BED
cmnd[sprintf_P(cmnd, PSTR("M140 S%i"), pausebed)] = '\0';
- gcode.process_subcommands_now_P(PSTR(cmnd));
+ gcode.process_subcommands_now(cmnd);
#endif
#if HAS_EXTRUDERS
cmnd[sprintf_P(cmnd, PSTR("M109 S%i"), pausetemp)] = '\0';
- gcode.process_subcommands_now_P(PSTR(cmnd));
+ gcode.process_subcommands_now(cmnd);
#endif
TERN_(HAS_FAN, thermalManager.fan_speed[0] = pausefan);
planner.synchronize();
- TERN_(SDSUPPORT, queue.inject_P(PSTR("M24")));
+ TERN_(SDSUPPORT, queue.inject(F("M24")));
#endif
}
else {
@@ -4493,16 +4510,14 @@ void CrealityDWINClass::Print_Screen_Control() {
else
Popup_Handler(Pause);
break;
- case 2:
- Popup_Handler(Stop);
- break;
+ case PRINT_STOP: Popup_Handler(Stop); break;
}
}
DWIN_UpdateLCD();
}
void CrealityDWINClass::Popup_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_CW && selection < 1) {
selection++;
@@ -4526,10 +4541,10 @@ void CrealityDWINClass::Popup_Control() {
if (IS_SD_PRINTING()) card.pauseSDPrint();
#endif
planner.synchronize();
- queue.inject_P(PSTR("M125"));
+ queue.inject(F("M125"));
planner.synchronize();
#else
- queue.inject_P(PSTR("M25"));
+ queue.inject(F("M25"));
TERN_(HAS_HOTEND, pausetemp = thermalManager.temp_hotend[0].target);
TERN_(HAS_HEATED_BED, pausebed = thermalManager.temp_bed.target);
TERN_(HAS_FAN, pausefan = thermalManager.fan_speed[0]);
@@ -4559,9 +4574,9 @@ void CrealityDWINClass::Popup_Control() {
break;
case Resume:
if (selection == 0)
- queue.inject_P(PSTR("M1000"));
+ queue.inject(F("M1000"));
else {
- queue.inject_P(PSTR("M1000 C"));
+ queue.inject(F("M1000 C"));
Draw_Main_Menu();
}
break;
@@ -4605,7 +4620,7 @@ void CrealityDWINClass::Popup_Control() {
}
Popup_Handler(FilChange);
sprintf_P(cmd, PSTR("M600 B1 R%i"), thermalManager.temp_hotend[0].target);
- gcode.process_subcommands_now_P(cmd);
+ gcode.process_subcommands_now(cmd);
}
}
else
@@ -4628,7 +4643,7 @@ void CrealityDWINClass::Popup_Control() {
case SaveLevel:
if (selection == 0) {
#if ENABLED(AUTO_BED_LEVELING_UBL)
- gcode.process_subcommands_now_P(PSTR("G29 S"));
+ gcode.process_subcommands_now(F("G29 S"));
planner.synchronize();
AudioFeedback(true);
#else
@@ -4652,7 +4667,7 @@ void CrealityDWINClass::Popup_Control() {
}
void CrealityDWINClass::Confirm_Control() {
- ENCODER_DiffState encoder_diffState = Encoder_ReceiveAnalyze();
+ EncoderState encoder_diffState = Encoder_ReceiveAnalyze();
if (encoder_diffState == ENCODER_DIFF_NO) return;
if (encoder_diffState == ENCODER_DIFF_ENTER) {
switch (popup) {
@@ -4802,6 +4817,10 @@ void CrealityDWINClass::Update() {
void MarlinUI::update() { CrealityDWIN.Update(); }
+#if HAS_LCD_BRIGHTNESS
+ void MarlinUI::_set_brightness() { DWIN_LCD_Brightness(backlight ? brightness : 0); }
+#endif
+
void CrealityDWINClass::State_Update() {
if ((print_job_timer.isRunning() || print_job_timer.isPaused()) != printing) {
if (!printing) Start_Print(card.isFileOpen() || TERN0(POWER_LOSS_RECOVERY, recovery.valid()));
@@ -4960,14 +4979,14 @@ void CrealityDWINClass::Screen_Update() {
void CrealityDWINClass::AudioFeedback(const bool success/*=true*/) {
if (success) {
- if (eeprom_settings.beeperenable) {
+ if (ui.buzzer_enabled) {
BUZZ(100, 659);
BUZZ( 10, 0);
BUZZ(100, 698);
}
else Update_Status("Success");
}
- else if (eeprom_settings.beeperenable)
+ else if (ui.buzzer_enabled)
BUZZ(40, 440);
else
Update_Status("Failed");
@@ -4989,14 +5008,13 @@ void CrealityDWINClass::Load_Settings(const char *buff) {
static bool init = true;
if (init) {
init = false;
- queue.inject_P(PSTR("M1000 S"));
+ queue.inject(F("M1000 S"));
}
#endif
}
void CrealityDWINClass::Reset_Settings() {
eeprom_settings.time_format_textual = false;
- eeprom_settings.beeperenable = true;
TERN_(AUTO_BED_LEVELING_UBL, eeprom_settings.tilt_grid_size = 0);
eeprom_settings.corner_pos = 325;
eeprom_settings.cursor_color = 0;
@@ -5012,6 +5030,7 @@ void CrealityDWINClass::Reset_Settings() {
eeprom_settings.coordinates_split_line = 0;
TERN_(AUTO_BED_LEVELING_UBL, mesh_conf.tilt_grid = eeprom_settings.tilt_grid_size + 1);
corner_pos = eeprom_settings.corner_pos / 10.0f;
+ TERN_(SOUND_MENU_ITEM, ui.buzzer_enabled = true);
Redraw_Screen();
}
diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin.h b/Marlin/src/lcd/e3v2/jyersui/dwin.h
index d6c8539cc6..0157f673ce 100644
--- a/Marlin/src/lcd/e3v2/jyersui/dwin.h
+++ b/Marlin/src/lcd/e3v2/jyersui/dwin.h
@@ -26,10 +26,16 @@
*/
#include "dwin_lcd.h"
-#include "rotary_encoder.h"
+#include "../common/dwin_set.h"
+#include "../common/dwin_font.h"
+#include "../common/dwin_color.h"
+#include "../common/encoder.h"
#include "../../../libs/BL24CXX.h"
+
#include "../../../inc/MarlinConfigPre.h"
+//#define DWIN_CREALITY_LCD_CUSTOM_ICONS
+
enum processID : uint8_t {
Main, Print, Menu, Value, Option, File, Popup, Confirm, Wait
};
@@ -82,109 +88,6 @@ enum menuID : uint8_t {
PreheatHotend
};
-#define Start_Process 0
-#define Language_English 1
-#define Language_Chinese 2
-
-#define ICON 7 // Icon set file 7.ICO
-
-#define ICON_LOGO 0
-#define ICON_Print_0 1
-#define ICON_Print_1 2
-#define ICON_Prepare_0 3
-#define ICON_Prepare_1 4
-#define ICON_Control_0 5
-#define ICON_Control_1 6
-#define ICON_Leveling_0 7
-#define ICON_Leveling_1 8
-#define ICON_HotendTemp 9
-#define ICON_BedTemp 10
-#define ICON_Speed 11
-#define ICON_Zoffset 12
-#define ICON_Back 13
-#define ICON_File 14
-#define ICON_PrintTime 15
-#define ICON_RemainTime 16
-#define ICON_Setup_0 17
-#define ICON_Setup_1 18
-#define ICON_Pause_0 19
-#define ICON_Pause_1 20
-#define ICON_Continue_0 21
-#define ICON_Continue_1 22
-#define ICON_Stop_0 23
-#define ICON_Stop_1 24
-#define ICON_Bar 25
-#define ICON_More 26
-
-#define ICON_Axis 27
-#define ICON_CloseMotor 28
-#define ICON_Homing 29
-#define ICON_SetHome 30
-#define ICON_PLAPreheat 31
-#define ICON_ABSPreheat 32
-#define ICON_Cool 33
-#define ICON_Language 34
-
-#define ICON_MoveX 35
-#define ICON_MoveY 36
-#define ICON_MoveZ 37
-#define ICON_Extruder 38
-
-#define ICON_Temperature 40
-#define ICON_Motion 41
-#define ICON_WriteEEPROM 42
-#define ICON_ReadEEPROM 43
-#define ICON_ResumeEEPROM 44
-#define ICON_Info 45
-
-#define ICON_SetEndTemp 46
-#define ICON_SetBedTemp 47
-#define ICON_FanSpeed 48
-#define ICON_SetPLAPreheat 49
-#define ICON_SetABSPreheat 50
-
-#define ICON_MaxSpeed 51
-#define ICON_MaxAccelerated 52
-#define ICON_MaxJerk 53
-#define ICON_Step 54
-#define ICON_PrintSize 55
-#define ICON_Version 56
-#define ICON_Contact 57
-#define ICON_StockConfiguraton 58
-#define ICON_MaxSpeedX 59
-#define ICON_MaxSpeedY 60
-#define ICON_MaxSpeedZ 61
-#define ICON_MaxSpeedE 62
-#define ICON_MaxAccX 63
-#define ICON_MaxAccY 64
-#define ICON_MaxAccZ 65
-#define ICON_MaxAccE 66
-#define ICON_MaxSpeedJerkX 67
-#define ICON_MaxSpeedJerkY 68
-#define ICON_MaxSpeedJerkZ 69
-#define ICON_MaxSpeedJerkE 70
-#define ICON_StepX 71
-#define ICON_StepY 72
-#define ICON_StepZ 73
-#define ICON_StepE 74
-#define ICON_Setspeed 75
-#define ICON_SetZOffset 76
-#define ICON_Rectangle 77
-#define ICON_BLTouch 78
-#define ICON_TempTooLow 79
-#define ICON_AutoLeveling 80
-#define ICON_TempTooHigh 81
-#define ICON_NoTips_C 82
-#define ICON_NoTips_E 83
-#define ICON_Continue_C 84
-#define ICON_Continue_E 85
-#define ICON_Cancel_C 86
-#define ICON_Cancel_E 87
-#define ICON_Confirm_C 88
-#define ICON_Confirm_E 89
-#define ICON_Info_0 90
-#define ICON_Info_1 91
-
// Custom icons
#if ENABLED(DWIN_CREALITY_LCD_CUSTOM_ICONS)
// index of every custom icon should be >= CUSTOM_ICON_START
@@ -214,25 +117,14 @@ enum menuID : uint8_t {
#define ICON_AxisC ICON_Axis
#endif
-#define font6x12 0x00
-#define font8x16 0x01
-#define font10x20 0x02
-#define font12x24 0x03
-#define font14x28 0x04
-#define font16x32 0x05
-#define font20x40 0x06
-#define font24x48 0x07
-#define font28x56 0x08
-#define font32x64 0x09
-
enum colorID : uint8_t {
Default, White, Green, Cyan, Blue, Magenta, Red, Orange, Yellow, Brown, Black
};
#define Custom_Colors 10
-#define Color_White 0xFFFF
+#define Color_Aqua RGB(0x00,0x3F,0x1F)
#define Color_Light_White 0xBDD7
-#define Color_Green 0x07E0
+#define Color_Green RGB(0x00,0x3F,0x00)
#define Color_Light_Green 0x3460
#define Color_Cyan 0x07FF
#define Color_Light_Cyan 0x04F3
@@ -240,28 +132,16 @@ enum colorID : uint8_t {
#define Color_Light_Blue 0x3A6A
#define Color_Magenta 0xF81F
#define Color_Light_Magenta 0x9813
-#define Color_Red 0xF800
#define Color_Light_Red 0x8800
#define Color_Orange 0xFA20
#define Color_Light_Orange 0xFBC0
-#define Color_Yellow 0xFF0F
#define Color_Light_Yellow 0x8BE0
#define Color_Brown 0xCC27
#define Color_Light_Brown 0x6204
#define Color_Black 0x0000
#define Color_Grey 0x18E3
-#define Color_Bg_Window 0x31E8 // Popup background color
-#define Color_Bg_Blue 0x1125 // Dark blue background color
-#define Color_Bg_Black 0x0841 // Black background color
-#define Color_Bg_Red 0xF00F // Red background color
-#define Popup_Text_Color 0xD6BA // Popup font background color
-#define Line_Color 0x3A6A // Split line color
-#define Rectangle_Color 0xEE2F // Blue square cursor color
-#define Percent_Color 0xFE29 // Percentage color
-#define BarFill_Color 0x10E4 // Fill color of progress bar
-#define Select_Color 0x33BB // Selected color
#define Check_Color 0x4E5C // Check-box check color
-#define Confirm_Color 0x34B9
+#define Confirm_Color 0x34B9
#define Cancel_Color 0x3186
class CrealityDWINClass {
@@ -269,7 +149,6 @@ public:
static constexpr size_t eeprom_data_size = 48;
static struct EEPROM_Settings { // use bit fields to save space, max 48 bytes
bool time_format_textual : 1;
- bool beeperenable : 1;
#if ENABLED(AUTO_BED_LEVELING_UBL)
uint8_t tilt_grid_size : 3;
#endif
@@ -296,7 +175,9 @@ public:
static uint16_t GetColor(uint8_t color, uint16_t original, bool light=false);
static void Draw_Checkbox(uint8_t row, bool value);
static void Draw_Title(const char * title);
+ static void Draw_Title(FSTR_P const title);
static void Draw_Menu_Item(uint8_t row, uint8_t icon=0, const char * const label1=nullptr, const char * const label2=nullptr, bool more=false, bool centered=false);
+ static void Draw_Menu_Item(uint8_t row, uint8_t icon=0, FSTR_P const flabel1=nullptr, FSTR_P const flabel2=nullptr, bool more=false, bool centered=false);
static void Draw_Menu(uint8_t menu, uint8_t select=0, uint8_t scroll=0);
static void Redraw_Menu(bool lastprocess=true, bool lastselection=false, bool lastmenu=false);
static void Redraw_Screen();
@@ -315,7 +196,7 @@ public:
static void Draw_SD_Item(uint8_t item, uint8_t row);
static void Draw_SD_List(bool removed=false);
static void Draw_Status_Area(bool icons=false);
- static void Draw_Popup(PGM_P const line1, PGM_P const line2, PGM_P const line3, uint8_t mode, uint8_t icon=0);
+ static void Draw_Popup(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, uint8_t mode, uint8_t icon=0);
static void Popup_Select();
static void Update_Status_Bar(bool refresh=false);
@@ -324,7 +205,7 @@ public:
static void Set_Mesh_Viewer_Status();
#endif
- static const char * Get_Menu_Title(uint8_t menu);
+ static FSTR_P Get_Menu_Title(uint8_t menu);
static uint8_t Get_Menu_Size(uint8_t menu);
static void Menu_Item_Handler(uint8_t menu, uint8_t item, bool draw=true);
diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.cpp
index 92f4be4548..04889e92b0 100644
--- a/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.cpp
+++ b/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.cpp
@@ -29,185 +29,17 @@
#if ENABLED(DWIN_CREALITY_LCD_JYERSUI)
-#include "../../../inc/MarlinConfig.h"
-
#include "dwin_lcd.h"
-#include // for memset
-
-//#define DEBUG_OUT 1
-#include "../../../core/debug_out.h"
-
-// Make sure DWIN_SendBuf is large enough to hold the largest string plus draw command and tail.
-// Assume the narrowest (6 pixel) font and 2-byte gb2312-encoded characters.
-uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 6 * 2] = { 0xAA };
-uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C };
-uint8_t databuf[26] = { 0 };
-uint8_t receivedType;
-
-int recnum = 0;
-
-inline void DWIN_Byte(size_t &i, const uint16_t bval) {
- DWIN_SendBuf[++i] = bval;
-}
-
-inline void DWIN_Word(size_t &i, const uint16_t wval) {
- DWIN_SendBuf[++i] = wval >> 8;
- DWIN_SendBuf[++i] = wval & 0xFF;
-}
-
-inline void DWIN_Long(size_t &i, const uint32_t lval) {
- DWIN_SendBuf[++i] = (lval >> 24) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 16) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 8) & 0xFF;
- DWIN_SendBuf[++i] = lval & 0xFF;
-}
-
-inline void DWIN_String(size_t &i, const char * const string) {
- const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, strlen(string));
- memcpy(&DWIN_SendBuf[i + 1], string, len);
- i += len;
-}
-
-inline void DWIN_String(size_t &i, const __FlashStringHelper * string) {
- if (!string) return;
- const size_t len = strlen_P((PGM_P)string); // cast it to PGM_P, which is basically const char *, and measure it using the _P version of strlen.
- if (len == 0) return;
- memcpy(&DWIN_SendBuf[i + 1], string, len);
- i += len;
-}
-
-// Send the data in the buffer and the packet end
-inline void DWIN_Send(size_t &i) {
- ++i;
- LOOP_L_N(n, i) { LCD_SERIAL.write(DWIN_SendBuf[n]); delayMicroseconds(1); }
- LOOP_L_N(n, 4) { LCD_SERIAL.write(DWIN_BufTail[n]); delayMicroseconds(1); }
-}
/*-------------------------------------- System variable function --------------------------------------*/
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void) {
- #ifndef LCD_BAUDRATE
- #define LCD_BAUDRATE 115200
- #endif
- LCD_SERIAL.begin(LCD_BAUDRATE);
- const millis_t serial_connect_timeout = millis() + 1000UL;
- while (!LCD_SERIAL.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
-
- size_t i = 0;
- DWIN_Byte(i, 0x00);
- DWIN_Send(i);
-
- while (LCD_SERIAL.available() > 0 && recnum < (signed)sizeof(databuf)) {
- databuf[recnum] = LCD_SERIAL.read();
- // ignore the invalid data
- if (databuf[0] != FHONE) { // prevent the program from running.
- if (recnum > 0) {
- recnum = 0;
- ZERO(databuf);
- }
- continue;
- }
- delay(10);
- recnum++;
- }
-
- return ( recnum >= 3
- && databuf[0] == FHONE
- && databuf[1] == '\0'
- && databuf[2] == 'O'
- && databuf[3] == 'K' );
-}
-
-// Set the backlight luminance
-// luminance: (0x00-0xFF)
-void DWIN_Backlight_SetLuminance(const uint8_t luminance) {
- size_t i = 0;
- DWIN_Byte(i, 0x30);
- DWIN_Byte(i, luminance);
- DWIN_Send(i);
-}
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir) {
- size_t i = 0;
- DWIN_Byte(i, 0x34);
- DWIN_Byte(i, 0x5A);
- DWIN_Byte(i, 0xA5);
- DWIN_Byte(i, dir);
- DWIN_Send(i);
-}
-
-// Update display
-void DWIN_UpdateLCD(void) {
- size_t i = 0;
- DWIN_Byte(i, 0x3D);
- DWIN_Send(i);
-}
+void DWIN_Startup() {}
/*---------------------------------------- Drawing functions ----------------------------------------*/
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color) {
- size_t i = 0;
- DWIN_Byte(i, 0x01);
- DWIN_Word(i, color);
- DWIN_Send(i);
-}
-
-// Draw a point
-// color: Pixel segment color
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y) {
- size_t i = 0;
- DWIN_Byte(i, 0x02);
- DWIN_Word(i, color);
- DWIN_Byte(i, width);
- DWIN_Byte(i, height);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Send(i);
-}
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x03);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color,
- uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x05);
- DWIN_Byte(i, mode);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-//Color: color
-//x/y: Upper-left coordinate of the first pixel
+// Draw the degree (°) symbol
+// Color: color
+// x/y: Upper-left coordinate of the first pixel
void DWIN_Draw_DegreeSymbol(uint16_t Color, uint16_t x, uint16_t y) {
DWIN_Draw_Point(Color, 1, 1, x + 1, y);
DWIN_Draw_Point(Color, 1, 1, x + 2, y);
@@ -219,256 +51,14 @@ void DWIN_Draw_DegreeSymbol(uint16_t Color, uint16_t x, uint16_t y) {
DWIN_Draw_Point(Color, 1, 1, x + 2, y + 3);
}
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x09);
- DWIN_Byte(i, (mode << 7) | dir);
- DWIN_Word(i, dis);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// widthAdjust: true=self-adjust character width; false=no adjustment
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-void DWIN_Draw_String(bool widthAdjust, bool bShow, uint8_t size,
- uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const char * string) {
- size_t i = 0;
- DWIN_Byte(i, 0x11);
- // Bit 7: widthAdjust
- // Bit 6: bShow
- // Bit 5-4: Unused (0)
- // Bit 3-0: size
- DWIN_Byte(i, (widthAdjust * 0x80) | (bShow * 0x40) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_String(i, string);
- DWIN_Send(i);
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value) {
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- // Bit 7: bshow
- // Bit 6: 1 = signed; 0 = unsigned number;
- // Bit 5: zeroFill
- // Bit 4: zeroMode
- // Bit 3-0: size
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, 0); // fNum
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- #if 0
- for (char count = 0; count < 8; count++) {
- DWIN_Byte(i, value);
- value >>= 8;
- if (!(value & 0xFF)) break;
- }
- #else
- // Write a big-endian 64 bit integer
- const size_t p = i + 1;
- for (char count = 8; count--;) { // 7..0
- ++i;
- DWIN_SendBuf[p + count] = value;
- value >>= 8;
- }
- #endif
-
- DWIN_Send(i);
-}
-
-// Draw a floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
- //uint8_t *fvalue = (uint8_t*)&value;
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, fNum);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Long(i, value);
- /*
- DWIN_Byte(i, fvalue[3]);
- DWIN_Byte(i, fvalue[2]);
- DWIN_Byte(i, fvalue[1]);
- DWIN_Byte(i, fvalue[0]);
- */
- DWIN_Send(i);
-}
-
/*---------------------------------------- Picture related functions ----------------------------------------*/
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id) {
- size_t i = 0;
- DWIN_Word(i, 0x2200);
- DWIN_Byte(i, id);
- DWIN_Send(i); // AA 23 00 00 00 00 08 00 01 02 03 CC 33 C3 3C
-}
-
// Draw an Icon
// libID: Icon library ID
// picID: Icon ID
// x/y: Upper-left point
void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x23);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Byte(i, 0x80 | libID);
- DWIN_Byte(i, picID);
- DWIN_Send(i);
+ DWIN_ICON_Show(true, false, false, libID, picID, x, y);
}
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id) {
- size_t i = 0;
- DWIN_Byte(i, 0x25);
- DWIN_Byte(i, n);
- DWIN_Byte(i, id);
- DWIN_Send(i);
-}
-
-// Copy area from virtual display area to current screen
-// cacheID: virtual area number
-// xStart/yStart: Upper-left of virtual area
-// xEnd/yEnd: Lower-right of virtual area
-// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
- size_t i = 0;
- DWIN_Byte(i, 0x27);
- DWIN_Byte(i, 0x80 | cacheID);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Send(i);
-}
-
-// Animate a series of icons
-// animID: Animation ID; 0x00-0x0F
-// animate: true on; false off;
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs, uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x28);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- // Bit 7: animation on or off
- // Bit 6: start from begin or end
- // Bit 5-4: unused (0)
- // Bit 3-0: animID
- DWIN_Byte(i, (animate * 0x80) | 0x40 | animID);
- DWIN_Byte(i, libID);
- DWIN_Byte(i, picIDs);
- DWIN_Byte(i, picIDe);
- DWIN_Byte(i, interval);
- DWIN_Send(i);
-}
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state) {
- size_t i = 0;
- DWIN_Byte(i, 0x28);
- DWIN_Word(i, state);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Memory functions ----------------------------------------*/
-// The LCD has an additional 32KB SRAM and 16KB Flash
-
-// Data can be written to the sram and save to one of the jpeg page files
-
-// Write Data Memory
-// command 0x31
-// Type: Write memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Write data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Data: data
-//
-// Flash writing returns 0xA5 0x4F 0x4B
-
-// Read Data Memory
-// command 0x32
-// Type: Read memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Read data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Length: leangth of data to read; 0x01-0xF0
-//
-// Response:
-// Type, Address, Length, Data
-
-// Write Picture Memory
-// Write the contents of the 32KB SRAM data memory into the designated image memory space
-// Issued: 0x5A, 0xA5, PIC_ID
-// Response: 0xA5 0x4F 0x4B
-//
-// command 0x33
-// 0x5A, 0xA5
-// PicId: Picture Memory location, 0x00-0x0F
-//
-// Flash writing returns 0xA5 0x4F 0x4B
-
#endif // DWIN_CREALITY_LCD_JYERSUI
diff --git a/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.h b/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.h
index 9f8bd25295..f76cfb5d3e 100644
--- a/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.h
+++ b/Marlin/src/lcd/e3v2/jyersui/dwin_lcd.h
@@ -26,190 +26,9 @@
* @brief DWIN screen control functions
********************************************************************************/
-#include
+#include "../common/dwin_api.h"
-#define RECEIVED_NO_DATA 0x00
-#define RECEIVED_SHAKE_HAND_ACK 0x01
-
-#define FHONE 0xAA
-
-#define DWIN_SCROLL_UP 2
-#define DWIN_SCROLL_DOWN 3
-
-#define DWIN_WIDTH 272
-#define DWIN_HEIGHT 480
-
-/*-------------------------------------- System variable function --------------------------------------*/
-
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void);
-
-// Set the backlight luminance
-// luminance: (0x00-0xFF)
-void DWIN_Backlight_SetLuminance(const uint8_t luminance);
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir);
-
-// Update display
-void DWIN_UpdateLCD(void);
-
-/*---------------------------------------- Drawing functions ----------------------------------------*/
-
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color);
-
-// Draw a point
-// color: Line segment color
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y);
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a Horizontal line
-// color: Line segment color
-// xStart/yStart: Start point
-// xLength: Line Length
-inline void DWIN_Draw_HLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart + xLength - 1, yStart);
-}
-
-// Draw a Vertical line
-// color: Line segment color
-// xStart/yStart: Start point
-// yLength: Line Length
-inline void DWIN_Draw_VLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t yLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart, yStart + yLength - 1);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color,
- uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a box
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xSize/ySize: box size
-inline void DWIN_Draw_Box(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xSize, uint16_t ySize) {
- DWIN_Draw_Rectangle(mode, color, xStart, yStart, xStart + xSize - 1, yStart + ySize - 1);
-}
-
-//Color: color
-//x: upper left point
-//y: bottom right point
+// Draw the degree (°) symbol
+// Color: color
+// x/y: Upper-left coordinate of the first pixel
void DWIN_Draw_DegreeSymbol(uint16_t Color, uint16_t x, uint16_t y);
-
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// widthAdjust: true=self-adjust character width; false=no adjustment
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-void DWIN_Draw_String(bool widthAdjust, bool bShow, uint8_t size,
- uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const char * string);
-
-class __FlashStringHelper;
-
-inline void DWIN_Draw_String(bool widthAdjust, bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
- // Note that this won't work on AVR. This is for 32-bit systems only!
- // Are __FlashStringHelper versions worth keeping?
- DWIN_Draw_String(widthAdjust, bShow, size, color, bColor, x, y, reinterpret_cast(title));
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value);
-
-// Draw a floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
-
-/*---------------------------------------- Picture related functions ----------------------------------------*/
-
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id);
-
-// Draw an Icon
-// libID: Icon library ID
-// picID: Icon ID
-// x/y: Upper-left point
-void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y);
-
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id);
-
-// Unzip the JPG picture to virtual display area #1
-// id: Picture ID
-inline void DWIN_JPG_CacheTo1(uint8_t id) { DWIN_JPG_CacheToN(1, id); }
-
-// Copy area from virtual display area to current screen
-// cacheID: virtual area number
-// xStart/yStart: Upper-left of virtual area
-// xEnd/yEnd: Lower-right of virtual area
-// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
-
-// Animate a series of icons
-// animID: Animation ID up to 16
-// animate: animation on or off
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs,
- uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval);
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state);
diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp
index 97dc0eec42..ef390ac9dc 100644
--- a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp
+++ b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.cpp
@@ -37,89 +37,9 @@
//#define DEBUG_OUT 1
#include "../../../core/debug_out.h"
-// Make sure DWIN_SendBuf is large enough to hold the largest string plus draw command and tail.
-// Assume the narrowest (6 pixel) font and 2-byte gb2312-encoded characters.
-uint8_t DWIN_SendBuf[11 + DWIN_WIDTH / 6 * 2] = { 0xAA };
-uint8_t DWIN_BufTail[4] = { 0xCC, 0x33, 0xC3, 0x3C };
-uint8_t databuf[26] = { 0 };
-uint8_t receivedType;
-
-int recnum = 0;
-
-inline void DWIN_Byte(size_t &i, const uint16_t bval) {
- DWIN_SendBuf[++i] = bval;
-}
-
-inline void DWIN_Word(size_t &i, const uint16_t wval) {
- DWIN_SendBuf[++i] = wval >> 8;
- DWIN_SendBuf[++i] = wval & 0xFF;
-}
-
-inline void DWIN_Long(size_t &i, const uint32_t lval) {
- DWIN_SendBuf[++i] = (lval >> 24) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 16) & 0xFF;
- DWIN_SendBuf[++i] = (lval >> 8) & 0xFF;
- DWIN_SendBuf[++i] = lval & 0xFF;
-}
-
-inline void DWIN_String(size_t &i, char * const string) {
- const size_t len = _MIN(sizeof(DWIN_SendBuf) - i, strlen(string));
- memcpy(&DWIN_SendBuf[i+1], string, len);
- i += len;
-}
-
-inline void DWIN_String(size_t &i, const __FlashStringHelper * string) {
- if (!string) return;
- const size_t len = strlen_P((PGM_P)string); // cast it to PGM_P, which is basically const char *, and measure it using the _P version of strlen.
- if (len == 0) return;
- memcpy(&DWIN_SendBuf[i+1], string, len);
- i += len;
-}
-
-// Send the data in the buffer and the packet end
-inline void DWIN_Send(size_t &i) {
- ++i;
- LOOP_L_N(n, i) { LCD_SERIAL.write(DWIN_SendBuf[n]); delayMicroseconds(1); }
- LOOP_L_N(n, 4) { LCD_SERIAL.write(DWIN_BufTail[n]); delayMicroseconds(1); }
-}
-
/*-------------------------------------- System variable function --------------------------------------*/
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void) {
- #ifndef LCD_BAUDRATE
- #define LCD_BAUDRATE 115200
- #endif
- LCD_SERIAL.begin(LCD_BAUDRATE);
- const millis_t serial_connect_timeout = millis() + 1000UL;
- while (!LCD_SERIAL.connected() && PENDING(millis(), serial_connect_timeout)) { /*nada*/ }
-
- size_t i = 0;
- DWIN_Byte(i, 0x00);
- DWIN_Send(i);
-
- while (LCD_SERIAL.available() > 0 && recnum < (signed)sizeof(databuf)) {
- databuf[recnum] = LCD_SERIAL.read();
- // ignore the invalid data
- if (databuf[0] != FHONE) { // prevent the program from running.
- if (recnum > 0) {
- recnum = 0;
- ZERO(databuf);
- }
- continue;
- }
- delay(10);
- recnum++;
- }
-
- return ( recnum >= 3
- && databuf[0] == FHONE
- && databuf[1] == '\0'
- && databuf[2] == 'O'
- && databuf[3] == 'K' );
-}
-
-void DWIN_Startup(void) {
+void DWIN_Startup() {
DEBUG_ECHOPGM("\r\nDWIN handshake ");
delay(750); // Delay here or init later in the boot process
const bool success = DWIN_Handshake();
@@ -129,342 +49,14 @@ void DWIN_Startup(void) {
DWIN_UpdateLCD();
}
-// Set the backlight luminance
-// luminance: (0x00-0xFF)
-void DWIN_Backlight_SetLuminance(const uint8_t luminance) {
- size_t i = 0;
- DWIN_Byte(i, 0x30);
- DWIN_Byte(i, _MAX(luminance, 0x1F));
- DWIN_Send(i);
-}
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir) {
- size_t i = 0;
- DWIN_Byte(i, 0x34);
- DWIN_Byte(i, 0x5A);
- DWIN_Byte(i, 0xA5);
- DWIN_Byte(i, dir);
- DWIN_Send(i);
-}
-
-// Update display
-void DWIN_UpdateLCD(void) {
- size_t i = 0;
- DWIN_Byte(i, 0x3D);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Drawing functions ----------------------------------------*/
-
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color) {
- size_t i = 0;
- DWIN_Byte(i, 0x01);
- DWIN_Word(i, color);
- DWIN_Send(i);
-}
-
-// Draw a point
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y) {
- size_t i = 0;
- DWIN_Byte(i, 0x02);
- DWIN_Word(i, color);
- DWIN_Byte(i, width);
- DWIN_Byte(i, height);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Send(i);
-}
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x03);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color,
- uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x05);
- DWIN_Byte(i, mode);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd) {
- size_t i = 0;
- DWIN_Byte(i, 0x09);
- DWIN_Byte(i, (mode << 7) | dir);
- DWIN_Word(i, dis);
- DWIN_Word(i, color);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, char *string) {
- uint8_t widthAdjust = 0;
- size_t i = 0;
- DWIN_Byte(i, 0x11);
- // Bit 7: widthAdjust
- // Bit 6: bShow
- // Bit 5-4: Unused (0)
- // Bit 3-0: size
- DWIN_Byte(i, (widthAdjust * 0x80) | (bShow * 0x40) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_String(i, string);
- DWIN_Send(i);
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value) {
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- // Bit 7: bshow
- // Bit 6: 1 = signed; 0 = unsigned number;
- // Bit 5: zeroFill
- // Bit 4: zeroMode
- // Bit 3-0: size
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, 0); // fNum
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- #if 0
- for (char count = 0; count < 8; count++) {
- DWIN_Byte(i, value);
- value >>= 8;
- if (!(value & 0xFF)) break;
- }
- #else
- // Write a big-endian 64 bit integer
- const size_t p = i + 1;
- for (char count = 8; count--;) { // 7..0
- ++i;
- DWIN_SendBuf[p + count] = value;
- value >>= 8;
- }
- #endif
-
- DWIN_Send(i);
-}
-
-// Draw a floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value) {
- //uint8_t *fvalue = (uint8_t*)&value;
- size_t i = 0;
- DWIN_Byte(i, 0x14);
- DWIN_Byte(i, (bShow * 0x80) | (zeroFill * 0x20) | (zeroMode * 0x10) | size);
- DWIN_Word(i, color);
- DWIN_Word(i, bColor);
- DWIN_Byte(i, iNum);
- DWIN_Byte(i, fNum);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Long(i, value);
- /*
- DWIN_Byte(i, fvalue[3]);
- DWIN_Byte(i, fvalue[2]);
- DWIN_Byte(i, fvalue[1]);
- DWIN_Byte(i, fvalue[0]);
- */
- DWIN_Send(i);
-}
-
/*---------------------------------------- Picture related functions ----------------------------------------*/
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id) {
- size_t i = 0;
- DWIN_Word(i, 0x2200);
- DWIN_Byte(i, id);
- DWIN_Send(i); // AA 23 00 00 00 00 08 00 01 02 03 CC 33 C3 3C
-}
-
// Draw an Icon
// libID: Icon library ID
// picID: Icon ID
// x/y: Upper-left point
void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x23);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Byte(i, 0x80 | libID);
- //DWIN_Byte(i, libID);
- DWIN_Byte(i, picID);
- DWIN_Send(i);
+ DWIN_ICON_Show(true, false, false, libID, picID, x, y);
}
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id) {
- size_t i = 0;
- DWIN_Byte(i, 0x25);
- DWIN_Byte(i, n);
- DWIN_Byte(i, id);
- DWIN_Send(i);
-}
-
-// Copy area from virtual display area to current screen
-// cacheID: virtual area number
-// xStart/yStart: Upper-left of virtual area
-// xEnd/yEnd: Lower-right of virtual area
-// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y) {
- size_t i = 0;
- DWIN_Byte(i, 0x27);
- DWIN_Byte(i, 0x80 | cacheID);
- DWIN_Word(i, xStart);
- DWIN_Word(i, yStart);
- DWIN_Word(i, xEnd);
- DWIN_Word(i, yEnd);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- DWIN_Send(i);
-}
-
-// Animate a series of icons
-// animID: Animation ID; 0x00-0x0F
-// animate: true on; false off;
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs, uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval) {
- NOMORE(x, DWIN_WIDTH - 1);
- NOMORE(y, DWIN_HEIGHT - 1); // -- ozy -- srl
- size_t i = 0;
- DWIN_Byte(i, 0x28);
- DWIN_Word(i, x);
- DWIN_Word(i, y);
- // Bit 7: animation on or off
- // Bit 6: start from begin or end
- // Bit 5-4: unused (0)
- // Bit 3-0: animID
- DWIN_Byte(i, (animate * 0x80) | 0x40 | animID);
- DWIN_Byte(i, libID);
- DWIN_Byte(i, picIDs);
- DWIN_Byte(i, picIDe);
- DWIN_Byte(i, interval);
- DWIN_Send(i);
-}
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state) {
- size_t i = 0;
- DWIN_Byte(i, 0x29);
- DWIN_Word(i, state);
- DWIN_Send(i);
-}
-
-/*---------------------------------------- Memory functions ----------------------------------------*/
-// The LCD has an additional 32KB SRAM and 16KB Flash
-
-// Data can be written to the sram and save to one of the jpeg page files
-
-// Write Data Memory
-// command 0x31
-// Type: Write memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Write data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Data: data
-//
-// Flash writing returns 0xA5 0x4F 0x4B
-
-// Read Data Memory
-// command 0x32
-// Type: Read memory selection; 0x5A=SRAM; 0xA5=Flash
-// Address: Read data memory address; 0x000-0x7FFF for SRAM; 0x000-0x3FFF for Flash
-// Length: leangth of data to read; 0x01-0xF0
-//
-// Response:
-// Type, Address, Length, Data
-
-// Write Picture Memory
-// Write the contents of the 32KB SRAM data memory into the designated image memory space
-// Issued: 0x5A, 0xA5, PIC_ID
-// Response: 0xA5 0x4F 0x4B
-//
-// command 0x33
-// 0x5A, 0xA5
-// PicId: Picture Memory location, 0x00-0x0F
-//
-// Flash writing returns 0xA5 0x4F 0x4B
-
#endif // IS_DWIN_MARLINUI
diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h
index 4d8e670e1c..65d9394a85 100644
--- a/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h
+++ b/Marlin/src/lcd/e3v2/marlinui/dwin_lcd.h
@@ -26,82 +26,32 @@
* @brief DWIN screen control functions
********************************************************************************/
-#include
+#include "../../../inc/MarlinConfigPre.h"
-#define RECEIVED_NO_DATA 0x00
-#define RECEIVED_SHAKE_HAND_ACK 0x01
-
-#define FHONE 0xAA
-
-#define DWIN_SCROLL_UP 2
-#define DWIN_SCROLL_DOWN 3
-
-#if DISABLED(DWIN_MARLINUI_LANDSCAPE)
- #define DWIN_WIDTH 272
- #define DWIN_HEIGHT 480
-#else
+#if ENABLED(DWIN_MARLINUI_LANDSCAPE)
#define DWIN_WIDTH 480
#define DWIN_HEIGHT 272
#endif
+#include "../common/dwin_api.h"
+
// Picture ID
#define DWIN_Boot_Horiz 0
#define DWIN_Boot_Vert 1
#define DWIN_MarlinUI_Assets 2
-/**
- * 3-.0:The font size, 0x00-0x09, corresponds to the font size below:
- * 0x00=6*12 0x01=8*16 0x02=10*20 0x03=12*24 0x04=14*28
- * 0x05=16*32 0x06=20*40 0x07=24*48 0x08=28*56 0x09=32*64
- */
-#define font6x12 0x00
-#define font8x16 0x01
-#define font10x20 0x02
-#define font12x24 0x03
-#define font14x28 0x04
-#define font16x32 0x05
-#define font20x40 0x06
-#define font24x48 0x07
-#define font28x56 0x08
-#define font32x64 0x09
-
-#define DWIN_FONT_MENU font10x20
-#define DWIN_FONT_STAT font14x28
-#define DWIN_FONT_ALERT font14x28
-
-// Color
-#define Color_White 0xFFFF
-#define Color_Yellow 0xFF0F
-#define Color_Error_Red 0xB000 // Error!
-#define Color_Bg_Red 0xF00F // Red background color
-#define Color_Bg_Window 0x31E8 // Popup background color
-#define Color_Bg_Heading 0x3344 // Static Heading
-#define Color_Bg_Blue 0x1125 // Dark blue background color
-#define Color_Bg_Black 0x0841 // Black background color
-#define Color_IconBlue 0x45FA // Lighter blue that matches icons/accents
-#define Popup_Text_Color 0xD6BA // Popup font background color
-#define Line_Color 0x3A6A // Split line color
-#define Rectangle_Color 0xEE2F // Blue square cursor color
-#define Percent_Color 0xFE29 // Percentage color
-#define BarFill_Color 0x10E4 // Fill color of progress bar
-#define Select_Color 0x33BB // Selected color
-
-// Character matrix width x height
-//#define LCD_WIDTH ((DWIN_WIDTH) / 8)
-//#define LCD_HEIGHT ((DWIN_HEIGHT) / 12)
-
// ICON ID
#define BOOT_ICON 3 // Icon set file 3.ICO
#define ICON 4 // Icon set file 4.ICO
-// MarlinUI Boot Icons
+// MarlinUI Boot Icons from Set 3
#define ICON_MarlinBoot 0
#define ICON_OpenSource 1
#define ICON_GitHubURL 2
#define ICON_MarlinURL 3
#define ICON_Copyright 4
-// MarlinUI Icons
+// MarlinUI Icons from Set 4
#define ICON_LOGO_Marlin 0
#define ICON_HotendOff 1
#define ICON_HotendOn 2
@@ -120,182 +70,16 @@
#define ICON_DownArrow 15
#define ICON_BedLine 16
-#define ICON_AdvSet ICON_Language
-#define ICON_HomeOff ICON_AdvSet
-#define ICON_HomeOffX ICON_StepX
-#define ICON_HomeOffY ICON_StepY
-#define ICON_HomeOffZ ICON_StepZ
-#define ICON_ProbeOff ICON_AdvSet
-#define ICON_ProbeOffX ICON_StepX
-#define ICON_ProbeOffY ICON_StepY
-#define ICON_PIDNozzle ICON_SetEndTemp
-#define ICON_PIDbed ICON_SetBedTemp
+#include "../common/dwin_font.h"
-/*-------------------------------------- System variable function --------------------------------------*/
+#define DWIN_FONT_MENU font10x20
+#define DWIN_FONT_STAT font14x28
+#define DWIN_FONT_ALERT font14x28
-// Handshake (1: Success, 0: Fail)
-bool DWIN_Handshake(void);
+#include "../common/dwin_color.h"
-// Common DWIN startup
-void DWIN_Startup(void);
+#define Color_Bg_Heading 0x3344 // Static Heading
-// Set the backlight luminance
-// luminance: (0x00-0xFF)
-void DWIN_Backlight_SetLuminance(const uint8_t luminance);
-
-// Set screen display direction
-// dir: 0=0°, 1=90°, 2=180°, 3=270°
-void DWIN_Frame_SetDir(uint8_t dir);
-
-// Update display
-void DWIN_UpdateLCD(void);
-
-/*---------------------------------------- Drawing functions ----------------------------------------*/
-
-// Clear screen
-// color: Clear screen color
-void DWIN_Frame_Clear(const uint16_t color);
-
-// Draw a point
-// color: point color
-// width: point width 0x01-0x0F
-// height: point height 0x01-0x0F
-// x,y: upper left point
-void DWIN_Draw_Point(uint16_t color, uint8_t width, uint8_t height, uint16_t x, uint16_t y);
-
-// Draw a line
-// color: Line segment color
-// xStart/yStart: Start point
-// xEnd/yEnd: End point
-void DWIN_Draw_Line(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a Horizontal line
-// color: Line segment color
-// xStart/yStart: Start point
-// xLength: Line Length
-inline void DWIN_Draw_HLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart + xLength - 1, yStart);
-}
-
-// Draw a Vertical line
-// color: Line segment color
-// xStart/yStart: Start point
-// yLength: Line Length
-inline void DWIN_Draw_VLine(uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t yLength) {
- DWIN_Draw_Line(color, xStart, yStart, xStart, yStart + yLength - 1);
-}
-
-// Draw a rectangle
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xEnd/yEnd: lower right point
-void DWIN_Draw_Rectangle(uint8_t mode, uint16_t color,
- uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-// Draw a box
-// mode: 0=frame, 1=fill, 2=XOR fill
-// color: Rectangle color
-// xStart/yStart: upper left point
-// xSize/ySize: box size
-inline void DWIN_Draw_Box(uint8_t mode, uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xSize, uint16_t ySize) {
- DWIN_Draw_Rectangle(mode, color, xStart, yStart, xStart + xSize - 1, yStart + ySize - 1);
-}
-
-// Move a screen area
-// mode: 0, circle shift; 1, translation
-// dir: 0=left, 1=right, 2=up, 3=down
-// dis: Distance
-// color: Fill color
-// xStart/yStart: upper left point
-// xEnd/yEnd: bottom right point
-void DWIN_Frame_AreaMove(uint8_t mode, uint8_t dir, uint16_t dis,
- uint16_t color, uint16_t xStart, uint16_t yStart, uint16_t xEnd, uint16_t yEnd);
-
-/*---------------------------------------- Text related functions ----------------------------------------*/
-
-// Draw a string
-// bShow: true=display background color; false=don't display background color
-// size: Font size
-// color: Character color
-// bColor: Background color
-// x/y: Upper-left coordinate of the string
-// *string: The string
-void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, char *string);
-
-class __FlashStringHelper;
-
-inline void DWIN_Draw_String(bool bShow, uint8_t size, uint16_t color, uint16_t bColor, uint16_t x, uint16_t y, const __FlashStringHelper *title) {
- DWIN_Draw_String(bShow, size, color, bColor, x, y, (char *)title);
-}
-
-// Draw a positive integer
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of digits
-// x/y: Upper-left coordinate
-// value: Integer value
-void DWIN_Draw_IntValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint16_t x, uint16_t y, uint16_t value);
-
-// Draw a floating point number
-// bShow: true=display background color; false=don't display background color
-// zeroFill: true=zero fill; false=no zero fill
-// zeroMode: 1=leading 0 displayed as 0; 0=leading 0 displayed as a space
-// size: Font size
-// color: Character color
-// bColor: Background color
-// iNum: Number of whole digits
-// fNum: Number of decimal digits
-// x/y: Upper-left point
-// value: Float value
-void DWIN_Draw_FloatValue(uint8_t bShow, bool zeroFill, uint8_t zeroMode, uint8_t size, uint16_t color,
- uint16_t bColor, uint8_t iNum, uint8_t fNum, uint16_t x, uint16_t y, long value);
-
-/*---------------------------------------- Picture related functions ----------------------------------------*/
-
-// Draw JPG and cached in #0 virtual display area
-// id: Picture ID
-void DWIN_JPG_ShowAndCache(const uint8_t id);
-
-// Draw an Icon
-// libID: Icon library ID
-// picID: Icon ID
-// x/y: Upper-left point
-void DWIN_ICON_Show(uint8_t libID, uint8_t picID, uint16_t x, uint16_t y);
-
-// Unzip the JPG picture to a virtual display area
-// n: Cache index
-// id: Picture ID
-void DWIN_JPG_CacheToN(uint8_t n, uint8_t id);
-
-// Unzip the JPG picture to virtual display area #1
-// id: Picture ID
-inline void DWIN_JPG_CacheTo1(uint8_t id) { DWIN_JPG_CacheToN(1, id); }
-
-// Copy area from virtual display area to current screen
-// cacheID: virtual area number
-// xStart/yStart: Upper-left of virtual area
-// xEnd/yEnd: Lower-right of virtual area
-// x/y: Screen paste point
-void DWIN_Frame_AreaCopy(uint8_t cacheID, uint16_t xStart, uint16_t yStart,
- uint16_t xEnd, uint16_t yEnd, uint16_t x, uint16_t y);
-
-// Animate a series of icons
-// animID: Animation ID up to 16
-// animate: animation on or off
-// libID: Icon library ID
-// picIDs: Icon starting ID
-// picIDe: Icon ending ID
-// x/y: Upper-left point
-// interval: Display time interval, unit 10mS
-void DWIN_ICON_Animation(uint8_t animID, bool animate, uint8_t libID, uint8_t picIDs,
- uint8_t picIDe, uint16_t x, uint16_t y, uint16_t interval);
-
-// Animation Control
-// state: 16 bits, each bit is the state of an animation id
-void DWIN_ICON_AnimationControl(uint16_t state);
+// Character matrix width x height
+//#define LCD_WIDTH ((DWIN_WIDTH) / 8)
+//#define LCD_HEIGHT ((DWIN_HEIGHT) / 12)
diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp b/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp
index 89e001b29c..e08d5360db 100644
--- a/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp
+++ b/Marlin/src/lcd/e3v2/marlinui/dwin_string.cpp
@@ -43,9 +43,11 @@ uint8_t read_byte(uint8_t *byte) { return *byte; }
/**
* Add a string, applying substitutions for the following characters:
*
+ * $ displays the clipped C-string given by the itemString argument
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
+ * @ displays an axis name such as XYZUVW, or E for an extruder
*/
void DWIN_String::add(uint8_t *string, const int8_t index, uint8_t *itemString/*=nullptr*/) {
wchar_t wchar;
@@ -62,17 +64,15 @@ void DWIN_String::add(uint8_t *string, const int8_t index, uint8_t *itemString/*
if (inum >= 10) { add_character('0' + (inum / 10)); inum %= 10; }
add_character('0' + inum);
}
- else {
+ else
add(index == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED));
- }
- continue;
}
- else if (ch == '$' && itemString) {
+ else if (ch == '$' && itemString)
add(itemString);
- continue;
- }
-
- add_character(ch);
+ else if (ch == '@')
+ add_character(axis_codes[index]);
+ else
+ add_character(ch);
}
eol();
}
diff --git a/Marlin/src/lcd/e3v2/marlinui/dwin_string.h b/Marlin/src/lcd/e3v2/marlinui/dwin_string.h
index 08566407b7..30af387bdc 100644
--- a/Marlin/src/lcd/e3v2/marlinui/dwin_string.h
+++ b/Marlin/src/lcd/e3v2/marlinui/dwin_string.h
@@ -21,12 +21,11 @@
*/
#pragma once
-#include
-
-
#include "../../fontutils.h"
#include "../../marlinui.h"
+#include
+
typedef struct _dwin_charmap_t {
wchar_t uchar; // the unicode char
uint8_t idx; // the glyph of the char in the ROM
@@ -66,7 +65,7 @@ class DWIN_String {
static void set(uint8_t *string) { set(); add(string); }
static void set(wchar_t character) { set(); add(character); }
static void set(uint8_t *string, int8_t index, const char *itemString=nullptr) { set(); add(string, index, (uint8_t *)itemString); }
- static inline void set(const __FlashStringHelper *fstring) { set((uint8_t *)fstring); }
+ static inline void set(FSTR_P fstring) { set((uint8_t *)fstring); }
static inline void set(const char *string) { set((uint8_t *)string); }
static inline void set(const char *string, int8_t index, const char *itemString=nullptr) { set((uint8_t *)string, index, itemString); }
static inline void add(const char *string) { add((uint8_t *)string); }
diff --git a/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp b/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp
index 069272f6c1..5f62459534 100644
--- a/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp
+++ b/Marlin/src/lcd/e3v2/marlinui/lcdprint_dwin.cpp
@@ -101,8 +101,8 @@ int lcd_put_u8str_max(const char * utf8_str, pixel_len_t max_length) {
return lcd_put_u8str_max_cb(utf8_str, read_byte_ram, max_length);
}
-int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length) {
- return lcd_put_u8str_max_cb(utf8_str_P, read_byte_rom, max_length);
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
+ return lcd_put_u8str_max_cb(utf8_pstr, read_byte_rom, max_length);
}
lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
diff --git a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp
index 7655e059e2..8648401c9c 100644
--- a/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp
+++ b/Marlin/src/lcd/e3v2/marlinui/ui_common.cpp
@@ -83,7 +83,7 @@ void MarlinUI::init_lcd() {
DWIN_Startup();
// Load the assets JPG (currently just the status screen 'icon')
- DWIN_JPG_CacheToN(1, DWIN_MarlinUI_Assets);
+ DWIN_JPG_CacheTo1(DWIN_MarlinUI_Assets);
}
// This LCD should clear where it will draw anew
@@ -160,11 +160,11 @@ void MarlinUI::draw_kill_screen() {
slen = utf8_strlen(S(GET_TEXT_F(MSG_HALTED)));
lcd_moveto(cx - (slen / 2), cy);
- lcd_put_u8str_P((const char*)GET_TEXT_F(MSG_HALTED));
+ lcd_put_u8str(GET_TEXT_F(MSG_HALTED));
slen = utf8_strlen(S(GET_TEXT_F(MSG_HALTED)));
lcd_moveto(cx - (slen / 2), cy + 1);
- lcd_put_u8str_P((const char*)GET_TEXT_F(MSG_HALTED));
+ lcd_put_u8str(GET_TEXT_F(MSG_HALTED));
}
//
@@ -254,6 +254,10 @@ void MarlinUI::draw_status_message(const bool blink) {
#endif
}
+#if HAS_LCD_BRIGHTNESS
+ void MarlinUI::_set_brightness() { DWIN_LCD_Brightness(backlight ? brightness : 0); }
+#endif
+
#if HAS_LCD_MENU
#include "../../menu/menu.h"
@@ -545,8 +549,8 @@ void MarlinUI::draw_status_message(const bool blink) {
// Show the location value
dwin_string.set(Z_LBL);
- if (!isnan(ubl.z_values[x_plot][y_plot]))
- dwin_string.add(ftostr43sign(ubl.z_values[x_plot][y_plot]));
+ if (!isnan(Z_VALUES_ARR[x_plot][y_plot]))
+ dwin_string.add(ftostr43sign(Z_VALUES_ARR[x_plot][y_plot]));
else
dwin_string.add(PSTR(" -----"));
lcd_moveto(
@@ -558,19 +562,11 @@ void MarlinUI::draw_status_message(const bool blink) {
#endif // AUTO_BED_LEVELING_UBL
- #if ANY(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY, BABYSTEP_GFX_OVERLAY)
-
- void _lcd_zoffset_overlay_gfx(const float zvalue) {
- // Determine whether the user is raising or lowering the nozzle.
- static int8_t dir;
- static float old_zvalue;
- if (zvalue != old_zvalue) {
- dir = zvalue ? zvalue < old_zvalue ? -1 : 1 : 0;
- old_zvalue = zvalue;
- }
+ #if ANY(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ void MarlinUI::zoffset_overlay(const int8_t dir) {
const int rot_up = TERN(OVERLAY_GFX_REVERSE, ICON_RotateCCW, ICON_RotateCW),
- rot_down = TERN(OVERLAY_GFX_REVERSE, ICON_RotateCW, ICON_RotateCCW);
+ rot_down = TERN(OVERLAY_GFX_REVERSE, ICON_RotateCW, ICON_RotateCCW);
const int nozzle = (LCD_PIXEL_WIDTH / 2) - 20;
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp b/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp
index 1339c39f3f..f49b17acc1 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp
+++ b/Marlin/src/lcd/extui/anycubic_chiron/FileNavigator.cpp
@@ -157,7 +157,7 @@ void FileNavigator::skiptofileindex(uint16_t skip) {
// The new panel ignores entries that don't end in .GCO or .gcode so add and pad them.
if (paneltype == AC_panel_new) {
TFTSer.println("<<.GCO");
- Chiron.SendtoTFTLN(PSTR(".. .gcode"));
+ Chiron.SendtoTFTLN(F(".. .gcode"));
}
else {
TFTSer.println("<<");
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp b/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp
index 5cd0922800..7a58963c11 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp
+++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_extui.cpp
@@ -41,8 +41,8 @@ namespace ExtUI {
void onIdle() { Chiron.IdleLoop(); }
- void onPrinterKilled(PGM_P const error, PGM_P const component) {
- Chiron.PrinterKilled(error,component);
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component) {
+ Chiron.PrinterKilled(error, component);
}
void onMediaInserted() { Chiron.MediaEvent(AC_media_inserted); }
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp
index 42364f2890..9f558e3a98 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp
+++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.cpp
@@ -37,6 +37,7 @@
#include "FileNavigator.h"
#include "../../../gcode/queue.h"
+#include "../../../module/stepper.h"
#include "../../../sd/cardreader.h"
#include "../../../libs/numtostr.h"
#include "../../../MarlinCore.h"
@@ -98,7 +99,7 @@ void ChironTFT::Startup() {
// Enable leveling and Disable end stops during print
// as Z home places nozzle above the bed so we need to allow it past the end stops
- injectCommands_P(AC_cmnd_enable_leveling);
+ injectCommands(AC_cmnd_enable_leveling);
// Startup tunes are defined in Tunes.h
PlayTune(BEEPER_PIN, TERN(AC_DEFAULT_STARTUP_TUNE, Anycubic_PowerOn, GB_PowerOn), 1);
@@ -125,7 +126,7 @@ void ChironTFT::IdleLoop() {
CheckHeaters();
}
-void ChironTFT::PrinterKilled(PGM_P error,PGM_P component) {
+void ChironTFT::PrinterKilled(FSTR_P const error, FSTR_P const component) {
SendtoTFTLN(AC_msg_kill_lcd);
#if ACDEBUG(AC_MARLIN)
SERIAL_ECHOLNPGM("PrinterKilled()\nerror: ", error , "\ncomponent: ", component);
@@ -243,7 +244,7 @@ void ChironTFT::StatusChange(const char * const msg) {
// If probing completes ok save the mesh and park
// Ignore the custom machine name
if (strcmp_P(msg + strlen(CUSTOM_MACHINE_NAME), MARLIN_msg_ready) == 0) {
- injectCommands_P(PSTR("M500\nG27"));
+ injectCommands(F("M500\nG27"));
SendtoTFTLN(AC_msg_probing_complete);
printer_state = AC_printer_idle;
msg_matched = true;
@@ -251,7 +252,7 @@ void ChironTFT::StatusChange(const char * const msg) {
// If probing fails don't save the mesh raise the probe above the bad point
if (strcmp_P(msg, MARLIN_msg_probing_failed) == 0) {
PlayTune(BEEPER_PIN, BeepBeepBeeep, 1);
- injectCommands_P(PSTR("G1 Z50 F500"));
+ injectCommands(F("G1 Z50 F500"));
SendtoTFTLN(AC_msg_probing_complete);
printer_state = AC_printer_idle;
msg_matched = true;
@@ -305,7 +306,7 @@ void ChironTFT::PowerLossRecovery() {
printer_state = AC_printer_resuming_from_power_outage; // Play tune to notify user we can recover.
last_error = AC_error_powerloss;
PlayTune(BEEPER_PIN, SOS, 1);
- SERIAL_ECHOLNPGM_P(AC_msg_powerloss_recovery);
+ SERIAL_ECHOLNF(AC_msg_powerloss_recovery);
}
void ChironTFT::PrintComplete() {
@@ -314,19 +315,20 @@ void ChironTFT::PrintComplete() {
setSoftEndstopState(true); // enable endstops
}
-void ChironTFT::SendtoTFT(PGM_P str) { // A helper to print PROGMEM string to the panel
+void ChironTFT::SendtoTFT(FSTR_P const fstr/*=nullptr*/) { // A helper to print PROGMEM string to the panel
#if ACDEBUG(AC_SOME)
- SERIAL_ECHOPGM_P(str);
+ SERIAL_ECHOF(fstr);
#endif
+ PGM_P str = FTOP(fstr);
while (const char c = pgm_read_byte(str++)) TFTSer.write(c);
}
-void ChironTFT::SendtoTFTLN(PGM_P str = nullptr) {
- if (str) {
+void ChironTFT::SendtoTFTLN(FSTR_P const fstr/*=nullptr*/) {
+ if (fstr) {
#if ACDEBUG(AC_SOME)
SERIAL_ECHOPGM("> ");
#endif
- SendtoTFT(str);
+ SendtoTFT(fstr);
#if ACDEBUG(AC_SOME)
SERIAL_EOL();
#endif
@@ -425,9 +427,9 @@ void ChironTFT::SendFileList(int8_t startindex) {
#if ACDEBUG(AC_INFO)
SERIAL_ECHOLNPGM("## SendFileList ## ", startindex);
#endif
- SendtoTFTLN(PSTR("FN "));
+ SendtoTFTLN(F("FN "));
filenavigator.getFiles(startindex, panel_type, 4);
- SendtoTFTLN(PSTR("END"));
+ SendtoTFTLN(F("END"));
}
void ChironTFT::SelectFile() {
@@ -487,7 +489,7 @@ void ChironTFT::ProcessPanelRequest() {
if (tpos != -1) {
if (panel_command[tpos+1]== 'X' && panel_command[tpos+2]=='Y') {
panel_type = AC_panel_standard;
- SERIAL_ECHOLNPGM_P(AC_msg_old_panel_detected);
+ SERIAL_ECHOLNF(AC_msg_old_panel_detected);
}
}
else {
@@ -495,7 +497,7 @@ void ChironTFT::ProcessPanelRequest() {
if (tpos != -1) {
if (panel_command[tpos+1]== '0' && panel_command[tpos+2]==']') {
panel_type = AC_panel_new;
- SERIAL_ECHOLNPGM_P(AC_msg_new_panel_detected);
+ SERIAL_ECHOLNF(AC_msg_new_panel_detected);
}
}
}
@@ -511,55 +513,55 @@ void ChironTFT::PanelInfo(uint8_t req) {
// information requests A0-A8 and A33
switch (req) {
case 0: // A0 Get HOTEND Temp
- SendtoTFT(PSTR("A0V "));
+ SendtoTFT(F("A0V "));
TFTSer.println(getActualTemp_celsius(E0));
break;
case 1: // A1 Get HOTEND Target Temp
- SendtoTFT(PSTR("A1V "));
+ SendtoTFT(F("A1V "));
TFTSer.println(getTargetTemp_celsius(E0));
break;
case 2: // A2 Get BED Temp
- SendtoTFT(PSTR("A2V "));
+ SendtoTFT(F("A2V "));
TFTSer.println(getActualTemp_celsius(BED));
break;
case 3: // A3 Get BED Target Temp
- SendtoTFT(PSTR("A3V "));
+ SendtoTFT(F("A3V "));
TFTSer.println(getTargetTemp_celsius(BED));
break;
case 4: // A4 Get FAN Speed
- SendtoTFT(PSTR("A4V "));
+ SendtoTFT(F("A4V "));
TFTSer.println(getActualFan_percent(FAN0));
break;
case 5: // A5 Get Current Coordinates
- SendtoTFT(PSTR("A5V X: "));
+ SendtoTFT(F("A5V X: "));
TFTSer.print(getAxisPosition_mm(X));
- SendtoTFT(PSTR(" Y: "));
+ SendtoTFT(F(" Y: "));
TFTSer.print(getAxisPosition_mm(Y));
- SendtoTFT(PSTR(" Z: "));
+ SendtoTFT(F(" Z: "));
TFTSer.println(getAxisPosition_mm(Z));
break;
case 6: // A6 Get printing progress
if (isPrintingFromMedia()) {
- SendtoTFT(PSTR("A6V "));
+ SendtoTFT(F("A6V "));
TFTSer.println(ui8tostr2(getProgress_percent()));
}
else
- SendtoTFTLN(PSTR("A6V ---"));
+ SendtoTFTLN(F("A6V ---"));
break;
case 7: { // A7 Get Printing Time
uint32_t time = getProgress_seconds_elapsed() / 60;
- SendtoTFT(PSTR("A7V "));
+ SendtoTFT(F("A7V "));
TFTSer.print(ui8tostr2(time / 60));
- SendtoTFT(PSTR(" H "));
+ SendtoTFT(F(" H "));
TFTSer.print(ui8tostr2(time % 60));
- SendtoTFT(PSTR(" M"));
+ SendtoTFT(F(" M"));
#if ACDEBUG(AC_ALL)
SERIAL_ECHOLNPGM("Print time ", ui8tostr2(time / 60), ":", ui8tostr2(time % 60));
#endif
@@ -574,9 +576,9 @@ void ChironTFT::PanelInfo(uint8_t req) {
break;
case 33: // A33 Get firmware info
- SendtoTFT(PSTR("J33 "));
+ SendtoTFT(F("J33 "));
// If there is an error recorded, show that instead of the FW version
- if (!GetLastError()) SendtoTFTLN(PSTR(SHORT_BUILD_VERSION));
+ if (!GetLastError()) SendtoTFTLN(F(SHORT_BUILD_VERSION));
break;
}
}
@@ -607,7 +609,7 @@ void ChironTFT::PanelAction(uint8_t req) {
}
else {
if (printer_state == AC_printer_resuming_from_power_outage)
- injectCommands_P(PSTR("M1000 C")); // Cancel recovery
+ injectCommands(F("M1000 C")); // Cancel recovery
SendtoTFTLN(AC_msg_stop);
printer_state = AC_printer_idle;
}
@@ -624,7 +626,7 @@ void ChironTFT::PanelAction(uint8_t req) {
case 14: { // A14 Start Printing
// Allows printer to restart the job if we don't want to recover
if (printer_state == AC_printer_resuming_from_power_outage) {
- injectCommands_P(PSTR("M1000 C")); // Cancel recovery
+ injectCommands(F("M1000 C")); // Cancel recovery
printer_state = AC_printer_idle;
}
#if ACDebugLevel >= 1
@@ -637,8 +639,8 @@ void ChironTFT::PanelAction(uint8_t req) {
case 15: // A15 Resuming from outage
if (printer_state == AC_printer_resuming_from_power_outage) {
// Need to home here to restore the Z position
- injectCommands_P(AC_cmnd_power_loss_recovery);
- injectCommands_P(PSTR("M1000")); // home and start recovery
+ injectCommands(AC_cmnd_power_loss_recovery);
+ injectCommands(F("M1000")); // home and start recovery
}
break;
@@ -665,7 +667,7 @@ void ChironTFT::PanelAction(uint8_t req) {
case 19: // A19 Motors off
if (!isPrinting()) {
- disable_all_steppers(); // from marlincore.h
+ stepper.disable_all_steppers();
SendtoTFTLN(AC_msg_ready);
}
break;
@@ -674,7 +676,7 @@ void ChironTFT::PanelAction(uint8_t req) {
if (panel_command[4] == 'S')
setFeedrate_percent(atoi(&panel_command[5]));
else {
- SendtoTFT(PSTR("A20V "));
+ SendtoTFT(F("A20V "));
TFTSer.println(getFeedrate_percent());
}
break;
@@ -682,9 +684,9 @@ void ChironTFT::PanelAction(uint8_t req) {
case 21: // A21 Home Axis A21 X
if (!isPrinting()) {
switch ((char)panel_command[4]) {
- case 'X': injectCommands_P(PSTR("G28X")); break;
- case 'Y': injectCommands_P(PSTR("G28Y")); break;
- case 'Z': injectCommands_P(PSTR("G28Z")); break;
+ case 'X': injectCommands(F("G28X")); break;
+ case 'Y': injectCommands(F("G28Y")); break;
+ case 'Z': injectCommands(F("G28Z")); break;
case 'C': injectCommands_P(G28_STR); break;
}
}
@@ -770,7 +772,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
pos.y = atoi(&panel_command[FindToken('Y')+1]);
pos_z = getMeshPoint(pos);
- SendtoTFT(PSTR("A29V "));
+ SendtoTFT(F("A29V "));
TFTSer.println(pos_z * 100);
if (!isPrinting()) {
setSoftEndstopState(true); // disable endstops
@@ -808,7 +810,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
SendtoTFTLN(AC_msg_start_probing);
- injectCommands_P(PSTR("G28\nG29"));
+ injectCommands(F("G28\nG29"));
printer_state = AC_printer_probing;
}
}
@@ -822,23 +824,23 @@ void ChironTFT::PanelProcess(uint8_t req) {
if (FindToken('C') != -1) { // Restore and apply original offsets
if (!isPrinting()) {
- injectCommands_P(PSTR("M501\nM420 S1"));
+ injectCommands(F("M501\nM420 S1"));
selectedmeshpoint.x = selectedmeshpoint.y = 99;
- SERIAL_ECHOLNPGM_P(AC_msg_mesh_changes_abandoned);
+ SERIAL_ECHOLNF(AC_msg_mesh_changes_abandoned);
}
}
else if (FindToken('D') != -1) { // Save Z Offset tables and restore leveling state
if (!isPrinting()) {
setAxisPosition_mm(1.0,Z); // Lift nozzle before any further movements are made
- injectCommands_P(PSTR("M500"));
- SERIAL_ECHOLNPGM_P(AC_msg_mesh_changes_saved);
+ injectCommands(F("M500"));
+ SERIAL_ECHOLNF(AC_msg_mesh_changes_saved);
selectedmeshpoint.x = selectedmeshpoint.y = 99;
}
}
else if (FindToken('G') != -1) { // Get current offset
- SendtoTFT(PSTR("A31V "));
+ SendtoTFT(F("A31V "));
// When printing use the live z Offset position
// we will use babystepping to move the print head
if (isPrinting())
@@ -873,7 +875,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
babystepAxis_steps(steps, Z);
live_Zoffset += Zshift;
}
- SendtoTFT(PSTR("A31V "));
+ SendtoTFT(F("A31V "));
TFTSer.println(live_Zoffset);
}
else {
@@ -891,7 +893,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
#endif
setZOffset_mm(currZOffset + Zshift);
- SendtoTFT(PSTR("A31V "));
+ SendtoTFT(F("A31V "));
TFTSer.println(getZOffset_mm());
if (isAxisPositionKnown(Z)) {
@@ -910,7 +912,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
case 32: { // A32 clean leveling beep flag
// Ignore request if printing
//if (isPrinting()) break;
- //injectCommands_P(PSTR("M500\nM420 S1\nG1 Z10 F240\nG1 X0 Y0 F6000"));
+ //injectCommands(F("M500\nM420 S1\nG1 Z10 F240\nG1 X0 Y0 F6000"));
//TFTSer.println();
} break;
@@ -918,7 +920,7 @@ void ChironTFT::PanelProcess(uint8_t req) {
case 34: { // A34 Adjust single mesh point A34 C/S X1 Y1 V123
if (panel_command[3] == 'C') { // Restore original offsets
- injectCommands_P(PSTR("M501\nM420 S1"));
+ injectCommands(F("M501\nM420 S1"));
selectedmeshpoint.x = selectedmeshpoint.y = 99;
//printer_state = AC_printer_idle;
}
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.h b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.h
index 7eb0049993..c9a32e584d 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.h
+++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft.h
@@ -59,16 +59,16 @@ class ChironTFT {
public:
static void Startup();
static void IdleLoop();
- static void PrinterKilled(PGM_P,PGM_P);
+ static void PrinterKilled(FSTR_P, FSTR_P);
static void MediaEvent(media_event_t);
static void TimerEvent(timer_event_t);
static void FilamentRunout();
- static void ConfirmationRequest(const char * const );
- static void StatusChange(const char * const );
+ static void ConfirmationRequest(const char * const);
+ static void StatusChange(const char * const);
static void PowerLossRecovery();
static void PrintComplete();
- static void SendtoTFT(PGM_P);
- static void SendtoTFTLN(PGM_P);
+ static void SendtoTFT(FSTR_P const=nullptr);
+ static void SendtoTFTLN(FSTR_P const=nullptr);
private:
static void DetectPanelType();
static bool ReadTFTCommand();
diff --git a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft_defs.h b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft_defs.h
index 70ac1490df..0fd7770cdd 100644
--- a/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft_defs.h
+++ b/Marlin/src/lcd/extui/anycubic_chiron/chiron_tft_defs.h
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+#pragma once
/**
* lcd/extui/anycubic_chiron/chiron_defs.h
@@ -28,7 +29,6 @@
* (not affiliated with Anycubic, Ltd.)
*/
-#pragma once
#include "../../../inc/MarlinConfigPre.h"
//#define ACDEBUGLEVEL 4
@@ -57,46 +57,46 @@
#define AC_LOWEST_MESHPOINT_VAL -10 // The lowest value you can set for a single mesh point offset
// TFT panel commands
-#define AC_msg_sd_card_inserted PSTR("J00")
-#define AC_msg_sd_card_removed PSTR("J01")
-#define AC_msg_no_sd_card PSTR("J02")
-#define AC_msg_usb_connected PSTR("J03")
-#define AC_msg_print_from_sd_card PSTR("J04")
-#define AC_msg_pause PSTR("J05")
-#define AC_msg_nozzle_heating PSTR("J06")
-#define AC_msg_nozzle_heating_done PSTR("J07")
-#define AC_msg_bed_heating PSTR("J08")
-#define AC_msg_bed_heating_done PSTR("J09")
-#define AC_msg_nozzle_temp_abnormal PSTR("J10")
-#define AC_msg_kill_lcd PSTR("J11")
-#define AC_msg_ready PSTR("J12")
-#define AC_msg_low_nozzle_temp PSTR("J13")
-#define AC_msg_print_complete PSTR("J14")
-#define AC_msg_filament_out_alert PSTR("J15")
-#define AC_msg_stop PSTR("J16")
-#define AC_msg_main_board_has_reset PSTR("J17")
-#define AC_msg_paused PSTR("J18")
-#define AC_msg_j19_unknown PSTR("J19")
-#define AC_msg_sd_file_open_success PSTR("J20")
-#define AC_msg_sd_file_open_failed PSTR("J21")
-#define AC_msg_level_monitor_finished PSTR("J22")
-#define AC_msg_filament_out_block PSTR("J23")
-#define AC_msg_probing_not_allowed PSTR("J24")
-#define AC_msg_probing_complete PSTR("J25")
-#define AC_msg_start_probing PSTR("J26")
-#define AC_msg_version PSTR("J27")
-#define AC_msg_mesh_changes_abandoned PSTR("Mesh changes abandoned, previous mesh restored.")
-#define AC_msg_mesh_changes_saved PSTR("Mesh changes saved.")
-#define AC_msg_old_panel_detected PSTR("Standard TFT panel detected!")
-#define AC_msg_new_panel_detected PSTR("New TFT panel detected!")
-#define AC_msg_powerloss_recovery PSTR("Resuming from power outage! select the same SD file then press resume")
+#define AC_msg_sd_card_inserted F("J00")
+#define AC_msg_sd_card_removed F("J01")
+#define AC_msg_no_sd_card F("J02")
+#define AC_msg_usb_connected F("J03")
+#define AC_msg_print_from_sd_card F("J04")
+#define AC_msg_pause F("J05")
+#define AC_msg_nozzle_heating F("J06")
+#define AC_msg_nozzle_heating_done F("J07")
+#define AC_msg_bed_heating F("J08")
+#define AC_msg_bed_heating_done F("J09")
+#define AC_msg_nozzle_temp_abnormal F("J10")
+#define AC_msg_kill_lcd F("J11")
+#define AC_msg_ready F("J12")
+#define AC_msg_low_nozzle_temp F("J13")
+#define AC_msg_print_complete F("J14")
+#define AC_msg_filament_out_alert F("J15")
+#define AC_msg_stop F("J16")
+#define AC_msg_main_board_has_reset F("J17")
+#define AC_msg_paused F("J18")
+#define AC_msg_j19_unknown F("J19")
+#define AC_msg_sd_file_open_success F("J20")
+#define AC_msg_sd_file_open_failed F("J21")
+#define AC_msg_level_monitor_finished F("J22")
+#define AC_msg_filament_out_block F("J23")
+#define AC_msg_probing_not_allowed F("J24")
+#define AC_msg_probing_complete F("J25")
+#define AC_msg_start_probing F("J26")
+#define AC_msg_version F("J27")
+#define AC_msg_mesh_changes_abandoned F("Mesh changes abandoned, previous mesh restored.")
+#define AC_msg_mesh_changes_saved F("Mesh changes saved.")
+#define AC_msg_old_panel_detected F("Standard TFT panel detected!")
+#define AC_msg_new_panel_detected F("New TFT panel detected!")
+#define AC_msg_powerloss_recovery F("Resuming from power outage! select the same SD file then press resume")
// Error messages must not contain spaces
-#define AC_msg_error_bed_temp PSTR("Abnormal_bed_temp")
-#define AC_msg_error_hotend_temp PSTR("Abnormal_hotend_temp")
-#define AC_msg_error_sd_card PSTR("SD_card_error")
-#define AC_msg_filament_out PSTR("Filament_runout")
-#define AC_msg_power_loss PSTR("Power_failure")
-#define AC_msg_eeprom_version PSTR("EEPROM_ver_wrong")
+#define AC_msg_error_bed_temp F("Abnormal_bed_temp")
+#define AC_msg_error_hotend_temp F("Abnormal_hotend_temp")
+#define AC_msg_error_sd_card F("SD_card_error")
+#define AC_msg_filament_out F("Filament_runout")
+#define AC_msg_power_loss F("Power_failure")
+#define AC_msg_eeprom_version F("EEPROM_ver_wrong")
#define MARLIN_msg_start_probing PSTR("Probing Point 1/25")
#define MARLIN_msg_probing_failed PSTR("Probing Failed")
@@ -113,16 +113,16 @@
#define MARLIN_msg_filament_purging PSTR("Filament Purging...")
#define MARLIN_msg_special_pause PSTR("PB")
-#define AC_cmnd_auto_unload_filament PSTR("M701") // Use Marlin unload routine
-#define AC_cmnd_auto_load_filament PSTR("M702 M0 PB") // Use Marlin load routing then pause for user to clean nozzle
+#define AC_cmnd_auto_unload_filament F("M701") // Use Marlin unload routine
+#define AC_cmnd_auto_load_filament F("M702 M0 PB") // Use Marlin load routing then pause for user to clean nozzle
-#define AC_cmnd_manual_load_filament PSTR("M83\nG1 E50 F700\nM82") // replace the manual panel commands with something a little faster
-#define AC_cmnd_manual_unload_filament PSTR("M83\nG1 E-50 F1200\nM82")
-#define AC_cmnd_enable_leveling PSTR("M420SV")
-#define AC_cmnd_power_loss_recovery PSTR("G28XYR5\nG28Z") // Lift, home X and Y then home Z when in 'safe' position
+#define AC_cmnd_manual_load_filament F("M83\nG1 E50 F700\nM82") // replace the manual panel commands with something a little faster
+#define AC_cmnd_manual_unload_filament F("M83\nG1 E-50 F1200\nM82")
+#define AC_cmnd_enable_leveling F("M420SV")
+#define AC_cmnd_power_loss_recovery F("G28XYR5\nG28Z") // Lift, home X and Y then home Z when in 'safe' position
-#define AC_Test_for_OldPanel PSTR("SIZE") // An old panel will respond with 'SXY 480 320' a new panel wont respond.
-#define AC_Test_for_NewPanel PSTR("J200") // A new panel will respond with '[0]=0 [1]=0' to '[19]=0 ' an old panel wont respond
+#define AC_Test_for_OldPanel F("SIZE") // An old panel will respond with 'SXY 480 320' a new panel wont respond.
+#define AC_Test_for_NewPanel F("J200") // A new panel will respond with '[0]=0 [1]=0' to '[19]=0 ' an old panel wont respond
namespace Anycubic {
enum heater_state_t : uint8_t {
diff --git a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp
index 33e7e84a81..c0e1b44578 100644
--- a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp
+++ b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_extui.cpp
@@ -37,7 +37,7 @@ namespace ExtUI {
void onStartup() { AnycubicTFT.OnSetup(); }
void onIdle() { AnycubicTFT.OnCommandScan(); }
- void onPrinterKilled(PGM_P const error, PGM_P const component) { AnycubicTFT.OnKillTFT(); }
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component) { AnycubicTFT.OnKillTFT(); }
void onMediaInserted() { AnycubicTFT.OnSDCardStateChange(true); }
void onMediaError() { AnycubicTFT.OnSDCardError(); }
void onMediaRemoved() { AnycubicTFT.OnSDCardStateChange(false); }
diff --git a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp
index b739e83dc1..98534ba65f 100644
--- a/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp
+++ b/Marlin/src/lcd/extui/anycubic_i3mega/anycubic_i3mega_lcd.cpp
@@ -27,6 +27,7 @@
#include "../ui_api.h"
#include "../../../libs/numtostr.h"
+#include "../../../module/stepper.h" // for disable_all_steppers
#include "../../../module/motion.h" // for quickstop_stepper, A20 read printing speed, feedrate_percentage
#include "../../../MarlinCore.h" // for disable_steppers
#include "../../../inc/MarlinConfig.h"
@@ -38,8 +39,8 @@
#define SEND(x) send(x)
#define SENDLINE(x) sendLine(x)
#if ENABLED(ANYCUBIC_LCD_DEBUG)
- #define SENDLINE_DBG_PGM(x,y) (sendLine_P(PSTR(x)), SERIAL_ECHOLNPGM(y))
- #define SENDLINE_DBG_PGM_VAL(x,y,z) (sendLine_P(PSTR(x)), SERIAL_ECHOPGM(y), SERIAL_ECHOLN(z))
+ #define SENDLINE_DBG_PGM(x,y) do{ sendLine_P(PSTR(x)); SERIAL_ECHOLNPGM(y); }while(0)
+ #define SENDLINE_DBG_PGM_VAL(x,y,z) do{ sendLine_P(PSTR(x)); SERIAL_ECHOLNPGM(y, z); }while(0)
#else
#define SENDLINE_DBG_PGM(x,y) sendLine_P(PSTR(x))
#define SENDLINE_DBG_PGM_VAL(x,y,z) sendLine_P(PSTR(x))
@@ -103,7 +104,7 @@ void AnycubicTFTClass::OnSetup() {
SelectedFile[0] = 0;
#if ENABLED(STARTUP_CHIME)
- injectCommands_P(PSTR("M300 P250 S554\nM300 P250 S554\nM300 P250 S740\nM300 P250 S554\nM300 P250 S740\nM300 P250 S554\nM300 P500 S831"));
+ injectCommands(F("M300 P250 S554\nM300 P250 S554\nM300 P250 S740\nM300 P250 S554\nM300 P250 S740\nM300 P250 S554\nM300 P500 S831"));
#endif
#if ENABLED(ANYCUBIC_LCD_DEBUG)
SERIAL_ECHOLNPGM("TFT Serial Debug: Finished startup");
@@ -121,7 +122,7 @@ void AnycubicTFTClass::OnCommandScan() {
#endif
mediaPrintingState = AMPRINTSTATE_NOT_PRINTING;
mediaPauseState = AMPAUSESTATE_NOT_PAUSED;
- injectCommands_P(PSTR("M84\nM27")); // disable stepper motors and force report of SD status
+ injectCommands(F("M84\nM27")); // disable stepper motors and force report of SD status
delay_ms(200);
// tell printer to release resources of print to indicate it is done
SENDLINE_DBG_PGM("J14", "TFT Serial Debug: SD Print Stopped... J14");
@@ -248,48 +249,48 @@ void AnycubicTFTClass::HandleSpecialMenu() {
switch (SelectedDirectory[2]) {
case '1': // "<01ZUp0.1>"
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.1");
- injectCommands_P(PSTR("G91\nG1 Z+0.1\nG90"));
+ injectCommands(F("G91\nG1 Z+0.1\nG90"));
break;
case '2': // "<02ZUp0.02>"
SERIAL_ECHOLNPGM("Special Menu: Z Up 0.02");
- injectCommands_P(PSTR("G91\nG1 Z+0.02\nG90"));
+ injectCommands(F("G91\nG1 Z+0.02\nG90"));
break;
case '3': // "<03ZDn0.02>"
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.02");
- injectCommands_P(PSTR("G91\nG1 Z-0.02\nG90"));
+ injectCommands(F("G91\nG1 Z-0.02\nG90"));
break;
case '4': // "<04ZDn0.1>"
SERIAL_ECHOLNPGM("Special Menu: Z Down 0.1");
- injectCommands_P(PSTR("G91\nG1 Z-0.1\nG90"));
+ injectCommands(F("G91\nG1 Z-0.1\nG90"));
break;
case '5': // "<05PrehtBed>"
SERIAL_ECHOLNPGM("Special Menu: Preheat Bed");
- injectCommands_P(PSTR("M140 S65"));
+ injectCommands(F("M140 S65"));
break;
case '6': // "<06SMeshLvl>"
SERIAL_ECHOLNPGM("Special Menu: Start Mesh Leveling");
- injectCommands_P(PSTR("G29S1"));
+ injectCommands(F("G29S1"));
break;
case '7': // "<07MeshNPnt>"
SERIAL_ECHOLNPGM("Special Menu: Next Mesh Point");
- injectCommands_P(PSTR("G29S2"));
+ injectCommands(F("G29S2"));
break;
case '8': // "<08HtEndPID>"
SERIAL_ECHOLNPGM("Special Menu: Auto Tune Hotend PID");
// need to dwell for half a second to give the fan a chance to start before the pid tuning starts
- injectCommands_P(PSTR("M106 S204\nG4 P500\nM303 E0 S215 C15 U1"));
+ injectCommands(F("M106 S204\nG4 P500\nM303 E0 S215 C15 U1"));
break;
case '9': // "<09HtBedPID>"
SERIAL_ECHOLNPGM("Special Menu: Auto Tune Hotbed Pid");
- injectCommands_P(PSTR("M303 E-1 S65 C6 U1"));
+ injectCommands(F("M303 E-1 S65 C6 U1"));
break;
default:
@@ -301,12 +302,12 @@ void AnycubicTFTClass::HandleSpecialMenu() {
switch (SelectedDirectory[2]) {
case '0': // "<10FWDeflts>"
SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults");
- injectCommands_P(PSTR("M502\nM300 P105 S1661\nM300 P210 S1108"));
+ injectCommands(F("M502\nM300 P105 S1661\nM300 P210 S1108"));
break;
case '1': // "<11SvEEPROM>"
SERIAL_ECHOLNPGM("Special Menu: Save EEPROM");
- injectCommands_P(PSTR("M500\nM300 P105 S1108\nM300 P210 S1661"));
+ injectCommands(F("M500\nM300 P105 S1108\nM300 P210 S1661"));
break;
default:
@@ -318,38 +319,38 @@ void AnycubicTFTClass::HandleSpecialMenu() {
switch (SelectedDirectory[2]) {
case '1': // "<01PrehtBed>"
SERIAL_ECHOLNPGM("Special Menu: Preheat Bed");
- injectCommands_P(PSTR("M140 S65"));
+ injectCommands(F("M140 S65"));
break;
case '2': // "<02ABL>"
SERIAL_ECHOLNPGM("Special Menu: Auto Bed Leveling");
- injectCommands_P(PSTR("G29N"));
+ injectCommands(F("G29N"));
break;
case '3': // "<03HtendPID>"
SERIAL_ECHOLNPGM("Special Menu: Auto Tune Hotend PID");
// need to dwell for half a second to give the fan a chance to start before the pid tuning starts
- injectCommands_P(PSTR("M106 S204\nG4 P500\nM303 E0 S215 C15 U1"));
+ injectCommands(F("M106 S204\nG4 P500\nM303 E0 S215 C15 U1"));
break;
case '4': // "<04HtbedPID>"
SERIAL_ECHOLNPGM("Special Menu: Auto Tune Hotbed Pid");
- injectCommands_P(PSTR("M303 E-1 S65 C6 U1"));
+ injectCommands(F("M303 E-1 S65 C6 U1"));
break;
case '5': // "<05FWDeflts>"
SERIAL_ECHOLNPGM("Special Menu: Load FW Defaults");
- injectCommands_P(PSTR("M502\nM300 P105 S1661\nM300 P210 S1108"));
+ injectCommands(F("M502\nM300 P105 S1661\nM300 P210 S1108"));
break;
case '6': // "<06SvEEPROM>"
SERIAL_ECHOLNPGM("Special Menu: Save EEPROM");
- injectCommands_P(PSTR("M500\nM300 P105 S1108\nM300 P210 S1661"));
+ injectCommands(F("M500\nM300 P105 S1108\nM300 P210 S1661"));
break;
case '7': // <07SendM108>
SERIAL_ECHOLNPGM("Special Menu: Send User Confirmation");
- injectCommands_P(PSTR("M108"));
+ injectCommands(F("M108"));
break;
default:
@@ -653,7 +654,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
break;
case 12: // A12 kill
- kill(PSTR(STR_ERR_KILLED));
+ kill(F(STR_ERR_KILLED));
break;
case 13: // A13 SELECTION FILE
@@ -704,7 +705,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
}
else if (CodeSeen('C') && !isPrinting()) {
if (getAxisPosition_mm(Z) < 10)
- injectCommands_P(PSTR("G1 Z10")); // RASE Z AXIS
+ injectCommands(F("G1 Z10")); // RASE Z AXIS
tempvalue = constrain(CodeValue(), 0, 275);
setTargetTemp_celsius(tempvalue, (extruder_t)E0);
}
@@ -738,7 +739,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
case 19: // A19 stop stepper drivers - sent on stop extrude command and on turn motors off command
if (!isPrinting()) {
quickstop_stepper();
- disable_all_steppers();
+ stepper.disable_all_steppers();
}
SENDLINE_PGM("");
@@ -755,11 +756,11 @@ void AnycubicTFTClass::GetCommandFromTFT() {
if (!isPrinting() && !isPrintingFromMediaPaused()) {
if (CodeSeen('X') || CodeSeen('Y') || CodeSeen('Z')) {
if (CodeSeen('X'))
- injectCommands_P(PSTR("G28X"));
+ injectCommands(F("G28X"));
if (CodeSeen('Y'))
- injectCommands_P(PSTR("G28Y"));
+ injectCommands(F("G28Y"));
if (CodeSeen('Z'))
- injectCommands_P(PSTR("G28Z"));
+ injectCommands(F("G28Z"));
}
else if (CodeSeen('C')) {
injectCommands_P(G28_STR);
@@ -830,7 +831,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
case 23: // A23 preheat pla
if (!isPrinting()) {
if (getAxisPosition_mm(Z) < 10)
- injectCommands_P(PSTR("G1 Z10")); // RASE Z AXIS
+ injectCommands(F("G1 Z10")); // RASE Z AXIS
setTargetTemp_celsius(PREHEAT_1_TEMP_BED, (heater_t)BED);
setTargetTemp_celsius(PREHEAT_1_TEMP_HOTEND, (extruder_t)E0);
@@ -841,7 +842,7 @@ void AnycubicTFTClass::GetCommandFromTFT() {
case 24:// A24 preheat abs
if (!isPrinting()) {
if (getAxisPosition_mm(Z) < 10)
- injectCommands_P(PSTR("G1 Z10")); // RASE Z AXIS
+ injectCommands(F("G1 Z10")); // RASE Z AXIS
setTargetTemp_celsius(PREHEAT_2_TEMP_BED, (heater_t)BED);
setTargetTemp_celsius(PREHEAT_2_TEMP_HOTEND, (extruder_t)E0);
@@ -932,7 +933,7 @@ void AnycubicTFTClass::DoFilamentRunoutCheck() {
if (READ(FIL_RUNOUT1_PIN)) {
if (mediaPrintingState == AMPRINTSTATE_PRINTING || mediaPrintingState == AMPRINTSTATE_PAUSED || mediaPrintingState == AMPRINTSTATE_PAUSE_REQUESTED) {
// play tone to indicate filament is out
- injectCommands_P(PSTR("\nM300 P200 S1567\nM300 P200 S1174\nM300 P200 S1567\nM300 P200 S1174\nM300 P2000 S1567"));
+ injectCommands(F("\nM300 P200 S1567\nM300 P200 S1174\nM300 P200 S1567\nM300 P200 S1174\nM300 P2000 S1567"));
// tell the user that the filament has run out and wait
SENDLINE_DBG_PGM("J23", "TFT Serial Debug: Blocking filament prompt... J23");
@@ -968,7 +969,7 @@ void AnycubicTFTClass::PausePrint() {
SENDLINE_DBG_PGM("J05", "TFT Serial Debug: SD print pause started... J05"); // J05 printing pause
// for some reason pausing the print doesn't retract the extruder so force a manual one here
- injectCommands_P(PSTR("G91\nG1 E-2 F1800\nG90"));
+ injectCommands(F("G91\nG1 E-2 F1800\nG90"));
pausePrint();
}
#endif
@@ -1017,7 +1018,7 @@ void AnycubicTFTClass::StopPrint() {
SENDLINE_DBG_PGM("J16", "TFT Serial Debug: SD print stop called... J16");
// for some reason stopping the print doesn't retract the extruder so force a manual one here
- injectCommands_P(PSTR("G91\nG1 E-2 F1800\nG90"));
+ injectCommands(F("G91\nG1 E-2 F1800\nG90"));
stopPrint();
#endif
}
diff --git a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp
index 0d30a85b23..35d7541479 100644
--- a/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/DGUSScreenHandler.cpp
@@ -340,7 +340,7 @@ void DGUSScreenHandler::DGUSLCD_SendHeaterStatusToDisplay(DGUS_VP_Variable &var)
void DGUSScreenHandler::SDCardError() {
DGUSScreenHandler::SDCardRemoved();
- sendinfoscreen(PSTR("NOTICE"), nullptr, PSTR("SD card error"), nullptr, true, true, true, true);
+ sendinfoscreen(F("NOTICE"), nullptr, F("SD card error"), nullptr, true, true, true, true);
SetupConfirmAction(nullptr);
GotoScreen(DGUSLCD_SCREEN_POPUP);
}
@@ -567,7 +567,7 @@ void DGUSScreenHandler::HandleStepPerMMExtruderChanged(DGUS_VP_Variable &var, vo
if (buf[0]) queue.enqueue_one_now(buf);
#if ENABLED(DGUS_UI_WAITING)
- sendinfoscreen(PSTR("PID is autotuning"), PSTR("please wait"), NUL_STR, NUL_STR, true, true, true, true);
+ sendinfoscreen(F("PID is autotuning"), F("please wait"), NUL_STR, NUL_STR, true, true, true, true);
GotoScreen(DGUSLCD_SCREEN_WAITING);
#endif
}
@@ -683,7 +683,7 @@ void DGUSScreenHandler::HandleHeaterControl(DGUS_VP_Variable &var, void *val_ptr
void DGUSScreenHandler::HandlePowerLossRecovery(DGUS_VP_Variable &var, void *val_ptr) {
uint16_t value = swap16(*(uint16_t*)val_ptr);
if (value) {
- queue.inject_P(PSTR("M1000"));
+ queue.inject(F("M1000"));
dgusdisplay.WriteVariable(VP_SD_Print_Filename, filelist.filename(), 32, true);
GotoScreen(PLR_SCREEN_RECOVER);
}
diff --git a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp
index 4f15827a49..04ba6b95c2 100644
--- a/Marlin/src/lcd/extui/dgus/dgus_extui.cpp
+++ b/Marlin/src/lcd/extui/dgus/dgus_extui.cpp
@@ -42,8 +42,8 @@ namespace ExtUI {
void onIdle() { ScreenHandler.loop(); }
- void onPrinterKilled(PGM_P const error, PGM_P const component) {
- ScreenHandler.sendinfoscreen(GET_TEXT(MSG_HALTED), error, NUL_STR, GET_TEXT(MSG_PLEASE_RESET), true, true, true, true);
+ void onPrinterKilled(FSTR_P const error, FSTR_P const) {
+ ScreenHandler.sendinfoscreen(GET_TEXT_F(MSG_HALTED), error, FPSTR(NUL_STR), GET_TEXT_F(MSG_PLEASE_RESET), true, true, true, true);
ScreenHandler.GotoScreen(DGUSLCD_SCREEN_KILL);
while (!ScreenHandler.loop()); // Wait while anything is left to be sent
}
@@ -60,7 +60,7 @@ namespace ExtUI {
void onUserConfirmRequired(const char * const msg) {
if (msg) {
- ScreenHandler.sendinfoscreen(PSTR("Please confirm."), nullptr, msg, nullptr, true, true, false, true);
+ ScreenHandler.sendinfoscreen(F("Please confirm."), nullptr, msg, nullptr, true, true, false, true);
ScreenHandler.SetupConfirmAction(setUserConfirmed);
ScreenHandler.GotoScreen(DGUSLCD_SCREEN_POPUP);
}
diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp
index 0a2c189f43..b0281f637a 100644
--- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.cpp
@@ -205,7 +205,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
bool old_relative_mode = relative_mode;
if (!relative_mode) {
//DEBUG_ECHOPGM(" G91");
- queue.enqueue_now_P(PSTR("G91"));
+ queue.enqueue_now(F("G91"));
//DEBUG_ECHOPGM(" ✓ ");
}
char buf[32]; // G1 X9999.99 F12345
@@ -227,7 +227,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
//DEBUG_ECHOLNPGM(" ✓ ");
if (!old_relative_mode) {
//DEBUG_ECHOPGM("G90");
- queue.enqueue_now_P(PSTR("G90"));
+ queue.enqueue_now(F("G90"));
//DEBUG_ECHOPGM(" ✓ ");
}
}
diff --git a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h
index 6edd1fb297..077951d4c2 100644
--- a/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h
+++ b/Marlin/src/lcd/extui/dgus/fysetc/DGUSScreenHandler.h
@@ -38,6 +38,12 @@ public:
// Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen
// The bools specifying whether the strings are in RAM or FLASH.
static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash);
+ }
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash);
+ }
static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp
index 3417f27315..42d4b3df01 100644
--- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.cpp
@@ -205,7 +205,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
bool old_relative_mode = relative_mode;
if (!relative_mode) {
//DEBUG_ECHOPGM(" G91");
- queue.enqueue_now_P(PSTR("G91"));
+ queue.enqueue_now(F("G91"));
//DEBUG_ECHOPGM(" ✓ ");
}
char buf[32]; // G1 X9999.99 F12345
@@ -227,7 +227,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
//DEBUG_ECHOLNPGM(" ✓ ");
if (!old_relative_mode) {
//DEBUG_ECHOPGM("G90");
- queue.enqueue_now_P(PSTR("G90"));
+ queue.enqueue_now(F("G90"));
//DEBUG_ECHOPGM(" ✓ ");
}
}
diff --git a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h
index 6edd1fb297..077951d4c2 100644
--- a/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h
+++ b/Marlin/src/lcd/extui/dgus/hiprecy/DGUSScreenHandler.h
@@ -38,6 +38,12 @@ public:
// Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen
// The bools specifying whether the strings are in RAM or FLASH.
static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash);
+ }
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash);
+ }
static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
index 86bcedd88f..5c4faed344 100644
--- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.cpp
@@ -262,7 +262,7 @@ void DGUSScreenHandler::DGUSLCD_SendTMCStepValue(DGUS_VP_Variable &var) {
void DGUSScreenHandler::SDPrintingFinished() {
if (DGUSAutoTurnOff) {
queue.exhaust();
- gcode.process_subcommands_now_P(PSTR("M81"));
+ gcode.process_subcommands_now(F("M81"));
}
GotoScreen(MKSLCD_SCREEN_PrintDone);
}
@@ -451,7 +451,7 @@ void DGUSScreenHandler::Level_Ctrl_MKS(DGUS_VP_Variable &var, void *val_ptr) {
a_first_level = 0;
queue.enqueue_now_P(G28_STR);
}
- queue.enqueue_now_P(PSTR("G29"));
+ queue.enqueue_now(F("G29"));
#elif ENABLED(MESH_BED_LEVELING)
@@ -513,10 +513,10 @@ void DGUSScreenHandler::MeshLevel(DGUS_VP_Variable &var, void *val_ptr) {
Deci2 = offset * 100;
Deci2 = Deci2 % 10;
soft_endstop._enabled = false;
- queue.enqueue_now_P(PSTR("G91"));
+ queue.enqueue_now(F("G91"));
snprintf_P(cmd_buf, 30, PSTR("G1 Z%d.%d%d"), integer, Deci, Deci2);
queue.enqueue_one_now(cmd_buf);
- queue.enqueue_now_P(PSTR("G90"));
+ queue.enqueue_now(F("G90"));
//soft_endstop._enabled = true;
break;
@@ -528,17 +528,17 @@ void DGUSScreenHandler::MeshLevel(DGUS_VP_Variable &var, void *val_ptr) {
Deci2 = offset * 100;
Deci2 = Deci2 % 10;
soft_endstop._enabled = false;
- queue.enqueue_now_P(PSTR("G91"));
+ queue.enqueue_now(F("G91"));
snprintf_P(cmd_buf, 30, PSTR("G1 Z-%d.%d%d"), integer, Deci, Deci2);
queue.enqueue_one_now(cmd_buf);
- queue.enqueue_now_P(PSTR("G90"));
+ queue.enqueue_now(F("G90"));
break;
case 2:
if (mesh_point_count == GRID_MAX_POINTS) { // The first point
- queue.enqueue_now_P(PSTR("G28"));
- queue.enqueue_now_P(PSTR("G29S1"));
+ queue.enqueue_now(F("G28"));
+ queue.enqueue_now(F("G29S1"));
mesh_point_count--;
if (mks_language_index == MKS_English) {
@@ -551,7 +551,7 @@ void DGUSScreenHandler::MeshLevel(DGUS_VP_Variable &var, void *val_ptr) {
}
}
else if (mesh_point_count > 1) { // 倒数第二个点
- queue.enqueue_now_P(PSTR("G29S2"));
+ queue.enqueue_now(F("G29S2"));
mesh_point_count--;
if (mks_language_index == MKS_English) {
const char level_buf_en2[] = "Next Point";
@@ -563,7 +563,7 @@ void DGUSScreenHandler::MeshLevel(DGUS_VP_Variable &var, void *val_ptr) {
}
}
else if (mesh_point_count == 1) {
- queue.enqueue_now_P(PSTR("G29S2"));
+ queue.enqueue_now(F("G29S2"));
mesh_point_count--;
if (mks_language_index == MKS_English) {
const char level_buf_en2[] = "Level Finsh";
@@ -621,13 +621,13 @@ void DGUSScreenHandler::ManualAssistLeveling(DGUS_VP_Variable &var, void *val_pt
};
if (WITHIN(point_value, 0x0001, 0x0005))
- queue.enqueue_now_P(PSTR("G1Z10"));
+ queue.enqueue_now(F("G1Z10"));
switch (point_value) {
case 0x0001:
enqueue_corner_move(X_MIN_POS + ABS(mks_corner_offsets[0].x),
Y_MIN_POS + ABS(mks_corner_offsets[0].y), level_speed);
- queue.enqueue_now_P(PSTR("G28Z"));
+ queue.enqueue_now(F("G28Z"));
break;
case 0x0002:
enqueue_corner_move(X_MAX_POS - ABS(mks_corner_offsets[1].x),
@@ -648,8 +648,8 @@ void DGUSScreenHandler::ManualAssistLeveling(DGUS_VP_Variable &var, void *val_pt
}
if (WITHIN(point_value, 0x0002, 0x0005)) {
- //queue.enqueue_now_P(PSTR("G28Z"));
- queue.enqueue_now_P(PSTR("G1Z-10"));
+ //queue.enqueue_now(F("G28Z"));
+ queue.enqueue_now(F("G1Z-10"));
}
}
@@ -857,7 +857,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
if (!relative_mode) {
//DEBUG_ECHOPGM(" G91");
- queue.enqueue_now_P(PSTR("G91"));
+ queue.enqueue_now(F("G91"));
//DEBUG_ECHOPGM(" ✓ ");
}
char buf[32]; // G1 X9999.99 F12345
@@ -879,8 +879,8 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
//DEBUG_ECHOLNPGM(" ✓ ");
if (!old_relative_mode) {
//DEBUG_ECHOPGM("G90");
- //queue.enqueue_now_P(PSTR("G90"));
- queue.enqueue_now_P(PSTR("G90"));
+ //queue.enqueue_now(F("G90"));
+ queue.enqueue_now(F("G90"));
//DEBUG_ECHOPGM(" ✓ ");
}
}
@@ -1134,30 +1134,30 @@ void DGUSScreenHandler::HandleAccChange_MKS(DGUS_VP_Variable &var, void *val_ptr
switch (flag) {
case 0:
if (step == 0.01)
- queue.inject_P(PSTR("M290 Z-0.01"));
+ queue.inject(F("M290 Z-0.01"));
else if (step == 0.1)
- queue.inject_P(PSTR("M290 Z-0.1"));
+ queue.inject(F("M290 Z-0.1"));
else if (step == 0.5)
- queue.inject_P(PSTR("M290 Z-0.5"));
+ queue.inject(F("M290 Z-0.5"));
else if (step == 1)
- queue.inject_P(PSTR("M290 Z-1"));
+ queue.inject(F("M290 Z-1"));
else
- queue.inject_P(PSTR("M290 Z-0.01"));
+ queue.inject(F("M290 Z-0.01"));
z_offset_add = z_offset_add - ZOffset_distance;
break;
case 1:
if (step == 0.01)
- queue.inject_P(PSTR("M290 Z0.01"));
+ queue.inject(F("M290 Z0.01"));
else if (step == 0.1)
- queue.inject_P(PSTR("M290 Z0.1"));
+ queue.inject(F("M290 Z0.1"));
else if (step == 0.5)
- queue.inject_P(PSTR("M290 Z0.5"));
+ queue.inject(F("M290 Z0.5"));
else if (step == 1)
- queue.inject_P(PSTR("M290 Z1"));
+ queue.inject(F("M290 Z1"));
else
- queue.inject_P(PSTR("M290 Z-0.01"));
+ queue.inject(F("M290 Z-0.01"));
z_offset_add = z_offset_add + ZOffset_distance;
break;
@@ -1234,7 +1234,7 @@ void DGUSScreenHandler::MKS_FilamentLoadUnload(DGUS_VP_Variable &var, void *val_
#if BOTH(HAS_HOTEND, PREVENT_COLD_EXTRUSION)
if (hotend_too_cold) {
if (thermalManager.targetTooColdToExtrude(hotend_too_cold - 1)) thermalManager.setTargetHotend(thermalManager.extrude_min_temp, hotend_too_cold - 1);
- sendinfoscreen(PSTR("NOTICE"), nullptr, PSTR("Please wait."), PSTR("Nozzle heating!"), true, true, true, true);
+ sendinfoscreen(F("NOTICE"), nullptr, F("Please wait."), F("Nozzle heating!"), true, true, true, true);
SetupConfirmAction(nullptr);
GotoScreen(DGUSLCD_SCREEN_POPUP);
}
@@ -1487,10 +1487,10 @@ void DGUSScreenHandler::DGUS_Runout_Idle(void) {
case RUNOUT_STATUS:
runout_mks.runout_status = RUNOUT_BEGIN_STATUS;
- queue.inject_P(PSTR("M25"));
+ queue.inject(F("M25"));
GotoScreen(MKSLCD_SCREEN_PAUSE);
- sendinfoscreen(PSTR("NOTICE"), nullptr, PSTR("Please change filament!"), nullptr, true, true, true, true);
+ sendinfoscreen(F("NOTICE"), nullptr, F("Please change filament!"), nullptr, true, true, true, true);
//SetupConfirmAction(nullptr);
GotoScreen(DGUSLCD_SCREEN_POPUP);
break;
diff --git a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h
index 6929b4ae36..4feae625ff 100644
--- a/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h
+++ b/Marlin/src/lcd/extui/dgus/mks/DGUSScreenHandler.h
@@ -38,6 +38,12 @@ public:
// Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen
// The bools specifying whether the strings are in RAM or FLASH.
static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash);
+ }
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash);
+ }
static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp
index 9002527168..4cc5b4d0be 100644
--- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.cpp
@@ -205,7 +205,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
bool old_relative_mode = relative_mode;
if (!relative_mode) {
//DEBUG_ECHOPGM(" G91");
- queue.enqueue_now_P(PSTR("G91"));
+ queue.enqueue_now(F("G91"));
//DEBUG_ECHOPGM(" ✓ ");
}
char buf[32]; // G1 X9999.99 F12345
@@ -227,7 +227,7 @@ void DGUSScreenHandler::HandleManualMove(DGUS_VP_Variable &var, void *val_ptr) {
//DEBUG_ECHOLNPGM(" ✓ ");
if (!old_relative_mode) {
//DEBUG_ECHOPGM("G90");
- queue.enqueue_now_P(PSTR("G90"));
+ queue.enqueue_now(F("G90"));
//DEBUG_ECHOPGM(" ✓ ");
}
}
diff --git a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h
index 6edd1fb297..077951d4c2 100644
--- a/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h
+++ b/Marlin/src/lcd/extui/dgus/origin/DGUSScreenHandler.h
@@ -38,6 +38,12 @@ public:
// Send all 4 strings that are displayed on the infoscreen, confirmation screen and kill screen
// The bools specifying whether the strings are in RAM or FLASH.
static void sendinfoscreen(const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), line3, line4, l1inflash, l2inflash, l3inflash, liinflash);
+ }
+ static inline void sendinfoscreen(FSTR_P const line1, FSTR_P const line2, FSTR_P const line3, FSTR_P const line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash) {
+ sendinfoscreen(FTOP(line1), FTOP(line2), FTOP(line3), FTOP(line4), l1inflash, l2inflash, l3inflash, liinflash);
+ }
static void HandleUserConfirmationPopUp(uint16_t ConfirmVP, const char *line1, const char *line2, const char *line3, const char *line4, bool l1inflash, bool l2inflash, bool l3inflash, bool liinflash);
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
index 20a4bee234..58c7baa0b6 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.cpp
@@ -33,6 +33,7 @@
#include "../../../core/language.h"
#include "../../../module/temperature.h"
#include "../../../module/printcounter.h"
+#include "../../../module/stepper.h"
#include "../../../gcode/queue.h"
#if ENABLED(ADVANCED_PAUSE_FEATURE)
#include "../../../feature/pause.h"
@@ -51,26 +52,26 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) {
#endif
if (!ExtUI::isMediaInserted()) {
- dgus_screen_handler.SetStatusMessagePGM(GET_TEXT(MSG_NO_MEDIA));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(MSG_NO_MEDIA));
return;
}
card.cdroot();
#else
- dgus_screen_handler.SetStatusMessagePGM(GET_TEXT(MSG_NO_MEDIA));
+ dgus_screen_handler.SetStatusMessage(GET_TEXT_F(MSG_NO_MEDIA));
return;
#endif
}
if (vp.addr == DGUS_Addr::SCREENCHANGE_Idle
&& (ExtUI::isPrinting() || ExtUI::isPrintingPaused())) {
- dgus_screen_handler.SetStatusMessagePGM(PSTR("Impossible while printing"));
+ dgus_screen_handler.SetStatusMessage(F("Impossible while printing"));
return;
}
if (vp.addr == DGUS_Addr::SCREENCHANGE_Printing
&& (!ExtUI::isPrinting() && !ExtUI::isPrintingPaused())) {
- dgus_screen_handler.SetStatusMessagePGM(PSTR("Impossible while idle"));
+ dgus_screen_handler.SetStatusMessage(F("Impossible while idle"));
return;
}
@@ -138,7 +139,7 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) {
UNUSED(data_ptr);
if (dgus_screen_handler.filelist_selected < 0) {
- dgus_screen_handler.SetStatusMessagePGM(PSTR("No file selected"));
+ dgus_screen_handler.SetStatusMessage(F("No file selected"));
return;
}
@@ -148,7 +149,7 @@ void DGUSRxHandler::ScreenChange(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -206,7 +207,7 @@ void DGUSRxHandler::PrintResume(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -229,13 +230,9 @@ void DGUSRxHandler::Flowrate(DGUS_VP &vp, void *data_ptr) {
switch (vp.addr) {
default: return;
case DGUS_Addr::ADJUST_SetFlowrate_CUR:
- #if EXTRUDERS > 1
- ExtUI::setFlow_percent(flowrate, ExtUI::getActiveTool());
- #else
- ExtUI::setFlow_percent(flowrate, ExtUI::E0);
- #endif
+ ExtUI::setFlow_percent(flowrate, TERN(HAS_MULTI_EXTRUDER, ExtUI::getActiveTool(), ExtUI::E0));
break;
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
case DGUS_Addr::ADJUST_SetFlowrate_E0:
ExtUI::setFlow_percent(flowrate, ExtUI::E0);
break;
@@ -367,7 +364,7 @@ void DGUSRxHandler::TempCool(DGUS_VP &vp, void *data_ptr) {
#endif
}
- dgus_screen_handler.SetStatusMessagePGM(PSTR("Cooling..."));
+ dgus_screen_handler.SetStatusMessage(F("Cooling..."));
dgus_screen_handler.TriggerFullUpdate();
}
@@ -379,10 +376,10 @@ void DGUSRxHandler::Steppers(DGUS_VP &vp, void *data_ptr) {
switch (control) {
case DGUS_Data::Control::ENABLE:
- enable_all_steppers();
+ stepper.enable_all_steppers();
break;
case DGUS_Data::Control::DISABLE:
- disable_all_steppers();
+ stepper.disable_all_steppers();
break;
}
@@ -393,12 +390,12 @@ void DGUSRxHandler::ZOffset(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!ExtUI::isAxisPositionKnown(ExtUI::Z)) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_HOMING_REQUIRED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -417,12 +414,12 @@ void DGUSRxHandler::ZOffsetStep(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!ExtUI::isAxisPositionKnown(ExtUI::Z)) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_HOMING_REQUIRED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -459,12 +456,12 @@ void DGUSRxHandler::MoveToPoint(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!ExtUI::isPositionKnown()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_HOMING_REQUIRED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -509,26 +506,26 @@ void DGUSRxHandler::Probe(DGUS_VP &vp, void *data_ptr) {
UNUSED(data_ptr);
#if ENABLED(MESH_BED_LEVELING)
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_ABL_REQUIRED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_ABL_REQUIRED));
return;
#endif
if (!ExtUI::isPositionKnown()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_HOMING_REQUIRED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
return;
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
dgus_screen_handler.TriggerScreenChange(DGUS_Screen::LEVELING_PROBING);
#if ENABLED(AUTO_BED_LEVELING_UBL)
- queue.enqueue_now_P(PSTR("G29P1\nG29P3\nG29P5C"));
+ queue.enqueue_now(F("G29P1\nG29P3\nG29P5C"));
#else
- queue.enqueue_now_P(PSTR("G29"));
+ queue.enqueue_now(F("G29"));
#endif
queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE);
}
@@ -538,7 +535,7 @@ void DGUSRxHandler::DisableABL(DGUS_VP &vp, void *data_ptr) {
UNUSED(data_ptr);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -557,9 +554,7 @@ void DGUSRxHandler::FilamentSelect(DGUS_VP &vp, void *data_ptr) {
default: return;
case DGUS_Data::Extruder::CURRENT:
case DGUS_Data::Extruder::E0:
- #if EXTRUDERS > 1
- case DGUS_Data::Extruder::E1:
- #endif
+ E_TERN_(case DGUS_Data::Extruder::E1:)
dgus_screen_handler.filament_extruder = extruder;
break;
}
@@ -581,7 +576,7 @@ void DGUSRxHandler::FilamentMove(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -590,14 +585,14 @@ void DGUSRxHandler::FilamentMove(DGUS_VP &vp, void *data_ptr) {
switch (dgus_screen_handler.filament_extruder) {
default: return;
case DGUS_Data::Extruder::CURRENT:
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
extruder = ExtUI::getActiveTool();
break;
#endif
case DGUS_Data::Extruder::E0:
extruder = ExtUI::E0;
break;
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
case DGUS_Data::Extruder::E1:
extruder = ExtUI::E1;
break;
@@ -605,7 +600,7 @@ void DGUSRxHandler::FilamentMove(DGUS_VP &vp, void *data_ptr) {
}
if (ExtUI::getActualTemp_celsius(extruder) < (float)EXTRUDE_MINTEMP) {
- dgus_screen_handler.SetStatusMessagePGM(PSTR("Temperature too low"));
+ dgus_screen_handler.SetStatusMessage(F("Temperature too low"));
return;
}
@@ -625,7 +620,7 @@ void DGUSRxHandler::Home(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -639,13 +634,13 @@ void DGUSRxHandler::Home(DGUS_VP &vp, void *data_ptr) {
switch (axis) {
case DGUS_Data::Axis::X_Y_Z:
- queue.enqueue_now_P(PSTR("G28XYZ"));
+ queue.enqueue_now(F("G28XYZ"));
break;
case DGUS_Data::Axis::X_Y:
- queue.enqueue_now_P(PSTR("G28XY"));
+ queue.enqueue_now(F("G28XY"));
break;
case DGUS_Data::Axis::Z:
- queue.enqueue_now_P(PSTR("G28Z"));
+ queue.enqueue_now(F("G28Z"));
break;
}
}
@@ -669,7 +664,7 @@ void DGUSRxHandler::Move(DGUS_VP &vp, void *data_ptr) {
}
if (!ExtUI::isAxisPositionKnown(axis)) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_HOMING_REQUIRED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -725,7 +720,7 @@ void DGUSRxHandler::MoveStep(DGUS_VP &vp, void *data_ptr) {
}
if (!ExtUI::isAxisPositionKnown(axis)) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_HOMING_REQUIRED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_HOMING_REQUIRED));
return;
}
@@ -762,7 +757,7 @@ void DGUSRxHandler::GcodeExecute(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -785,11 +780,11 @@ void DGUSRxHandler::ResetEEPROM(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
- queue.enqueue_now_P(PSTR("M502"));
+ queue.enqueue_now(F("M502"));
queue.enqueue_now_P(DGUS_CMD_EEPROM_SAVE);
}
@@ -803,11 +798,11 @@ void DGUSRxHandler::SettingsExtra(DGUS_VP &vp, void *data_ptr) {
case DGUS_Data::Extra::BUTTON1:
#if ENABLED(BLTOUCH)
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
- queue.enqueue_now_P(PSTR(DGUS_RESET_BLTOUCH));
+ queue.enqueue_now(F(DGUS_RESET_BLTOUCH));
#else
dgus_screen_handler.TriggerScreenChange(DGUS_Screen::INFOS);
#endif
@@ -849,7 +844,7 @@ void DGUSRxHandler::PIDSetTemp(DGUS_VP &vp, void *data_ptr) {
UNUSED(vp);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -880,7 +875,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
UNUSED(data_ptr);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
@@ -894,7 +889,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
heater = H_BED;
break;
#else
- dgus_screen_handler.SetStatusMessagePGM(PSTR("Bed PID disabled"));
+ dgus_screen_handler.SetStatusMessage(F("Bed PID disabled"));
return;
#endif
case DGUS_Data::Heater::H0:
@@ -902,7 +897,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
heater = H_E0;
break;
#else
- dgus_screen_handler.SetStatusMessagePGM(PSTR("PID disabled"));
+ dgus_screen_handler.SetStatusMessage(F("PID disabled"));
return;
#endif
#if HOTENDS > 1
@@ -911,7 +906,7 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
heater = H_E1;
break;
#else
- dgus_screen_handler.SetStatusMessagePGM(PSTR("PID disabled"));
+ dgus_screen_handler.SetStatusMessage(F("PID disabled"));
return;
#endif
#endif
@@ -941,13 +936,13 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
dgus_screen_handler.TriggerScreenChange(DGUS_Screen::HOME);
- queue.enqueue_now_P(PSTR("M1000C"));
+ queue.enqueue_now(F("M1000C"));
}
void DGUSRxHandler::PowerLossResume(DGUS_VP &vp, void *data_ptr) {
@@ -960,18 +955,18 @@ void DGUSRxHandler::PIDRun(DGUS_VP &vp, void *data_ptr) {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return;
}
if (!recovery.valid()) {
- dgus_screen_handler.SetStatusMessagePGM(PSTR("Invalid recovery data"));
+ dgus_screen_handler.SetStatusMessage(F("Invalid recovery data"));
return;
}
dgus_screen_handler.TriggerScreenChange(DGUS_Screen::PRINT_STATUS);
- queue.enqueue_now_P(PSTR("M1000"));
+ queue.enqueue_now(F("M1000"));
}
#endif // POWER_LOSS_RECOVERY
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h
index d092d3a5b7..593b2e3bb8 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSRxHandler.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#include "DGUSDisplay.h"
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
index 6316f1194b..e81eab8e73 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.cpp
@@ -135,20 +135,17 @@ void DGUSScreenHandler::Loop() {
return;
}
- if (current_screen == DGUS_Screen::LEVELING_PROBING
- && IsPrinterIdle()) {
+ if (current_screen == DGUS_Screen::LEVELING_PROBING && IsPrinterIdle()) {
dgus_display.PlaySound(3);
- SetStatusMessagePGM(ExtUI::getMeshValid() ?
- PSTR("Probing successful")
- : PSTR("Probing failed"));
+ SetStatusMessage(ExtUI::getMeshValid() ? F("Probing successful") : F("Probing failed"));
MoveToScreen(DGUS_Screen::LEVELING_AUTOMATIC);
return;
}
if (status_expire > 0 && ELAPSED(ms, status_expire)) {
- SetStatusMessagePGM(NUL_STR, 0);
+ SetStatusMessage(FPSTR(NUL_STR), 0);
return;
}
@@ -162,9 +159,9 @@ void DGUSScreenHandler::Loop() {
dgus_display.Loop();
}
-void DGUSScreenHandler::PrinterKilled(PGM_P error, PGM_P component) {
- SetMessageLinePGM(error, 1);
- SetMessageLinePGM(component, 2);
+void DGUSScreenHandler::PrinterKilled(FSTR_P const error, FSTR_P const component) {
+ SetMessageLinePGM(FTOP(error), 1);
+ SetMessageLinePGM(FTOP(component), 2);
SetMessageLinePGM(NUL_STR, 3);
SetMessageLinePGM(GET_TEXT(MSG_PLEASE_RESET), 4);
@@ -194,7 +191,7 @@ void DGUSScreenHandler::SettingsReset() {
Ready();
}
- SetStatusMessagePGM(PSTR("EEPROM reset"));
+ SetStatusMessage(F("EEPROM reset"));
}
void DGUSScreenHandler::StoreSettings(char *buff) {
@@ -229,13 +226,13 @@ void DGUSScreenHandler::LoadSettings(const char *buff) {
void DGUSScreenHandler::ConfigurationStoreWritten(bool success) {
if (!success) {
- SetStatusMessagePGM(PSTR("EEPROM write failed"));
+ SetStatusMessage(F("EEPROM write failed"));
}
}
void DGUSScreenHandler::ConfigurationStoreRead(bool success) {
if (!success) {
- SetStatusMessagePGM(PSTR("EEPROM read failed"));
+ SetStatusMessage(F("EEPROM read failed"));
}
else if (!settings_ready) {
settings_ready = true;
@@ -324,7 +321,7 @@ void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) {
}
void DGUSScreenHandler::SDCardError() {
- SetStatusMessagePGM(GET_TEXT(MSG_MEDIA_READ_ERROR));
+ SetStatusMessage(GET_TEXT_F(MSG_MEDIA_READ_ERROR));
if (current_screen == DGUS_Screen::PRINT) {
TriggerScreenChange(DGUS_Screen::HOME);
@@ -346,19 +343,19 @@ void DGUSScreenHandler::FilamentRunout(const ExtUI::extruder_t extruder) {
void DGUSScreenHandler::PidTuning(const ExtUI::result_t rst) {
switch (rst) {
case ExtUI::PID_STARTED:
- SetStatusMessagePGM(GET_TEXT(MSG_PID_AUTOTUNE));
+ SetStatusMessage(GET_TEXT_F(MSG_PID_AUTOTUNE));
break;
case ExtUI::PID_BAD_EXTRUDER_NUM:
- SetStatusMessagePGM(GET_TEXT(MSG_PID_BAD_EXTRUDER_NUM));
+ SetStatusMessage(GET_TEXT_F(MSG_PID_BAD_EXTRUDER_NUM));
break;
case ExtUI::PID_TEMP_TOO_HIGH:
- SetStatusMessagePGM(GET_TEXT(MSG_PID_TEMP_TOO_HIGH));
+ SetStatusMessage(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH));
break;
case ExtUI::PID_TUNING_TIMEOUT:
- SetStatusMessagePGM(GET_TEXT(MSG_PID_TIMEOUT));
+ SetStatusMessage(GET_TEXT_F(MSG_PID_TIMEOUT));
break;
case ExtUI::PID_DONE:
- SetStatusMessagePGM(GET_TEXT(MSG_PID_AUTOTUNE_DONE));
+ SetStatusMessage(GET_TEXT_F(MSG_PID_AUTOTUNE_DONE));
break;
default:
return;
@@ -411,8 +408,8 @@ void DGUSScreenHandler::SetStatusMessage(const char* msg, const millis_t duratio
status_expire = (duration > 0 ? ExtUI::safe_millis() + duration : 0);
}
-void DGUSScreenHandler::SetStatusMessagePGM(PGM_P msg, const millis_t duration) {
- dgus_display.WriteStringPGM((uint16_t)DGUS_Addr::MESSAGE_Status, msg, DGUS_STATUS_LEN, false, true);
+void DGUSScreenHandler::SetStatusMessage(FSTR_P const fmsg, const millis_t duration) {
+ dgus_display.WriteStringPGM((uint16_t)DGUS_Addr::MESSAGE_Status, FTOP(msg), DGUS_STATUS_LEN, false, true);
status_expire = (duration > 0 ? ExtUI::safe_millis() + duration : 0);
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
index 056757fedf..4a5fbd141a 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSScreenHandler.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#include "config/DGUS_Addr.h"
@@ -38,7 +37,7 @@ public:
static void Ready();
static void Loop();
- static void PrinterKilled(PGM_P error, PGM_P component);
+ static void PrinterKilled(FSTR_P const error, FSTR_P const component);
static void UserConfirmRequired(const char * const msg);
static void SettingsReset();
static void StoreSettings(char *buff);
@@ -74,7 +73,7 @@ public:
static void SetMessageLinePGM(PGM_P msg, uint8_t line);
static void SetStatusMessage(const char* msg, const millis_t duration = DGUS_STATUS_EXPIRATION_MS);
- static void SetStatusMessagePGM(PGM_P msg, const millis_t duration = DGUS_STATUS_EXPIRATION_MS);
+ static void SetStatusMessage(FSTR_P const msg, const millis_t duration = DGUS_STATUS_EXPIRATION_MS);
static void ShowWaitScreen(DGUS_Screen return_screen, bool has_continue = false);
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
index 0d94751fc2..6ab2b004e5 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.cpp
@@ -68,13 +68,13 @@ bool DGUSSetupHandler::LevelingMenu() {
ExtUI::setLevelingActive(dgus_screen_handler.leveling_active);
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return false;
}
if (ExtUI::isPositionKnown()) {
if (ExtUI::getAxisPosition_mm(ExtUI::Z) < 10.0f) {
- queue.enqueue_now_P(PSTR("G0Z10"));
+ queue.enqueue_now(F("G0Z10"));
}
return true;
@@ -99,7 +99,7 @@ bool DGUSSetupHandler::LevelingManual() {
}
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return false;
}
@@ -118,20 +118,20 @@ bool DGUSSetupHandler::LevelingOffset() {
dgus_screen_handler.offset_steps = DGUS_Data::StepSize::MMP1;
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return false;
}
if (ExtUI::isPositionKnown()) {
if (ExtUI::getAxisPosition_mm(ExtUI::Z) < 4.0f) {
- queue.enqueue_now_P(PSTR("G0Z4"));
+ queue.enqueue_now(F("G0Z4"));
}
char buffer[20];
snprintf_P(buffer, sizeof(buffer), PSTR("G0X%dY%d"), DGUS_LEVEL_CENTER_X, DGUS_LEVEL_CENTER_Y);
queue.enqueue_one_now(buffer);
- queue.enqueue_now_P(PSTR("G0Z0"));
+ queue.enqueue_now(F("G0Z0"));
return true;
}
@@ -175,7 +175,7 @@ bool DGUSSetupHandler::Move() {
dgus_screen_handler.move_steps = DGUS_Data::StepSize::MM10;
if (!dgus_screen_handler.IsPrinterIdle()) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_BUSY);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_BUSY));
return false;
}
@@ -186,7 +186,7 @@ bool DGUSSetupHandler::Gcode() {
ZERO(dgus_screen_handler.gcode);
if (dgus_display.gui_version < 0x30 || dgus_display.os_version < 0x21) {
- dgus_screen_handler.SetStatusMessagePGM(DGUS_MSG_FW_OUTDATED);
+ dgus_screen_handler.SetStatusMessage(FPSTR(DGUS_MSG_FW_OUTDATED));
return false;
}
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h
index b1159ff708..20cd48c986 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSSetupHandler.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
namespace DGUSSetupHandler {
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
index b2fa8c18b3..6c14745904 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.cpp
@@ -249,13 +249,9 @@ void DGUSTxHandler::Flowrate(DGUS_VP &vp) {
switch (vp.addr) {
default: return;
case DGUS_Addr::ADJUST_Flowrate_CUR:
- #if EXTRUDERS > 1
- flowrate = ExtUI::getFlow_percent(ExtUI::getActiveTool());
- #else
- flowrate = ExtUI::getFlow_percent(ExtUI::E0);
- #endif
+ flowrate = ExtUI::getFlow_percent(TERN(HAS_MULTI_EXTRUDER, ExtUI::getActiveTool(), ExtUI::E0));
break;
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
case DGUS_Addr::ADJUST_Flowrate_E0:
flowrate = ExtUI::getFlow_percent(ExtUI::E0);
break;
@@ -290,14 +286,8 @@ void DGUSTxHandler::TempMax(DGUS_VP &vp) {
}
void DGUSTxHandler::StepperStatus(DGUS_VP &vp) {
- if (X_ENABLE_READ() == X_ENABLE_ON
- && Y_ENABLE_READ() == Y_ENABLE_ON
- && Z_ENABLE_READ() == Z_ENABLE_ON) {
- dgus_display.Write((uint16_t)vp.addr, Swap16((uint16_t)DGUS_Data::Status::ENABLED));
- }
- else {
- dgus_display.Write((uint16_t)vp.addr, Swap16((uint16_t)DGUS_Data::Status::DISABLED));
- }
+ const bool motor_on = stepper.axis_enabled.bits & (_BV(LINEAR_AXES) - 1);
+ dgus_display.Write((uint16_t)vp.addr, Swap16(uint16_t(motor_on ? DGUS_Data::Status::ENABLED : DGUS_Data::Status::DISABLED)));
}
void DGUSTxHandler::StepIcons(DGUS_VP &vp) {
@@ -366,7 +356,7 @@ void DGUSTxHandler::FilamentIcons(DGUS_VP &vp) {
switch (dgus_screen_handler.filament_extruder) {
default: return;
case DGUS_Data::Extruder::CURRENT:
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
switch (ExtUI::getActiveTool()) {
default: break;
case ExtUI::E0:
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
index 5715abbedf..a034b92ece 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/DGUSTxHandler.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#include "DGUSDisplay.h"
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
index de64fe2b10..00cdecb689 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
+++ b/Marlin/src/lcd/extui/dgus_reloaded/config/DGUS_Addr.h
@@ -55,7 +55,7 @@ enum class DGUS_Addr : uint16_t {
STATUS_Resume = 0x2009, // Popup / Data: DGUS_Data::Popup
ADJUST_SetFeedrate = 0x200A, // Type: Integer (16 bits signed)
ADJUST_SetFlowrate_CUR = 0x200B, // Type: Integer (16 bits signed)
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
ADJUST_SetFlowrate_E0 = 0x200C, // Type: Integer (16 bits signed)
ADJUST_SetFlowrate_E1 = 0x200D, // Type: Integer (16 bits signed)
#endif
@@ -113,7 +113,7 @@ enum class DGUS_Addr : uint16_t {
STATUS_Icons = 0x30F7, // Bits: DGUS_Data::StatusIcon
ADJUST_Feedrate = 0x30F8, // Type: Integer (16 bits signed)
ADJUST_Flowrate_CUR = 0x30F9, // Type: Integer (16 bits signed)
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
ADJUST_Flowrate_E0 = 0x30FA, // Type: Integer (16 bits signed)
ADJUST_Flowrate_E1 = 0x30FB, // Type: Integer (16 bits signed)
#endif
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp
index 3f5690cfe7..486f00f6ed 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/definition/DGUS_VPList.cpp
@@ -92,7 +92,7 @@ const struct DGUS_VP vp_list[] PROGMEM = {
VP_HELPER_RX(DGUS_Addr::ADJUST_SetFeedrate, &DGUSRxHandler::Feedrate),
VP_HELPER_RX(DGUS_Addr::ADJUST_SetFlowrate_CUR, &DGUSRxHandler::Flowrate),
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
VP_HELPER_RX(DGUS_Addr::ADJUST_SetFlowrate_E0, &DGUSRxHandler::Flowrate),
VP_HELPER_RX(DGUS_Addr::ADJUST_SetFlowrate_E1, &DGUSRxHandler::Flowrate),
#endif
@@ -194,7 +194,7 @@ const struct DGUS_VP vp_list[] PROGMEM = {
VP_HELPER_TX_AUTO(DGUS_Addr::ADJUST_Flowrate_CUR,
nullptr,
&DGUSTxHandler::Flowrate),
- #if EXTRUDERS > 1
+ #if HAS_MULTI_EXTRUDER
VP_HELPER_TX_AUTO(DGUS_Addr::ADJUST_Flowrate_E0,
nullptr,
&DGUSTxHandler::Flowrate),
diff --git a/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp b/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp
index 4d57fbd7e2..bf79661b42 100644
--- a/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp
+++ b/Marlin/src/lcd/extui/dgus_reloaded/dgus_reloaded_extui.cpp
@@ -46,7 +46,7 @@ namespace ExtUI {
}
}
- void onPrinterKilled(PGM_P error, PGM_P component) {
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component) {
dgus_screen_handler.PrinterKilled(error, component);
}
diff --git a/Marlin/src/lcd/extui/example/example.cpp b/Marlin/src/lcd/extui/example/example.cpp
index f74cbee91c..8f38d2aba6 100644
--- a/Marlin/src/lcd/extui/example/example.cpp
+++ b/Marlin/src/lcd/extui/example/example.cpp
@@ -46,7 +46,7 @@ namespace ExtUI {
*/
}
void onIdle() {}
- void onPrinterKilled(PGM_P const error, PGM_P const component) {}
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component) {}
void onMediaInserted() {}
void onMediaError() {}
void onMediaRemoved() {}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp
index ebe99a37d2..8b0c0f877c 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.cpp
@@ -416,7 +416,7 @@ bool UIFlashStorage::is_present = false;
/* Writes a media file from the SD card/USB flash drive into a slot on the SPI Flash. Media
* files must be written sequentially following by a chip erase and it is not possible to
* overwrite files. */
- UIFlashStorage::error_t UIFlashStorage::write_media_file(progmem_str filename, uint8_t slot) {
+ UIFlashStorage::error_t UIFlashStorage::write_media_file(FSTR_P filename, uint8_t slot) {
#if ENABLED(SDSUPPORT)
uint32_t addr;
uint8_t buff[write_page_size];
@@ -543,7 +543,7 @@ bool UIFlashStorage::is_present = false;
void UIFlashStorage::write_config_data(const void *, size_t) {}
bool UIFlashStorage::verify_config_data(const void *, size_t) {return false;}
bool UIFlashStorage::read_config_data(void *, size_t ) {return false;}
- UIFlashStorage::error_t UIFlashStorage::write_media_file(progmem_str, uint8_t) {return FILE_NOT_FOUND;}
+ UIFlashStorage::error_t UIFlashStorage::write_media_file(FSTR_P, uint8_t) {return FILE_NOT_FOUND;}
void UIFlashStorage::format_flash() {}
bool UIFlashStorage::BootMediaReader::isAvailable(uint32_t) {return false;}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.h
index eef8cf8677..0ca269a628 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/archim2-flash/flash_storage.h
@@ -88,7 +88,7 @@ class UIFlashStorage : private SPIFlash {
static void write_config_data (const void *data, size_t size);
static bool verify_config_data (const void *data, size_t size);
static bool read_config_data (void *data, size_t size);
- static error_t write_media_file (progmem_str filename, uint8_t slot = 0);
+ static error_t write_media_file (FSTR_P filename, uint8_t slot = 0);
class BootMediaReader;
};
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp
index 86c700f235..f0c0a59d36 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.cpp
@@ -105,7 +105,7 @@ bool BioPrintingDialogBox::onTouchEnd(uint8_t tag) {
return true;
}
-void BioPrintingDialogBox::setStatusMessage(progmem_str message) {
+void BioPrintingDialogBox::setStatusMessage(FSTR_P message) {
char buff[strlen_P((const char*)message)+1];
strcpy_P(buff, (const char*) message);
setStatusMessage(buff);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.h
index aebbd16128..b55038bef2 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/printing_dialog_box.h
@@ -37,7 +37,7 @@ class BioPrintingDialogBox : public BaseScreen, public CachedScreen
static void unlockMotors();
static void setStatusMessage(const char *);
- static void setStatusMessage(progmem_str);
+ static void setStatusMessage(FSTR_P);
static void onRedraw(draw_mode_t);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_landscape.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_landscape.h
index 4faddc64b1..754f6e93e1 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_landscape.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_landscape.h
@@ -21,7 +21,6 @@
* 0x0000 and 0xFFFE. A single 0xFFFF in the data stream indicates the
* start of a new closed path.
*/
-
#pragma once
constexpr float x_min = 0.000000;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_portrait.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_portrait.h
index 50fc5ab9f8..e8b4281122 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_portrait.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/bioprinter/ui_portrait.h
@@ -21,7 +21,6 @@
* 0x0000 and 0xFFFE. A single 0xFFFF in the data stream indicates the
* start of a new closed path.
*/
-
#pragma once
constexpr float x_min = 0.000000;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h
index f67961830f..6a02228925 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/cocoa_press_ui.h
@@ -21,7 +21,6 @@
* 0x0000 and 0xFFFE. A single 0xFFFF in the data stream indicates the
* start of a new closed path.
*/
-
#pragma once
constexpr float x_min = 0.000000;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp
index 2e3472987e..5ea9eed037 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/leveling_menu.cpp
@@ -61,7 +61,7 @@ void LevelingMenu::onRedraw(draw_mode_t what) {
.font(font_medium).colors(normal_btn)
.tag(2).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
.enabled(ENABLED(HAS_MESH))
- .tag(3).button(SHOW_MESH_POS, GET_TEXT_F(MSG_SHOW_MESH))
+ .tag(3).button(SHOW_MESH_POS, GET_TEXT_F(MSG_MESH_VIEW))
.enabled(ENABLED(HAS_MESH))
.tag(4).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
#undef GRID_COLS
@@ -81,7 +81,7 @@ bool LevelingMenu::onTouchEnd(uint8_t tag) {
case 2: BedMeshViewScreen::doProbe(); break;
case 3: BedMeshViewScreen::show(); break;
case 4: BedMeshEditScreen::show(); break;
- case 5: injectCommands_P(PSTR("M280 P0 S60")); break;
+ case 5: injectCommands(F("M280 P0 S60")); break;
case 6: SpinnerDialogBox::enqueueAndWait(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break;
default: return false;
}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/main_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/main_menu.cpp
index 3fe17b72d5..2d404aff6c 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/main_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/main_menu.cpp
@@ -86,7 +86,7 @@ bool MainMenu::onTouchEnd(uint8_t tag) {
case 6: GOTO_SCREEN(FeedratePercentScreen); break;
case 7: GOTO_SCREEN(FlowPercentScreen); break;
case 8: GOTO_SCREEN(AdvancedSettingsMenu); break;
- case 9: injectCommands_P(PSTR("M84")); break;
+ case 9: injectCommands(F("M84")); break;
#if HAS_LEVELING
case 10: GOTO_SCREEN(LevelingMenu); break;
#endif
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp
index 424e0afa76..b5ce108106 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_menu.cpp
@@ -74,37 +74,37 @@ bool PreheatMenu::onTouchEnd(uint8_t tag) {
case 1: GOTO_PREVIOUS(); break;
case 2:
#ifdef COCOA_PRESS_PREHEAT_DARK_CHOCOLATE_INT_SCRIPT
- injectCommands_P(PSTR(COCOA_PRESS_PREHEAT_DARK_CHOCOLATE_INT_SCRIPT));
+ injectCommands(F(COCOA_PRESS_PREHEAT_DARK_CHOCOLATE_INT_SCRIPT));
#endif
GOTO_SCREEN(PreheatTimerScreen);
break;
case 3:
#ifdef COCOA_PRESS_PREHEAT_MILK_CHOCOLATE_INT_SCRIPT
- injectCommands_P(PSTR(COCOA_PRESS_PREHEAT_MILK_CHOCOLATE_INT_SCRIPT));
+ injectCommands(F(COCOA_PRESS_PREHEAT_MILK_CHOCOLATE_INT_SCRIPT));
#endif
GOTO_SCREEN(PreheatTimerScreen);
break;
case 4:
#ifdef COCOA_PRESS_PREHEAT_WHITE_CHOCOLATE_INT_SCRIPT
- injectCommands_P(PSTR(COCOA_PRESS_PREHEAT_WHITE_CHOCOLATE_INT_SCRIPT));
+ injectCommands(F(COCOA_PRESS_PREHEAT_WHITE_CHOCOLATE_INT_SCRIPT));
#endif
GOTO_SCREEN(PreheatTimerScreen);
break;
case 5:
#ifdef COCOA_PRESS_PREHEAT_DARK_CHOCOLATE_EXT_SCRIPT
- injectCommands_P(PSTR(COCOA_PRESS_PREHEAT_DARK_CHOCOLATE_EXT_SCRIPT));
+ injectCommands(F(COCOA_PRESS_PREHEAT_DARK_CHOCOLATE_EXT_SCRIPT));
#endif
GOTO_SCREEN(PreheatTimerScreen);
break;
case 6:
#ifdef COCOA_PRESS_PREHEAT_MILK_CHOCOLATE_EXT_SCRIPT
- injectCommands_P(PSTR(COCOA_PRESS_PREHEAT_MILK_CHOCOLATE_EXT_SCRIPT));
+ injectCommands(F(COCOA_PRESS_PREHEAT_MILK_CHOCOLATE_EXT_SCRIPT));
#endif
GOTO_SCREEN(PreheatTimerScreen);
break;
case 7:
#ifdef COCOA_PRESS_PREHEAT_WHITE_CHOCOLATE_EXT_SCRIPT
- injectCommands_P(PSTR(COCOA_PRESS_PREHEAT_WHITE_CHOCOLATE_EXT_SCRIPT));
+ injectCommands(F(COCOA_PRESS_PREHEAT_WHITE_CHOCOLATE_EXT_SCRIPT));
#endif
GOTO_SCREEN(PreheatTimerScreen);
break;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.cpp
index 300878670e..c4e9d971f6 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.cpp
@@ -81,7 +81,7 @@ void PreheatTimerScreen::draw_interaction_buttons(draw_mode_t what) {
}
}
-void PreheatTimerScreen::draw_adjuster(draw_mode_t what, uint8_t tag, progmem_str label, float value, int16_t x, int16_t y, int16_t w, int16_t h) {
+void PreheatTimerScreen::draw_adjuster(draw_mode_t what, uint8_t tag, FSTR_P label, float value, int16_t x, int16_t y, int16_t w, int16_t h) {
#define SUB_COLS 9
#define SUB_ROWS 2
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.h
index 9b8e2620dc..87628c4cab 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/preheat_screen.h
@@ -35,7 +35,7 @@ class PreheatTimerScreen : public BaseScreen, public CachedScreen
static void unlockMotors();
static void setStatusMessage(const char *);
- static void setStatusMessage(progmem_str);
+ static void setStatusMessage(FSTR_P);
static void onRedraw(draw_mode_t);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h
index dd25af1e74..3b63b0fd5b 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/compat.h
@@ -49,5 +49,5 @@
#endif
class __FlashStringHelper;
-typedef const __FlashStringHelper *progmem_str;
+typedef const __FlashStringHelper *FSTR_P;
extern const char G28_STR[];
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp
index c8e5721006..109814abf2 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp
@@ -38,9 +38,9 @@ namespace ExtUI {
void onIdle() { EventLoop::loop(); }
- void onPrinterKilled(PGM_P const error, PGM_P const component) {
- char str[strlen_P(error) + strlen_P(component) + 3];
- sprintf_P(str, PSTR(S_FMT ": " S_FMT), error, component);
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component) {
+ char str[strlen_P(FTOP(error)) + strlen_P(FTOP(component)) + 3];
+ sprintf_P(str, PSTR(S_FMT ": " S_FMT), FTOP(error), FTOP(component));
KillScreen::show(str);
}
@@ -71,7 +71,7 @@ namespace ExtUI {
}
void onStatusChanged(const char *lcd_msg) { StatusScreen::setStatusMessage(lcd_msg); }
- void onStatusChanged(progmem_str lcd_msg) { StatusScreen::setStatusMessage(lcd_msg); }
+ void onStatusChanged(FSTR_P lcd_msg) { StatusScreen::setStatusMessage(lcd_msg); }
void onPrintTimerStarted() {
InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_STARTED);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.cpp
index 40cddce7fd..8e788421ad 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.cpp
@@ -66,7 +66,7 @@ uint16_t CLCD::FontMetrics::get_text_width(const char *str, size_t n) const {
return width;
}
-uint16_t CLCD::FontMetrics::get_text_width(progmem_str str, size_t n) const {
+uint16_t CLCD::FontMetrics::get_text_width(FSTR_P str, size_t n) const {
uint16_t width = 0;
const uint8_t *p = (const uint8_t *) str;
for (;;) {
@@ -162,7 +162,7 @@ void CLCD::mem_write_bulk(uint32_t reg_address, const void *data, uint16_t len,
}
// Write 3-Byte Address, Multiple Bytes, plus padding bytes, from PROGMEM
-void CLCD::mem_write_bulk(uint32_t reg_address, progmem_str str, uint16_t len, uint8_t padding) {
+void CLCD::mem_write_bulk(uint32_t reg_address, FSTR_P str, uint16_t len, uint8_t padding) {
spi_ftdi_select();
spi_write_addr(reg_address);
spi_write_bulk(str, len, padding);
@@ -178,7 +178,7 @@ void CLCD::mem_write_pgm(uint32_t reg_address, const void *data, uint16_t len, u
}
// Write 3-Byte Address, Multiple Bytes, plus padding bytes, from PROGMEM, reversing bytes (suitable for loading XBM images)
-void CLCD::mem_write_xbm(uint32_t reg_address, progmem_str data, uint16_t len, uint8_t padding) {
+void CLCD::mem_write_xbm(uint32_t reg_address, FSTR_P data, uint16_t len, uint8_t padding) {
spi_ftdi_select();
spi_write_addr(reg_address);
spi_write_bulk(data, len, padding);
@@ -1048,7 +1048,7 @@ template bool CLCD::CommandFifo::write(T data, uint16_t len) {
#endif // ... FTDI_API_LEVEL != 800
template bool CLCD::CommandFifo::write(const void*, uint16_t);
-template bool CLCD::CommandFifo::write(progmem_str, uint16_t);
+template bool CLCD::CommandFifo::write(FSTR_P, uint16_t);
// CO_PROCESSOR COMMANDS
@@ -1071,7 +1071,7 @@ void CLCD::CommandFifo::str(const char * data) {
write(data, strlen(data)+1);
}
-void CLCD::CommandFifo::str(progmem_str data) {
+void CLCD::CommandFifo::str(FSTR_P data) {
write(data, strlen_P((const char*)data)+1);
}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.h
index 9fc5195fd4..2e2657a83e 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/basic/commands.h
@@ -93,7 +93,7 @@
#pragma once
-typedef const __FlashStringHelper *progmem_str;
+typedef const __FlashStringHelper *FSTR_P;
class UIStorage;
@@ -118,8 +118,8 @@ class CLCD {
static void mem_write_fill (uint32_t reg_address, uint8_t w_data, uint16_t len);
static void mem_write_bulk (uint32_t reg_address, const void *data, uint16_t len, uint8_t padding = 0);
static void mem_write_pgm (uint32_t reg_address, const void *data, uint16_t len, uint8_t padding = 0);
- static void mem_write_bulk (uint32_t reg_address, progmem_str str, uint16_t len, uint8_t padding = 0);
- static void mem_write_xbm (uint32_t reg_address, progmem_str str, uint16_t len, uint8_t padding = 0);
+ static void mem_write_bulk (uint32_t reg_address, FSTR_P str, uint16_t len, uint8_t padding = 0);
+ static void mem_write_xbm (uint32_t reg_address, FSTR_P str, uint16_t len, uint8_t padding = 0);
public:
class CommandFifo;
@@ -168,7 +168,7 @@ class CLCD::FontMetrics {
// Returns width of string, up to a maximum of n characters.
uint16_t get_text_width(const char *str, size_t n = SIZE_MAX) const;
- uint16_t get_text_width(progmem_str str, size_t n = SIZE_MAX) const;
+ uint16_t get_text_width(FSTR_P str, size_t n = SIZE_MAX) const;
};
/******************* FT800/810 Graphic Commands *********************************/
@@ -250,7 +250,7 @@ class CLCD::CommandFifo {
// Sends the string portion of text, button, toggle and keys.
void str (const char * data, size_t maxlen);
void str (const char * data);
- void str (progmem_str data);
+ void str (FSTR_P data);
void memzero (uint32_t ptr, uint32_t size);
void memset (uint32_t ptr, uint32_t value, uint32_t size);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.cpp
index 3ef71f573f..470d3806ee 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.cpp
@@ -30,7 +30,7 @@
#define DEC_POS SUB_POS(8,1), SUB_SIZE(2,1)
namespace FTDI {
- void draw_adjuster_value(CommandProcessor& cmd, int16_t x, int16_t y, int16_t w, int16_t h, float value, progmem_str units, int8_t width, uint8_t precision) {
+ void draw_adjuster_value(CommandProcessor& cmd, int16_t x, int16_t y, int16_t w, int16_t h, float value, FSTR_P units, int8_t width, uint8_t precision) {
char str[width + precision + 10 + (units ? strlen_P((const char*) units) : 0)];
if (isnan(value))
strcpy_P(str, PSTR("-"));
@@ -45,7 +45,7 @@ namespace FTDI {
cmd.tag(0).text(VAL_POS, str);
}
- void draw_adjuster(CommandProcessor& cmd, int16_t x, int16_t y, int16_t w, int16_t h, uint8_t tag, float value, progmem_str units, int8_t width, uint8_t precision, draw_mode_t what) {
+ void draw_adjuster(CommandProcessor& cmd, int16_t x, int16_t y, int16_t w, int16_t h, uint8_t tag, float value, FSTR_P units, int8_t width, uint8_t precision, draw_mode_t what) {
if (what & BACKGROUND)
cmd.tag(0).button(VAL_POS, F(""), FTDI::OPT_FLAT);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.h
index 71f7398694..fa5f8e46e6 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/adjuster_widget.h
@@ -25,7 +25,7 @@ namespace FTDI {
void draw_adjuster_value(
CommandProcessor& cmd,
int16_t x, int16_t y, int16_t w, int16_t h,
- float value, progmem_str units = nullptr,
+ float value, FSTR_P units = nullptr,
int8_t width = 5, uint8_t precision = 1
);
@@ -33,7 +33,7 @@ namespace FTDI {
CommandProcessor& cmd,
int16_t x, int16_t y, int16_t w, int16_t h,
uint8_t tag,
- float value, progmem_str units = nullptr,
+ float value, FSTR_P units = nullptr,
int8_t width = 5, uint8_t precision = 1,
draw_mode_t what = BOTH
);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/command_processor.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/command_processor.h
index 7504a1387d..24e93982c2 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/command_processor.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/command_processor.h
@@ -241,7 +241,7 @@ class CommandProcessor : public CLCD::CommandFifo {
return *this;
}
- CommandProcessor& toggle2(int16_t x, int16_t y, int16_t w, int16_t h, progmem_str no, progmem_str yes, bool state, uint16_t options = FTDI::OPT_3D) {
+ CommandProcessor& toggle2(int16_t x, int16_t y, int16_t w, int16_t h, FSTR_P no, FSTR_P yes, bool state, uint16_t options = FTDI::OPT_3D) {
char text[strlen_P((const char *)no) + strlen_P((const char *)yes) + 2];
strcpy_P(text, (const char *)no);
strcat(text, "\xFF");
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.cpp
index 342b1e4d2b..b4d8156b39 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.cpp
@@ -135,7 +135,7 @@ namespace FTDI {
}
}
- void draw_text_box(CommandProcessor& cmd, int x, int y, int w, int h, progmem_str pstr, uint16_t options, uint8_t font) {
+ void draw_text_box(CommandProcessor& cmd, int x, int y, int w, int h, FSTR_P pstr, uint16_t options, uint8_t font) {
char str[strlen_P((const char*)pstr) + 1];
strcpy_P(str, (const char*)pstr);
draw_text_box(cmd, x, y, w, h, (const char*) str, options, font);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.h
index 3b14b020c0..cc702344ba 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_box.h
@@ -27,6 +27,6 @@
namespace FTDI {
constexpr uint16_t OPT_BOTTOMY = 0x1000; // Non-standard
- void draw_text_box(class CommandProcessor& cmd, int x, int y, int w, int h, progmem_str str, uint16_t options = 0, uint8_t font = 31);
+ void draw_text_box(class CommandProcessor& cmd, int x, int y, int w, int h, FSTR_P str, uint16_t options = 0, uint8_t font = 31);
void draw_text_box(class CommandProcessor& cmd, int x, int y, int w, int h, const char *str, uint16_t options = 0, uint8_t font = 31);
}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.cpp
index 463d5ad316..698bcdb150 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.cpp
@@ -80,7 +80,7 @@ namespace FTDI {
_draw_text_with_ellipsis(cmd, x, y, w, h, tmp, options, font);
}
- void draw_text_with_ellipsis(CommandProcessor& cmd, int x, int y, int w, int h, progmem_str pstr, uint16_t options, uint8_t font) {
+ void draw_text_with_ellipsis(CommandProcessor& cmd, int x, int y, int w, int h, FSTR_P pstr, uint16_t options, uint8_t font) {
char tmp[strlen_P((const char*)pstr) + 3];
strcpy_P(tmp, (const char*)pstr);
_draw_text_with_ellipsis(cmd, x, y, w, h, tmp, options, font);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.h
index a2d8aa9443..0c6b202ae9 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/text_ellipsis.h
@@ -26,6 +26,6 @@
* showing ellipsis if it does not fit.
*/
namespace FTDI {
- void draw_text_with_ellipsis(class CommandProcessor& cmd, int x, int y, int w, int h, progmem_str str, uint16_t options = 0, uint8_t font = 31);
+ void draw_text_with_ellipsis(class CommandProcessor& cmd, int x, int y, int w, int h, FSTR_P str, uint16_t options = 0, uint8_t font = 31);
void draw_text_with_ellipsis(class CommandProcessor& cmd, int x, int y, int w, int h, const char *str, uint16_t options = 0, uint8_t font = 31);
}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.cpp
index 15e613cf69..ca25dea3ca 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.cpp
@@ -44,7 +44,7 @@
return false;
}
- bool FTDI::has_utf8_chars(progmem_str _str) {
+ bool FTDI::has_utf8_chars(FSTR_P _str) {
const char *str = (const char *) _str;
for (;;) {
const char c = pgm_read_byte(str++);
@@ -191,7 +191,7 @@
return render_utf8_text(nullptr, 0, 0, str, fs, maxlen);
}
- uint16_t FTDI::get_utf8_text_width(progmem_str pstr, font_size_t fs) {
+ uint16_t FTDI::get_utf8_text_width(FSTR_P pstr, font_size_t fs) {
char str[strlen_P((const char*)pstr) + 1];
strcpy_P(str, (const char*)pstr);
return get_utf8_text_width(str, fs);
@@ -234,7 +234,7 @@
cmd.cmd(RESTORE_CONTEXT());
}
- void FTDI::draw_utf8_text(CommandProcessor& cmd, int x, int y, progmem_str pstr, font_size_t fs, uint16_t options) {
+ void FTDI::draw_utf8_text(CommandProcessor& cmd, int x, int y, FSTR_P pstr, font_size_t fs, uint16_t options) {
char str[strlen_P((const char*)pstr) + 1];
strcpy_P(str, (const char*)pstr);
draw_utf8_text(cmd, x, y, (const char*) str, fs, options);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.h
index 391c8bf6cf..7818957fcc 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/unicode/unicode.h
@@ -40,7 +40,7 @@ namespace FTDI {
/* Returns true if the string has UTF8 string characters */
- bool has_utf8_chars(progmem_str str);
+ bool has_utf8_chars(FSTR_P str);
bool has_utf8_chars(const char *str);
/* Returns the next character in a UTF8 string and increments the
@@ -66,10 +66,10 @@ namespace FTDI {
void load_utf8_bitmaps(CommandProcessor& cmd);
uint16_t get_utf8_char_width(utf8_char_t, font_size_t);
- uint16_t get_utf8_text_width(progmem_str, font_size_t);
+ uint16_t get_utf8_text_width(FSTR_P, font_size_t);
uint16_t get_utf8_text_width(const char *, font_size_t, size_t maxlen=SIZE_MAX);
- void draw_utf8_text(CommandProcessor&, int x, int y, progmem_str, font_size_t, uint16_t options = 0);
+ void draw_utf8_text(CommandProcessor&, int x, int y, FSTR_P, font_size_t, uint16_t options = 0);
void draw_utf8_text(CommandProcessor&, int x, int y, const char *, font_size_t, uint16_t options = 0, size_t maxlen=SIZE_MAX);
// Similar to CLCD::FontMetrics, but can be used with UTF8 encoded strings.
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp
index d2aec0baf7..6cb85e47c4 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp
@@ -83,7 +83,7 @@ void AboutScreen::onRedraw(draw_mode_t) {
#ifdef TOUCH_UI_VERSION
F(TOUCH_UI_VERSION)
#else
- progmem_str(getFirmwareName_str())
+ FPSTR(getFirmwareName_str())
#endif
, OPT_CENTER, font_medium);
cmd.tag(0);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp
index 0d309bff75..86b4eb175a 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp
@@ -64,8 +64,8 @@ void AlertDialogBox::hide() {
}
template void AlertDialogBox::show(const char *);
-template void AlertDialogBox::show(progmem_str);
+template void AlertDialogBox::show(FSTR_P);
template void AlertDialogBox::showError(const char *);
-template void AlertDialogBox::showError(progmem_str);
+template void AlertDialogBox::showError(FSTR_P);
#endif // FTDI_ALERT_DIALOG_BOX
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp
index d0ba74721c..4415ed50fc 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp
@@ -109,7 +109,7 @@ void BaseNumericAdjustmentScreen::widgets_t::_button_style(CommandProcessor &cmd
* Speed optimization for drawing buttons. Draw all unpressed buttons in the
* background layer and draw only the pressed button in the foreground layer.
*/
-void BaseNumericAdjustmentScreen::widgets_t::_button(CommandProcessor &cmd, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, progmem_str text, bool enabled, bool highlight) {
+void BaseNumericAdjustmentScreen::widgets_t::_button(CommandProcessor &cmd, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, FSTR_P text, bool enabled, bool highlight) {
if (_what & BACKGROUND) enabled = true;
if ((_what & BACKGROUND) || buttonIsPressed(tag) || highlight || !enabled) {
_button_style(cmd, (!enabled) ? BTN_DISABLED : (highlight ? BTN_ACTION : BTN_NORMAL));
@@ -125,7 +125,7 @@ BaseNumericAdjustmentScreen::widgets_t &BaseNumericAdjustmentScreen::widgets_t::
return *this;
}
-void BaseNumericAdjustmentScreen::widgets_t::heading(progmem_str label) {
+void BaseNumericAdjustmentScreen::widgets_t::heading(FSTR_P label) {
if (_what & BACKGROUND) {
CommandProcessor cmd;
_button_style(cmd, TEXT_LABEL);
@@ -176,13 +176,13 @@ void BaseNumericAdjustmentScreen::widgets_t::_draw_increment_btn(CommandProcesso
switch (pos) {
#if ENABLED(TOUCH_UI_PORTRAIT)
- case 0: _button(cmd, tag, BTN_POS(5,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break;
- case 1: _button(cmd, tag, BTN_POS(7,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break;
- case 2: _button(cmd, tag, BTN_POS(9,_line), BTN_SIZE(2,1), progmem_str(label), true, highlight); break;
+ case 0: _button(cmd, tag, BTN_POS(5,_line), BTN_SIZE(2,1), FPSTR(label), true, highlight); break;
+ case 1: _button(cmd, tag, BTN_POS(7,_line), BTN_SIZE(2,1), FPSTR(label), true, highlight); break;
+ case 2: _button(cmd, tag, BTN_POS(9,_line), BTN_SIZE(2,1), FPSTR(label), true, highlight); break;
#else
- case 0: _button(cmd, tag, BTN_POS(15,2), BTN_SIZE(4,1), progmem_str(label), true, highlight); break;
- case 1: _button(cmd, tag, BTN_POS(15,3), BTN_SIZE(4,1), progmem_str(label), true, highlight); break;
- case 2: _button(cmd, tag, BTN_POS(15,4), BTN_SIZE(4,1), progmem_str(label), true, highlight); break;
+ case 0: _button(cmd, tag, BTN_POS(15,2), BTN_SIZE(4,1), FPSTR(label), true, highlight); break;
+ case 1: _button(cmd, tag, BTN_POS(15,3), BTN_SIZE(4,1), FPSTR(label), true, highlight); break;
+ case 2: _button(cmd, tag, BTN_POS(15,4), BTN_SIZE(4,1), FPSTR(label), true, highlight); break;
#endif
}
}
@@ -213,7 +213,7 @@ void BaseNumericAdjustmentScreen::widgets_t::increments() {
#endif
}
-void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, progmem_str label, const char *value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, FSTR_P label, const char *value, bool is_enabled) {
CommandProcessor cmd;
if (_what & BACKGROUND) {
@@ -239,7 +239,7 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster_sram_val(uint8_t tag, prog
_line++;
}
-void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str label, const char *value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, FSTR_P label, const char *value, bool is_enabled) {
if (_what & BACKGROUND) {
adjuster_sram_val(tag, label, nullptr);
}
@@ -251,7 +251,7 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str l
}
}
-void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str label, float value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, FSTR_P label, float value, bool is_enabled) {
if (_what & BACKGROUND) {
adjuster_sram_val(tag, label, nullptr);
}
@@ -265,7 +265,7 @@ void BaseNumericAdjustmentScreen::widgets_t::adjuster(uint8_t tag, progmem_str l
}
}
-void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, progmem_str label, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, FSTR_P label, bool is_enabled) {
CommandProcessor cmd;
cmd.font(LAYOUT_FONT);
_button(cmd, tag, BTN_POS(5,_line), BTN_SIZE(9,1), label, is_enabled);
@@ -273,7 +273,7 @@ void BaseNumericAdjustmentScreen::widgets_t::button(uint8_t tag, progmem_str lab
_line++;
}
-void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, progmem_str label, const char *value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, FSTR_P label, const char *value, bool is_enabled) {
CommandProcessor cmd;
if (_what & BACKGROUND) {
@@ -295,7 +295,7 @@ void BaseNumericAdjustmentScreen::widgets_t::text_field(uint8_t tag, progmem_str
_line++;
}
-void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, progmem_str label1, uint8_t tag2, progmem_str label2, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, FSTR_P label1, uint8_t tag2, FSTR_P label2, bool is_enabled) {
CommandProcessor cmd;
cmd.font(LAYOUT_FONT);
_button(cmd, tag1, BTN_POS(5,_line), BTN_SIZE(4.5,1), label1, is_enabled);
@@ -304,7 +304,7 @@ void BaseNumericAdjustmentScreen::widgets_t::two_buttons(uint8_t tag1, progmem_s
_line++;
}
-void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, progmem_str label, bool value, bool is_enabled) {
+void BaseNumericAdjustmentScreen::widgets_t::toggle(uint8_t tag, FSTR_P label, bool value, bool is_enabled) {
CommandProcessor cmd;
if (_what & BACKGROUND) {
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.h
index c097752674..fc0ef951bd 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.h
@@ -44,7 +44,7 @@ class BaseNumericAdjustmentScreen : public BaseScreen {
uint8_t _line;
uint32_t _color;
uint8_t _decimals;
- progmem_str _units;
+ FSTR_P _units;
enum style_t {
BTN_NORMAL,
BTN_ACTION,
@@ -56,25 +56,25 @@ class BaseNumericAdjustmentScreen : public BaseScreen {
protected:
void _draw_increment_btn(CommandProcessor &, uint8_t line, const uint8_t tag);
- void _button(CommandProcessor &, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, progmem_str, bool enabled = true, bool highlight = false);
+ void _button(CommandProcessor &, uint8_t tag, int16_t x, int16_t y, int16_t w, int16_t h, FSTR_P, bool enabled = true, bool highlight = false);
void _button_style(CommandProcessor &cmd, style_t style);
public:
widgets_t(draw_mode_t);
widgets_t &color(uint32_t color) {_color = color; return *this;}
- widgets_t &units(progmem_str units) {_units = units; return *this;}
+ widgets_t &units(FSTR_P units) {_units = units; return *this;}
widgets_t &draw_mode(draw_mode_t what) {_what = what; return *this;}
widgets_t &precision(uint8_t decimals, precision_default_t = DEFAULT_HIGHEST);
- void heading (progmem_str label);
- void adjuster_sram_val (uint8_t tag, progmem_str label, const char *value, bool is_enabled = true);
- void adjuster (uint8_t tag, progmem_str label, const char *value, bool is_enabled = true);
- void adjuster (uint8_t tag, progmem_str label, float value=0, bool is_enabled = true);
- void button (uint8_t tag, progmem_str label, bool is_enabled = true);
- void text_field (uint8_t tag, progmem_str label, const char *value, bool is_enabled = true);
- void two_buttons (uint8_t tag1, progmem_str label1,
- uint8_t tag2, progmem_str label2, bool is_enabled = true);
- void toggle (uint8_t tag, progmem_str label, bool value, bool is_enabled = true);
+ void heading (FSTR_P label);
+ void adjuster_sram_val (uint8_t tag, FSTR_P label, const char *value, bool is_enabled = true);
+ void adjuster (uint8_t tag, FSTR_P label, const char *value, bool is_enabled = true);
+ void adjuster (uint8_t tag, FSTR_P label, float value=0, bool is_enabled = true);
+ void button (uint8_t tag, FSTR_P label, bool is_enabled = true);
+ void text_field (uint8_t tag, FSTR_P label, const char *value, bool is_enabled = true);
+ void two_buttons (uint8_t tag1, FSTR_P label1,
+ uint8_t tag2, FSTR_P label2, bool is_enabled = true);
+ void toggle (uint8_t tag, FSTR_P label, bool value, bool is_enabled = true);
void home_buttons (uint8_t tag);
void increments ();
};
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_edit_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_edit_screen.cpp
index c7d0cc3f73..37eb29a99d 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_edit_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_edit_screen.cpp
@@ -174,11 +174,11 @@ bool BedMeshEditScreen::onTouchEnd(uint8_t tag) {
case 1:
// On Cancel, reload saved mesh, discarding changes
GOTO_PREVIOUS();
- injectCommands_P(PSTR("G29 L1"));
+ injectCommands(F("G29 L1"));
return true;
case 2:
saveAdjustedHighlightedValue();
- injectCommands_P(PSTR("G29 S1"));
+ injectCommands(F("G29 S1"));
mydata.needSave = false;
return true;
case 3:
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.cpp
index 8db2d2ef70..7b4195ff5c 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.cpp
@@ -154,11 +154,11 @@ void BedMeshViewScreen::onMeshUpdate(const int8_t x, const int8_t y, const ExtUI
void BedMeshViewScreen::doProbe() {
GOTO_SCREEN(BedMeshViewScreen);
mydata.count = 0;
- injectCommands_P(PSTR(BED_LEVELING_COMMANDS));
+ injectCommands(F(BED_LEVELING_COMMANDS));
}
void BedMeshViewScreen::show() {
- injectCommands_P(PSTR("G29 L1"));
+ injectCommands(F("G29 L1"));
GOTO_SCREEN(BedMeshViewScreen);
}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.h
index 90a90c233e..b9791fff7a 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/bed_mesh_view_screen.h
@@ -25,7 +25,7 @@
#define FTDI_BED_MESH_VIEW_SCREEN_CLASS BedMeshViewScreen
struct BedMeshViewScreenData {
- progmem_str message;
+ FSTR_P message;
uint8_t count;
xy_uint8_t highlight;
};
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_auto_calibration_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_auto_calibration_dialog_box.cpp
index 748cc1d7ef..5c43ed34ea 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_auto_calibration_dialog_box.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/confirm_auto_calibration_dialog_box.cpp
@@ -37,7 +37,7 @@ bool ConfirmAutoCalibrationDialogBox::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1:
GOTO_SCREEN(StatusScreen);
- injectCommands_P(PSTR("G425"));
+ injectCommands(F("G425"));
return true;
default:
return DialogBoxBaseClass::onTouchEnd(tag);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.cpp
index 8807480897..bcdcad17be 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.cpp
@@ -33,7 +33,7 @@ using namespace Theme;
#define _USER_DESC(N) MAIN_MENU_ITEM_##N##_DESC
#define _USER_GCODE(N) MAIN_MENU_ITEM_##N##_GCODE
#define _USER_ITEM(N) .tag(_ITEM_TAG(N)).button(USER_ITEM_POS(N), _USER_DESC(N))
-#define _USER_ACTION(N) case _ITEM_TAG(N): injectCommands_P(PSTR(_USER_GCODE(N))); TERN_(USER_SCRIPT_RETURN, GOTO_SCREEN(StatusScreen)); break;
+#define _USER_ACTION(N) case _ITEM_TAG(N): injectCommands(F(_USER_GCODE(N))); TERN_(USER_SCRIPT_RETURN, GOTO_SCREEN(StatusScreen)); break;
void CustomUserMenus::onRedraw(draw_mode_t what) {
if (what & BACKGROUND) {
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.h
index e46a280369..6935494809 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/custom_user_menus.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#define FTDI_CUSTOM_USER_MENUS
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp
index 1811779297..b6f69bc33e 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp
@@ -44,7 +44,7 @@ void DialogBoxBaseClass::drawMessage(T message, int16_t font) {
}
template void DialogBoxBaseClass::drawMessage(const char *, int16_t font);
-template void DialogBoxBaseClass::drawMessage(progmem_str, int16_t font);
+template void DialogBoxBaseClass::drawMessage(FSTR_P, int16_t font);
void DialogBoxBaseClass::drawYesNoButtons(uint8_t default_btn) {
CommandProcessor cmd;
@@ -67,7 +67,7 @@ void DialogBoxBaseClass::drawButton(T label) {
}
template void DialogBoxBaseClass::drawButton(const char *);
-template void DialogBoxBaseClass::drawButton(progmem_str);
+template void DialogBoxBaseClass::drawButton(FSTR_P);
bool DialogBoxBaseClass::onTouchEnd(uint8_t tag) {
switch (tag) {
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_runout_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_runout_screen.cpp
index 37ab70f7ac..68948b0c5e 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_runout_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_runout_screen.cpp
@@ -39,7 +39,7 @@ void FilamentRunoutScreen::onRedraw(draw_mode_t what) {
w.units(GET_TEXT_F(MSG_UNITS_MM));
w.precision(0);
w.color(e_axis);
- w.adjuster( 10, progmem_str(NUL_STR), getFilamentRunoutDistance_mm(), getFilamentRunoutEnabled());
+ w.adjuster( 10, FPSTR(NUL_STR), getFilamentRunoutDistance_mm(), getFilamentRunoutEnabled());
w.increments();
#endif
}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp
index 9bc2f56ab9..11db21aca9 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp
@@ -86,7 +86,7 @@ void LevelingMenu::onRedraw(draw_mode_t what) {
.enabled(ENABLED(HAS_BED_PROBE))
.tag(3).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED))
.enabled(ENABLED(HAS_MESH))
- .tag(4).button(SHOW_MESH_POS, GET_TEXT_F(MSG_SHOW_MESH))
+ .tag(4).button(SHOW_MESH_POS, GET_TEXT_F(MSG_MESH_VIEW))
.enabled(ENABLED(HAS_MESH))
.tag(5).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH))
.enabled(ENABLED(G26_MESH_VALIDATION))
@@ -125,11 +125,11 @@ bool LevelingMenu::onTouchEnd(uint8_t tag) {
#if ENABLED(G26_MESH_VALIDATION)
case 6:
GOTO_SCREEN(StatusScreen);
- injectCommands_P(PSTR("G28\nM117 Heating...\nG26 R X0 Y0\nG27"));
+ injectCommands(F("G28\nM117 Heating...\nG26 R X0 Y0\nG27"));
break;
#endif
#if ENABLED(BLTOUCH)
- case 7: injectCommands_P(PSTR("M280 P0 S60")); break;
+ case 7: injectCommands(F("M280 P0 S60")); break;
case 8: SpinnerDialogBox::enqueueAndWait(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break;
#endif
default: return false;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/lock_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/lock_screen.cpp
index 4e44f26d91..df8eabbe61 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/lock_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/lock_screen.cpp
@@ -63,7 +63,7 @@ void LockScreen::onRedraw(draw_mode_t what) {
#define MARGIN_T 3
#define MARGIN_B 3
- progmem_str message;
+ FSTR_P message;
switch (message_style()) {
case 'w':
message = GET_TEXT_F(MSG_PASSCODE_REJECTED);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp
index a6c39db796..6ccda405fc 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp
@@ -106,10 +106,10 @@ bool MainMenu::onTouchEnd(uint8_t tag) {
case 1: SaveSettingsDialogBox::promptToSaveSettings(); break;
case 2: SpinnerDialogBox::enqueueAndWait(F("G28")); break;
#if ENABLED(NOZZLE_CLEAN_FEATURE)
- case 3: injectCommands_P(PSTR("G12")); GOTO_SCREEN(StatusScreen); break;
+ case 3: injectCommands(F("G12")); GOTO_SCREEN(StatusScreen); break;
#endif
case 4: GOTO_SCREEN(MoveAxisScreen); break;
- case 5: injectCommands_P(PSTR("M84")); break;
+ case 5: injectCommands(F("M84")); break;
case 6: GOTO_SCREEN(TemperatureScreen); break;
case 7: GOTO_SCREEN(ChangeFilamentScreen); break;
case 8: GOTO_SCREEN(AdvancedSettingsMenu); break;
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/restore_failsafe_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/restore_failsafe_dialog_box.cpp
index 2dfd64fa5b..f82ba1d5c8 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/restore_failsafe_dialog_box.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/restore_failsafe_dialog_box.cpp
@@ -35,7 +35,7 @@ void RestoreFailsafeDialogBox::onRedraw(draw_mode_t) {
bool RestoreFailsafeDialogBox::onTouchEnd(uint8_t tag) {
switch (tag) {
case 1:
- ExtUI::injectCommands_P(PSTR("M502"));
+ ExtUI::injectCommands(F("M502"));
AlertDialogBox::show(GET_TEXT_F(MSG_EEPROM_RESET));
// Remove RestoreFailsafeDialogBox from the stack
// so the alert box doesn't return to it.
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp
index 5d92052ace..496d004a20 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp
@@ -38,7 +38,7 @@ bool SaveSettingsDialogBox::onTouchEnd(uint8_t tag) {
needs_save = false;
switch (tag) {
case 1:
- injectCommands_P(PSTR("M500"));
+ injectCommands(F("M500"));
AlertDialogBox::show(GET_TEXT_F(MSG_EEPROM_SAVED));
// Remove SaveSettingsDialogBox from the stack
// so the alert box doesn't return to me.
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.cpp
index 830a0238fe..3928bf3297 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.cpp
@@ -60,7 +60,7 @@ void SpinnerDialogBox::onRefresh() {
void SpinnerDialogBox::onRedraw(draw_mode_t) {
}
-void SpinnerDialogBox::show(progmem_str message) {
+void SpinnerDialogBox::show(FSTR_P fstr) {
CommandProcessor cmd;
if (AT_SCREEN(SpinnerDialogBox)) cmd.stop().execute();
cmd.cmd(CMD_DLSTART)
@@ -68,7 +68,7 @@ void SpinnerDialogBox::show(progmem_str message) {
.cmd(CLEAR(true,true,true))
.cmd(COLOR_RGB(bg_text_enabled))
.tag(0);
- draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(2,3), message, OPT_CENTER, font_large);
+ draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(2,3), fstr, OPT_CENTER, font_large);
DLCache dlcache(SPINNER_CACHE);
if (!dlcache.store(SPINNER_DL_SIZE)) {
SERIAL_ECHO_MSG("CachedScreen::storeBackground() failed: not enough DL cache space");
@@ -86,20 +86,20 @@ void SpinnerDialogBox::hide() {
GOTO_PREVIOUS();
}
-void SpinnerDialogBox::enqueueAndWait(progmem_str message, progmem_str commands) {
- show(message);
- ExtUI::injectCommands_P((const char*)commands);
+void SpinnerDialogBox::enqueueAndWait(FSTR_P fstr, FSTR_P commands) {
+ show(fstr);
+ ExtUI::injectCommands(commands);
mydata.auto_hide = true;
}
-void SpinnerDialogBox::enqueueAndWait(progmem_str message, char *commands) {
- show(message);
+void SpinnerDialogBox::enqueueAndWait(FSTR_P fstr, char *commands) {
+ show(fstr);
ExtUI::injectCommands(commands);
mydata.auto_hide = true;
}
void SpinnerDialogBox::onIdle() {
- if (mydata.auto_hide && !commandsInQueue() && TERN1(HOST_KEEPALIVE_FEATURE, GcodeSuite::busy_state == GcodeSuite::NOT_BUSY)) {
+ if (mydata.auto_hide && !commandsInQueue() && TERN1(HOST_KEEPALIVE_FEATURE, gcode.busy_state == gcode.NOT_BUSY)) {
mydata.auto_hide = false;
hide();
}
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.h
index 23e31d1a91..0f51d97653 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/spinner_dialog_box.h
@@ -37,12 +37,12 @@ class SpinnerDialogBox : public UIScreen {
static void onRefresh();
static void onIdle();
- static void show(progmem_str);
+ static void show(FSTR_P);
static void hide();
template
static void enqueueAndWait(T commands) {enqueueAndWait(GET_TEXT_F(MSG_PLEASE_WAIT), commands);}
- static void enqueueAndWait(progmem_str message, char *commands);
- static void enqueueAndWait(progmem_str message, progmem_str commands);
+ static void enqueueAndWait(FSTR_P message, char *commands);
+ static void enqueueAndWait(FSTR_P message, FSTR_P commands);
};
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp
index 23ac90107b..4e76450683 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp
@@ -344,7 +344,7 @@ void StatusScreen::draw_status_message(draw_mode_t what, const char *message) {
#undef GRID_COLS
}
-void StatusScreen::setStatusMessage(progmem_str message) {
+void StatusScreen::setStatusMessage(FSTR_P message) {
char buff[strlen_P((const char * const)message)+1];
strcpy_P(buff, (const char * const) message);
setStatusMessage((const char *) buff);
diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.h
index 6033ba1ad9..62e632756a 100644
--- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.h
+++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.h
@@ -36,7 +36,7 @@ class StatusScreen : public BaseScreen, public CachedScreen} is for error states.
-void set_lcd_error_P(PGM_P const error, PGM_P const component/*=nullptr*/) {
- write_to_lcd_P(PSTR("{E:"));
- write_to_lcd_P(error);
+void set_lcd_error(FSTR_P const error, FSTR_P const component/*=nullptr*/) {
+ write_to_lcd(F("{E:"));
+ write_to_lcd(error);
if (component) {
- write_to_lcd_P(PSTR(" "));
- write_to_lcd_P(component);
+ write_to_lcd(F(" "));
+ write_to_lcd(component);
}
- write_to_lcd_P(PSTR("}"));
+ write_to_lcd(F("}"));
}
@@ -243,16 +244,16 @@ void process_lcd_p_command(const char *command) {
switch (command[0]) {
case 'P':
ExtUI::pausePrint();
- write_to_lcd_P(PSTR("{SYS:PAUSED}"));
+ write_to_lcd(F("{SYS:PAUSED}"));
break;
case 'R':
ExtUI::resumePrint();
- write_to_lcd_P(PSTR("{SYS:RESUMED}"));
+ write_to_lcd(F("{SYS:RESUMED}"));
break;
case 'X':
- write_to_lcd_P(PSTR("{SYS:CANCELING}"));
+ write_to_lcd(F("{SYS:CANCELING}"));
ExtUI::stopPrint();
- write_to_lcd_P(PSTR("{SYS:STARTED}"));
+ write_to_lcd(F("{SYS:STARTED}"));
break;
case 'H': queue.enqueue_now_P(G28_STR); break; // Home all axes
default: {
@@ -271,13 +272,13 @@ void process_lcd_p_command(const char *command) {
// but the V2 LCD switches to "print" mode on {SYS:DIR} response.
if (card.flag.filenameIsDir) {
card.cd(card.filename);
- write_to_lcd_P(PSTR("{SYS:DIR}"));
+ write_to_lcd(F("{SYS:DIR}"));
}
else {
char message_buffer[MAX_CURLY_COMMAND];
sprintf_P(message_buffer, PSTR("{PRINTFILE:%s}"), card.longest_filename());
write_to_lcd(message_buffer);
- write_to_lcd_P(PSTR("{SYS:BUILD}"));
+ write_to_lcd(F("{SYS:BUILD}"));
card.openAndPrintFile(card.filename);
}
#endif
@@ -332,7 +333,7 @@ void process_lcd_s_command(const char *command) {
write_to_lcd(message_buffer);
}
- write_to_lcd_P(PSTR("{SYS:OK}"));
+ write_to_lcd(F("{SYS:OK}"));
#endif
} break;
@@ -413,7 +414,7 @@ void update_usb_status(const bool forceUpdate) {
// This is more logical.
if (last_usb_connected_status != MYSERIAL1.connected() || forceUpdate) {
last_usb_connected_status = MYSERIAL1.connected();
- write_to_lcd_P(last_usb_connected_status ? PSTR("{R:UC}\r\n") : PSTR("{R:UD}\r\n"));
+ write_to_lcd(last_usb_connected_status ? F("{R:UC}\r\n") : F("{R:UD}\r\n"));
}
}
diff --git a/Marlin/src/lcd/extui/malyan/malyan.h b/Marlin/src/lcd/extui/malyan/malyan.h
index e8afbd4a59..1d0e911ccd 100644
--- a/Marlin/src/lcd/extui/malyan/malyan.h
+++ b/Marlin/src/lcd/extui/malyan/malyan.h
@@ -33,10 +33,10 @@ extern uint16_t inbound_count;
// For sending print completion messages
extern bool last_printing_status;
-void write_to_lcd_P(PGM_P const message);
-void write_to_lcd(const char * const message);
+void write_to_lcd(FSTR_P const fmsg);
+void write_to_lcd(const char * const cmsg);
-void set_lcd_error_P(PGM_P const error, PGM_P const component=nullptr);
+void set_lcd_error(FSTR_P const error, FSTR_P const component=nullptr);
void process_lcd_c_command(const char *command);
void process_lcd_eb_command(const char *command);
diff --git a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp
index cae534de3b..f323728e27 100644
--- a/Marlin/src/lcd/extui/malyan/malyan_extui.cpp
+++ b/Marlin/src/lcd/extui/malyan/malyan_extui.cpp
@@ -55,13 +55,13 @@ namespace ExtUI {
LCD_SERIAL.begin(LCD_BAUDRATE);
// Signal init
- write_to_lcd_P(PSTR("{SYS:STARTED}\r\n"));
+ write_to_lcd(F("{SYS:STARTED}\r\n"));
// send a version that says "unsupported"
- write_to_lcd_P(PSTR("{VER:99}\r\n"));
+ write_to_lcd(F("{VER:99}\r\n"));
// No idea why it does this twice.
- write_to_lcd_P(PSTR("{SYS:STARTED}\r\n"));
+ write_to_lcd(F("{SYS:STARTED}\r\n"));
update_usb_status(true);
}
@@ -98,8 +98,8 @@ namespace ExtUI {
#endif
}
- void onPrinterKilled(PGM_P const error, PGM_P const component) {
- set_lcd_error_P(error, component);
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component) {
+ set_lcd_error(error, component);
}
#if HAS_PID_HEATING
@@ -109,28 +109,28 @@ namespace ExtUI {
//SERIAL_ECHOLNPGM("OnPidTuning:", rst);
switch (rst) {
case PID_STARTED:
- set_lcd_error_P(GET_TEXT(MSG_PID_AUTOTUNE));
+ set_lcd_error(GET_TEXT_F(MSG_PID_AUTOTUNE));
break;
case PID_BAD_EXTRUDER_NUM:
- set_lcd_error_P(GET_TEXT(MSG_PID_BAD_EXTRUDER_NUM));
+ set_lcd_error(GET_TEXT_F(MSG_PID_BAD_EXTRUDER_NUM));
break;
case PID_TEMP_TOO_HIGH:
- set_lcd_error_P(GET_TEXT(MSG_PID_TEMP_TOO_HIGH));
+ set_lcd_error(GET_TEXT_F(MSG_PID_TEMP_TOO_HIGH));
break;
case PID_TUNING_TIMEOUT:
- set_lcd_error_P(GET_TEXT(MSG_PID_TIMEOUT));
+ set_lcd_error(GET_TEXT_F(MSG_PID_TIMEOUT));
break;
case PID_DONE:
- set_lcd_error_P(GET_TEXT(MSG_PID_AUTOTUNE_DONE));
+ set_lcd_error(GET_TEXT_F(MSG_PID_AUTOTUNE_DONE));
break;
}
}
#endif
- void onPrintTimerStarted() { write_to_lcd_P(PSTR("{SYS:BUILD}")); }
+ void onPrintTimerStarted() { write_to_lcd(F("{SYS:BUILD}")); }
void onPrintTimerPaused() {}
- void onPrintTimerStopped() { write_to_lcd_P(PSTR("{TQ:100}")); }
+ void onPrintTimerStopped() { write_to_lcd(F("{TQ:100}")); }
// Not needed for Malyan LCD
void onStatusChanged(const char * const) {}
diff --git a/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp b/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp
index 6f3d6bbb6b..2fb28415a1 100644
--- a/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/SPIFlashStorage.cpp
@@ -43,9 +43,9 @@ uint32_t SPIFlashStorage::m_startAddress;
static uint32_t rle_compress(T *output, uint32_t outputLength, T *input, uint32_t inputLength, uint32_t& inputProcessed) {
uint32_t count = 0, out = 0, index, i;
T pixel;
- //32767 for uint16_t
- //127 for uint16_t
- //calculated at compile time
+ // 32767 for uint16_t
+ // 127 for uint16_t
+ // calculated at compile time
constexpr T max = (0xFFFFFFFF >> (8 * (4 - sizeof(T)))) / 2;
inputProcessed = 0;
diff --git a/Marlin/src/lcd/extui/mks_ui/SPI_TFT.cpp b/Marlin/src/lcd/extui/mks_ui/SPI_TFT.cpp
index 68e4d9de04..42abd4bf64 100644
--- a/Marlin/src/lcd/extui/mks_ui/SPI_TFT.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/SPI_TFT.cpp
@@ -69,14 +69,14 @@ void TFT::LCD_init() {
}
void TFT::LCD_clear(uint16_t color) {
- setWindow(0, 0, (TFT_WIDTH), (TFT_HEIGHT));
- tftio.WriteMultiple(color, (uint32_t)(TFT_WIDTH) * (TFT_HEIGHT));
+ setWindow(0, 0, TFT_WIDTH, TFT_HEIGHT);
+ tftio.WriteMultiple(color, uint32_t(TFT_WIDTH) * uint32_t(TFT_HEIGHT));
}
void TFT::LCD_Draw_Logo() {
#if HAS_LOGO_IN_FLASH
setWindow(0, 0, TFT_WIDTH, TFT_HEIGHT);
- for (uint16_t i = 0; i < (TFT_HEIGHT); i ++) {
+ for (uint16_t i = 0; i < (TFT_HEIGHT); i++) {
Pic_Logo_Read((uint8_t *)"", (uint8_t *)bmp_public_buf, (TFT_WIDTH) * 2);
tftio.WriteSequence((uint16_t *)bmp_public_buf, TFT_WIDTH);
}
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_about.cpp b/Marlin/src/lcd/extui/mks_ui/draw_about.cpp
index 54a8ede64e..3424bf7a0e 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_about.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_about.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp
index 22196a28b8..5de4a13c88 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_acceleration_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp
index a564d86cc1..28958b6d2c 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_advance_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -56,9 +57,9 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
break;
#if ENABLED(MKS_WIFI_MODULE)
case ID_WIFI_PARA:
- lv_clear_advance_settings();
- lv_draw_wifi_settings();
- break;
+ lv_clear_advance_settings();
+ lv_draw_wifi_settings();
+ break;
#endif
#if HAS_ROTARY_ENCODER
case ID_ENCODER_SETTINGS:
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp
index d52abcff23..5ac24c4413 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_auto_level_offset_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, HAS_BED_PROBE)
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp
index 3165190579..65617fa9bb 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_baby_stepping.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -54,7 +55,7 @@ enum {
ID_BABY_STEP_RETURN
};
-static float babystep_dist=0.01;
+static float babystep_dist = 0.01;
static uint8_t has_adjust_z = 0;
static void event_handler(lv_obj_t *obj, lv_event_t event) {
@@ -64,32 +65,32 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_BABY_STEP_X_P:
sprintf_P(baby_buf, PSTR("M290 X%s"), dtostrf(babystep_dist, 1, 3, str_1));
- gcode.process_subcommands_now_P(PSTR(baby_buf));
+ gcode.process_subcommands_now(F(baby_buf));
has_adjust_z = 1;
break;
case ID_BABY_STEP_X_N:
sprintf_P(baby_buf, PSTR("M290 X%s"), dtostrf(-babystep_dist, 1, 3, str_1));
- gcode.process_subcommands_now_P(PSTR(baby_buf));
+ gcode.process_subcommands_now(F(baby_buf));
has_adjust_z = 1;
break;
case ID_BABY_STEP_Y_P:
sprintf_P(baby_buf, PSTR("M290 Y%s"), dtostrf(babystep_dist, 1, 3, str_1));
- gcode.process_subcommands_now_P(PSTR(baby_buf));
+ gcode.process_subcommands_now(F(baby_buf));
has_adjust_z = 1;
break;
case ID_BABY_STEP_Y_N:
sprintf_P(baby_buf, PSTR("M290 Y%s"), dtostrf(-babystep_dist, 1, 3, str_1));
- gcode.process_subcommands_now_P(PSTR(baby_buf));
+ gcode.process_subcommands_now(F(baby_buf));
has_adjust_z = 1;
break;
case ID_BABY_STEP_Z_P:
sprintf_P(baby_buf, PSTR("M290 Z%s"), dtostrf(babystep_dist, 1, 3, str_1));
- gcode.process_subcommands_now_P(PSTR(baby_buf));
+ gcode.process_subcommands_now(F(baby_buf));
has_adjust_z = 1;
break;
case ID_BABY_STEP_Z_N:
sprintf_P(baby_buf, PSTR("M290 Z%s"), dtostrf(-babystep_dist, 1, 3, str_1));
- gcode.process_subcommands_now_P(PSTR(baby_buf));
+ gcode.process_subcommands_now(F(baby_buf));
has_adjust_z = 1;
break;
case ID_BABY_STEP_DIST:
@@ -123,9 +124,8 @@ void lv_draw_baby_stepping() {
buttonV = lv_imgbtn_create(scr, nullptr, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_BABY_STEP_DIST);
labelV = lv_label_create_empty(buttonV);
#if HAS_ROTARY_ENCODER
- if (gCfgItems.encoder_enable) {
+ if (gCfgItems.encoder_enable)
lv_group_add_obj(g, buttonV);
- }
#endif
lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_BABY_STEP_RETURN);
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp b/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp
index 645cd2e6e3..5248816f54 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_change_speed.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp
index 56b0e8f5ca..1d0ae7775b 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, MKS_WIFI_MODULE)
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h
index 917b52ab0a..ff60f121a1 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h
+++ b/Marlin/src/lcd/extui/mks_ui/draw_cloud_bind.h
@@ -22,7 +22,7 @@
#pragma once
#ifdef __cplusplus
-extern "C" { /* C-declarations for C++ */
+ extern "C" { /* C-declarations for C++ */
#endif
void lv_draw_cloud_bind();
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp b/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp
index 638d0c5ec3..3cdb07b608 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_dialog.cpp
@@ -103,15 +103,13 @@ static void btn_ok_event_cb(lv_obj_t *btn, lv_event_t event) {
if (card.isFileOpen()) {
feedrate_percentage = 100;
planner.flow_percentage[0] = 100;
- planner.e_factor[0] = planner.flow_percentage[0] * 0.01f;
+ planner.e_factor[0] = planner.flow_percentage[0] * 0.01f;
#if HAS_MULTI_EXTRUDER
planner.flow_percentage[1] = 100;
- planner.e_factor[1] = planner.flow_percentage[1] * 0.01f;
+ planner.e_factor[1] = planner.flow_percentage[1] * 0.01f;
#endif
card.startOrResumeFilePrinting();
- #if ENABLED(POWER_LOSS_RECOVERY)
- recovery.prepare();
- #endif
+ TERN_(POWER_LOSS_RECOVERY, recovery.prepare());
once_flag = false;
}
}
@@ -203,7 +201,7 @@ static void btn_cancel_event_cb(lv_obj_t *btn, lv_event_t event) {
draw_return_ui();
}
else if (DIALOG_IS(TYPE_FILAMENT_LOADING, TYPE_FILAMENT_UNLOADING)) {
- queue.enqueue_one_P(PSTR("M410"));
+ queue.enqueue_one(F("M410"));
uiCfg.filament_rate = 0;
uiCfg.filament_loading_completed = false;
uiCfg.filament_unloading_completed = false;
@@ -229,14 +227,14 @@ void lv_draw_dialog(uint8_t type) {
lv_obj_t *labelDialog = lv_label_create(scr, "");
if (DIALOG_IS(TYPE_FINISH_PRINT, PAUSE_MESSAGE_RESUME)) {
- btnOk = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_ok_event_cb);
- lv_obj_t *labelOk = lv_label_create_empty(btnOk); // Add a label to the button
- lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
+ btnOk = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_ok_event_cb);
+ lv_obj_t *labelOk = lv_label_create_empty(btnOk); // Add a label to the button
+ lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
}
else if (DIALOG_IS(PAUSE_MESSAGE_WAITING, PAUSE_MESSAGE_INSERT, PAUSE_MESSAGE_HEAT)) {
btnOk = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_ok_event_cb);
- lv_obj_t *labelOk = lv_label_create_empty(btnOk); // Add a label to the button
- lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
+ lv_obj_t *labelOk = lv_label_create_empty(btnOk); // Add a label to the button
+ lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
}
else if (DIALOG_IS(PAUSE_MESSAGE_PARKING, PAUSE_MESSAGE_CHANGING, PAUSE_MESSAGE_UNLOAD, PAUSE_MESSAGE_LOAD, PAUSE_MESSAGE_PURGE, PAUSE_MESSAGE_RESUME, PAUSE_MESSAGE_HEATING)) {
// nothing to do
@@ -269,7 +267,7 @@ void lv_draw_dialog(uint8_t type) {
}
#endif
else if (DIALOG_IS(TYPE_FILAMENT_LOAD_HEAT, TYPE_FILAMENT_UNLOAD_HEAT)) {
- btnCancel = lv_button_btn_create(scr, BTN_OK_X+90, BTN_OK_Y, 100, 50, btn_cancel_event_cb);
+ btnCancel = lv_button_btn_create(scr, BTN_OK_X + 90, BTN_OK_Y, 100, 50, btn_cancel_event_cb);
lv_obj_t *labelCancel = lv_label_create_empty(btnCancel);
lv_label_set_text(labelCancel, print_file_dialog_menu.cancel);
@@ -287,7 +285,7 @@ void lv_draw_dialog(uint8_t type) {
lv_label_set_text(labelCancel, print_file_dialog_menu.cancel);
filament_bar = lv_bar_create(scr, nullptr);
- lv_obj_set_pos(filament_bar, (TFT_WIDTH-400)/2, ((TFT_HEIGHT - titleHeight)-40)/2);
+ lv_obj_set_pos(filament_bar, (TFT_WIDTH - 400) / 2, ((TFT_HEIGHT - titleHeight) - 40) / 2);
lv_obj_set_size(filament_bar, 400, 25);
lv_bar_set_style(filament_bar, LV_BAR_STYLE_INDIC, &lv_bar_style_indic);
lv_bar_set_anim_time(filament_bar, 1000);
@@ -301,11 +299,11 @@ void lv_draw_dialog(uint8_t type) {
lv_obj_t *labelCancel = lv_label_create_empty(btnCancel); // Add a label to the button
if (DIALOG_IS(PAUSE_MESSAGE_OPTION)) {
- lv_label_set_text(labelOk, pause_msg_menu.purgeMore); // Set the labels text
+ lv_label_set_text(labelOk, pause_msg_menu.purgeMore); // Set the labels text
lv_label_set_text(labelCancel, pause_msg_menu.continuePrint);
}
else {
- lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
+ lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
lv_label_set_text(labelCancel, print_file_dialog_menu.cancel);
}
}
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp
index b96c65e547..c518d85ab5 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_eeprom_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp
index 4c56205465..04c6b51e2a 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_encoder_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_error_message.cpp b/Marlin/src/lcd/extui/mks_ui/draw_error_message.cpp
index 48ff56253b..bc15100153 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_error_message.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_error_message.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -32,11 +33,12 @@
static lv_obj_t *scr;
-void lv_draw_error_message(PGM_P const msg) {
+void lv_draw_error_message(FSTR_P const fmsg) {
+ FSTR_P fhalted = F("PRINTER HALTED"), fplease = F("Please Reset");
SPI_TFT.LCD_clear(0x0000);
- if (msg) disp_string((TFT_WIDTH - strlen(msg) * 16) / 2, 100, msg, 0xFFFF, 0x0000);
- disp_string((TFT_WIDTH - strlen("PRINTER HALTED") * 16) / 2, 140, "PRINTER HALTED", 0xFFFF, 0x0000);
- disp_string((TFT_WIDTH - strlen("Please Reset") * 16) / 2, 180, "Please Reset", 0xFFFF, 0x0000);
+ if (fmsg) disp_string((TFT_WIDTH - strlen_P(FTOP(fmsg)) * 16) / 2, 100, fmsg, 0xFFFF, 0x0000);
+ disp_string((TFT_WIDTH - strlen_P(FTOP(fhalted)) * 16) / 2, 140, fhalted, 0xFFFF, 0x0000);
+ disp_string((TFT_WIDTH - strlen_P(FTOP(fplease)) * 16) / 2, 180, fplease, 0xFFFF, 0x0000);
}
void lv_clear_error_message() { lv_obj_del(scr); }
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_error_message.h b/Marlin/src/lcd/extui/mks_ui/draw_error_message.h
index 6999ecf5e4..8963e7f477 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_error_message.h
+++ b/Marlin/src/lcd/extui/mks_ui/draw_error_message.h
@@ -29,7 +29,7 @@
#define PGM_P const char *
#endif
-void lv_draw_error_message(PGM_P const msg);
+void lv_draw_error_message(FSTR_P const fmsg);
void lv_clear_error_message();
#ifdef __cplusplus
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp
index d1132a33d8..f3204eb962 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_extrusion.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -73,11 +74,11 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
if (ENABLED(HAS_MULTI_EXTRUDER)) {
if (uiCfg.extruderIndex == 0) {
uiCfg.extruderIndex = 1;
- queue.inject_P(PSTR("T1"));
+ queue.inject(F("T1"));
}
else {
uiCfg.extruderIndex = 0;
- queue.inject_P(PSTR("T0"));
+ queue.inject(F("T0"));
}
}
else
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp b/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp
index ce804e615d..b2107709a4 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_fan.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -43,9 +44,11 @@ enum {
ID_F_RETURN
};
+uint8_t fanPercent = 0;
static void event_handler(lv_obj_t *obj, lv_event_t event) {
if (event != LV_EVENT_RELEASED) return;
- uint8_t fanPercent = map(thermalManager.fan_speed[0], 0, 255, 0, 100);
+ const uint8_t temp = map(thermalManager.fan_speed[0], 0, 255, 0, 100);
+ if (abs(fanPercent - temp) > 2) fanPercent = temp;
switch (obj->mks_obj_id) {
case ID_F_ADD: if (fanPercent < 100) fanPercent++; break;
case ID_F_DEC: if (fanPercent != 0) fanPercent--; break;
@@ -55,6 +58,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
case ID_F_RETURN: clear_cur_ui(); draw_return_ui(); return;
}
thermalManager.set_fan_speed(0, map(fanPercent, 0, 100, 0, 255));
+ if (obj->mks_obj_id != ID_F_RETURN) disp_fan_value();
}
void lv_draw_fan() {
@@ -62,7 +66,7 @@ void lv_draw_fan() {
scr = lv_screen_create(FAN_UI);
// Create an Image button
- buttonAdd = lv_big_button_create(scr, "F:/bmp_Add.bin", fan_menu.add, INTERVAL_V, titleHeight, event_handler, ID_F_ADD);
+ buttonAdd = lv_big_button_create(scr, "F:/bmp_Add.bin", fan_menu.add, INTERVAL_V, titleHeight, event_handler, ID_F_ADD);
lv_obj_clear_protect(buttonAdd, LV_PROTECT_FOLLOW);
lv_big_button_create(scr, "F:/bmp_Dec.bin", fan_menu.dec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_F_DEC);
lv_big_button_create(scr, "F:/bmp_speed255.bin", fan_menu.full, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_F_HIGH);
@@ -77,7 +81,7 @@ void lv_draw_fan() {
void disp_fan_value() {
#if HAS_FAN
- sprintf_P(public_buf_l, PSTR("%s: %3d%%"), fan_menu.state, (int)map(thermalManager.fan_speed[0], 0, 255, 0, 100));
+ sprintf_P(public_buf_l, PSTR("%s: %3d%%"), fan_menu.state, fanPercent);
#else
sprintf_P(public_buf_l, PSTR("%s: ---"), fan_menu.state);
#endif
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp b/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp
index 311894825d..61d212303b 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_filament_change.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -51,7 +52,8 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
case ID_FILAMNT_IN:
uiCfg.filament_load_heat_flg = true;
if (ABS(thermalManager.degTargetHotend(uiCfg.extruderIndex) - thermalManager.wholeDegHotend(uiCfg.extruderIndex)) <= 1
- || gCfgItems.filament_limit_temp <= thermalManager.wholeDegHotend(uiCfg.extruderIndex)) {
+ || gCfgItems.filament_limit_temp <= thermalManager.wholeDegHotend(uiCfg.extruderIndex)
+ ) {
lv_clear_filament_change();
lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED);
}
@@ -92,7 +94,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
case ID_FILAMNT_RETURN:
#if HAS_MULTI_EXTRUDER
if (uiCfg.print_state != IDLE && uiCfg.print_state != REPRINTED)
- gcode.process_subcommands_now_P(uiCfg.extruderIndexBak == 1 ? PSTR("T1") : PSTR("T0"));
+ gcode.process_subcommands_now(uiCfg.extruderIndexBak == 1 ? F("T1") : F("T0"));
#endif
feedrate_mm_s = (float)uiCfg.moveSpeed_bak;
if (uiCfg.print_state == PAUSED)
@@ -114,9 +116,8 @@ void lv_draw_filament_change() {
buttonType = lv_imgbtn_create(scr, nullptr, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_FILAMNT_TYPE);
#if HAS_ROTARY_ENCODER
- if (gCfgItems.encoder_enable) {
+ if (gCfgItems.encoder_enable)
lv_group_add_obj(g, buttonType);
- }
#endif
lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_FILAMNT_RETURN);
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp
index 97680f3a0c..e3ca75da51 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_filament_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp b/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp
index bded5df7e7..fa9f7b0c47 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_gcode.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -29,7 +30,7 @@
#include "../../../inc/MarlinConfig.h"
extern lv_group_t *g;
-static lv_obj_t *scr,*outL,*outV = 0;
+static lv_obj_t *scr, *outL, *outV = 0;
static int currentWritePos = 0;
extern uint8_t public_buf[513];
extern "C" { extern char public_buf_m[100]; }
@@ -58,7 +59,7 @@ void lv_show_gcode_output(void * that, const char * txt) {
if (!memcmp(txt, "echo:", 5)) {
public_buf[0] = 0; // Clear output buffer
return;
- }
+ }
// Avoid overflow if the answer is too large
size_t len = strlen((const char*)public_buf), tlen = strlen(txt);
@@ -68,17 +69,17 @@ void lv_show_gcode_output(void * that, const char * txt) {
}
}
-void lv_serial_capt_hook(void * userPointer, uint8_t c)
-{
+void lv_serial_capt_hook(void * userPointer, uint8_t c) {
if (c == '\n' || currentWritePos == sizeof(public_buf_m) - 1) { // End of line, probably end of command anyway
public_buf_m[currentWritePos] = 0;
lv_show_gcode_output(userPointer, public_buf_m);
currentWritePos = 0;
}
- else public_buf_m[currentWritePos++] = c;
+ else
+ public_buf_m[currentWritePos++] = c;
}
-void lv_eom_hook(void *)
-{
+
+void lv_eom_hook(void *) {
// Message is done, let's remove the hook now
MYSERIAL1.setHook();
// We are back from the keyboard, so let's redraw ourselves
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_home.cpp b/Marlin/src/lcd/extui/mks_ui/draw_home.cpp
index 447fadd55d..04ebd95a09 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_home.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_home.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -51,19 +52,19 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
queue.inject_P(G28_STR);
break;
case ID_H_X:
- queue.inject_P(PSTR("G28X"));
+ queue.inject(F("G28X"));
break;
case ID_H_Y:
- queue.inject_P(PSTR("G28Y"));
+ queue.inject(F("G28Y"));
break;
case ID_H_Z:
- queue.inject_P(PSTR("G28Z"));
+ queue.inject(F("G28Z"));
break;
case ID_H_OFF_ALL:
- queue.inject_P(PSTR("M84"));
+ queue.inject(F("M84"));
break;
case ID_H_OFF_XY:
- queue.inject_P(PSTR("M84XY"));
+ queue.inject(F("M84XY"));
break;
case ID_H_RETURN:
clear_cur_ui();
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp
index e1ab58ee7b..212f2b4995 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_homing_sensitivity_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfig.h"
#if HAS_TFT_LVGL_UI && USE_SENSORLESS
@@ -66,10 +67,10 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
break;
#if Z2_SENSORLESS
case ID_SENSITIVITY_Z2:
- value = z2_sensitivity;
- lv_clear_homing_sensitivity_settings();
- lv_draw_number_key();
- break;
+ value = z2_sensitivity;
+ lv_clear_homing_sensitivity_settings();
+ lv_draw_number_key();
+ break;
#endif
}
}
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp
index 8a97e30467..d410b2003c 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_jerk_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, HAS_CLASSIC_JERK)
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp
index 671939cbff..e1184c2195 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_keyboard.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -40,10 +41,10 @@ static const char * kb_map_lc[] = {"1#", "q", "w", "e", "r", "t", "y", "u", "i",
LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
static const lv_btnm_ctrl_t kb_ctrl_lc_map[] = {
- LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
- LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
+ LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
+ LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
static const char * kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", LV_SYMBOL_BACKSPACE, "\n",
"abc", "A", "S", "D", "F", "G", "H", "J", "K", "L", LV_SYMBOL_NEW_LINE, "\n",
@@ -51,32 +52,33 @@ static const char * kb_map_uc[] = {"1#", "Q", "W", "E", "R", "T", "Y", "U", "I",
LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
static const lv_btnm_ctrl_t kb_ctrl_uc_map[] = {
- LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
- LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
+ LV_KB_CTRL_BTN_FLAGS | 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
+ LV_KB_CTRL_BTN_FLAGS | 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
-static const char * kb_map_spec[] = {"0", "1", "2", "3", "4" ,"5", "6", "7", "8", "9", ".", LV_SYMBOL_BACKSPACE, "\n",
+static const char * kb_map_spec[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", LV_SYMBOL_BACKSPACE, "\n",
"abc", "+", "-", "/", "*", "=", "%", "!", "?", "#", "<", ">", "\n",
"\\", "@", "$", "(", ")", "{", "}", "[", "]", ";", "\"", "'", "\n",
LV_SYMBOL_CLOSE, LV_SYMBOL_LEFT, " ", LV_SYMBOL_RIGHT, LV_SYMBOL_OK, ""};
static const lv_btnm_ctrl_t kb_ctrl_spec_map[] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
- LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+ LV_KB_CTRL_BTN_FLAGS | 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ LV_KB_CTRL_BTN_FLAGS | 2, 2, 6, 2, LV_KB_CTRL_BTN_FLAGS | 2};
static const lv_btnm_ctrl_t kb_ctrl_num_map[] = {
- 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
- 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
- 1, 1, 1, 2,
- 1, 1, 1, 1, 1};
+ 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+ 1, 1, 1, LV_KB_CTRL_BTN_FLAGS | 2,
+ 1, 1, 1, 2,
+ 1, 1, 1, 1, 1
+};
static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
if (event != LV_EVENT_VALUE_CHANGED) return;
- lv_kb_ext_t * ext = (lv_kb_ext_t * )lv_obj_get_ext_attr(kb);
+ lv_kb_ext_t *ext = (lv_kb_ext_t*)lv_obj_get_ext_attr(kb);
const uint16_t btn_id = lv_btnm_get_active_btn(kb);
if (btn_id == LV_BTNM_BTN_NONE) return;
if (lv_btnm_get_btn_ctrl(kb, btn_id, LV_BTNM_CTRL_HIDDEN | LV_BTNM_CTRL_INACTIVE)) return;
@@ -119,12 +121,12 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
switch (keyboard_value) {
#if ENABLED(MKS_WIFI_MODULE)
case wifiName:
- memcpy(uiCfg.wifi_name,ret_ta_txt,sizeof(uiCfg.wifi_name));
+ memcpy(uiCfg.wifi_name, ret_ta_txt, sizeof(uiCfg.wifi_name));
lv_clear_keyboard();
draw_return_ui();
break;
case wifiPassWord:
- memcpy(uiCfg.wifi_key,ret_ta_txt,sizeof(uiCfg.wifi_name));
+ memcpy(uiCfg.wifi_key, ret_ta_txt, sizeof(uiCfg.wifi_name));
lv_clear_keyboard();
draw_return_ui();
break;
@@ -156,8 +158,8 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
#endif // MKS_WIFI_MODULE
case autoLevelGcodeCommand:
uint8_t buf[100];
- strncpy((char *)buf,ret_ta_txt,sizeof(buf));
- update_gcode_command(AUTO_LEVELING_COMMAND_ADDR,buf);
+ strncpy((char *)buf, ret_ta_txt, sizeof(buf));
+ update_gcode_command(AUTO_LEVELING_COMMAND_ADDR, buf);
lv_clear_keyboard();
draw_return_ui();
break;
@@ -175,7 +177,7 @@ static void lv_kb_event_cb(lv_obj_t *kb, lv_event_t event) {
}
else
lv_kb_set_ta(kb, nullptr); // De-assign the text area to hide it cursor if needed
- return;
+ return;
}
// Add the characters to the text area if set
@@ -222,16 +224,16 @@ void lv_draw_keyboard() {
static lv_style_t rel_style, pr_style;
lv_style_copy(&rel_style, &lv_style_btn_rel);
- rel_style.body.radius = 0;
+ rel_style.body.radius = 0;
rel_style.body.border.width = 1;
- rel_style.body.main_color = lv_color_make(0xA9, 0x62, 0x1D);
- rel_style.body.grad_color = lv_color_make(0xA7, 0x59, 0x0E);
+ rel_style.body.main_color = lv_color_make(0xA9, 0x62, 0x1D);
+ rel_style.body.grad_color = lv_color_make(0xA7, 0x59, 0x0E);
lv_style_copy(&pr_style, &lv_style_btn_pr);
- pr_style.body.radius = 0;
+ pr_style.body.radius = 0;
pr_style.body.border.width = 1;
- pr_style.body.main_color = lv_color_make(0x72, 0x42, 0x15);
- pr_style.body.grad_color = lv_color_make(0x6A, 0x3A, 0x0C);
+ pr_style.body.main_color = lv_color_make(0x72, 0x42, 0x15);
+ pr_style.body.grad_color = lv_color_make(0x6A, 0x3A, 0x0C);
// Create a keyboard and apply the styles
lv_obj_t *kb = lv_kb_create(scr, nullptr);
@@ -250,9 +252,9 @@ void lv_draw_keyboard() {
lv_obj_align(ta, nullptr, LV_ALIGN_IN_TOP_MID, 0, 10);
switch (keyboard_value) {
case autoLevelGcodeCommand:
- get_gcode_command(AUTO_LEVELING_COMMAND_ADDR,(uint8_t *)public_buf_m);
- public_buf_m[sizeof(public_buf_m)-1] = 0;
- lv_ta_set_text(ta, public_buf_m);
+ get_gcode_command(AUTO_LEVELING_COMMAND_ADDR, (uint8_t *)public_buf_m);
+ public_buf_m[sizeof(public_buf_m) - 1] = '\0';
+ lv_ta_set_text(ta, public_buf_m);
break;
case GCodeCommand:
// Start with uppercase by default
@@ -260,7 +262,7 @@ void lv_draw_keyboard() {
lv_btnm_set_ctrl_map(kb, kb_ctrl_uc_map);
// Fallthrough
default:
- lv_ta_set_text(ta, "");
+ lv_ta_set_text(ta, "");
}
// Assign the text area to the keyboard
@@ -271,5 +273,4 @@ void lv_clear_keyboard() {
lv_obj_del(scr);
}
-
#endif // HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_language.cpp b/Marlin/src/lcd/extui/mks_ui/draw_language.cpp
index 3db22583aa..3ef8c6a0ee 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_language.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_language.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp
index 8c8dec8913..6fc8704607 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_level_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp b/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp
index 890db3b5cd..57c32c733e 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_machine_para.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp
index 3f43da992c..b14dc6b759 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_machine_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.cpp b/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.cpp
index b927b99b76..60724aa4f3 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_manuaLevel.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp
index 2cccf899b4..1dd6a93d62 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_max_feedrate_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_more.cpp b/Marlin/src/lcd/extui/mks_ui/draw_more.cpp
index e89e2f3e8a..a9c1dc1ec6 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_more.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_more.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -61,22 +62,22 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) {
switch (obj->mks_obj_id) {
case ID_GCODE: lv_clear_more(); lv_draw_gcode(true); break;
#if HAS_USER_ITEM(1)
- case ID_CUSTOM_1: queue.inject_P(PSTR(MAIN_MENU_ITEM_1_GCODE)); break;
+ case ID_CUSTOM_1: queue.inject(F(MAIN_MENU_ITEM_1_GCODE)); break;
#endif
#if HAS_USER_ITEM(2)
- case ID_CUSTOM_2: queue.inject_P(PSTR(MAIN_MENU_ITEM_2_GCODE)); break;
+ case ID_CUSTOM_2: queue.inject(F(MAIN_MENU_ITEM_2_GCODE)); break;
#endif
#if HAS_USER_ITEM(3)
- case ID_CUSTOM_3: queue.inject_P(PSTR(MAIN_MENU_ITEM_3_GCODE)); break;
+ case ID_CUSTOM_3: queue.inject(F(MAIN_MENU_ITEM_3_GCODE)); break;
#endif
#if HAS_USER_ITEM(4)
- case ID_CUSTOM_4: queue.inject_P(PSTR(MAIN_MENU_ITEM_4_GCODE)); break;
+ case ID_CUSTOM_4: queue.inject(F(MAIN_MENU_ITEM_4_GCODE)); break;
#endif
#if HAS_USER_ITEM(5)
- case ID_CUSTOM_5: queue.inject_P(PSTR(MAIN_MENU_ITEM_5_GCODE)); break;
+ case ID_CUSTOM_5: queue.inject(F(MAIN_MENU_ITEM_5_GCODE)); break;
#endif
#if HAS_USER_ITEM(6)
- case ID_CUSTOM_6: queue.inject_P(PSTR(MAIN_MENU_ITEM_6_GCODE)); break;
+ case ID_CUSTOM_6: queue.inject(F(MAIN_MENU_ITEM_6_GCODE)); break;
#endif
case ID_M_RETURN:
lv_clear_more();
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_more.h b/Marlin/src/lcd/extui/mks_ui/draw_more.h
index 74ac7e994d..86ee6f895f 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_more.h
+++ b/Marlin/src/lcd/extui/mks_ui/draw_more.h
@@ -22,7 +22,7 @@
#pragma once
#ifdef __cplusplus
-extern "C" { /* C-declarations for C++ */
+ extern "C" { /* C-declarations for C++ */
#endif
void lv_draw_more();
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp
index b86370e35a..7367cec1c2 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_motor_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp b/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp
index 7a37dc6a15..baa8d48da3 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_move_motor.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp b/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp
index ae770a8925..630bb4efef 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_number_key.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -403,7 +404,7 @@ static void set_value_confirm() {
case z_sensitivity: TERN_(Z_SENSORLESS, stepperZ.homing_threshold(atoi(key_value))); break;
case z2_sensitivity: TERN_(Z2_SENSORLESS, stepperZ2.homing_threshold(atoi(key_value))); break;
}
- gcode.process_subcommands_now_P(PSTR("M500"));
+ gcode.process_subcommands_now(F("M500"));
}
static void event_handler(lv_obj_t *obj, lv_event_t event) {
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp b/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp
index 9b87df1fdf..8be74c6b9a 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_operation.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_pause_message.cpp b/Marlin/src/lcd/extui/mks_ui/draw_pause_message.cpp
index 485e010251..e5f6a5963a 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_pause_message.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_pause_message.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, ADVANCED_PAUSE_FEATURE)
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp b/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp
index 771a98c11f..8e107d4cee 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_pause_position.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp
index 54f0917774..4d657f2394 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -31,10 +32,17 @@
static lv_obj_t *scr;
extern lv_group_t* g;
-static lv_obj_t *buttonType, *buttonStep;
+static lv_obj_t *buttonType, *buttonStep, *buttonAdd, *buttonDec;
static lv_obj_t *labelType;
static lv_obj_t *labelStep;
static lv_obj_t *tempText1;
+static lv_obj_t *btn_pla;
+static lv_obj_t *btn_abs;
+static lv_obj_t *label_abs;
+static lv_obj_t *label_pla;
+
+static lv_style_t btn_style_pre;
+static lv_style_t btn_style_rel;
enum {
ID_P_ADD = 1,
@@ -42,7 +50,9 @@ enum {
ID_P_TYPE,
ID_P_STEP,
ID_P_OFF,
- ID_P_RETURN
+ ID_P_RETURN,
+ ID_P_ABS,
+ ID_P_PLA
};
static void event_handler(lv_obj_t *obj, lv_event_t event) {
@@ -54,10 +64,11 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
thermalManager.temp_hotend[uiCfg.extruderIndex].target += uiCfg.stepHeat;
if (uiCfg.extruderIndex == 0)
max_target = HEATER_0_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
- #if HAS_MULTI_HOTEND
- else
+ else {
+ #if HAS_MULTI_HOTEND
max_target = HEATER_1_MAXTEMP - (WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1);
- #endif
+ #endif
+ }
if (thermalManager.degTargetHotend(uiCfg.extruderIndex) > max_target)
thermalManager.setTargetHotend(max_target, uiCfg.extruderIndex);
thermalManager.start_watching_hotend(uiCfg.extruderIndex);
@@ -82,16 +93,16 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
thermalManager.setTargetHotend(0, uiCfg.extruderIndex);
thermalManager.start_watching_hotend(uiCfg.extruderIndex);
}
- #if HAS_HEATED_BED
- else {
+ else {
+ #if HAS_HEATED_BED
if (thermalManager.degTargetBed() > uiCfg.stepHeat)
thermalManager.temp_bed.target -= uiCfg.stepHeat;
else
thermalManager.setTargetBed(0);
thermalManager.start_watching_bed();
- }
- #endif
+ #endif
+ }
disp_desire_temp();
break;
case ID_P_TYPE:
@@ -101,25 +112,22 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
uiCfg.extruderIndex = 1;
}
else if (uiCfg.extruderIndex == 1) {
- if (TEMP_SENSOR_BED != 0) {
+ if (ENABLED(HAS_HEATED_BED)) {
uiCfg.curTempType = 1;
}
else {
- uiCfg.curTempType = 0;
+ uiCfg.curTempType = 0;
uiCfg.extruderIndex = 0;
}
}
}
else if (uiCfg.extruderIndex == 0) {
- if (TEMP_SENSOR_BED != 0)
- uiCfg.curTempType = 1;
- else
- uiCfg.curTempType = 0;
+ uiCfg.curTempType = TERN(HAS_HEATED_BED, 1, 0);
}
}
else if (uiCfg.curTempType == 1) {
uiCfg.extruderIndex = 0;
- uiCfg.curTempType = 0;
+ uiCfg.curTempType = 0;
}
disp_temp_type();
break;
@@ -137,30 +145,51 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
thermalManager.setTargetHotend(0, uiCfg.extruderIndex);
thermalManager.start_watching_hotend(uiCfg.extruderIndex);
}
- #if HAS_HEATED_BED
- else {
+ else {
+ #if HAS_HEATED_BED
thermalManager.temp_bed.target = 0;
thermalManager.start_watching_bed();
- }
- #endif
+ #endif
+ }
disp_desire_temp();
break;
case ID_P_RETURN:
clear_cur_ui();
draw_return_ui();
break;
+ case ID_P_ABS:
+ if (uiCfg.curTempType == 0)
+ thermalManager.setTargetHotend(PREHEAT_2_TEMP_HOTEND, 0);
+ else if (uiCfg.curTempType == 1)
+ thermalManager.setTargetBed(PREHEAT_2_TEMP_BED);
+ break;
+ case ID_P_PLA:
+ if (uiCfg.curTempType == 0)
+ thermalManager.setTargetHotend(PREHEAT_1_TEMP_HOTEND, 0);
+ else if (uiCfg.curTempType == 1)
+ thermalManager.setTargetBed(PREHEAT_1_TEMP_BED);
+ break;
}
}
+void disp_add_dec() {
+ // Create image buttons
+ buttonAdd = lv_big_button_create(scr, "F:/bmp_Add.bin", preheat_menu.add, INTERVAL_V, titleHeight, event_handler, ID_P_ADD);
+ buttonDec = lv_big_button_create(scr, "F:/bmp_Dec.bin", preheat_menu.dec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_P_DEC);
+}
+
void lv_draw_preHeat() {
scr = lv_screen_create(PRE_HEAT_UI);
// Create image buttons
- lv_big_button_create(scr, "F:/bmp_Add.bin", preheat_menu.add, INTERVAL_V, titleHeight, event_handler, ID_P_ADD);
- lv_big_button_create(scr, "F:/bmp_Dec.bin", preheat_menu.dec, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_P_DEC);
+ disp_add_dec();
buttonType = lv_imgbtn_create(scr, nullptr, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_P_TYPE);
buttonStep = lv_imgbtn_create(scr, nullptr, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_P_STEP);
+
+ if (uiCfg.curTempType == 0) disp_ext_heart();
+ if (uiCfg.curTempType == 1) disp_ext_heart();
+
#if HAS_ROTARY_ENCODER
if (gCfgItems.encoder_enable) {
lv_group_add_obj(g, buttonType);
@@ -183,26 +212,38 @@ void lv_draw_preHeat() {
disp_desire_temp();
}
+void disp_ext_heart() {
+ btn_abs = lv_btn_create(scr, 160, 40, 80, 40, event_handler, ID_P_ABS);
+ btn_pla = lv_btn_create(scr, 260, 40, 80, 40, event_handler, ID_P_PLA);
+
+ lv_btn_set_style(btn_abs, LV_BTN_STYLE_PR, &btn_style_pre);
+ lv_btn_set_style(btn_abs, LV_BTN_STYLE_REL, &btn_style_rel);
+ lv_btn_set_style(btn_pla, LV_BTN_STYLE_PR, &btn_style_pre);
+ lv_btn_set_style(btn_pla, LV_BTN_STYLE_REL, &btn_style_rel);
+
+ label_abs = lv_label_create(btn_abs, PREHEAT_2_LABEL);
+ label_pla = lv_label_create(btn_pla, PREHEAT_1_LABEL);
+}
+
void disp_temp_type() {
if (uiCfg.curTempType == 0) {
if (uiCfg.extruderIndex == 1) {
- lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru2.bin");
+ lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru2.bin");
if (gCfgItems.multiple_language) {
lv_label_set_text(labelType, preheat_menu.ext2);
lv_obj_align(labelType, buttonType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
else {
- lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru1.bin");
+ lv_imgbtn_set_src_both(buttonType, "F:/bmp_extru1.bin");
if (gCfgItems.multiple_language) {
lv_label_set_text(labelType, preheat_menu.ext1);
lv_obj_align(labelType, buttonType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
}
}
-
}
else {
- lv_imgbtn_set_src_both(buttonType, "F:/bmp_bed.bin");
+ lv_imgbtn_set_src_both(buttonType, "F:/bmp_bed.bin");
if (gCfgItems.multiple_language) {
lv_label_set_text(labelType, preheat_menu.hotbed);
lv_obj_align(labelType, buttonType, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h
index 2993a95f00..023f1228b3 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h
+++ b/Marlin/src/lcd/extui/mks_ui/draw_preHeat.h
@@ -30,6 +30,8 @@ void lv_clear_preHeat();
void disp_temp_type();
void disp_step_heat();
void disp_desire_temp();
+void disp_ext_heart();
+void disp_add_dec();
#ifdef __cplusplus
} /* C-declarations for C++ */
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp b/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp
index 5e1dfae5d1..ebad708597 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_print_file.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp b/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp
index e3915adeb0..be596c8740 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_printing.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -159,8 +160,8 @@ void lv_draw_printing() {
buttonZpos = lv_imgbtn_create(scr, "F:/bmp_zpos_state.bin", 350, 86, event_handler, ID_BABYSTEP);
- buttonPause = lv_imgbtn_create(scr, uiCfg.print_state == WORKING ? "F:/bmp_pause.bin" : "F:/bmp_resume.bin", 5, 240, event_handler, ID_PAUSE);
- buttonStop = lv_imgbtn_create(scr, "F:/bmp_stop.bin", 165, 240, event_handler, ID_STOP);
+ buttonPause = lv_imgbtn_create(scr, uiCfg.print_state == WORKING ? "F:/bmp_pause.bin" : "F:/bmp_resume.bin", 5, 240, event_handler, ID_PAUSE);
+ buttonStop = lv_imgbtn_create(scr, "F:/bmp_stop.bin", 165, 240, event_handler, ID_STOP);
buttonOperat = lv_imgbtn_create(scr, "F:/bmp_operate.bin", 325, 240, event_handler, ID_OPTION);
#if HAS_ROTARY_ENCODER
@@ -184,7 +185,7 @@ void lv_draw_printing() {
labelBed = lv_label_create(scr, 250, 196, nullptr);
#endif
- labelFan = lv_label_create(scr, 395, 196, nullptr);
+ labelFan = lv_label_create(scr, 395, 196, nullptr);
labelTime = lv_label_create(scr, 250, 96, nullptr);
labelZpos = lv_label_create(scr, 395, 96, nullptr);
@@ -209,8 +210,8 @@ void lv_draw_printing() {
lv_bar_set_style(bar1, LV_BAR_STYLE_INDIC, &lv_bar_style_indic);
lv_bar_set_anim_time(bar1, 1000);
lv_bar_set_value(bar1, 0, LV_ANIM_ON);
- bar1ValueText = lv_label_create_empty(bar1);
- lv_label_set_text(bar1ValueText,"0%");
+ bar1ValueText = lv_label_create_empty(bar1);
+ lv_label_set_text(bar1ValueText, "0%");
lv_obj_align(bar1ValueText, bar1, LV_ALIGN_CENTER, 0, 0);
disp_ext_temp();
@@ -290,7 +291,7 @@ void setProBarRate() {
if (disp_state == PRINTING_UI) {
lv_bar_set_value(bar1, rate, LV_ANIM_ON);
sprintf_P(public_buf_l, "%d%%", rate);
- lv_label_set_text(bar1ValueText,public_buf_l);
+ lv_label_set_text(bar1ValueText, public_buf_l);
lv_obj_align(bar1ValueText, bar1, LV_ALIGN_CENTER, 0, 0);
if (marlin_state == MF_SD_COMPLETE) {
@@ -306,8 +307,8 @@ void setProBarRate() {
#if HAS_SUICIDE
if (gCfgItems.finish_power_off) {
- gcode.process_subcommands_now_P(PSTR("M1001"));
- queue.inject_P(PSTR("M81"));
+ gcode.process_subcommands_now(F("M1001"));
+ queue.inject(F("M81"));
marlin_state = MF_RUNNING;
}
#endif
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp
index d324d8d7be..1596944bd8 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_ready_print.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -42,7 +43,7 @@
#include "mks_hardware.h"
#include
-#define ICON_POS_Y 38
+#define ICON_POS_Y 260
#define TARGET_LABEL_MOD_Y -36
#define LABEL_MOD_Y 30
@@ -97,6 +98,7 @@ void disp_det_ok() {
lv_obj_set_style(det_info, &det_style);
lv_label_set_text(det_info, "det:ok");
}
+
void disp_det_error() {
det_style.text.color.full = 0xF800;
lv_obj_set_style(det_info, &det_style);
@@ -182,16 +184,16 @@ void lv_draw_ready_print() {
lv_label_set_text(det_info, " ");
}
else {
- lv_big_button_create(scr, "F:/bmp_tool.bin", main_menu.tool, 20, 150, event_handler, ID_TOOL);
- lv_big_button_create(scr, "F:/bmp_set.bin", main_menu.set, 180, 150, event_handler, ID_SET);
- lv_big_button_create(scr, "F:/bmp_printing.bin", main_menu.print, 340, 150, event_handler, ID_PRINT);
+ lv_big_button_create(scr, "F:/bmp_tool.bin", main_menu.tool, 20, 90, event_handler, ID_TOOL);
+ lv_big_button_create(scr, "F:/bmp_set.bin", main_menu.set, 180, 90, event_handler, ID_SET);
+ lv_big_button_create(scr, "F:/bmp_printing.bin", main_menu.print, 340, 90, event_handler, ID_PRINT);
// Monitoring
#if HAS_HOTEND
- buttonExt1 = lv_big_button_create(scr, "F:/bmp_ext1_state.bin", " ", 55, ICON_POS_Y, event_handler, ID_INFO_EXT);
+ buttonExt1 = lv_big_button_create(scr, "F:/bmp_ext1_state.bin", " ", 20, ICON_POS_Y, event_handler, ID_INFO_EXT);
#endif
#if HAS_MULTI_HOTEND
- buttonExt2 = lv_big_button_create(scr, "F:/bmp_ext2_state.bin", " ", 163, ICON_POS_Y, event_handler, ID_INFO_EXT);
+ buttonExt2 = lv_big_button_create(scr, "F:/bmp_ext2_state.bin", " ", 180, ICON_POS_Y, event_handler, ID_INFO_EXT);
#endif
#if HAS_HEATED_BED
buttonBedstate = lv_big_button_create(scr, "F:/bmp_bed_state.bin", " ", TERN(HAS_MULTI_HOTEND, 271, 210), ICON_POS_Y, event_handler, ID_INFO_BED);
@@ -218,22 +220,22 @@ void lv_temp_refr() {
#if HAS_HOTEND
sprintf(public_buf_l, printing_menu.temp1, thermalManager.wholeDegHotend(0), thermalManager.degTargetHotend(0));
lv_label_set_text(labelExt1, public_buf_l);
- lv_obj_align(labelExt1, buttonExt1, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
+ lv_obj_align(labelExt1, buttonExt1, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
#endif
#if HAS_MULTI_HOTEND
sprintf(public_buf_l, printing_menu.temp1, thermalManager.wholeDegHotend(1), thermalManager.degTargetHotend(1));
lv_label_set_text(labelExt2, public_buf_l);
- lv_obj_align(labelExt2, buttonExt2, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
+ lv_obj_align(labelExt2, buttonExt2, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
#endif
#if HAS_HEATED_BED
sprintf(public_buf_l, printing_menu.bed_temp, thermalManager.wholeDegBed(), thermalManager.degTargetBed());
lv_label_set_text(labelBed, public_buf_l);
- lv_obj_align(labelBed, buttonBedstate, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
+ lv_obj_align(labelBed, buttonBedstate, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
#endif
#if HAS_FAN
sprintf_P(public_buf_l, PSTR("%d%%"), (int)thermalManager.fanSpeedPercent(0));
lv_label_set_text(labelFan, public_buf_l);
- lv_obj_align(labelFan, buttonFanstate, LV_ALIGN_OUT_BOTTOM_MID, 0, 0);
+ lv_obj_align(labelFan, buttonFanstate, LV_ALIGN_OUT_RIGHT_MID, 0, 0);
#endif
}
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_set.cpp b/Marlin/src/lcd/extui/mks_ui/draw_set.cpp
index a765d0e58a..aadf0d98f0 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_set.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_set.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -56,7 +57,7 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
if (event != LV_EVENT_RELEASED) return;
if (obj->mks_obj_id == ID_S_CONTINUE) return;
if (obj->mks_obj_id == ID_S_MOTOR_OFF) {
- TERN(HAS_SUICIDE, suicide(), queue.enqueue_now_P(PSTR("M84")));
+ TERN(HAS_SUICIDE, suicide(), queue.enqueue_now(F("M84")));
return;
}
lv_clear_set();
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp
index d4ab028eec..fc920728b4 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_step_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp
index 5117bd4802..60a3562b9d 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_tmc_current_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, HAS_TRINAMIC_CONFIG)
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp
index bf1b9c3459..f25f850c2a 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_tmc_step_mode_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, HAS_STEALTHCHOP)
@@ -103,16 +104,16 @@ void lv_draw_tmc_step_mode_settings() {
scr = lv_screen_create(TMC_MODE_UI, machine_menu.TmcStepModeConfTitle);
bool stealth_X = false, stealth_Y = false, stealth_Z = false, stealth_E0 = false, stealth_E1 = false;
- TERN_(X_HAS_STEALTHCHOP, stealth_X = stepperX.get_stealthChop());
- TERN_(Y_HAS_STEALTHCHOP, stealth_Y = stepperY.get_stealthChop());
- TERN_(Z_HAS_STEALTHCHOP, stealth_Z = stepperZ.get_stealthChop());
+ TERN_(X_HAS_STEALTHCHOP, stealth_X = stepperX.get_stealthChop());
+ TERN_(Y_HAS_STEALTHCHOP, stealth_Y = stepperY.get_stealthChop());
+ TERN_(Z_HAS_STEALTHCHOP, stealth_Z = stepperZ.get_stealthChop());
TERN_(E0_HAS_STEALTHCHOP, stealth_E0 = stepperE0.get_stealthChop());
TERN_(E1_HAS_STEALTHCHOP, stealth_E1 = stepperE1.get_stealthChop());
if (!uiCfg.para_ui_page) {
- buttonXState = lv_screen_menu_item_onoff(scr, machine_menu.X_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_TMC_MODE_X, 0, stealth_X);
- buttonYState = lv_screen_menu_item_onoff(scr, machine_menu.Y_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_TMC_MODE_Y, 1, stealth_Y);
- buttonZState = lv_screen_menu_item_onoff(scr, machine_menu.Z_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_TMC_MODE_Z, 2, stealth_Z);
+ buttonXState = lv_screen_menu_item_onoff(scr, machine_menu.X_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y, event_handler, ID_TMC_MODE_X, 0, stealth_X);
+ buttonYState = lv_screen_menu_item_onoff(scr, machine_menu.Y_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 2, event_handler, ID_TMC_MODE_Y, 1, stealth_Y);
+ buttonZState = lv_screen_menu_item_onoff(scr, machine_menu.Z_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 3, event_handler, ID_TMC_MODE_Z, 2, stealth_Z);
buttonE0State = lv_screen_menu_item_onoff(scr, machine_menu.E0_StepMode, PARA_UI_POS_X, PARA_UI_POS_Y * 4, event_handler, ID_TMC_MODE_E0, 2, stealth_E0);
lv_big_button_create(scr, "F:/bmp_back70x40.bin", machine_menu.next, PARA_UI_TURN_PAGE_POS_X, PARA_UI_TURN_PAGE_POS_Y, event_handler, ID_TMC_MODE_DOWN, true);
}
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tool.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tool.cpp
index 8b9747972d..66b30342b2 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_tool.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_tool.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -59,9 +60,9 @@ static void event_handler(lv_obj_t *obj, lv_event_t event) {
case ID_T_HOME: lv_draw_home(); break;
case ID_T_LEVELING:
#if ENABLED(AUTO_BED_LEVELING_BILINEAR)
- get_gcode_command(AUTO_LEVELING_COMMAND_ADDR,(uint8_t *)public_buf_m);
- public_buf_m[sizeof(public_buf_m)-1] = 0;
- queue.inject_P(PSTR(public_buf_m));
+ get_gcode_command(AUTO_LEVELING_COMMAND_ADDR, (uint8_t *)public_buf_m);
+ public_buf_m[sizeof(public_buf_m) - 1] = 0;
+ queue.inject(public_buf_m);
#else
uiCfg.leveling_first_time = true;
lv_draw_manualLevel();
@@ -88,7 +89,7 @@ void lv_draw_tool() {
lv_big_button_create(scr, "F:/bmp_mov.bin", tool_menu.move, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight, event_handler, ID_T_MOV);
lv_big_button_create(scr, "F:/bmp_zero.bin", tool_menu.home, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight, event_handler, ID_T_HOME);
lv_big_button_create(scr, "F:/bmp_leveling.bin", tool_menu.TERN(AUTO_BED_LEVELING_BILINEAR, autoleveling, leveling), INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_LEVELING);
- lv_big_button_create(scr, "F:/bmp_filamentchange.bin", tool_menu.filament, BTN_X_PIXEL+INTERVAL_V*2,BTN_Y_PIXEL+INTERVAL_H+titleHeight, event_handler,ID_T_FILAMENT);
+ lv_big_button_create(scr, "F:/bmp_filamentchange.bin", tool_menu.filament, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_FILAMENT);
lv_big_button_create(scr, "F:/bmp_more.bin", tool_menu.more, BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_MORE);
lv_big_button_create(scr, "F:/bmp_return.bin", common_menu.text_back, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_T_RETURN);
}
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp b/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp
index e10a07c6de..c7e2d5bc31 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_touch_calibration.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, TOUCH_SCREEN_CALIBRATION)
@@ -70,9 +71,9 @@ void lv_update_touch_calibration_screen() {
if (calibration_stage < CALIBRATION_SUCCESS) {
// handle current state
switch (calibration_stage) {
- case CALIBRATION_TOP_LEFT: str = GET_TEXT(MSG_TOP_LEFT); break;
- case CALIBRATION_BOTTOM_LEFT: str = GET_TEXT(MSG_BOTTOM_LEFT); break;
- case CALIBRATION_TOP_RIGHT: str = GET_TEXT(MSG_TOP_RIGHT); break;
+ case CALIBRATION_TOP_LEFT: str = GET_TEXT(MSG_TOP_LEFT); break;
+ case CALIBRATION_BOTTOM_LEFT: str = GET_TEXT(MSG_BOTTOM_LEFT); break;
+ case CALIBRATION_TOP_RIGHT: str = GET_TEXT(MSG_TOP_RIGHT); break;
case CALIBRATION_BOTTOM_RIGHT: str = GET_TEXT(MSG_BOTTOM_RIGHT); break;
default: break;
}
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp
index c4a21542e2..d6e52606c0 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_tramming_pos_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp
index 68430fe517..c44bdfea93 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -158,7 +159,7 @@ void gCfgItems_init() {
gCfgItems.spi_flash_flag = FLASH_INF_VALID_FLAG;
W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
- //init gcode command
+ // init gcode command
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[0], AUTO_LEVELING_COMMAND_ADDR, 100);
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[1], OTHERS_COMMAND_ADDR_1, 100);
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&custom_gcode_command[2], OTHERS_COMMAND_ADDR_2, 100);
@@ -207,7 +208,7 @@ void ui_cfg_init() {
memset(&ipPara, 0, sizeof(ipPara));
strcpy_P(wifiPara.ap_name, PSTR(WIFI_AP_NAME));
strcpy_P(wifiPara.keyCode, PSTR(WIFI_KEY_CODE));
- //client
+ // client
strcpy_P(ipPara.ip_addr, PSTR(IP_ADDR));
strcpy_P(ipPara.mask, PSTR(IP_MASK));
strcpy_P(ipPara.gate, PSTR(IP_GATE));
@@ -215,7 +216,7 @@ void ui_cfg_init() {
ipPara.dhcp_flag = IP_DHCP_FLAG;
- //AP
+ // AP
strcpy_P(ipPara.dhcpd_ip, PSTR(AP_IP_ADDR));
strcpy_P(ipPara.dhcpd_mask, PSTR(AP_IP_MASK));
strcpy_P(ipPara.dhcpd_gate, PSTR(AP_IP_GATE));
@@ -237,33 +238,33 @@ void update_spi_flash() {
uint8_t command_buf[512];
W25QXX.init(SPI_QUARTER_SPEED);
- //read back the gcode command before erase spi flash
+ // read back the gcode command before erase spi flash
W25QXX.SPI_FLASH_BufferRead((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
}
-void update_gcode_command(int addr,uint8_t *s) {
+void update_gcode_command(int addr, uint8_t *s) {
uint8_t command_buf[512];
W25QXX.init(SPI_QUARTER_SPEED);
- //read back the gcode command before erase spi flash
+ // read back the gcode command before erase spi flash
W25QXX.SPI_FLASH_BufferRead((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
W25QXX.SPI_FLASH_SectorErase(VAR_INF_ADDR);
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&gCfgItems, VAR_INF_ADDR, sizeof(gCfgItems));
switch (addr) {
- case AUTO_LEVELING_COMMAND_ADDR: memcpy(&command_buf[0*100], s, 100); break;
- case OTHERS_COMMAND_ADDR_1: memcpy(&command_buf[1*100], s, 100); break;
- case OTHERS_COMMAND_ADDR_2: memcpy(&command_buf[2*100], s, 100); break;
- case OTHERS_COMMAND_ADDR_3: memcpy(&command_buf[3*100], s, 100); break;
- case OTHERS_COMMAND_ADDR_4: memcpy(&command_buf[4*100], s, 100); break;
+ case AUTO_LEVELING_COMMAND_ADDR: memcpy(&command_buf[0 * 100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_1: memcpy(&command_buf[1 * 100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_2: memcpy(&command_buf[2 * 100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_3: memcpy(&command_buf[3 * 100], s, 100); break;
+ case OTHERS_COMMAND_ADDR_4: memcpy(&command_buf[4 * 100], s, 100); break;
default: break;
}
W25QXX.SPI_FLASH_BufferWrite((uint8_t *)&command_buf, GCODE_COMMAND_ADDR, sizeof(command_buf));
}
-void get_gcode_command(int addr,uint8_t *d) {
+void get_gcode_command(int addr, uint8_t *d) {
W25QXX.init(SPI_QUARTER_SPEED);
W25QXX.SPI_FLASH_BufferRead((uint8_t *)d, addr, 100);
}
@@ -368,14 +369,14 @@ void tft_style_init() {
style_num_text.text.line_space = -5;
lv_style_copy(&style_sel_text, &lv_style_scr);
- style_sel_text.body.main_color = LV_COLOR_BACKGROUND;
- style_sel_text.body.grad_color = LV_COLOR_BACKGROUND;
- style_sel_text.text.color = LV_COLOR_YELLOW;
- style_sel_text.text.sel_color = LV_COLOR_YELLOW;
- style_sel_text.text.font = TERN(HAS_SPI_FLASH_FONT, &gb2312_puhui32, LV_FONT_DEFAULT);
- style_sel_text.line.width = 0;
- style_sel_text.text.letter_space = 0;
- style_sel_text.text.line_space = -5;
+ style_sel_text.body.main_color = LV_COLOR_BACKGROUND;
+ style_sel_text.body.grad_color = LV_COLOR_BACKGROUND;
+ style_sel_text.text.color = LV_COLOR_YELLOW;
+ style_sel_text.text.sel_color = LV_COLOR_YELLOW;
+ style_sel_text.text.font = TERN(HAS_SPI_FLASH_FONT, &gb2312_puhui32, LV_FONT_DEFAULT);
+ style_sel_text.line.width = 0;
+ style_sel_text.text.letter_space = 0;
+ style_sel_text.text.line_space = -5;
lv_style_copy(&style_line, &lv_style_plain);
style_line.line.color = LV_COLOR_MAKE(0x49, 0x54, 0xFF);
style_line.line.width = 1;
@@ -623,7 +624,7 @@ char *creat_title_text() {
if (j >= 400) break;
}
for (i = 0; i < 400; i += 2) {
- p_index = (uint16_t *)(&bmp_public_buf[i]);
+ p_index = (uint16_t *)(&bmp_public_buf[i]);
if (*p_index == 0x0000) *p_index = LV_COLOR_BACKGROUND.full;
}
SPI_TFT.tftio.WriteSequence((uint16_t*)bmp_public_buf, 200);
@@ -1352,7 +1353,7 @@ extern volatile uint32_t systick_uptime_millis;
void print_time_count() {
if ((systick_uptime_millis % 1000) == 0)
- if (print_time.start == 1) print_time.seconds++;
+ if (print_time.start == 1) print_time.seconds++;
}
void LV_TASK_HANDLER() {
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/mks_ui/draw_ui.h
index b7e66a2727..edb513a8b5 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_ui.h
+++ b/Marlin/src/lcd/extui/mks_ui/draw_ui.h
@@ -458,8 +458,8 @@ void tft_style_init();
extern char *creat_title_text();
void preview_gcode_prehandle(char *path);
void update_spi_flash();
-void update_gcode_command(int addr,uint8_t *s);
-void get_gcode_command(int addr,uint8_t *d);
+void update_gcode_command(int addr, uint8_t *s);
+void get_gcode_command(int addr, uint8_t *d);
void lv_serial_capt_hook(void *, uint8_t);
void lv_eom_hook(void *);
#if HAS_GCODE_PREVIEW
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi.cpp b/Marlin/src/lcd/extui/mks_ui/draw_wifi.cpp
index 34b2abd094..c12449f316 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_wifi.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -70,7 +71,7 @@ void lv_draw_wifi() {
if (gCfgItems.wifi_mode_sel == STA_MODEL) {
if (gCfgItems.cloud_enable)
- buttonCloud = lv_imgbtn_create(scr, "F:/bmp_cloud.bin", BTN_X_PIXEL+INTERVAL_V*2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_W_CLOUD);
+ buttonCloud = lv_imgbtn_create(scr, "F:/bmp_cloud.bin", BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_W_CLOUD);
buttonReconnect = lv_imgbtn_create(scr, "F:/bmp_wifi.bin", BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight, event_handler, ID_W_RECONNECT);
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.cpp b/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.cpp
index 2c3957fe9c..6283b1dc58 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h b/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h
index e2005d5cbc..8dbedf832e 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h
+++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_list.h
@@ -28,7 +28,7 @@
void lv_draw_wifi_list();
void lv_clear_wifi_list();
void disp_wifi_list();
-void cutWifiName(char *name, int len,char *outStr);
+void cutWifiName(char *name, int len, char *outStr);
void wifi_scan_handle();
#define NUMBER_OF_PAGE 5
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp
index 8509cc3ac1..e087f74286 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_settings.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.cpp b/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.cpp
index c337d18922..a5207d5669 100644
--- a/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/draw_wifi_tips.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -37,7 +38,7 @@ TIPS_DISP tips_disp;
tips_menu_def tips_menu;
void lv_draw_wifi_tips() {
- static lv_obj_t *text_tips,*wifi_name;
+ static lv_obj_t *text_tips, *wifi_name;
scr = lv_screen_create(WIFI_TIPS_UI, "");
diff --git a/Marlin/src/lcd/extui/mks_ui/gb2312_puhui16.cpp b/Marlin/src/lcd/extui/mks_ui/gb2312_puhui16.cpp
index b1f0e0e1bb..672783f656 100644
--- a/Marlin/src/lcd/extui/mks_ui/gb2312_puhui16.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/gb2312_puhui16.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp
index 5cd1a4c525..4305462162 100644
--- a/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/mks_hardware.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -696,24 +697,28 @@ void disp_char_1624(uint16_t x, uint16_t y, uint8_t c, uint16_t charColor, uint1
}
}
-void disp_string(uint16_t x, uint16_t y, const char * string, uint16_t charColor, uint16_t bkColor) {
- while (*string != '\0') {
- disp_char_1624(x, y, *string, charColor, bkColor);
- string++;
- x += 16;
- }
+void disp_string(uint16_t x, uint16_t y, const char * cstr, uint16_t charColor, uint16_t bkColor) {
+ for (char c; (c = *cstr); cstr++, x += 16)
+ disp_char_1624(x, y, c, charColor, bkColor);
+}
+
+void disp_string(uint16_t x, uint16_t y, FSTR_P const fstr, uint16_t charColor, uint16_t bkColor) {
+ PGM_P pstr = FTOP(fstr);
+ for (char c; (c = pgm_read_byte(pstr)); pstr++, x += 16)
+ disp_char_1624(x, y, c, charColor, bkColor);
}
void disp_assets_update() {
SPI_TFT.LCD_clear(0x0000);
- disp_string(100, 140, "Assets Updating...", 0xFFFF, 0x0000);
+ disp_string(100, 140, F("Assets Updating..."), 0xFFFF, 0x0000);
}
-void disp_assets_update_progress(const char *msg) {
- char buf[30];
- memset(buf, ' ', COUNT(buf));
- strncpy(buf, msg, strlen(msg));
- buf[COUNT(buf)-1] = '\0';
+void disp_assets_update_progress(FSTR_P const fmsg) {
+ static constexpr int buflen = 30;
+ char buf[buflen];
+ memset(buf, ' ', buflen);
+ strncpy_P(buf, FTOP(fmsg), buflen - 1);
+ buf[buflen - 1] = '\0';
disp_string(100, 165, buf, 0xFFFF, 0x0000);
}
diff --git a/Marlin/src/lcd/extui/mks_ui/mks_hardware.h b/Marlin/src/lcd/extui/mks_ui/mks_hardware.h
index 5313265662..c0cdacd963 100644
--- a/Marlin/src/lcd/extui/mks_ui/mks_hardware.h
+++ b/Marlin/src/lcd/extui/mks_ui/mks_hardware.h
@@ -36,6 +36,7 @@
#endif
// String display and assets
-void disp_string(uint16_t x, uint16_t y, const char * string, uint16_t charColor, uint16_t bkColor);
+void disp_string(uint16_t x, uint16_t y, const char * cstr, uint16_t charColor, uint16_t bkColor);
+void disp_string(uint16_t x, uint16_t y, FSTR_P const fstr, uint16_t charColor, uint16_t bkColor);
void disp_assets_update();
-void disp_assets_update_progress(const char *msg);
+void disp_assets_update_progress(FSTR_P const msg);
diff --git a/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp b/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp
index 624626a322..ba2df10ecb 100644
--- a/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/pic_manager.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -39,186 +40,186 @@ extern uint16_t DeviceCode;
extern char *createFilename(char * const buffer, const dir_t &p);
#endif
-static const char assets[][LONG_FILENAME_LENGTH] = {
+static FSTR_P const assets[] = {
// Homing screen
- "bmp_zeroAll.bin",
- "bmp_zero.bin",
- "bmp_zeroX.bin",
- "bmp_zeroY.bin",
- "bmp_zeroZ.bin",
- "bmp_manual_off.bin",
+ F("bmp_zeroAll.bin"),
+ F("bmp_zero.bin"),
+ F("bmp_zeroX.bin"),
+ F("bmp_zeroY.bin"),
+ F("bmp_zeroZ.bin"),
+ F("bmp_manual_off.bin"),
// Tool screen
- "bmp_preHeat.bin",
- "bmp_extruct.bin",
- "bmp_mov.bin",
- "bmp_leveling.bin",
- "bmp_filamentchange.bin",
- "bmp_more.bin",
+ F("bmp_preHeat.bin"),
+ F("bmp_extruct.bin"),
+ F("bmp_mov.bin"),
+ F("bmp_leveling.bin"),
+ F("bmp_filamentchange.bin"),
+ F("bmp_more.bin"),
// Fan screen
- "bmp_Add.bin",
- "bmp_Dec.bin",
- "bmp_speed255.bin",
- "bmp_speed127.bin",
- "bmp_speed0.bin",
+ F("bmp_Add.bin"),
+ F("bmp_Dec.bin"),
+ F("bmp_speed255.bin"),
+ F("bmp_speed127.bin"),
+ F("bmp_speed0.bin"),
- "bmp_bed.bin",
- "bmp_step1_degree.bin",
- "bmp_step5_degree.bin",
- "bmp_step10_degree.bin",
+ F("bmp_bed.bin"),
+ F("bmp_step1_degree.bin"),
+ F("bmp_step5_degree.bin"),
+ F("bmp_step10_degree.bin"),
// Extrusion screen
- "bmp_in.bin",
- "bmp_out.bin",
- "bmp_extru1.bin",
+ F("bmp_in.bin"),
+ F("bmp_out.bin"),
+ F("bmp_extru1.bin"),
#if HAS_MULTI_EXTRUDER
- "bmp_extru2.bin",
+ F("bmp_extru2.bin"),
#endif
- "bmp_speed_high.bin",
- "bmp_speed_slow.bin",
- "bmp_speed_normal.bin",
- "bmp_step1_mm.bin",
- "bmp_step5_mm.bin",
- "bmp_step10_mm.bin",
+ F("bmp_speed_high.bin"),
+ F("bmp_speed_slow.bin"),
+ F("bmp_speed_normal.bin"),
+ F("bmp_step1_mm.bin"),
+ F("bmp_step5_mm.bin"),
+ F("bmp_step10_mm.bin"),
// Select file screen
- "bmp_pageUp.bin",
- "bmp_pageDown.bin",
- "bmp_back.bin", //TODO: why two back buttons? Why not just one? (return / back)
- "bmp_dir.bin",
- "bmp_file.bin",
+ F("bmp_pageUp.bin"),
+ F("bmp_pageDown.bin"),
+ F("bmp_back.bin"), // TODO: why two back buttons? Why not just one? (return / back)
+ F("bmp_dir.bin"),
+ F("bmp_file.bin"),
// Move motor screen
// TODO: 6 equal icons, just in diffenct rotation... it may be optimized too
- "bmp_xAdd.bin",
- "bmp_xDec.bin",
- "bmp_yAdd.bin",
- "bmp_yDec.bin",
- "bmp_zAdd.bin",
- "bmp_zDec.bin",
- "bmp_step_move0_1.bin",
- "bmp_step_move1.bin",
- "bmp_step_move10.bin",
+ F("bmp_xAdd.bin"),
+ F("bmp_xDec.bin"),
+ F("bmp_yAdd.bin"),
+ F("bmp_yDec.bin"),
+ F("bmp_zAdd.bin"),
+ F("bmp_zDec.bin"),
+ F("bmp_step_move0_1.bin"),
+ F("bmp_step_move1.bin"),
+ F("bmp_step_move10.bin"),
// Operation screen
- "bmp_auto_off.bin",
- "bmp_speed.bin",
- "bmp_fan.bin",
- "bmp_temp.bin",
- "bmp_extrude_opr.bin",
- "bmp_move_opr.bin",
+ F("bmp_auto_off.bin"),
+ F("bmp_speed.bin"),
+ F("bmp_fan.bin"),
+ F("bmp_temp.bin"),
+ F("bmp_extrude_opr.bin"),
+ F("bmp_move_opr.bin"),
// Change speed screen
- "bmp_step1_percent.bin",
- "bmp_step5_percent.bin",
- "bmp_step10_percent.bin",
- "bmp_extruct_sel.bin",
- "bmp_mov_changespeed.bin",
- "bmp_mov_sel.bin",
- "bmp_speed_extruct.bin",
+ F("bmp_step1_percent.bin"),
+ F("bmp_step5_percent.bin"),
+ F("bmp_step10_percent.bin"),
+ F("bmp_extruct_sel.bin"),
+ F("bmp_mov_changespeed.bin"),
+ F("bmp_mov_sel.bin"),
+ F("bmp_speed_extruct.bin"),
// Printing screen
- "bmp_pause.bin",
- "bmp_resume.bin",
- "bmp_stop.bin",
- "bmp_ext1_state.bin",
+ F("bmp_pause.bin"),
+ F("bmp_resume.bin"),
+ F("bmp_stop.bin"),
+ F("bmp_ext1_state.bin"),
#if HAS_MULTI_EXTRUDER
- "bmp_ext2_state.bin",
+ F("bmp_ext2_state.bin"),
#endif
- "bmp_bed_state.bin",
- "bmp_fan_state.bin",
- "bmp_time_state.bin",
- "bmp_zpos_state.bin",
- "bmp_operate.bin",
+ F("bmp_bed_state.bin"),
+ F("bmp_fan_state.bin"),
+ F("bmp_time_state.bin"),
+ F("bmp_zpos_state.bin"),
+ F("bmp_operate.bin"),
// Manual Level screen (only if auto level is disabled)
#if DISABLED(AUTO_BED_LEVELING_BILINEAR)
- "bmp_leveling1.bin",
- "bmp_leveling2.bin",
- "bmp_leveling3.bin",
- "bmp_leveling4.bin",
- "bmp_leveling5.bin",
+ F("bmp_leveling1.bin"),
+ F("bmp_leveling2.bin"),
+ F("bmp_leveling3.bin"),
+ F("bmp_leveling4.bin"),
+ F("bmp_leveling5.bin"),
#endif
// Language Select screen
#if HAS_LANG_SELECT_SCREEN
- "bmp_language.bin",
- "bmp_simplified_cn.bin",
- "bmp_simplified_cn_sel.bin",
- "bmp_traditional_cn.bin",
- "bmp_traditional_cn_sel.bin",
- "bmp_english.bin",
- "bmp_english_sel.bin",
- "bmp_russian.bin",
- "bmp_russian_sel.bin",
- "bmp_spanish.bin",
- "bmp_spanish_sel.bin",
- "bmp_french.bin",
- "bmp_french_sel.bin",
- "bmp_italy.bin",
- "bmp_italy_sel.bin",
+ F("bmp_language.bin"),
+ F("bmp_simplified_cn.bin"),
+ F("bmp_simplified_cn_sel.bin"),
+ F("bmp_traditional_cn.bin"),
+ F("bmp_traditional_cn_sel.bin"),
+ F("bmp_english.bin"),
+ F("bmp_english_sel.bin"),
+ F("bmp_russian.bin"),
+ F("bmp_russian_sel.bin"),
+ F("bmp_spanish.bin"),
+ F("bmp_spanish_sel.bin"),
+ F("bmp_french.bin"),
+ F("bmp_french_sel.bin"),
+ F("bmp_italy.bin"),
+ F("bmp_italy_sel.bin"),
#endif // HAS_LANG_SELECT_SCREEN
// G-code preview
#if HAS_GCODE_DEFAULT_VIEW_IN_FLASH
- "bmp_preview.bin",
+ F("bmp_preview.bin"),
#endif
#if HAS_LOGO_IN_FLASH
- "bmp_logo.bin",
+ F("bmp_logo.bin"),
#endif
// Settings screen
- "bmp_about.bin",
- "bmp_eeprom_settings.bin",
- "bmp_machine_para.bin",
- "bmp_function1.bin",
+ F("bmp_about.bin"),
+ F("bmp_eeprom_settings.bin"),
+ F("bmp_machine_para.bin"),
+ F("bmp_function1.bin"),
// Start screen
- "bmp_printing.bin",
- "bmp_set.bin",
- "bmp_tool.bin",
+ F("bmp_printing.bin"),
+ F("bmp_set.bin"),
+ F("bmp_tool.bin"),
// Base icons
- "bmp_arrow.bin",
- "bmp_back70x40.bin",
- "bmp_value_blank.bin",
- "bmp_blank_sel.bin",
- "bmp_disable.bin",
- "bmp_enable.bin",
- "bmp_return.bin",
+ F("bmp_arrow.bin"),
+ F("bmp_back70x40.bin"),
+ F("bmp_value_blank.bin"),
+ F("bmp_blank_sel.bin"),
+ F("bmp_disable.bin"),
+ F("bmp_enable.bin"),
+ F("bmp_return.bin"),
#if ENABLED(MKS_WIFI_MODULE)
// Wifi screen
- "bmp_wifi.bin",
- "bmp_cloud.bin",
+ F("bmp_wifi.bin"),
+ F("bmp_cloud.bin"),
#endif
#if ENABLED(MULTI_VOLUME)
- "bmp_usb_disk.bin",
- // "bmp_usb_disk_sel.bin",
- "bmp_sd.bin",
- // "bmp_sd_sel.bin",
+ F("bmp_usb_disk.bin"),
+ //F("bmp_usb_disk_sel.bin"),
+ F("bmp_sd.bin"),
+ //F("bmp_sd_sel.bin"),
#endif
// Babystep screen
- "bmp_baby_move0_01.bin",
- "bmp_baby_move0_05.bin",
- "bmp_baby_move0_1.bin",
+ F("bmp_baby_move0_01.bin"),
+ F("bmp_baby_move0_05.bin"),
+ F("bmp_baby_move0_1.bin"),
// More screen
- "bmp_custom1.bin",
- "bmp_custom2.bin",
- "bmp_custom3.bin",
- "bmp_custom4.bin",
- "bmp_custom5.bin",
- "bmp_custom6.bin",
- "bmp_custom7.bin"
+ F("bmp_custom1.bin"),
+ F("bmp_custom2.bin"),
+ F("bmp_custom3.bin"),
+ F("bmp_custom4.bin"),
+ F("bmp_custom5.bin"),
+ F("bmp_custom6.bin"),
+ F("bmp_custom7.bin")
};
#if HAS_SPI_FLASH_FONT
- static char fonts[][LONG_FILENAME_LENGTH] = { "FontUNIGBK.bin" };
+ static FSTR_P const fonts[] = { F("FontUNIGBK.bin") };
#endif
uint8_t currentFlashPage = 0;
@@ -264,12 +265,12 @@ const char *bakPath = "_assets";
void spiFlashErase_PIC() {
volatile uint32_t pic_sectorcnt = 0;
W25QXX.init(SPI_QUARTER_SPEED);
- //erase 0x001000 -64K
+ // erase 0x001000 -64K
for (pic_sectorcnt = 0; pic_sectorcnt < (64 - 4) / 4; pic_sectorcnt++) {
watchdog_refresh();
W25QXX.SPI_FLASH_SectorErase(PICINFOADDR + pic_sectorcnt * 4 * 1024);
}
- //erase 64K -- 6M
+ // erase 64K -- 6M
for (pic_sectorcnt = 0; pic_sectorcnt < (PIC_SIZE_xM * 1024 / 64 - 1); pic_sectorcnt++) {
watchdog_refresh();
W25QXX.SPI_FLASH_BlockErase((pic_sectorcnt + 1) * 64 * 1024);
@@ -280,7 +281,7 @@ void spiFlashErase_PIC() {
void spiFlashErase_FONT() {
volatile uint32_t Font_sectorcnt = 0;
W25QXX.init(SPI_QUARTER_SPEED);
- for (Font_sectorcnt = 0; Font_sectorcnt < 32-1; Font_sectorcnt++) {
+ for (Font_sectorcnt = 0; Font_sectorcnt < 32 - 1; Font_sectorcnt++) {
watchdog_refresh();
W25QXX.SPI_FLASH_BlockErase(FONTINFOADDR + Font_sectorcnt * 64 * 1024);
}
@@ -385,9 +386,9 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
longName[j] = '\0';
}
- static int8_t arrayFindStr(const char arr[][LONG_FILENAME_LENGTH], uint8_t arraySize, const char *str) {
+ static int8_t arrayFindStr(FSTR_P const arr[], uint8_t arraySize, const char *str) {
for (uint8_t a = 0; a < arraySize; a++) {
- if (strcasecmp(arr[a], str) == 0)
+ if (strcasecmp(FTOP(arr[a]), str) == 0)
return a;
}
return -1;
@@ -402,7 +403,7 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
#define ASSET_TYPE_TITLE_LOGO 2
#define ASSET_TYPE_G_PREVIEW 3
#define ASSET_TYPE_FONT 4
- static void loadAsset(SdFile &dir, dir_t& entry, const char *fn, int8_t assetType) {
+ static void loadAsset(SdFile &dir, dir_t& entry, FSTR_P const fn, int8_t assetType) {
SdFile file;
char dosFilename[FILENAME_LENGTH];
createFilename(dosFilename, entry);
@@ -428,14 +429,14 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
do {
watchdog_refresh();
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
- Pic_Logo_Write((uint8_t *)fn, public_buf, pbr);
+ Pic_Logo_Write((uint8_t*)fn, public_buf, pbr);
} while (pbr >= BMP_WRITE_BUF_LEN);
}
else if (assetType == ASSET_TYPE_TITLE_LOGO) {
do {
watchdog_refresh();
pbr = file.read(public_buf, BMP_WRITE_BUF_LEN);
- Pic_TitleLogo_Write((uint8_t *)fn, public_buf, pbr);
+ Pic_TitleLogo_Write((uint8_t*)fn, public_buf, pbr);
} while (pbr >= BMP_WRITE_BUF_LEN);
}
else if (assetType == ASSET_TYPE_G_PREVIEW) {
@@ -446,7 +447,7 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
} while (pbr >= BMP_WRITE_BUF_LEN);
}
else if (assetType == ASSET_TYPE_ICON) {
- Pic_Write_Addr = Pic_Info_Write((uint8_t *)fn, pfileSize);
+ Pic_Write_Addr = Pic_Info_Write((uint8_t*)fn, pfileSize);
SPIFlash.beginWrite(Pic_Write_Addr);
#if HAS_SPI_FLASH_COMPRESSION
do {
@@ -491,16 +492,16 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
if (dir.open(&root, assetsPath, O_RDONLY)) {
disp_assets_update();
- disp_assets_update_progress("Erasing pics...");
+ disp_assets_update_progress(F("Erasing pics..."));
watchdog_refresh();
spiFlashErase_PIC();
#if HAS_SPI_FLASH_FONT
- disp_assets_update_progress("Erasing fonts...");
+ disp_assets_update_progress(F("Erasing fonts..."));
watchdog_refresh();
spiFlashErase_FONT();
#endif
- disp_assets_update_progress("Reading files...");
+ disp_assets_update_progress(F("Reading files..."));
dir_t d;
while (dir.readDir(&d, card.longFilename) > 0) {
// If we don't get a long name, but gets a short one, try it
@@ -512,11 +513,11 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) {
int8_t a = arrayFindStr(assets, COUNT(assets), card.longFilename);
if (a >= 0 && a < (int8_t)COUNT(assets)) {
uint8_t assetType = ASSET_TYPE_ICON;
- if (strstr(assets[a], "_logo"))
+ if (strstr_P(FTOP(assets[a]), PSTR("_logo")))
assetType = ASSET_TYPE_LOGO;
- else if (strstr(assets[a], "_titlelogo"))
+ else if (strstr_P(FTOP(assets[a]), PSTR("_titlelogo")))
assetType = ASSET_TYPE_TITLE_LOGO;
- else if (strstr(assets[a], "_preview"))
+ else if (strstr_P(FTOP(assets[a]), PSTR("_preview")))
assetType = ASSET_TYPE_G_PREVIEW;
loadAsset(dir, d, assets[a], assetType);
@@ -564,7 +565,7 @@ void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) {
W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1);
tmp_cnt++;
} while (PIC.name[j++] != '\0');
- //pic size
+ // pic size
W25QXX.SPI_FLASH_BufferRead(PIC.size.bytes, PIC_SIZE_ADDR + i * 4, 4);
if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) {
diff --git a/Marlin/src/lcd/extui/mks_ui/pic_manager.h b/Marlin/src/lcd/extui/mks_ui/pic_manager.h
index 90e2407ab0..95405af1cf 100644
--- a/Marlin/src/lcd/extui/mks_ui/pic_manager.h
+++ b/Marlin/src/lcd/extui/mks_ui/pic_manager.h
@@ -55,19 +55,19 @@
#define PIC_MAX_CN 100 // Maximum number of pictures
#define PIC_NAME_MAX_LEN 50 // Picture name maximum length
-#define LOGO_MAX_SIZE_TFT35 (300*1024)
-#define LOGO_MAX_SIZE_TFT32 (150*1024)
-#define TITLELOGO_MAX_SIZE (150*1024) // Little logo maximum
-#define DEFAULT_VIEW_MAX_SIZE (200*200*2)
-#define FLASH_VIEW_MAX_SIZE (200*200*2)
+#define LOGO_MAX_SIZE_TFT35 (300 * 1024)
+#define LOGO_MAX_SIZE_TFT32 (150 * 1024)
+#define TITLELOGO_MAX_SIZE (150 * 1024) // Little logo maximum
+#define DEFAULT_VIEW_MAX_SIZE (200 * 200 * 2)
+#define FLASH_VIEW_MAX_SIZE (200 * 200 * 2)
-#define PER_PIC_MAX_SPACE_TFT35 (9*1024)
-#define PER_PIC_MAX_SPACE_TFT32 (16*1024)
-#define PER_FONT_MAX_SPACE (16*1024)
+#define PER_PIC_MAX_SPACE_TFT35 (9 * 1024)
+#define PER_PIC_MAX_SPACE_TFT32 (16 * 1024)
+#define PER_FONT_MAX_SPACE (16 * 1024)
#if SPI_FLASH_SIZE == 0x200000
- //pic
- //Robin_pro pic addr
+ // pic
+ // Robin_pro pic addr
#define PIC_NAME_ADDR 0x001000 // Pic information addr
#define PIC_SIZE_ADDR 0x001800 // Pic size information addr
#define PIC_COUNTER_ADDR 0x002000 // Pic total number
@@ -77,8 +77,8 @@
// TFT35
#define DEFAULT_VIEW_ADDR_TFT35 0x1EA070
- #define BAK_VIEW_ADDR_TFT35 (DEFAULT_VIEW_ADDR_TFT35+90*1024)
- #define PIC_ICON_LOGO_ADDR_TFT35 (BAK_VIEW_ADDR_TFT35+80*1024)
+ #define BAK_VIEW_ADDR_TFT35 (DEFAULT_VIEW_ADDR_TFT35 + 90 * 1024)
+ #define PIC_ICON_LOGO_ADDR_TFT35 (BAK_VIEW_ADDR_TFT35 + 80 * 1024)
#define PIC_DATA_ADDR_TFT35 0x003000 // (PIC_ICON_LOGO_ADDR_TFT35+350*1024) //0xC5800
#define PIC_DATA_ADDR_TFT32 0x00F000
@@ -87,11 +87,11 @@
// font
#define FONTINFOADDR 0x150000 // 6M -- font addr
- #define UNIGBK_FLASH_ADDR (FONTINFOADDR+4096) // 4*1024
+ #define UNIGBK_FLASH_ADDR (FONTINFOADDR + 4096) // 4*1024
#else
- //pic
- //Robin_pro pic addr
+ // pic
+ // Robin_pro pic addr
#define PIC_NAME_ADDR 0x003000 // Pic information addr
#define PIC_SIZE_ADDR 0x007000 // Pic size information addr
#define PIC_COUNTER_ADDR 0x008000 // Pic total number
@@ -99,9 +99,9 @@
// TFT35
#define DEFAULT_VIEW_ADDR_TFT35 0xC5800
- #define BAK_VIEW_ADDR_TFT35 (DEFAULT_VIEW_ADDR_TFT35+90*1024)
- #define PIC_ICON_LOGO_ADDR_TFT35 (BAK_VIEW_ADDR_TFT35+80*1024)
- #define PIC_DATA_ADDR_TFT35 (PIC_ICON_LOGO_ADDR_TFT35+350*1024) //0xC5800
+ #define BAK_VIEW_ADDR_TFT35 (DEFAULT_VIEW_ADDR_TFT35 + 90 * 1024)
+ #define PIC_ICON_LOGO_ADDR_TFT35 (BAK_VIEW_ADDR_TFT35 + 80 * 1024)
+ #define PIC_DATA_ADDR_TFT35 (PIC_ICON_LOGO_ADDR_TFT35 + 350 * 1024) // 0xC5800
// TFT32
#define PIC_DATA_ADDR_TFT32 0x02F000
@@ -110,20 +110,20 @@
// font
#define FONTINFOADDR 0x600000 // 6M -- font addr
- #define UNIGBK_FLASH_ADDR (FONTINFOADDR+4096) // 4*1024
- #define GBK_FLASH_ADDR (UNIGBK_FLASH_ADDR+180224) // 176*1024
+ #define UNIGBK_FLASH_ADDR (FONTINFOADDR + 4096) // 4*1024
+ #define GBK_FLASH_ADDR (UNIGBK_FLASH_ADDR + 180224) // 176*1024
#endif
// Flash flag
-#define REFLSHE_FLGA_ADD (0x800000-32)
+#define REFLSHE_FLGA_ADD (0x800000 - 32)
// SD card information first addr
#define VAR_INF_ADDR 0x000000
#define FLASH_INF_VALID_FLAG 0x20201118
-//Store some gcode commands, such as auto leveling commands
-#define GCODE_COMMAND_ADDR VAR_INF_ADDR + 3*1024
+// Store some gcode commands, such as auto leveling commands
+#define GCODE_COMMAND_ADDR VAR_INF_ADDR + 3 * 1024
#define AUTO_LEVELING_COMMAND_ADDR GCODE_COMMAND_ADDR
#define OTHERS_COMMAND_ADDR_1 AUTO_LEVELING_COMMAND_ADDR + 100
#define OTHERS_COMMAND_ADDR_2 OTHERS_COMMAND_ADDR_1 + 100
@@ -155,7 +155,7 @@ typedef struct pic_msg PIC_MSG;
#define FONT_SIZE_xM 2
void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff);
-void Pic_Logo_Read(uint8_t *LogoName,uint8_t *Logo_Rbuff,uint32_t LogoReadsize);
+void Pic_Logo_Read(uint8_t *LogoName, uint8_t *Logo_Rbuff, uint32_t LogoReadsize);
void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size);
uint32_t lv_get_pic_addr(uint8_t *Pname);
void get_spi_flash_data(const char *rec_buf, int offset, int size);
diff --git a/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp b/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp
index 362fdeb43d..8f5b89cf34 100644
--- a/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/printer_operation.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -52,9 +53,9 @@ void printer_state_polling() {
uiCfg.waitEndMoves = 0;
planner.synchronize();
- gcode.process_subcommands_now_P(PSTR("M25"));
+ gcode.process_subcommands_now(F("M25"));
- //save the position
+ // save the position
uiCfg.current_x_position_bak = current_position.x;
uiCfg.current_y_position_bak = current_position.y;
uiCfg.current_z_position_bak = current_position.z;
@@ -92,7 +93,7 @@ void printer_state_polling() {
sprintf_P(public_buf_m, PSTR("G1 Z%s"), dtostrf(uiCfg.current_z_position_bak, 1, 1, str_1));
gcode.process_subcommands_now(public_buf_m);
}
- gcode.process_subcommands_now_P(M24_STR);
+ gcode.process_subcommands_now(FPSTR(M24_STR));
uiCfg.print_state = WORKING;
start_print_time();
diff --git a/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h b/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h
index e1a2a256d9..a41864eec4 100644
--- a/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h
+++ b/Marlin/src/lcd/extui/mks_ui/tft_Language_en.h
@@ -503,7 +503,7 @@
#define TEXT_WIFI_FORGET_EN "Forget Network"
#define TEXT_DISCONECTED_EN "Wi-Fi Connected"
-//wifi-list
+// wifi-list
#define MAIN_BUILT_EN "Build"
#define MAIN_FILAMENT_EN "Filament"
#define MAIN_SETUP_EN "Setup"
@@ -512,7 +512,7 @@
#define FILE_MENU_BUILD_EN "Build"
#define FILE_MENU_MENU_EN " < Menu"
-//about
+// about
#define ABOUT_TITLE_EN "About"
#define ABOUT_BUILT_MACHINES_EN "Built Machines"
#define ABOUT_SPARK_EN "Spark"
@@ -520,52 +520,52 @@
#define ABOUT_SERIAL_NUMBER_EN "Serial Number:"
#define ABOUT_S_NUMBER_EN "DCPLX02KFC6P"
-//set
+// set
#define SETUP_TITLE_EN "Setup"
#define SETUP_WIFI_EN "Wi-Fi"
#define SETUP_MANUAL_IP_EN "Manual IP"
#define SETUP_WIFI_NOT_CONNECTED_EN "Not Connected"
#define SETUP_WIFI_NETWORK_EN "WiFi_Network"
-//build
+// build
#define BUILD_TITLE_EN "Build"
#define BUILD_SD_CARD_EN "SD Card"
#define BUILD_USB_DRIVE_EN "USB Drive"
-//SD card
+// SD card
#define SD_CARD_TITLE_EN "SD Card"
#define SD_CARD_BACK_EN "< Back"
-//USB Drive
+// USB Drive
#define USB_DRIVE_TITLE_EN "USB Drive"
#define USB_DRIVE_BACK_EN "< Back"
#define FILE_PAGES_EN "%d/%d"
#define FILE_NEXT_PAGE_EN "Next Page"
#define MEDIA_SELECT_TITLE_EN "Select Media"
-//BUILD PLATE
+// BUILD PLATE
#define PLATE_TITLE_EN "Build Plate"
#define PLATE_BACK_EN "< Back"
#define PLATE_CONFIRM_EN "Confirm >"
#define PLATE_TIPS_EN "Confirm that there is a Clear\nBuild Plate installed in the\nmachine."
-//build model
+// build model
#define MODEL_TITLE_EN "Build Model"
#define MODEL_START_BUILD_EN "Start Build"
#define MODEL_BACK_EN "< Back"
-//building
+// building
#define BUILDING_TITLE_EN "Building"
#define BUILDING_MENU_EN "Build Menu"
#define BUILDING_COMPLETED "Build\nComplete"
-//building menu
+// building menu
#define BUILDING_MENU_TITLE_EN "Build Menu"
#define BUILDING_MENU_SETTINGS_EN "Build Settings"
#define BUILDING_MENU_PAUSE_EN "Pause Build"
#define BUILDING_MENU_CANCEL_EN "Cancel Build"
#define BUILDING_MENU_BACK_EN "< Back"
-//build settings
+// build settings
#define SETTINGS_TITLE_EN "Build Settings"
#define SETTINGS_NOZZLE_TEMPER_EN "Nozzle Temp:"
#define SETTINGS_NOZZLE_VALUE_EN "%d"
@@ -575,13 +575,13 @@
#define SETTINGS_SPEED_VALUE_EN "Standard"
#define SETTINGS_BACK_EN "< Back"
-//build paused
+// build paused
#define PAUSED_TITLE_EN "Build Paused"
#define PAUSED_RESUME_EN "Resume Build"
#define PAUSED_CANCEL_EN "Cancel Build"
#define PAUSED_BACK_EN "< Back"
-//build cancel
+// build cancel
#define CANCEL_TITLE_EN "Cancel Build"
#define CANCEL_BUILD_EN "Cancel Build"
#define CANCEL_TIPS_EN "Are you sure you want to\ncancel this build? The model\nwill be deleted from this\nmachine. It will need to be\nresent from your computer\nbefore it can be built in the\nfuture."
@@ -589,31 +589,31 @@
#define CANCEL_BUILD_DISPLAY_EN "Build\nCanceled"
#define CANCEL_OVER_PLATE_TIPS_EN "Confirm that the Build Plate\nhas been removed from the\nmachine."
-//filament model enter
+// filament model enter
#define FILAMENT_MODEL_ENTER_TITLE_EN "Model-PLA"
#define FILAMENT_MODEL_ENTER_BACK_EN "< Back"
#define FILAMENT_MODEL_ENTER_BEGIN_EN "Begin >"
#define FILAMENT_MODEL_ENTER_TIPS_EN "The Model Filament spool\ncompartment is located on\nthe right side of the machine."
-//filament model PLA
+// filament model PLA
#define FILAMENT_MODEL_PLA_TITLE_EN "Model-PLA"
#define FILAMENT_PLA_LOAD_TITLE_EN "Load Filament"
#define FILAMENT_PLA_UNLOAD_TITLE_EN "Unload Filament"
#define FILAMENT_MODEL_PLA_LOAD_EN "Load Filament"
#define FILAMENT_MODEL_PLA_UNLOAD_EN "Unload Filament"
-//filament support enter
+// filament support enter
#define FILAMENT_SUPPORT_ENTER_TITLE_EN "Support-PVA"
#define FILAMENT_SUPPORT_ENTER_BACK_EN "< Back"
#define FILAMENT_SUPPORT_ENTER_BEGIN_EN "Begin >"
#define FILAMENT_SUPPORT_ENTER_TIPS_EN "The Support Filament spool\ncompartment is located on\nthe left side of the machine."
-//filament heating
+// filament heating
#define FILAMENT_HEATING_LOAD_TITLE_EN "Load Filament"
#define FILAMENT_HEATING_UNLOAD_TITLE_EN "Unload Filament"
#define FILAMENT_HEATING_CANCEL_EN "< Cancel"
#define FILAMENT_HEATING_MATERIAL_EN "Material:"
#define FILAMENT_HEATING_PLA_EN "Model-PLA"
#define FILAMENT_HEATING_TIPS_EN "Print head is heating..."
-//rotate left
+// rotate left
#define ROTATE_LEFT_LOAD_TITLE_EN "Load Filament"
#define ROTATE_LEFT_UNLOAD_TITLE_EN "Unload Filament"
#define ROTATE_LEFT_CANCEL_EN "< Cancel"
@@ -622,7 +622,7 @@
#define ROTATE_LEFT_NEXT_EN "Next >"
#define ROTATE_LEFT_TIPS_EN "Rotate extruder selection\ndial to the left."
-//hang spool
+// hang spool
#define HANG_SPOOL_TITLE_EN "Load Filament"
#define HANG_SPOOL_PREVIOUS_EN "< Previous"
#define HANG_SPOOL_MATERIAL_EN "Material:"
@@ -630,7 +630,7 @@
#define HANG_SPOOL_NEXT_EN "Next >"
#define HANG_SPOOL_TIPS_EN "Hang the spool in the spool\ncompartment as shown."
-//feed filament
+// feed filament
#define FEED_FILAMENT_TITLE_EN "Load Filament"
#define FEED_FILAMENT_PREVIOUS_EN "< Previous"
#define FEED_FILAMENT_MATERIAL_EN "Material:"
@@ -638,7 +638,7 @@
#define FEED_FILAMENT_NEXT_EN "Next >"
#define FEED_FILAMENT_TIPS_EN "Feed filament into extruder\nup beyond the gears."
-//feed filament
+// feed filament
#define ROTATE_UP_TITLE_EN "Load Filament"
#define ROTATE_UP_PREVIOUS_EN "< Previous"
#define ROTATE_UP_MATERIAL_EN "Material:"
@@ -646,20 +646,20 @@
#define ROTATE_UP_NEXT_EN "Next >"
#define ROTATE_UP_TIPS_EN "Rotate extruder selection\ndial up."
-//filament begin
+// filament begin
#define FEED_BEGIN_TITLE_EN "Load Filament"
#define FEED_BEGIN_MATERIAL_EN "Material:"
#define FEED_BEGIN_PLA_EN "Model-PLA"
#define FEED_BEGIN_NEXT_EN "Next >"
#define FEED_BEGIN_TIPS_EN "Press Next when filament\nbegins to extrude."
-//filament finish
+// filament finish
#define FEED_FINISH_TITLE_EN "Load Filament"
#define FEED_FINISH_MATERIAL_EN "Material:"
#define FEED_FINISH_PLA_EN "Model-PLA"
#define FEED_FINISH_NEXT_EN "Finish >"
#define FEED_FINISH_TIPS_EN "Remove filament from the\nnozzle and discard."
-//fiament remove
+// fiament remove
#define REMOVE_SPOOL_TITLE_EN "Unload Filament"
#define REMOVE_SPOOL_PREVIOUS_EN "< Previous"
#define REMOVE_SPOOL_FINISH_EN "Finish >"
@@ -671,7 +671,7 @@
#define LOAD_FINISH_EN "Load\nFilament\nComplete"
#define UNLOAD_FINISH_EN "Unload\nFilament\nComplete"
-//manual ip
+// manual ip
#define MANUAL_IP_TITLE_EN "Manual IP"
#define MANUAL_IP_CANCEL_EN "< Cancel"
#define MANUAL_IP_APPLY_EN "Join >"
diff --git a/Marlin/src/lcd/extui/mks_ui/tft_Language_ru.h b/Marlin/src/lcd/extui/mks_ui/tft_Language_ru.h
index fd52f2cfa9..12c600f088 100644
--- a/Marlin/src/lcd/extui/mks_ui/tft_Language_ru.h
+++ b/Marlin/src/lcd/extui/mks_ui/tft_Language_ru.h
@@ -215,7 +215,7 @@
#define AUTO_SHUTDOWN_RU "авто-откл"
#define MANUAL_SHUTDOWN_RU "ручн-откл"
-#define DIALOG_CONFIRM_RU "да"//"подтвердить"
+#define DIALOG_CONFIRM_RU "да" // "подтвердить"
#define DIALOG_CANCLE_RU "отмена"
#define DIALOG_OK_RU "да"
#define DIALOG_RESET_RU "сброс"
diff --git a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
index 79990ea42a..837d7470d6 100644
--- a/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/tft_lvgl_configuration.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
@@ -240,8 +241,7 @@ void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * co
SPI_TFT.setWindow((uint16_t)area->x1, (uint16_t)area->y1, width, height);
- for (uint16_t i = 0; i < height; i++)
- SPI_TFT.tftio.WriteSequence((uint16_t*)(color_p + width * i), width);
+ SPI_TFT.tftio.WriteSequence((uint16_t*)color_p, width * height);
lv_disp_flush_ready(disp); // Indicate you are ready with the flushing
@@ -264,9 +264,7 @@ unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) {
}
static bool get_point(int16_t *x, int16_t *y) {
- bool is_touched = touch.getRawPoint(x, y);
-
- if (!is_touched) return false;
+ if (!touch.getRawPoint(x, y)) return false;
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
const calibrationState state = touch_calibration.get_calibration_state();
@@ -286,34 +284,26 @@ static bool get_point(int16_t *x, int16_t *y) {
bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) {
static int16_t last_x = 0, last_y = 0;
- static uint8_t last_touch_state = LV_INDEV_STATE_REL;
- static int32_t touch_time1 = 0;
- uint32_t tmpTime, diffTime = 0;
-
- tmpTime = millis();
- diffTime = getTickDiff(tmpTime, touch_time1);
- if (diffTime > 20) {
- if (get_point(&last_x, &last_y)) {
-
- if (last_touch_state == LV_INDEV_STATE_PR) return false;
- data->state = LV_INDEV_STATE_PR;
-
- // Set the coordinates (if released use the last-pressed coordinates)
+ if (get_point(&last_x, &last_y)) {
+ #if TFT_ROTATION == TFT_ROTATE_180
+ data->point.x = TFT_WIDTH - last_x;
+ data->point.y = TFT_HEIGHT - last_y;
+ #else
data->point.x = last_x;
data->point.y = last_y;
-
- last_x = last_y = 0;
- last_touch_state = LV_INDEV_STATE_PR;
- }
- else {
- if (last_touch_state == LV_INDEV_STATE_PR)
- data->state = LV_INDEV_STATE_REL;
- last_touch_state = LV_INDEV_STATE_REL;
- }
-
- touch_time1 = tmpTime;
+ #endif
+ data->state = LV_INDEV_STATE_PR;
+ }
+ else {
+ #if TFT_ROTATION == TFT_ROTATE_180
+ data->point.x = TFT_WIDTH - last_x;
+ data->point.y = TFT_HEIGHT - last_y;
+ #else
+ data->point.x = last_x;
+ data->point.y = last_y;
+ #endif
+ data->state = LV_INDEV_STATE_REL;
}
-
return false; // Return `false` since no data is buffering or left to read
}
@@ -332,7 +322,7 @@ bool my_mousewheel_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) {
extern uint8_t currentFlashPage;
-//spi_flash
+// spi_flash
uint32_t pic_read_base_addr = 0, pic_read_addr_offset = 0;
lv_fs_res_t spi_flash_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) {
static char last_path_name[30];
@@ -381,7 +371,7 @@ lv_fs_res_t spi_flash_tell_cb(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p
return LV_FS_RES_OK;
}
-//sd
+// sd
char *cur_namefff;
uint32_t sd_read_base_addr = 0, sd_read_addr_offset = 0, small_image_size = 409;
lv_fs_res_t sd_open_cb (lv_fs_drv_t * drv, void * file_p, const char * path, lv_fs_mode_t mode) {
diff --git a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp
index 0771a31cb4..c69ccf6587 100644
--- a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if HAS_TFT_LVGL_UI
diff --git a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h
index 79faad74e2..0d0285f322 100644
--- a/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h
+++ b/Marlin/src/lcd/extui/mks_ui/tft_multi_language.h
@@ -48,7 +48,7 @@ void disp_language_init();
#define MULTI_LANGUAGE_ENABLE 1
#define MULTI_LANGUAGE_DISABLE 0
-typedef struct machine_common_disp{
+typedef struct machine_common_disp {
const char *default_value;
const char *next;
@@ -742,7 +742,7 @@ typedef struct pause_msg_disp {
extern pause_msg_def pause_msg_menu;
-typedef struct eeprom_disp{
+typedef struct eeprom_disp {
const char *title;
const char *store;
const char *read;
diff --git a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h
index 87de27c044..cf32bad396 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h
+++ b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32.h
@@ -37,7 +37,7 @@ class WifiSerial {
// Set up / tear down
void begin(uint32_t baud);
- void begin(uint32_t baud,uint8_t config);
+ void begin(uint32_t baud, uint8_t config);
void end();
int available(void);
int read(void);
@@ -51,13 +51,13 @@ class WifiSerial {
bool isHalfDuplex(void) const;
void enableHalfDuplexRx(void);
- private:
- void setRx(uint32_t _rx);
- void setTx(uint32_t _tx);
- void setRx(PinName _rx);
- void setTx(PinName _tx);
- void init(PinName _rx, PinName _tx);
- bool _rx_enabled;
- uint8_t _config;
- unsigned long _baud;
+ private:
+ void setRx(uint32_t _rx);
+ void setTx(uint32_t _tx);
+ void setRx(PinName _rx);
+ void setTx(PinName _tx);
+ void init(PinName _rx, PinName _tx);
+ bool _rx_enabled;
+ uint8_t _config;
+ unsigned long _baud;
};
diff --git a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.cpp b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.cpp
index 75830ce1bd..654fca6cb3 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.cpp
@@ -68,7 +68,8 @@ WifiSerial::WifiSerial(usart_dev *usart_device, uint8 tx_pin, uint8 rx_pin) {
#define disable_timer_if_necessary(dev, ch) NOOP
static void usart_enable_no_irq(usart_dev *usart_device, bool with_irq) {
- if (with_irq) usart_enable(usart_device);
+ if (with_irq)
+ usart_enable(usart_device);
else {
usart_reg_map *regs = usart_device->regs;
regs->CR1 |= (USART_CR1_TE | USART_CR1_RE); // Preserve word length, etc. Use 'or' to preserve USART_CR1_M_8N1
diff --git a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.h b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.h
index 6af2f9743b..d0fee4e3ac 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.h
+++ b/Marlin/src/lcd/extui/mks_ui/wifiSerial_STM32F1.h
@@ -39,18 +39,18 @@ class WifiSerial {
/* Set up/tear down */
void begin(uint32 baud);
- void begin(uint32 baud,uint8_t config);
+ void begin(uint32 baud, uint8_t config);
void end();
int available();
int read();
int write(uint8_t);
inline void wifi_usart_irq(usart_reg_map *regs) {
/* Handling RXNEIE and TXEIE interrupts.
- * RXNE signifies availability of a byte in DR.
- *
- * See table 198 (sec 27.4, p809) in STM document RM0008 rev 15.
- * We enable RXNEIE.
- */
+ * RXNE signifies availability of a byte in DR.
+ *
+ * See table 198 (sec 27.4, p809) in STM document RM0008 rev 15.
+ * We enable RXNEIE.
+ */
if ((regs->CR1 & USART_CR1_RXNEIE) && (regs->SR & USART_SR_RXNE)) {
#ifdef USART_SAFE_INSERT
/* If the buffer is full and the user defines USART_SAFE_INSERT,
@@ -63,15 +63,15 @@ class WifiSerial {
}
/* TXE signifies readiness to send a byte to DR. */
if ((regs->CR1 & USART_CR1_TXEIE) && (regs->SR & USART_SR_TXE)) {
- if (!rb_is_empty(this->usart_device->wb))
- regs->DR=rb_remove(this->usart_device->wb);
- else
- regs->CR1 &= ~((uint32)USART_CR1_TXEIE); // disable TXEIE
+ if (!rb_is_empty(this->usart_device->wb))
+ regs->DR = rb_remove(this->usart_device->wb);
+ else
+ regs->CR1 &= ~((uint32)USART_CR1_TXEIE); // disable TXEIE
}
}
int wifi_rb_is_full();
struct usart_dev *usart_device;
- private:
+ private:
uint8 tx_pin;
uint8 rx_pin;
};
diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp
index 998393ebd5..20d4720d00 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, MKS_WIFI_MODULE)
@@ -54,13 +55,13 @@
#define WIFI_IO1_SET() WRITE(WIFI_IO1_PIN, HIGH);
#define WIFI_IO1_RESET() WRITE(WIFI_IO1_PIN, LOW);
-extern uint8_t Explore_Disk (char *path , uint8_t recu_level);
+extern uint8_t Explore_Disk(char *path, uint8_t recu_level);
extern uint8_t commands_in_queue;
extern uint8_t sel_id;
-extern unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick);
+extern unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick);
-volatile SZ_USART_FIFO WifiRxFifo;
+volatile SZ_USART_FIFO WifiRxFifo;
#define WAIT_ESP_TRANS_TIMEOUT_TICK 10500
@@ -486,7 +487,7 @@ static bool longName2DosName(const char *longName, char *dosName) {
if (len > UDISKBUFLEN) return 0;
if (wifiDmaRcvFifo.state[tmpW] == udisk_buf_empty) {
- const int timeOut = 2000; //millisecond
+ const int timeOut = 2000; // millisecond
dmaTransmitBegin();
if (HAL_DMA_PollForTransferCustomize(&wifiUsartDMArx, HAL_DMA_FULL_TRANSFER, timeOut) == HAL_OK) {
memcpy((unsigned char *) wifiDmaRcvFifo.bufferAddr[tmpW], (uint8_t *)bufToCpy, len);
@@ -611,14 +612,14 @@ int package_to_wifi(WIFI_RET_TYPE type, uint8_t *buf, int len) {
return 0;
}
- if (len > 0) {
+ if (len > 0) {
memcpy(&buf_to_wifi[4 + index_to_wifi], buf, len);
index_to_wifi += len;
if (index_to_wifi < 1)
return 0;
- if (buf_to_wifi[index_to_wifi + 3] == '\n') {
+ if (buf_to_wifi[index_to_wifi + 3] == '\n') {
// mask "wait" "busy" "X:"
if ( ((buf_to_wifi[4] == 'w') && (buf_to_wifi[5] == 'a') && (buf_to_wifi[6] == 'i') && (buf_to_wifi[7] == 't'))
|| ((buf_to_wifi[4] == 'b') && (buf_to_wifi[5] == 'u') && (buf_to_wifi[6] == 's') && (buf_to_wifi[7] == 'y'))
@@ -767,7 +768,7 @@ int write_to_file(char *buf, int len) {
if (res == -1) {
ZERO(public_buf);
file_writer.write_index = 0;
- return -1;
+ return -1;
}
return 0;
@@ -839,7 +840,7 @@ uint8_t Explore_Disk(char *path , uint8_t recu_level) {
static void wifi_gcode_exec(uint8_t *cmd_line) {
int8_t tempBuf[100] = { 0 };
uint8_t *tmpStr = 0;
- int cmd_value;
+ int cmd_value;
volatile int print_rate;
if (strchr((char *)cmd_line, '\n') && (strchr((char *)cmd_line, 'G') || strchr((char *)cmd_line, 'M') || strchr((char *)cmd_line, 'T'))) {
tmpStr = (uint8_t *)strchr((char *)cmd_line, '\n');
@@ -987,11 +988,11 @@ static void wifi_gcode_exec(uint8_t *cmd_line) {
if (card.isFileOpen()) {
//saved_feedrate_percentage = feedrate_percentage;
feedrate_percentage = 100;
- #if EXTRUDERS
+ #if HAS_EXTRUDERS
planner.flow_percentage[0] = 100;
planner.e_factor[0] = planner.flow_percentage[0] * 0.01f;
#endif
- #if EXTRUDERS == 2
+ #if HAS_MULTI_EXTRUDER
planner.flow_percentage[1] = 100;
planner.e_factor[1] = planner.flow_percentage[1] * 0.01f;
#endif
@@ -1168,7 +1169,7 @@ static void wifi_gcode_exec(uint8_t *cmd_line) {
}
send_to_wifi((uint8_t *)tempBuf, strlen((char *)tempBuf));
- queue.enqueue_one_P(PSTR("M105"));
+ queue.enqueue_one(F("M105"));
break;
case 992:
@@ -1491,7 +1492,7 @@ static void file_first_msg_handle(uint8_t * msg, uint16_t msgLen) {
memcpy(file_writer.saveFileName, msg + 5, fileNameLen);
- utf8_2_unicode(file_writer.saveFileName,fileNameLen);
+ utf8_2_unicode(file_writer.saveFileName, fileNameLen);
ZERO(public_buf);
@@ -1744,7 +1745,7 @@ int32_t readWifiFifo(uint8_t *retBuf, uint32_t bufLen) {
void stopEspTransfer() {
if (wifi_link_state == WIFI_TRANS_FILE)
- wifi_link_state = WIFI_CONNECTED;
+ wifi_link_state = WIFI_CONNECTED;
TERN_(SDSUPPORT, card.closefile());
@@ -2014,10 +2015,10 @@ void get_wifi_commands() {
if (gpos) {
switch (strtol(gpos + 1, nullptr, 10)) {
case 0 ... 1:
- TERN_(ARC_SUPPORT, case 2 ... 3:)
- TERN_(BEZIER_CURVE_SUPPORT, case 5:)
+ TERN_(ARC_SUPPORT, case 2 ... 3:)
+ TERN_(BEZIER_CURVE_SUPPORT, case 5:)
SERIAL_ECHOLNPGM(STR_ERR_STOPPED);
- LCD_MESSAGEPGM(MSG_STOPPED);
+ LCD_MESSAGE(MSG_STOPPED);
break;
}
}
@@ -2029,12 +2030,12 @@ void get_wifi_commands() {
wait_for_heatup = false;
TERN_(HAS_LCD_MENU, wait_for_user = false);
}
- if (strcmp(command, "M112") == 0) kill(M112_KILL_STR, nullptr, true);
+ if (strcmp(command, "M112") == 0) kill(FPSTR(M112_KILL_STR), nullptr, true);
if (strcmp(command, "M410") == 0) quickstop_stepper();
#endif
// Add the command to the queue
- queue.enqueue_one_P(wifi_line_buffer);
+ queue.enqueue_one(wifi_line_buffer);
}
else if (wifi_read_count >= MAX_CMD_SIZE - 1) {
diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_module.h b/Marlin/src/lcd/extui/mks_ui/wifi_module.h
index d02716e435..15b90ab367 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifi_module.h
+++ b/Marlin/src/lcd/extui/mks_ui/wifi_module.h
@@ -56,7 +56,7 @@
#define UDISKBUFLEN 1024
-typedef enum{
+typedef enum {
udisk_buf_empty = 0,
udisk_buf_full,
} UDISK_DATA_BUFFER_STATE;
@@ -74,41 +74,41 @@ typedef struct {
typedef struct {
uint8_t flag; // 0x0: no error; 0x01: error
- uint32_t start_tick; //error start time
+ uint32_t start_tick; // error start time
uint32_t now_tick;
} WIFI_TRANS_ERROR;
extern volatile WIFI_TRANS_ERROR wifiTransError;
typedef struct {
- char ap_name[32]; //wifi-name
- char keyCode[64]; //wifi password
- int decodeType;
- int baud;
- int mode;
+ char ap_name[32]; // wifi-name
+ char keyCode[64]; // wifi password
+ int decodeType;
+ int baud;
+ int mode;
} WIFI_PARA;
typedef struct {
char state;
char hostUrl[96];
- int port;
+ int port;
char id[21];
} CLOUD_PARA;
typedef struct {
- char dhcp_flag;
- char ip_addr[16];
- char mask[16];
- char gate[16];
- char dns[16];
+ char dhcp_flag;
+ char ip_addr[16];
+ char mask[16];
+ char gate[16];
+ char dns[16];
- char dhcpd_flag;
- char dhcpd_ip[16];
- char dhcpd_mask[16];
- char dhcpd_gate[16];
- char dhcpd_dns[16];
- char start_ip_addr[16];
- char end_ip_addr[16];
+ char dhcpd_flag;
+ char dhcpd_ip[16];
+ char dhcpd_mask[16];
+ char dhcpd_gate[16];
+ char dhcpd_dns[16];
+ char start_ip_addr[16];
+ char end_ip_addr[16];
} IP_PARA;
typedef enum {
@@ -144,8 +144,8 @@ extern volatile TRANSFER_STATE esp_state;
typedef struct {
char buf[20][80];
- int rd_index;
- int wt_index;
+ int rd_index;
+ int wt_index;
} QUEUE;
typedef enum {
diff --git a/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp b/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp
index 4a5f08edaa..675e0eb666 100644
--- a/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp
+++ b/Marlin/src/lcd/extui/mks_ui/wifi_upload.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#include "../../../inc/MarlinConfigPre.h"
#if BOTH(HAS_TFT_LVGL_UI, MKS_WIFI_MODULE)
@@ -35,7 +36,7 @@
#define WIFI_IO1_SET() WRITE(WIFI_IO1_PIN, HIGH);
#define WIFI_IO1_RESET() WRITE(WIFI_IO1_PIN, LOW);
-extern SZ_USART_FIFO WifiRxFifo;
+extern SZ_USART_FIFO WifiRxFifo;
extern int readUsartFifo(SZ_USART_FIFO *fifo, int8_t *buf, int32_t len);
extern int writeUsartFifo(SZ_USART_FIFO * fifo, int8_t * buf, int32_t len);
@@ -300,7 +301,7 @@ EspUploadResult readPacket(uint8_t op, uint32_t *valp, size_t *bodyLen, uint32_t
return stat;
}
else if (state == header) {
- //store the header byte
+ // store the header byte
hdr[hdrIdx++] = c;
if (hdrIdx >= headerLength) {
// get the body length, prepare a buffer for it
@@ -422,7 +423,7 @@ EspUploadResult doCommand(uint8_t op, const uint8_t *data, size_t dataLen, uint3
EspUploadResult Sync(uint16_t timeout) {
uint8_t buf[36];
EspUploadResult stat;
- int i ;
+ int i;
// compose the data for the sync attempt
memset(buf, 0x55, sizeof(buf));
@@ -448,8 +449,8 @@ EspUploadResult Sync(uint16_t timeout) {
if (rc != success || bodyLen != 2) break;
}
}
- //DEBUG
- //else debug//printf("stat=%d\n", (int)stat);
+ // DEBUG
+ //else printf("stat=%d\n", (int)stat);
return stat;
}
diff --git a/Marlin/src/lcd/extui/nextion/FileNavigator.cpp b/Marlin/src/lcd/extui/nextion/FileNavigator.cpp
index 07f1256ded..6730370a94 100644
--- a/Marlin/src/lcd/extui/nextion/FileNavigator.cpp
+++ b/Marlin/src/lcd/extui/nextion/FileNavigator.cpp
@@ -83,46 +83,46 @@ void FileNavigator::getFiles(uint16_t index) {
#endif
if (currentindex == 0 && folderdepth > 0) { // Add a link to go up a folder
- nextion.SendtoTFT(PSTR("vis p0,1"));
- nextion.SendtoTFT(PSTR("\xFF\xFF\xFF"));
+ nextion.SendtoTFT(F("vis p0,1"));
+ nextion.SendtoTFT(F("\xFF\xFF\xFF"));
SEND_VAL("tmpUP", "0");
files--;
}
else {
- nextion.SendtoTFT(PSTR("vis p0,0"));
- nextion.SendtoTFT(PSTR("\xFF\xFF\xFF"));
+ nextion.SendtoTFT(F("vis p0,0"));
+ nextion.SendtoTFT(F("\xFF\xFF\xFF"));
}
for (uint16_t seek = currentindex; seek < currentindex + files; seek++) {
if (filelist.seek(seek)) {
- nextion.SendtoTFT(PSTR("s"));
+ nextion.SendtoTFT(F("s"));
LCD_SERIAL.print(fcnt);
- nextion.SendtoTFT(PSTR(".txt=\""));
+ nextion.SendtoTFT(F(".txt=\""));
if (filelist.isDir()) {
LCD_SERIAL.print(filelist.shortFilename());
- nextion.SendtoTFT(PSTR("/\""));
- nextion.SendtoTFT(PSTR("\xFF\xFF\xFF"));
+ nextion.SendtoTFT(F("/\""));
+ nextion.SendtoTFT(F("\xFF\xFF\xFF"));
- nextion.SendtoTFT(PSTR("l"));
+ nextion.SendtoTFT(F("l"));
LCD_SERIAL.print(fcnt);
- nextion.SendtoTFT(PSTR(".txt=\""));
+ nextion.SendtoTFT(F(".txt=\""));
LCD_SERIAL.print(filelist.filename());
- nextion.SendtoTFT(PSTR("\""));
- nextion.SendtoTFT(PSTR("\xFF\xFF\xFF"));
+ nextion.SendtoTFT(F("\""));
+ nextion.SendtoTFT(F("\xFF\xFF\xFF"));
SEND_PCO2("l", fcnt, "1055");
}
else {
LCD_SERIAL.print(currentfoldername);
LCD_SERIAL.print(filelist.shortFilename());
- nextion.SendtoTFT(PSTR("\""));
- nextion.SendtoTFT(PSTR("\xFF\xFF\xFF"));
+ nextion.SendtoTFT(F("\""));
+ nextion.SendtoTFT(F("\xFF\xFF\xFF"));
- nextion.SendtoTFT(PSTR("l"));
+ nextion.SendtoTFT(F("l"));
LCD_SERIAL.print(fcnt);
- nextion.SendtoTFT(PSTR(".txt=\""));
+ nextion.SendtoTFT(F(".txt=\""));
LCD_SERIAL.print(filelist.longFilename());
- nextion.SendtoTFT(PSTR("\""));
- nextion.SendtoTFT(PSTR("\xFF\xFF\xFF"));
+ nextion.SendtoTFT(F("\""));
+ nextion.SendtoTFT(F("\xFF\xFF\xFF"));
}
fcnt++;
fseek = seek;
diff --git a/Marlin/src/lcd/extui/nextion/nextion_extui.cpp b/Marlin/src/lcd/extui/nextion/nextion_extui.cpp
index a825bd502f..c19d3aee46 100644
--- a/Marlin/src/lcd/extui/nextion/nextion_extui.cpp
+++ b/Marlin/src/lcd/extui/nextion/nextion_extui.cpp
@@ -37,7 +37,7 @@ namespace ExtUI {
void onStartup() { nextion.Startup(); }
void onIdle() { nextion.IdleLoop(); }
- void onPrinterKilled(PGM_P const error, PGM_P const component) { nextion.PrinterKilled(error,component); }
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component) { nextion.PrinterKilled(error, component); }
void onMediaInserted() {}
void onMediaError() {}
void onMediaRemoved() {}
diff --git a/Marlin/src/lcd/extui/nextion/nextion_tft.cpp b/Marlin/src/lcd/extui/nextion/nextion_tft.cpp
index 50423db4fd..99211a220c 100644
--- a/Marlin/src/lcd/extui/nextion/nextion_tft.cpp
+++ b/Marlin/src/lcd/extui/nextion/nextion_tft.cpp
@@ -33,6 +33,7 @@
#include "../../../MarlinCore.h"
#include "../../../feature/pause.h"
+#include "../../../module/stepper.h"
#include "../../../gcode/queue.h"
#include "../../../libs/numtostr.h"
#include "../../../sd/cardreader.h"
@@ -83,12 +84,12 @@ void NextionTFT::IdleLoop() {
UpdateOnChange();
}
-void NextionTFT::PrinterKilled(PGM_P error, PGM_P component) {
+void NextionTFT::PrinterKilled(FSTR_P const error, FSTR_P const component) {
SEND_TXT_END("page error");
- SEND_TXT("t3", "Error");
- SEND_TXT_P("t4", component);
- SEND_TXT_P("t5", error);
- SEND_TXT("t6", "Need reset");
+ SEND_TXT_F("t3", F("Error"));
+ SEND_TXT_F("t4", component);
+ SEND_TXT_F("t5", error);
+ SEND_TXT_F("t6", F("Need reset"));
}
void NextionTFT::PrintFinished() {
@@ -109,12 +110,12 @@ void NextionTFT::StatusChange(const char * const msg) {
SEND_VALasTXT("tmppage.M117", msg);
}
-void NextionTFT::SendtoTFT(PGM_P str) { // A helper to print PROGMEM string to the panel
+void NextionTFT::SendtoTFT(FSTR_P const fstr/*=nullptr*/) { // A helper to print PROGMEM string to the panel
#if NEXDEBUG(N_SOME)
- DEBUG_ECHOPGM_P(str);
+ DEBUG_ECHOF(fstr);
#endif
- while (const char c = pgm_read_byte(str++))
- LCD_SERIAL.write(c);
+ PGM_P str = FTOP(fstr);
+ while (const char c = pgm_read_byte(str++)) LCD_SERIAL.write(c);
}
bool NextionTFT::ReadTFTCommand() {
@@ -521,7 +522,7 @@ void NextionTFT::PanelAction(uint8_t req) {
case 66: // Refresh SD
if (!isPrinting()) {
- injectCommands_P(PSTR("M21"));
+ injectCommands(F("M21"));
filenavigator.reset();
}
break;
@@ -536,7 +537,7 @@ void NextionTFT::PanelAction(uint8_t req) {
case 57: // Disable Motors
if (!isPrinting()) {
- disable_all_steppers(); // from marlincore.h
+ stepper.disable_all_steppers();
SEND_TXT("tmppage.M117", "Motors disabled");
}
break;
@@ -545,8 +546,8 @@ void NextionTFT::PanelAction(uint8_t req) {
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
if (canMove(getActiveTool())) {
switch (nextion_command[4]) {
- case 'L': injectCommands_P(PSTR("M701")); break;
- case 'U': injectCommands_P(PSTR("M702")); break;
+ case 'L': injectCommands(F("M701")); break;
+ case 'U': injectCommands(F("M702")); break;
}
}
else {
diff --git a/Marlin/src/lcd/extui/nextion/nextion_tft.h b/Marlin/src/lcd/extui/nextion/nextion_tft.h
index 4eb5fbe0b7..806630485c 100644
--- a/Marlin/src/lcd/extui/nextion/nextion_tft.h
+++ b/Marlin/src/lcd/extui/nextion/nextion_tft.h
@@ -42,10 +42,11 @@ class NextionTFT {
NextionTFT();
static void Startup();
static void IdleLoop();
- static void PrinterKilled(PGM_P, PGM_P);
- static void ConfirmationRequest(const char * const );
- static void StatusChange(const char * const );
- static void SendtoTFT(PGM_P);
+ static void PrinterKilled(FSTR_P const, FSTR_P const);
+ static void ConfirmationRequest(const char * const);
+ static void StatusChange(const char * const);
+ static void SendtoTFT(FSTR_P const=nullptr);
+ //static void SendtoTFTLN(FSTR_P const=nullptr);
static void UpdateOnChange();
static void PrintFinished();
static void PanelInfo(uint8_t);
diff --git a/Marlin/src/lcd/extui/nextion/nextion_tft_defs.h b/Marlin/src/lcd/extui/nextion/nextion_tft_defs.h
index 32d3ea3295..cdd91bf2a3 100644
--- a/Marlin/src/lcd/extui/nextion/nextion_tft_defs.h
+++ b/Marlin/src/lcd/extui/nextion/nextion_tft_defs.h
@@ -54,10 +54,10 @@
// TFT panel commands
#define msg_welcome MACHINE_NAME " Ready."
-#define SEND_TEMP(x,y,t,z) (nextion.SendtoTFT(PSTR(x)), nextion.SendtoTFT(PSTR(".txt=\"")), LCD_SERIAL.print(y), nextion.SendtoTFT(PSTR(t)), LCD_SERIAL.print(z), nextion.SendtoTFT(PSTR("\"\xFF\xFF\xFF")))
-#define SEND_VAL(x,y) (nextion.SendtoTFT(PSTR(x)), nextion.SendtoTFT(PSTR(".val=")), LCD_SERIAL.print(y), nextion.SendtoTFT(PSTR("\xFF\xFF\xFF")))
-#define SEND_TXT(x,y) (nextion.SendtoTFT(PSTR(x)), nextion.SendtoTFT(PSTR(".txt=\"")), nextion.SendtoTFT(PSTR(y)), nextion.SendtoTFT(PSTR("\"\xFF\xFF\xFF")))
-#define SEND_TXT_P(x,y) (nextion.SendtoTFT(PSTR(x)), nextion.SendtoTFT(PSTR(".txt=\"")), nextion.SendtoTFT(y), nextion.SendtoTFT(PSTR("\"\xFF\xFF\xFF")))
-#define SEND_VALasTXT(x,y) (nextion.SendtoTFT(PSTR(x)), nextion.SendtoTFT(PSTR(".txt=\"")), LCD_SERIAL.print(y), nextion.SendtoTFT(PSTR("\"\xFF\xFF\xFF")))
-#define SEND_TXT_END(x) (nextion.SendtoTFT(PSTR(x)), nextion.SendtoTFT(PSTR("\xFF\xFF\xFF")))
-#define SEND_PCO2(x,y,z) (nextion.SendtoTFT(PSTR(x)), LCD_SERIAL.print(y), nextion.SendtoTFT(PSTR(".pco=")), nextion.SendtoTFT(PSTR(z)), nextion.SendtoTFT(PSTR("\xFF\xFF\xFF")))
+#define SEND_TEMP(x,y,t,z) (nextion.SendtoTFT(F(x)), nextion.SendtoTFT(F(".txt=\"")), LCD_SERIAL.print(y), nextion.SendtoTFT(F(t)), LCD_SERIAL.print(z), nextion.SendtoTFT(F("\"\xFF\xFF\xFF")))
+#define SEND_VAL(x,y) (nextion.SendtoTFT(F(x)), nextion.SendtoTFT(F(".val=")), LCD_SERIAL.print(y), nextion.SendtoTFT(F("\xFF\xFF\xFF")))
+#define SEND_TXT(x,y) (nextion.SendtoTFT(F(x)), nextion.SendtoTFT(F(".txt=\"")), nextion.SendtoTFT(F(y)), nextion.SendtoTFT(F("\"\xFF\xFF\xFF")))
+#define SEND_TXT_F(x,y) (nextion.SendtoTFT(F(x)), nextion.SendtoTFT(F(".txt=\"")), nextion.SendtoTFT(y), nextion.SendtoTFT(F("\"\xFF\xFF\xFF")))
+#define SEND_VALasTXT(x,y) (nextion.SendtoTFT(F(x)), nextion.SendtoTFT(F(".txt=\"")), LCD_SERIAL.print(y), nextion.SendtoTFT(F("\"\xFF\xFF\xFF")))
+#define SEND_TXT_END(x) (nextion.SendtoTFT(F(x)), nextion.SendtoTFT(F("\xFF\xFF\xFF")))
+#define SEND_PCO2(x,y,z) (nextion.SendtoTFT(F(x)), LCD_SERIAL.print(y), nextion.SendtoTFT(F(".pco=")), nextion.SendtoTFT(F(z)), nextion.SendtoTFT(F("\xFF\xFF\xFF")))
diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp
index 17980b1e3a..de84fa19ee 100644
--- a/Marlin/src/lcd/extui/ui_api.cpp
+++ b/Marlin/src/lcd/extui/ui_api.cpp
@@ -423,6 +423,12 @@ namespace ExtUI {
#if AXIS_IS_TMC(Z2)
case Z2: return stepperZ2.getMilliamps();
#endif
+ #if AXIS_IS_TMC(Z3)
+ case Z3: return stepperZ3.getMilliamps();
+ #endif
+ #if AXIS_IS_TMC(Z4)
+ case Z4: return stepperZ4.getMilliamps();
+ #endif
default: return NAN;
};
}
@@ -486,6 +492,12 @@ namespace ExtUI {
#if AXIS_IS_TMC(Z2)
case Z2: stepperZ2.rms_current(constrain(mA, 400, 1500)); break;
#endif
+ #if AXIS_IS_TMC(Z3)
+ case Z3: stepperZ3.rms_current(constrain(mA, 400, 1500)); break;
+ #endif
+ #if AXIS_IS_TMC(Z4)
+ case Z4: stepperZ4.rms_current(constrain(mA, 400, 1500)); break;
+ #endif
default: break;
};
}
@@ -743,7 +755,7 @@ namespace ExtUI {
* what nozzle is printing.
*/
void smartAdjustAxis_steps(const int16_t steps, const axis_t axis, bool linked_nozzles) {
- const float mm = steps * planner.steps_to_mm[axis];
+ const float mm = steps * planner.mm_per_step[axis];
UNUSED(mm);
if (!babystepAxis_steps(steps, axis)) return;
@@ -779,12 +791,12 @@ namespace ExtUI {
* steps that is at least mm long.
*/
int16_t mmToWholeSteps(const_float_t mm, const axis_t axis) {
- const float steps = mm / planner.steps_to_mm[axis];
+ const float steps = mm / planner.mm_per_step[axis];
return steps > 0 ? CEIL(steps) : FLOOR(steps);
}
float mmFromWholeSteps(int16_t steps, const axis_t axis) {
- return steps * planner.steps_to_mm[axis];
+ return steps * planner.mm_per_step[axis];
}
#endif // BABYSTEPPING
@@ -794,7 +806,7 @@ namespace ExtUI {
#if HAS_BED_PROBE
+ probe.offset.z
#elif ENABLED(BABYSTEP_DISPLAY_TOTAL)
- + planner.steps_to_mm[Z_AXIS] * babystep.axis_total[BS_AXIS_IND(Z_AXIS)]
+ + planner.mm_per_step[Z_AXIS] * babystep.axis_total[BS_AXIS_IND(Z_AXIS)]
#endif
);
}
@@ -1065,15 +1077,16 @@ namespace ExtUI {
void resumePrint() { ui.resume_print(); }
void stopPrint() { ui.abort_print(); }
- void onUserConfirmRequired_P(PGM_P const pstr) {
- char msg[strlen_P(pstr) + 1];
- strcpy_P(msg, pstr);
+ // Simplest approach is to make an SRAM copy
+ void onUserConfirmRequired(FSTR_P const fstr) {
+ char msg[strlen_P(FTOP(fstr)) + 1];
+ strcpy_P(msg, FTOP(fstr));
onUserConfirmRequired(msg);
}
- void onStatusChanged_P(PGM_P const pstr) {
- char msg[strlen_P(pstr) + 1];
- strcpy_P(msg, pstr);
+ void onStatusChanged(FSTR_P const fstr) {
+ char msg[strlen_P(FTOP(fstr)) + 1];
+ strcpy_P(msg, FTOP(fstr));
onStatusChanged(msg);
}
@@ -1141,7 +1154,7 @@ void MarlinUI::init() { ExtUI::onStartup(); }
void MarlinUI::update() { ExtUI::onIdle(); }
-void MarlinUI::kill_screen(PGM_P const error, PGM_P const component) {
+void MarlinUI::kill_screen(FSTR_P const error, FSTR_P const component) {
using namespace ExtUI;
if (!flags.printer_killed) {
flags.printer_killed = true;
diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h
index 9e1ae3a9c0..7e899221ad 100644
--- a/Marlin/src/lcd/extui/ui_api.h
+++ b/Marlin/src/lcd/extui/ui_api.h
@@ -79,6 +79,7 @@ namespace ExtUI {
bool canMove(const axis_t);
bool canMove(const extruder_t);
void injectCommands_P(PGM_P const);
+ inline void injectCommands(FSTR_P const fstr) { injectCommands_P(FTOP(fstr)); }
void injectCommands(char * const);
bool commandsInQueue();
@@ -393,16 +394,16 @@ namespace ExtUI {
void onMediaError();
void onMediaRemoved();
void onPlayTone(const uint16_t frequency, const uint16_t duration);
- void onPrinterKilled(PGM_P const error, PGM_P const component);
+ void onPrinterKilled(FSTR_P const error, FSTR_P const component);
void onPrintTimerStarted();
void onPrintTimerPaused();
void onPrintTimerStopped();
void onPrintFinished();
void onFilamentRunout(const extruder_t extruder);
void onUserConfirmRequired(const char * const msg);
- void onUserConfirmRequired_P(PGM_P const pstr);
+ void onUserConfirmRequired(FSTR_P const fstr);
void onStatusChanged(const char * const msg);
- void onStatusChanged_P(PGM_P const pstr);
+ void onStatusChanged(FSTR_P const fstr);
void onHomingStart();
void onHomingComplete();
void onSteppersDisabled();
diff --git a/Marlin/src/lcd/fontutils.cpp b/Marlin/src/lcd/fontutils.cpp
index 90fcb2ae7c..50b671ea33 100644
--- a/Marlin/src/lcd/fontutils.cpp
+++ b/Marlin/src/lcd/fontutils.cpp
@@ -1,3 +1,25 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
/**
* @file fontutils.cpp
* @brief help functions for font and char
diff --git a/Marlin/src/lcd/fontutils.h b/Marlin/src/lcd/fontutils.h
index 04ff81148f..3901d4439f 100644
--- a/Marlin/src/lcd/fontutils.h
+++ b/Marlin/src/lcd/fontutils.h
@@ -1,3 +1,25 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
/**
* @file fontutils.h
* @brief help functions for font and char
diff --git a/Marlin/src/lcd/language/language_an.h b/Marlin/src/lcd/language/language_an.h
index 1bc6d75f3b..4669f0c233 100644
--- a/Marlin/src/lcd/language/language_an.h
+++ b/Marlin/src/lcd/language/language_an.h
@@ -34,191 +34,188 @@
namespace Language_an {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 1;
- PROGMEM Language_Str LANGUAGE = _UxGT("Aragonese");
+ constexpr uint8_t CHARSIZE = 1;
+ LSTR LANGUAGE = _UxGT("Aragonese");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" parada.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Tarcheta mesa");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tarcheta sacada");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu prencipal");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Inicio automatico");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Amortar motors");
- PROGMEM Language_Str MSG_HOMING = _UxGT("Orichen");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Levar a l'orichen");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Orichen X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Orichen Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Orichen Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Orichen XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Encetar (pretar)");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Vinient punto");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivelacion feita!");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Achustar desfases");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicau");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Establir orichen");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" parada.");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Tarcheta mesa");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Tarcheta sacada");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("Menu prencipal");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Inicio automatico");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Amortar motors");
+ LSTR MSG_HOMING = _UxGT("Orichen");
+ LSTR MSG_AUTO_HOME = _UxGT("Levar a l'orichen");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Orichen X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Orichen Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Orichen Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Orichen XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Encetar (pretar)");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Vinient punto");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivelacion feita!");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Achustar desfases");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicau");
+ LSTR MSG_SET_ORIGIN = _UxGT("Establir orichen");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Precalentar ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Precalentar ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Tot");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Base");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Conf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Precalentar ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Precalentar ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Boquilla ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Tot");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Base");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Precalentar ") PREHEAT_1_LABEL _UxGT(" Conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Precalentar $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Precalentar $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Precal. $ Boquilla");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Precal. $ Boquilla ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Precalentar $ Tot");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Precalentar $ Base");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Precalentar $ Conf");
+ LSTR MSG_PREHEAT_M = _UxGT("Precalentar $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Precalentar $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Precal. $ Boquilla");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Precal. $ Boquilla ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Precalentar $ Tot");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Precalentar $ Base");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Precalentar $ Conf");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Enfriar");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Enchegar Fuent");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Amortar Fuent");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruir");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retraer");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover Eixes");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelar base");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar base");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extrusor *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mover %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidat");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Boquilla");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Boquilla ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Base");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ixoriador");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ixoriador ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxo ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Trigar");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Trigar *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Aceleracion");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vel. viache min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Acel. max ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Acel. max ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Acel. max ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Acel. max ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Acel. max ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Acel. max ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Acel. max ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Acel. max *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Acel. retrac.");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Acel. Viaje");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Trangos/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" trangos/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" trangos/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" trangos/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" trangos/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" trangos/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" trangos/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E trangos/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* trangos/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Movimiento");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Alzar memoria");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar memoria");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restaurar memoria");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Tornar a cargar");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Informacion");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Achustar");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impresion");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Contin. impresion");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Detener Impresion");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Menu de SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("No i hai tarcheta");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Reposo...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Aguardand ordines");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impres. cancelada");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sin movimiento");
- PROGMEM Language_Str MSG_KILLED = _UxGT("Aturada d'emerch.");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("Aturada.");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retraer mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraer F");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Devantar mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet F");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retraccion auto.");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambear filamento");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambear filamento *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Encetan. tarcheta");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar tarcheta");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropaso X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Error: en calentar");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Error: temperatura");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Error de temperatura");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Error: Temp Max");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Error: Temp Min");
- PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESORA ATURADA");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Per favor reinic.");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Calentando...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Calentando base...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+ LSTR MSG_COOLDOWN = _UxGT("Enfriar");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Enchegar Fuent");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Amortar Fuent");
+ LSTR MSG_EXTRUDE = _UxGT("Extruir");
+ LSTR MSG_RETRACT = _UxGT("Retraer");
+ LSTR MSG_MOVE_AXIS = _UxGT("Mover Eixes");
+ LSTR MSG_BED_LEVELING = _UxGT("Nivelar base");
+ LSTR MSG_LEVEL_BED = _UxGT("Nivelar base");
+ LSTR MSG_MOVE_X = _UxGT("Mover X");
+ LSTR MSG_MOVE_Y = _UxGT("Mover Y");
+ LSTR MSG_MOVE_Z = _UxGT("Mover Z");
+ LSTR MSG_MOVE_E = _UxGT("Extrusor");
+ LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mover %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
+ LSTR MSG_SPEED = _UxGT("Velocidat");
+ LSTR MSG_BED_Z = _UxGT("Base Z");
+ LSTR MSG_NOZZLE = _UxGT("Boquilla");
+ LSTR MSG_NOZZLE_N = _UxGT("Boquilla ~");
+ LSTR MSG_BED = _UxGT("Base");
+ LSTR MSG_FAN_SPEED = _UxGT("Ixoriador");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Ixoriador ~");
+ LSTR MSG_FLOW = _UxGT("Fluxo");
+ LSTR MSG_FLOW_N = _UxGT("Fluxo ~");
+ LSTR MSG_CONTROL = _UxGT("Control");
+ LSTR MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
+ LSTR MSG_SELECT = _UxGT("Trigar");
+ LSTR MSG_SELECT_E = _UxGT("Trigar *");
+ LSTR MSG_ACC = _UxGT("Aceleracion");
+ LSTR MSG_VTRAV_MIN = _UxGT("Vel. viache min");
+ LSTR MSG_ACCELERATION = _UxGT("Accel");
+ LSTR MSG_AMAX_A = _UxGT("Acel. max ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Acel. max ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Acel. max ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Acel. max ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Acel. max ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Acel. max ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Acel. max ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Acel. max *");
+ LSTR MSG_A_RETRACT = _UxGT("Acel. retrac.");
+ LSTR MSG_A_TRAVEL = _UxGT("Acel. Viaje");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Trangos/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" trangos/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" trangos/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" trangos/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" trangos/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" trangos/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" trangos/mm");
+ LSTR MSG_E_STEPS = _UxGT("E trangos/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* trangos/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Movimiento");
+ LSTR MSG_FILAMENT = _UxGT("Filamento");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
+ LSTR MSG_CONTRAST = _UxGT("Contraste");
+ LSTR MSG_STORE_EEPROM = _UxGT("Alzar memoria");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Cargar memoria");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaurar memoria");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Tornar a cargar");
+ LSTR MSG_INFO_SCREEN = _UxGT("Informacion");
+ LSTR MSG_PREPARE = _UxGT("Preparar");
+ LSTR MSG_TUNE = _UxGT("Achustar");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impresion");
+ LSTR MSG_RESUME_PRINT = _UxGT("Contin. impresion");
+ LSTR MSG_STOP_PRINT = _UxGT("Detener Impresion");
+ LSTR MSG_MEDIA_MENU = _UxGT("Menu de SD");
+ LSTR MSG_NO_MEDIA = _UxGT("No i hai tarcheta");
+ LSTR MSG_DWELL = _UxGT("Reposo...");
+ LSTR MSG_USERWAIT = _UxGT("Aguardand ordines");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Impres. cancelada");
+ LSTR MSG_NO_MOVE = _UxGT("Sin movimiento");
+ LSTR MSG_KILLED = _UxGT("Aturada d'emerch.");
+ LSTR MSG_STOPPED = _UxGT("Aturada.");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retraer mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraer F");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Devantar mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet F");
+ LSTR MSG_AUTORETRACT = _UxGT("Retraccion auto.");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Cambear filamento");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambear filamento *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Encetan. tarcheta");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar tarcheta");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Micropaso X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Error: en calentar");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Error: temperatura");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("Error de temperatura");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Error: Temp Max");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Error: Temp Min");
+ LSTR MSG_HALTED = _UxGT("IMPRESORA ATURADA");
+ LSTR MSG_PLEASE_RESET = _UxGT("Per favor reinic.");
+ LSTR MSG_HEATING = _UxGT("Calentando...");
+ LSTR MSG_BED_HEATING = _UxGT("Calentando base...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Inf. Impresora");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Inf. Impresora");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadisticas Imp.");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Inf. Controlador");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudios");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz");
+ LSTR MSG_INFO_MENU = _UxGT("Inf. Impresora");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Inf. Impresora");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Estadisticas Imp.");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Inf. Controlador");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baudios");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ LSTR MSG_CASE_LIGHT = _UxGT("Luz");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Conteo de impresion");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tiempo total d'imp.");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impresion mas larga");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total d'extrusion");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Conteo de impresion");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tiempo total d'imp.");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impresion mas larga");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total d'extrusion");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impresions");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Mas larga");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrusion");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impresions");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Mas larga");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrusion");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temperatura menima");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temperatura maxima");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Fuente de aliment");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temperatura menima");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temperatura maxima");
+ LSTR MSG_INFO_PSU = _UxGT("Fuente de aliment");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Fuerza d'o driver");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escri. DAC EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Resumir imp.");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Fuerza d'o driver");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escri. DAC EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Resumir imp.");
//
// Filament Change screens show up to 3 lines on a 4-line display
@@ -227,15 +224,15 @@ namespace Language_an {
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Aguardand iniciar", "d'o filamento", "cambear"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Meta o filamento", "y prete lo boton", "pa continar..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Aguardand iniciar", "d'o filamento", "cambear"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Meta o filamento", "y prete lo boton", "pa continar..."));
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Aguardand iniciar", "d'o fil. cambear"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Meta o filamento", "y prete lo boton"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Aguardand iniciar", "d'o fil. cambear"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Meta o filamento", "y prete lo boton"));
#endif // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Aguardando a", "expulsar filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Aguardando a", "cargar filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Aguardando impre.", "pa continar"));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Aguardando a", "expulsar filament"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Aguardando a", "cargar filamento"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Aguardando impre.", "pa continar"));
}
diff --git a/Marlin/src/lcd/language/language_bg.h b/Marlin/src/lcd/language/language_bg.h
index 37d896f60d..3d332ca058 100644
--- a/Marlin/src/lcd/language/language_bg.h
+++ b/Marlin/src/lcd/language/language_bg.h
@@ -33,127 +33,127 @@
namespace Language_bg {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Bulgarian");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Bulgarian");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Готов.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Картата е поставена");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Картата е извадена");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Меню");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Изкл. двигатели");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Паркиране");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Задай Начало");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Изходна точка");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Готов.");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Картата е поставена");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Картата е извадена");
+ LSTR MSG_MAIN = _UxGT("Меню");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Изкл. двигатели");
+ LSTR MSG_AUTO_HOME = _UxGT("Паркиране");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Задай Начало");
+ LSTR MSG_SET_ORIGIN = _UxGT("Изходна точка");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Подгряване ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Подгряване ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Всички");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Легло");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Настройки ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1 = _UxGT("Подгряване ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Подгряване ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Подгряване ") PREHEAT_1_LABEL _UxGT(" Дюза ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Всички");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Подгр. ") PREHEAT_1_LABEL _UxGT(" Легло");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Настройки ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Подгряване $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Подгряване $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Подгряване $ Дюза");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Подгряване $ Дюза ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Подгр. $ Всички");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Подгр. $ Легло");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Настройки $");
+ LSTR MSG_PREHEAT_M = _UxGT("Подгряване $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Подгряване $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Подгряване $ Дюза");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Подгряване $ Дюза ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Подгр. $ Всички");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Подгр. $ Легло");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Настройки $");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Охлаждане");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Вкл. захранване");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Изкл. захранване");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Екструзия");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Откат");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Движение по ос");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Нивелиране");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Нивелиране");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Движение по X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Движение по Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Движение по Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Екструдер");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Екструдер *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Премести с %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Премести с 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Премести с 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Премести с 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Премести с 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Скорост");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
- PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
- PROGMEM Language_Str MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Дюза ~");
- PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Легло");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Вентилатор");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Вентилатор ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Поток");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Поток ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Управление");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Минимум");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Максимум");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Авто-темп.");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Вкл.");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Изкл.");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-откат");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-travel");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Стъпки/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" стъпки/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" стъпки/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" стъпки/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" стъпки/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" стъпки/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" стъпки/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E стъпки/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* стъпки/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Движение");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Нишка");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Диам. нишка");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Диам. нишка *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD контраст");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Запази в EPROM");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Зареди от EPROM");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Фабрични настройки");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Обнови");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Преглед");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Действия");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Настройка");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Пауза");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Възобнови печата");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Спри печата");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Меню карта");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Няма карта");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Почивка...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Изчакване");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Печатът е прекъснат");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Няма движение");
- PROGMEM Language_Str MSG_KILLED = _UxGT("УБИТО.");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("СПРЯНО.");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Откат mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Смяна Откат mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Откат V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Скок mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Възврат mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Смяна Възврат mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Възврат V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автоoткат");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Смяна нишка");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Смяна нишка *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Иниц. SD-Карта");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Смяна SD-Карта");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-сондата е извадена");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Отстояние");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Министъпка X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Министъпка Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Министъпка Z");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Стоп Кр.Изключватели");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Делта Калибровка");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калибровка X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровка Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровка Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровка Център");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Неправилен принтер");
+ LSTR MSG_COOLDOWN = _UxGT("Охлаждане");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Вкл. захранване");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Изкл. захранване");
+ LSTR MSG_EXTRUDE = _UxGT("Екструзия");
+ LSTR MSG_RETRACT = _UxGT("Откат");
+ LSTR MSG_MOVE_AXIS = _UxGT("Движение по ос");
+ LSTR MSG_BED_LEVELING = _UxGT("Нивелиране");
+ LSTR MSG_LEVEL_BED = _UxGT("Нивелиране");
+ LSTR MSG_MOVE_X = _UxGT("Движение по X");
+ LSTR MSG_MOVE_Y = _UxGT("Движение по Y");
+ LSTR MSG_MOVE_Z = _UxGT("Движение по Z");
+ LSTR MSG_MOVE_E = _UxGT("Екструдер");
+ LSTR MSG_MOVE_EN = _UxGT("Екструдер *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Премести с %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Премести с 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Премести с 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Премести с 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Премести с 100mm");
+ LSTR MSG_SPEED = _UxGT("Скорост");
+ LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Дюза");
+ LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Дюза ~");
+ LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Легло");
+ LSTR MSG_FAN_SPEED = _UxGT("Вентилатор");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Вентилатор ~");
+ LSTR MSG_FLOW = _UxGT("Поток");
+ LSTR MSG_FLOW_N = _UxGT("Поток ~");
+ LSTR MSG_CONTROL = _UxGT("Управление");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Минимум");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Максимум");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
+ LSTR MSG_AUTOTEMP = _UxGT("Авто-темп.");
+ LSTR MSG_LCD_ON = _UxGT("Вкл.");
+ LSTR MSG_LCD_OFF = _UxGT("Изкл.");
+ LSTR MSG_A_RETRACT = _UxGT("A-откат");
+ LSTR MSG_A_TRAVEL = _UxGT("A-travel");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Стъпки/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" стъпки/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" стъпки/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" стъпки/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" стъпки/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" стъпки/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" стъпки/mm");
+ LSTR MSG_E_STEPS = _UxGT("E стъпки/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* стъпки/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Температура");
+ LSTR MSG_MOTION = _UxGT("Движение");
+ LSTR MSG_FILAMENT = _UxGT("Нишка");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Диам. нишка");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Диам. нишка *");
+ LSTR MSG_CONTRAST = _UxGT("LCD контраст");
+ LSTR MSG_STORE_EEPROM = _UxGT("Запази в EPROM");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Зареди от EPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Фабрични настройки");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Обнови");
+ LSTR MSG_INFO_SCREEN = _UxGT("Преглед");
+ LSTR MSG_PREPARE = _UxGT("Действия");
+ LSTR MSG_TUNE = _UxGT("Настройка");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Пауза");
+ LSTR MSG_RESUME_PRINT = _UxGT("Възобнови печата");
+ LSTR MSG_STOP_PRINT = _UxGT("Спри печата");
+ LSTR MSG_MEDIA_MENU = _UxGT("Меню карта");
+ LSTR MSG_NO_MEDIA = _UxGT("Няма карта");
+ LSTR MSG_DWELL = _UxGT("Почивка...");
+ LSTR MSG_USERWAIT = _UxGT("Изчакване");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Печатът е прекъснат");
+ LSTR MSG_NO_MOVE = _UxGT("Няма движение");
+ LSTR MSG_KILLED = _UxGT("УБИТО.");
+ LSTR MSG_STOPPED = _UxGT("СПРЯНО.");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Откат mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смяна Откат mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Откат V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Скок mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Възврат mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Смяна Възврат mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Възврат V");
+ LSTR MSG_AUTORETRACT = _UxGT("Автоoткат");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Смяна нишка");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Смяна нишка *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Иниц. SD-Карта");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Смяна SD-Карта");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z-сондата е извадена");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Отстояние");
+ LSTR MSG_BABYSTEP_X = _UxGT("Министъпка X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Министъпка Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Министъпка Z");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Стоп Кр.Изключватели");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Делта Калибровка");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Калибровка X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровка Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровка Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровка Център");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Неправилен принтер");
}
diff --git a/Marlin/src/lcd/language/language_ca.h b/Marlin/src/lcd/language/language_ca.h
index a554fafdfd..c8f0d26a32 100644
--- a/Marlin/src/lcd/language/language_ca.h
+++ b/Marlin/src/lcd/language/language_ca.h
@@ -30,204 +30,201 @@
namespace Language_ca {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Catalan");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Catalan");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" preparada.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Targeta detectada.");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Targeta extreta.");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Inici automatic");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desactiva motors");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu de depuracio");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progres");
- PROGMEM Language_Str MSG_HOMING = _UxGT("Origen");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ves a l'origen");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X a origen");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y a origen");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z a origen");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Premeu per iniciar");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Següent punt");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Anivellament fet!");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ajusta decalatge");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Decalatge aplicat");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Estableix origen");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" preparada.");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Targeta detectada.");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Targeta extreta.");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops");
+ LSTR MSG_MAIN = _UxGT("Menú principal");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Inici automatic");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Desactiva motors");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menu de depuracio");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progres");
+ LSTR MSG_HOMING = _UxGT("Origen");
+ LSTR MSG_AUTO_HOME = _UxGT("Ves a l'origen");
+ LSTR MSG_AUTO_HOME_X = _UxGT("X a origen");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Y a origen");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Z a origen");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Premeu per iniciar");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Següent punt");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Anivellament fet!");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ajusta decalatge");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Decalatge aplicat");
+ LSTR MSG_SET_ORIGIN = _UxGT("Estableix origen");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preescalfa ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Preescalfa ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" End");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" End ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Tot");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Llit");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Conf.");
+ LSTR MSG_PREHEAT_1 = _UxGT("Preescalfa ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Preescalfa ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" End");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" End ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Tot");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Llit");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preescalfa ") PREHEAT_1_LABEL _UxGT(" Conf.");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Preescalfa $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Preescalfa $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Preescalfa $ End");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Preescalfa $ End ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Preescalfa $ Tot");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Preescalfa $ Llit");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Preescalfa $ Conf.");
+ LSTR MSG_PREHEAT_M = _UxGT("Preescalfa $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Preescalfa $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Preescalfa $ End");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Preescalfa $ End ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Preescalfa $ Tot");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preescalfa $ Llit");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preescalfa $ Conf.");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Refreda");
+ LSTR MSG_COOLDOWN = _UxGT("Refreda");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudeix");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retreu");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mou eixos");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Anivella llit");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Anivella llit");
+ LSTR MSG_EXTRUDE = _UxGT("Extrudeix");
+ LSTR MSG_RETRACT = _UxGT("Retreu");
+ LSTR MSG_MOVE_AXIS = _UxGT("Mou eixos");
+ LSTR MSG_BED_LEVELING = _UxGT("Anivella llit");
+ LSTR MSG_LEVEL_BED = _UxGT("Anivella llit");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Movent..");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("XY lliures");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mou X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mou Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mou Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extrusor *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mou %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mou 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mou 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mou 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mou 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Velocitat");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Llit Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozzle ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Llit");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flux");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flux ~");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VViatge min");
+ LSTR MSG_MOVING = _UxGT("Movent..");
+ LSTR MSG_FREE_XY = _UxGT("XY lliures");
+ LSTR MSG_MOVE_X = _UxGT("Mou X");
+ LSTR MSG_MOVE_Y = _UxGT("Mou Y");
+ LSTR MSG_MOVE_Z = _UxGT("Mou Z");
+ LSTR MSG_MOVE_E = _UxGT("Extrusor");
+ LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mou %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mou 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mou 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mou 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mou 100mm");
+ LSTR MSG_SPEED = _UxGT("Velocitat");
+ LSTR MSG_BED_Z = _UxGT("Llit Z");
+ LSTR MSG_NOZZLE = _UxGT("Nozzle");
+ LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
+ LSTR MSG_BED = _UxGT("Llit");
+ LSTR MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
+ LSTR MSG_FLOW = _UxGT("Flux");
+ LSTR MSG_FLOW_N = _UxGT("Flux ~");
+ LSTR MSG_VTRAV_MIN = _UxGT("VViatge min");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Accel. retracc");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Accel. Viatge");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passos/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" passos/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" passos/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" passos/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" passos/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" passos/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" passos/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("Epassos/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("*passos/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Moviment");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diam. Fil.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Diam. Fil. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contrast de LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Desa memoria");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carrega memoria");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restaura valors");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualitza");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Pantalla Info.");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepara");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Ajusta");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausa impressio");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Repren impressio");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Atura impressio.");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprimeix de SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("No hi ha targeta");
- PROGMEM Language_Str MSG_DWELL = _UxGT("En repos...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Esperant usuari..");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Imp. cancelada");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sense moviment.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("MATAT.");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ATURADA.");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retreu mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retreure mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retreu V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Aixeca mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet +mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet +mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto retraccio");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Canvia filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Canvia filament *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Inicialitza SD");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Canvia SD");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fora");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reinicia BLTouch");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s primer");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Decalatge Z");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropas X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropas Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropas Z");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Cancel. Endstop");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Error al escalfar");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP REDUNDANT");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MAXIMA");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
- PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESSORA PARADA");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reinicieu");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Escalfant...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Escalfant llit...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibratge Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra el centre");
+ LSTR MSG_A_RETRACT = _UxGT("Accel. retracc");
+ LSTR MSG_A_TRAVEL = _UxGT("Accel. Viatge");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Passos/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" passos/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" passos/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" passos/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" passos/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" passos/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" passos/mm");
+ LSTR MSG_E_STEPS = _UxGT("Epassos/mm");
+ LSTR MSG_EN_STEPS = _UxGT("*passos/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Moviment");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Diam. Fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diam. Fil. *");
+ LSTR MSG_CONTRAST = _UxGT("Contrast de LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Desa memoria");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Carrega memoria");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaura valors");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualitza");
+ LSTR MSG_INFO_SCREEN = _UxGT("Pantalla Info.");
+ LSTR MSG_PREPARE = _UxGT("Prepara");
+ LSTR MSG_TUNE = _UxGT("Ajusta");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausa impressio");
+ LSTR MSG_RESUME_PRINT = _UxGT("Repren impressio");
+ LSTR MSG_STOP_PRINT = _UxGT("Atura impressio.");
+ LSTR MSG_MEDIA_MENU = _UxGT("Imprimeix de SD");
+ LSTR MSG_NO_MEDIA = _UxGT("No hi ha targeta");
+ LSTR MSG_DWELL = _UxGT("En repos...");
+ LSTR MSG_USERWAIT = _UxGT("Esperant usuari..");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Imp. cancelada");
+ LSTR MSG_NO_MOVE = _UxGT("Sense moviment.");
+ LSTR MSG_KILLED = _UxGT("MATAT.");
+ LSTR MSG_STOPPED = _UxGT("ATURADA.");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retreu mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Retreure mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retreu V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Aixeca mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet +mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap DesRet +mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto retraccio");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Canvia filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Canvia filament *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Inicialitza SD");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Canvia SD");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z fora");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reinicia BLTouch");
+ LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s primer");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Decalatge Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Micropas X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Micropas Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Micropas Z");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Cancel. Endstop");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Error al escalfar");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP REDUNDANT");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MAXIMA");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
+ LSTR MSG_HALTED = _UxGT("IMPRESSORA PARADA");
+ LSTR MSG_PLEASE_RESET = _UxGT("Reinicieu");
+ LSTR MSG_HEATING = _UxGT("Escalfant...");
+ LSTR MSG_BED_HEATING = _UxGT("Escalfant llit...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibratge Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra el centre");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Quant a la impr.");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info Impressora");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadistiques");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info placa");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocol");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Llum");
+ LSTR MSG_INFO_MENU = _UxGT("Quant a la impr.");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info Impressora");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Estadistiques");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Info placa");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistors");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusors");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocol");
+ LSTR MSG_CASE_LIGHT = _UxGT("Llum");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total impressions");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Temps imprimint");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Treball mes llarg");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total extrudit");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total impressions");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Temps imprimint");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Treball mes llarg");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total extrudit");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Mes llarg");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudit");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Acabades");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Mes llarg");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudit");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp. mínima");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp. màxima");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Font alimentacio");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp. mínima");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp. màxima");
+ LSTR MSG_INFO_PSU = _UxGT("Font alimentacio");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Força motor");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Força motor");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Repren impressió");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Repren impressió");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora incorrecta");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora incorrecta");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperant per", "iniciar el canvi", "de filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperant per", "treure filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Poseu filament", "i premeu el boto", "per continuar..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premeu boto per", "escalfar nozzle."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Escalfant nozzle", "Espereu..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperant carrega", "de filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperant per", "reprendre"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperant per", "iniciar el canvi", "de filament"));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperant per", "treure filament"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Poseu filament", "i premeu el boto", "per continuar..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premeu boto per", "escalfar nozzle."));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Escalfant nozzle", "Espereu..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperant carrega", "de filament"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperant per", "reprendre"));
#else // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Espereu..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Expulsant..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insereix i prem"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Escalfant..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregant..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprenent..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Espereu..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Expulsant..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insereix i prem"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Escalfant..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregant..."));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprenent..."));
#endif // LCD_HEIGHT < 4
}
diff --git a/Marlin/src/lcd/language/language_cz.h b/Marlin/src/lcd/language/language_cz.h
index b58fb05a1d..fd064b0834 100644
--- a/Marlin/src/lcd/language/language_cz.h
+++ b/Marlin/src/lcd/language/language_cz.h
@@ -38,576 +38,566 @@
namespace Language_cz {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Czech");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Czech");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" připraven.");
- PROGMEM Language_Str MSG_YES = _UxGT("ANO");
- PROGMEM Language_Str MSG_NO = _UxGT("NE");
- PROGMEM Language_Str MSG_BACK = _UxGT("Zpět");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Rušení...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Médium vloženo");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Médium vyjmuto");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Čekání na médium");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Chyba čtení média");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB odstraněno");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Chyba USB");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znaku
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstopy");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavní nabídka");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Další nastavení");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurace");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolnit motory");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Nabídka ladění");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" připraven.");
+ LSTR MSG_YES = _UxGT("ANO");
+ LSTR MSG_NO = _UxGT("NE");
+ LSTR MSG_BACK = _UxGT("Zpět");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Rušení...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Médium vloženo");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Médium vyjmuto");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Čekání na médium");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Chyba čtení média");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB odstraněno");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Chyba USB");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znaku
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstopy");
+ LSTR MSG_MAIN = _UxGT("Hlavní nabídka");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Další nastavení");
+ LSTR MSG_CONFIGURATION = _UxGT("Konfigurace");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Uvolnit motory");
+ LSTR MSG_DEBUG_MENU = _UxGT("Nabídka ladění");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test ukaz. průběhu");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test ukaz. průběhu");
#else
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. průběhu");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. průběhu");
#endif
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Domovská pozice");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Domů osa X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Domů osa Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Domů osa Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto srovnání Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Měření podložky");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím spusťte");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Další bod");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Měření hotovo!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Výška srovnávání");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Nastavit ofsety");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastaveny");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Nastavit počátek");
+ LSTR MSG_AUTO_HOME = _UxGT("Domovská pozice");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Domů osa X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Domů osa Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Domů osa Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto srovnání Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Měření podložky");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím spusťte");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Další bod");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Měření hotovo!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Výška srovnávání");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Nastavit ofsety");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastaveny");
+ LSTR MSG_SET_ORIGIN = _UxGT("Nastavit počátek");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Zahřát ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Zahřát ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" vše");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" podlož");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" nast");
+ LSTR MSG_PREHEAT_1 = _UxGT("Zahřát ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Zahřát ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" end ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" vše");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" podlož");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Zahřát ") PREHEAT_1_LABEL _UxGT(" nast");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Zahřát $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Zahřát $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Zahřát $ end");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Zahřát $ end ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Zahřát $ vše");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Zahřát $ podlož");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Zahřát $ nast");
+ LSTR MSG_PREHEAT_M = _UxGT("Zahřát $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Zahřát $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Zahřát $ end");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Zahřát $ end ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Zahřát $ vše");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Zahřát $ podlož");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Zahřát $ nast");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Zahřát vlastní");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Zchladit");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Ovládání laseru");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Výkon laseru");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Vřeteno ovládání");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Vřeteno výkon");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Vřeteno opačně");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Zapnout napájení");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Vypnout napájení");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Vytlačit (extr.)");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Zatlačit (retr.)");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Posunout osy");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Vyrovnat podložku");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Vyrovnat podložku");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Vyrovnat rohy");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Další roh");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor sítě");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Upravit síť bodů");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Konec úprav sítě");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Měření bodu");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Zahřát vlastní");
+ LSTR MSG_COOLDOWN = _UxGT("Zchladit");
+ LSTR MSG_LASER_MENU = _UxGT("Ovládání laseru");
+ LSTR MSG_LASER_POWER = _UxGT("Výkon laseru");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Vřeteno ovládání");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Vřeteno výkon");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Vřeteno opačně");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Zapnout napájení");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Vypnout napájení");
+ LSTR MSG_EXTRUDE = _UxGT("Vytlačit (extr.)");
+ LSTR MSG_RETRACT = _UxGT("Zatlačit (retr.)");
+ LSTR MSG_MOVE_AXIS = _UxGT("Posunout osy");
+ LSTR MSG_BED_LEVELING = _UxGT("Vyrovnat podložku");
+ LSTR MSG_LEVEL_BED = _UxGT("Vyrovnat podložku");
+ LSTR MSG_BED_TRAMMING = _UxGT("Vyrovnat rohy");
+ LSTR MSG_NEXT_CORNER = _UxGT("Další roh");
+ LSTR MSG_MESH_EDITOR = _UxGT("Editor sítě");
+ LSTR MSG_EDIT_MESH = _UxGT("Upravit síť bodů");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Konec úprav sítě");
+ LSTR MSG_PROBING_POINT = _UxGT("Měření bodu");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Vlastní příkazy");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 test sondy");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 bod");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Odchylka");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Režim IDEX");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Ofsety nástrojů");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikace");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrcadlení");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2. tryska X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2. tryska Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2. tryska Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Vlastní příkazy");
+ LSTR MSG_M48_TEST = _UxGT("M48 test sondy");
+ LSTR MSG_M48_POINT = _UxGT("M48 bod");
+ LSTR MSG_M48_DEVIATION = _UxGT("Odchylka");
+ LSTR MSG_IDEX_MENU = _UxGT("Režim IDEX");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Ofsety nástrojů");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikace");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrcadlení");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. tryska Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. tryska @");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Provádím G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL nástroje");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Vyrovnání bodu");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manuální síť bodů");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Vložte kartu, změřte");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Změřte");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Odstraňte a změřte");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Přesun na další");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovat UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovat UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Úprava sítě bodů");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upravit vlastní síť");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladit síť bodů");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Konec úprav sítě");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastní síť");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvořit síť");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Provádím G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL nástroje");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Vyrovnání bodu");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manuální síť bodů");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Vložte kartu, změřte");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Změřte");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Odstraňte a změřte");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Přesun na další");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovat UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovat UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Úprava sítě bodů");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upravit vlastní síť");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladit síť bodů");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Konec úprav sítě");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastní síť");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvořit síť");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Síť bodů $");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Kontrola sítě $");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Síť bodů $");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Kontrola sítě $");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená síť bodů");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upravit výšku sítě");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Zkontrolovat síť");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast. sítě");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 zahřívání podl.");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 zařívání trysky");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Ruční zavedení...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Pevné zavední");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Done Priming");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Canceled");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Leaving G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovat v síťi");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Síťové rovnání");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnání");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mřížkové rovnání");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Srovnat podložku");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Postranní body");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Typ sítě bodu");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Exportovat síť");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Exportovat do PC");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Exportovat do CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Záloha do PC");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Info o UBL do PC");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mřížky");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ruční hustota");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Chytrá hustota");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Zaplnit mřížku");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušit všechno");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušit poslední");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Upravit všechny");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upravit poslední");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Uložiště sítí");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Paměťový slot");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Načíst síť bodů");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Uložit síť bodů");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Síť %i načtena");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Síť %i uložena");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Nedostatek místa");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Ch.: Uložit UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Ch.: Obnovit UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-ofset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Konec Z-ofsetu");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Postupně");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Studená síť bodů");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Chytrá hustota");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Zkontrolovat síť");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Upravit všechny");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Zkontrolovat síť");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Upravit všechny");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Uložit síť bodů");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená síť bodů");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upravit výšku sítě");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Zkontrolovat síť");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast. sítě");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 zahřívání podl.");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 zařívání trysky");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ruční zavedení...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Pevné zavední");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Done Priming");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Canceled");
+ LSTR MSG_G26_LEAVING = _UxGT("Leaving G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovat v síťi");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Síťové rovnání");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnání");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mřížkové rovnání");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Srovnat podložku");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Postranní body");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Typ sítě bodu");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Exportovat síť");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Exportovat do PC");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Exportovat do CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Záloha do PC");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Info o UBL do PC");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mřížky");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ruční hustota");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Chytrá hustota");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Zaplnit mřížku");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušit všechno");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušit poslední");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Upravit všechny");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upravit poslední");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Uložiště sítí");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Paměťový slot");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Načíst síť bodů");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Uložit síť bodů");
+ LSTR MSG_MESH_LOADED = _UxGT("Síť %i načtena");
+ LSTR MSG_MESH_SAVED = _UxGT("Síť %i uložena");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Nedostatek místa");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Ch.: Uložit UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Ch.: Obnovit UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-ofset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Konec Z-ofsetu");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Postupně");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Studená síť bodů");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Chytrá hustota");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Zkontrolovat síť");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Upravit všechny");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Zkontrolovat síť");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Upravit všechny");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Uložit síť bodů");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Nastavení LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Světla");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Světla Předvolby");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Červená");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Žlutá");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Zelená");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Modrá");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Bílá");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Výchozí");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Vlastní světla");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Červená intenzita");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Zelená intezita");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Modrá intenzita");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Bílá intenzita");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Jas");
+ LSTR MSG_LED_CONTROL = _UxGT("Nastavení LED");
+ LSTR MSG_LEDS = _UxGT("Světla");
+ LSTR MSG_LED_PRESETS = _UxGT("Světla Předvolby");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Červená");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Žlutá");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Zelená");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Modrá");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Bílá");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Výchozí");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Vlastní světla");
+ LSTR MSG_INTENSITY_R = _UxGT("Červená intenzita");
+ LSTR MSG_INTENSITY_G = _UxGT("Zelená intezita");
+ LSTR MSG_INTENSITY_B = _UxGT("Modrá intenzita");
+ LSTR MSG_INTENSITY_W = _UxGT("Bílá intenzita");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Jas");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Posouvání...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Uvolnit XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Posunout X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Posunout Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Posunout Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrudér");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extrudér *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Posunout o %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Posunout o 0,1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Posunout o 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Posunout o 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Posunout o 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Rychlost");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Výška podl.");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Tryska");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Tryska ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Podložka");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Komora");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Rychlost vent.");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Rychlost vent. ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Rychlost ex. vent.");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Rychlost ex. vent. ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Průtok");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Průtok ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Ovládaní");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" fakt");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autoteplota");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Zap");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Vyp");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID automatika");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID automatika *");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Vybrat");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Vybrat *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Zrychl");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Max E Jerk");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Odchylka spoje");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Rychlost");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Rychlost");
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Rychlost");
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Rychlost");
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Rychlost");
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Rychlost");
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Rychlost");
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Rychlost");
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Max * Rychlost");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VTrav Min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Akcelerace");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Akcel");
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Akcel");
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Akcel");
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Akcel");
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Akcel");
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Akcel");
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Akcel");
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Max * Akcel");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrakt");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-přejezd");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Kroků/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" kroků/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" kroků/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" kroků/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" kroků/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" kroků/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" kroků/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E kroků/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* kroků/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Teplota");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Pohyb");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E na mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Prum.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Prum. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Vysunout mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Zavést mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K pro posun");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("K pro posun *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Uložit nastavení");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Načíst nastavení");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Obnovit výchozí");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inic. EEPROM");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aktualizace z SD");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset tiskárny");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnovit");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info obrazovka");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Připrava tisku");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Doladění tisku");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Spustit tisk");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Další");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inicializace");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Tisk");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Zrušit");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Hotovo");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Zpět");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Pokračovat");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pozastavit tisk");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Obnovit tisk");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Zastavit tisk");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Tisk objektu");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Zrušit objekt");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Zrušit objekt =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Obnova výpadku");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Tisknout z SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Žádná SD karta");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Uspáno...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Čekání na uživ...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Tisk pozastaven");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Tisknu...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Tisk zrušen");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Žádný pohyb.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("PŘERUSENO. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ZASTAVENO. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Výměna Re.mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraktovat V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zvednuti Z mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retract");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Délka retrakce");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Délka zavedení");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Výměna nástroje");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvih Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Rychlost primár.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Rychlost retrak.");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Tryska standby");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Vyměnit filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Vyměnit filament *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Zavést filament");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Zavést filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Vysunout filament");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Vysunout filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunout vše");
+ LSTR MSG_MOVING = _UxGT("Posouvání...");
+ LSTR MSG_FREE_XY = _UxGT("Uvolnit XY");
+ LSTR MSG_MOVE_X = _UxGT("Posunout X");
+ LSTR MSG_MOVE_Y = _UxGT("Posunout Y");
+ LSTR MSG_MOVE_Z = _UxGT("Posunout Z");
+ LSTR MSG_MOVE_E = _UxGT("Extrudér");
+ LSTR MSG_MOVE_EN = _UxGT("Extrudér *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
+ LSTR MSG_MOVE_N_MM = _UxGT("Posunout o %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Posunout o 0,1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Posunout o 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Posunout o 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Posunout o 100mm");
+ LSTR MSG_SPEED = _UxGT("Rychlost");
+ LSTR MSG_BED_Z = _UxGT("Výška podl.");
+ LSTR MSG_NOZZLE = _UxGT("Tryska");
+ LSTR MSG_NOZZLE_N = _UxGT("Tryska ~");
+ LSTR MSG_BED = _UxGT("Podložka");
+ LSTR MSG_CHAMBER = _UxGT("Komora");
+ LSTR MSG_FAN_SPEED = _UxGT("Rychlost vent.");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Rychlost vent. ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Rychlost ex. vent.");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Rychlost ex. vent. ~");
+ LSTR MSG_FLOW = _UxGT("Průtok");
+ LSTR MSG_FLOW_N = _UxGT("Průtok ~");
+ LSTR MSG_CONTROL = _UxGT("Ovládaní");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" fakt");
+ LSTR MSG_AUTOTEMP = _UxGT("Autoteplota");
+ LSTR MSG_LCD_ON = _UxGT("Zap");
+ LSTR MSG_LCD_OFF = _UxGT("Vyp");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID automatika");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID automatika *");
+ LSTR MSG_SELECT = _UxGT("Vybrat");
+ LSTR MSG_SELECT_E = _UxGT("Vybrat *");
+ LSTR MSG_ACC = _UxGT("Zrychl");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
+ LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
+ LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
+ LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
+ LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
+ LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
+ LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Odchylka spoje");
+ LSTR MSG_VELOCITY = _UxGT("Rychlost");
+ LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Rychlost");
+ LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Rychlost");
+ LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Rychlost");
+ LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Rychlost");
+ LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Rychlost");
+ LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Rychlost");
+ LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Rychlost");
+ LSTR MSG_VMAX_EN = _UxGT("Max * Rychlost");
+ LSTR MSG_VMIN = _UxGT("Vmin");
+ LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min");
+ LSTR MSG_ACCELERATION = _UxGT("Akcelerace");
+ LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Akcel");
+ LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Akcel");
+ LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Akcel");
+ LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Akcel");
+ LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Akcel");
+ LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Akcel");
+ LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Akcel");
+ LSTR MSG_AMAX_EN = _UxGT("Max * Akcel");
+ LSTR MSG_A_RETRACT = _UxGT("A-retrakt");
+ LSTR MSG_A_TRAVEL = _UxGT("A-přejezd");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Kroků/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" kroků/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" kroků/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" kroků/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" kroků/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" kroků/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" kroků/mm");
+ LSTR MSG_E_STEPS = _UxGT("E kroků/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* kroků/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Teplota");
+ LSTR MSG_MOTION = _UxGT("Pohyb");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E na mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Prum.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Prum. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Vysunout mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Zavést mm");
+ LSTR MSG_ADVANCE_K = _UxGT("K pro posun");
+ LSTR MSG_ADVANCE_K_E = _UxGT("K pro posun *");
+ LSTR MSG_CONTRAST = _UxGT("Kontrast LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Uložit nastavení");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Načíst nastavení");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Obnovit výchozí");
+ LSTR MSG_INIT_EEPROM = _UxGT("Inic. EEPROM");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Aktualizace z SD");
+ LSTR MSG_RESET_PRINTER = _UxGT("Reset tiskárny");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnovit");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info obrazovka");
+ LSTR MSG_PREPARE = _UxGT("Připrava tisku");
+ LSTR MSG_TUNE = _UxGT("Doladění tisku");
+ LSTR MSG_START_PRINT = _UxGT("Spustit tisk");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Další");
+ LSTR MSG_BUTTON_INIT = _UxGT("Inicializace");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stop");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Tisk");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reset");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Zrušit");
+ LSTR MSG_BUTTON_DONE = _UxGT("Hotovo");
+ LSTR MSG_BUTTON_BACK = _UxGT("Zpět");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Pokračovat");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pozastavit tisk");
+ LSTR MSG_RESUME_PRINT = _UxGT("Obnovit tisk");
+ LSTR MSG_STOP_PRINT = _UxGT("Zastavit tisk");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Tisk objektu");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušit objekt");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušit objekt =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Obnova výpadku");
+ LSTR MSG_MEDIA_MENU = _UxGT("Tisknout z SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Žádná SD karta");
+ LSTR MSG_DWELL = _UxGT("Uspáno...");
+ LSTR MSG_USERWAIT = _UxGT("Čekání na uživ...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Tisk pozastaven");
+ LSTR MSG_PRINTING = _UxGT("Tisknu...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Tisk zrušen");
+ LSTR MSG_NO_MOVE = _UxGT("Žádný pohyb.");
+ LSTR MSG_KILLED = _UxGT("PŘERUSENO. ");
+ LSTR MSG_STOPPED = _UxGT("ZASTAVENO. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Výměna Re.mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraktovat V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zvednuti Z mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Délka retrakce");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Délka zavedení");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Výměna nástroje");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvih Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Rychlost primár.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Rychlost retrak.");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Tryska standby");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Vyměnit filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Vyměnit filament *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Zavést filament");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Zavést filament *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Vysunout filament");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Vysunout filament *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunout vše");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Načíst médium");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Vyměnit médium");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Vysunout médium");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Faktor zkosení");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch self-test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("BLTouch reset");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("BLTouch zasunout");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch vysunout");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW výsun BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch 5V režim");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch OD režim");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Uložit režim");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Nastavit 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Nastacit OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Vypsat nastavení");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("VAROVANÍ: Špatné nastavení může způsobit škody! Pokračovat?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Inic. TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test Z Ofsetu");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Uložiy");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("vysunout TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Vysunout Z-sondu");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Zasunout Z-sondu");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Domů %s%s%s první");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Celkem");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop abort");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Chyba zahřívání");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEPLOTA");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÍ ÚNIK");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPL. ÚNIK PODL.");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPL. ÚNIK KOMORA");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("VYSOKÁ TEPLOTA");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("NÍZKA TEPLOTA");
- PROGMEM Language_Str MSG_HALTED = _UxGT("TISK. ZASTAVENA");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Proveďte reset");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Zahřívání...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Chlazení...");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Načíst médium");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Vyměnit médium");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Vysunout médium");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Faktor zkosení");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch self-test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("BLTouch reset");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("BLTouch zasunout");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch vysunout");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW výsun BLTouch");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch 5V režim");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch OD režim");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Uložit režim");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Nastavit 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Nastacit OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Vypsat nastavení");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("VAROVANÍ: Špatné nastavení může způsobit škody! Pokračovat?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Inic. TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z Ofsetu");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Uložiy");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("vysunout TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Vysunout Z-sondu");
+ LSTR MSG_MANUAL_STOW = _UxGT("Zasunout Z-sondu");
+ LSTR MSG_HOME_FIRST = _UxGT("Domů %s%s%s první");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Celkem");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop abort");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Chyba zahřívání");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEPLOTA");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÍ ÚNIK");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPL. ÚNIK PODL.");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPL. ÚNIK KOMORA");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("VYSOKÁ TEPLOTA");
+ LSTR MSG_ERR_MINTEMP = _UxGT("NÍZKA TEPLOTA");
+ LSTR MSG_HALTED = _UxGT("TISK. ZASTAVENA");
+ LSTR MSG_PLEASE_RESET = _UxGT("Proveďte reset");
+ LSTR MSG_HEATING = _UxGT("Zahřívání...");
+ LSTR MSG_COOLING = _UxGT("Chlazení...");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Zahřívání podložky");
+ LSTR MSG_BED_HEATING = _UxGT("Zahřívání podložky");
#else
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Zahřívání podl.");
+ LSTR MSG_BED_HEATING = _UxGT("Zahřívání podl.");
#endif
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Chlazení podložky");
+ LSTR MSG_BED_COOLING = _UxGT("Chlazení podložky");
#else
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Chlazení podl.");
+ LSTR MSG_BED_COOLING = _UxGT("Chlazení podl.");
#endif
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Zahřívání komory...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Chlazení komory...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrace");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovat X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovat Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovat Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovat Střed");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta nastavení");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autokalibrace");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Nast.výšku delty");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Nast. Z-ofset");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag rameno");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Výška");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Poloměr");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O tiskárně");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info o tiskárně");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-bodové rovnání");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Lineárni rovnání");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilineární rovnání");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mřížkové rovnání");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statistika");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info o desce");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Rychlost");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Sledování úniku: VYP");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Sledování úniku: ZAP");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Zahřívání komory...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Chlazení komory...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrace");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovat X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovat Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovat Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovat Střed");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta nastavení");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autokalibrace");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Nast.výšku delty");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Nast. Z-ofset");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag rameno");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Výška");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Poloměr");
+ LSTR MSG_INFO_MENU = _UxGT("O tiskárně");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info o tiskárně");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-bodové rovnání");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Lineárni rovnání");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineární rovnání");
+ LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ LSTR MSG_MESH_LEVELING = _UxGT("Mřížkové rovnání");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Statistika");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Info o desce");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Rychlost");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Sledování úniku: VYP");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Sledování úniku: ZAP");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Osvětlení");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas světla");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("NESPRÁVNÁ TISKÁRNA");
+ LSTR MSG_CASE_LIGHT = _UxGT("Osvětlení");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas světla");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("NESPRÁVNÁ TISKÁRNA");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Počet tisků");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončeno");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší tisk");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Celkem vytlačeno");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Počet tisků");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončeno");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší tisk");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Celkem vytlačeno");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Tisky");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Čas");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačeno");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Tisky");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Čas");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Nejdelší");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačeno");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Nap. zdroj");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Buzení motorů");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Motor %");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC uložit EEPROM");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC CHYBA SPOJENÍ");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMĚNA FILAMENTU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("TISK POZASTAVEN");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENÍ FILAMENTU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTÍ FILAMENTU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI OBNOVENÍ:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačit víc");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnovit tisk");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Délka mm senz.fil.");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Parkování selhalo");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Kalibrace selhala");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
+ LSTR MSG_INFO_PSU = _UxGT("Nap. zdroj");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Buzení motorů");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Motor %");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC uložit EEPROM");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC CHYBA SPOJENÍ");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMĚNA FILAMENTU");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("TISK POZASTAVEN");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENÍ FILAMENTU");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTÍ FILAMENTU");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI OBNOVENÍ:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačit víc");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnovit tisk");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Délka mm senz.fil.");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Parkování selhalo");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Kalibrace selhala");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Aktual. MMU firmware!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potř. pozornost.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Obnovit tisk");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Obnovování...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Zavést filament");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Zavést všechny");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zavést do trysky");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunout filament");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Vysun. filament ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vytáhnout filament");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádění fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vytahování fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysouvání fil....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Všechny");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Resetovat MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Resetování MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Vytáhněte, klikněte");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Aktual. MMU firmware!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potř. pozornost.");
+ LSTR MSG_MMU2_RESUME = _UxGT("Obnovit tisk");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Obnovování...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Zavést filament");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Zavést všechny");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zavést do trysky");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunout filament");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Vysun. filament ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vytáhnout filament");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádění fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vytahování fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysouvání fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("Všechny");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Resetovat MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Resetování MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Vytáhněte, klikněte");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Komponenta =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mixér");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Přechod");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Celý přechod");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Přepnout mix");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Střídat mix");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Přechod mix");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Opačný přechod");
+ LSTR MSG_MIX = _UxGT("Mix");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponenta =");
+ LSTR MSG_MIXER = _UxGT("Mixér");
+ LSTR MSG_GRADIENT = _UxGT("Přechod");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Celý přechod");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Přepnout mix");
+ LSTR MSG_CYCLE_MIX = _UxGT("Střídat mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Přechod mix");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Opačný přechod");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástroj");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Spustit V-nástroj");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Ukončit V-nástroj");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástroje");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Resetovat V-nástroj");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Uložit V-nástroj mix");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-nástroj resetovat");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástroj");
+ LSTR MSG_START_VTOOL = _UxGT("Spustit V-nástroj");
+ LSTR MSG_END_VTOOL = _UxGT("Ukončit V-nástroj");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástroje");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Resetovat V-nástroj");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Uložit V-nástroj mix");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-nástroj resetovat");
#else
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástr.");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Spustit V-nástr.");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Ukončit V-nástr.");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástr.");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset. V-nástr.");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Uložit V-nás. mix");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-nástr. reset.");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktivní V-nástr.");
+ LSTR MSG_START_VTOOL = _UxGT("Spustit V-nástr.");
+ LSTR MSG_END_VTOOL = _UxGT("Ukončit V-nástr.");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-nástr.");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Reset. V-nástr.");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Uložit V-nás. mix");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-nástr. reset.");
#endif
- PROGMEM Language_Str MSG_START_Z = _UxGT("Počáteční Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Koncové Z:");
+ LSTR MSG_START_Z = _UxGT("Počáteční Z:");
+ LSTR MSG_END_Z = _UxGT(" Koncové Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Hry");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Bludiště");
+ LSTR MSG_GAMES = _UxGT("Hry");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Bludiště");
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlačítko", "pro obnovení tisku"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkování..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekejte prosím", "na zahájení", "výměny filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stiskněte", "tlačítko..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí trysky"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Čekejte prosím", "na nahřátí tr."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na vysunuti", "filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na zavedení", "filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Vyčkejte na", "vytlačení"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klikněte pro", "ukončení", "vytlačování"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Čekejte prosím", "na pokračování", "tisku"));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlačítko", "pro obnovení tisku"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkování..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekejte prosím", "na zahájení", "výměny filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stiskněte", "tlačítko..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí trysky"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Čekejte prosím", "na nahřátí tr."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na vysunuti", "filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čekejte prosím", "na zavedení", "filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Vyčkejte na", "vytlačení"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klikněte pro", "ukončení", "vytlačování"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Čekejte prosím", "na pokračování", "tisku"));
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlač.", "pro obnovení"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkování..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čekejte..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte, klikněte"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nahřívání..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysouvání..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádění..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačování..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klikněte pro", "ukončení"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračování..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stikněte tlač.", "pro obnovení"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkování..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čekejte..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte, klikněte"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klikněte pro", "nahřátí"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nahřívání..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysouvání..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádění..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačování..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klikněte pro", "ukončení"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračování..."));
#endif // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC budiče");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Proud budičů");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybridní práh");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Domů bez senzorů");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Režim kroků");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop povolen");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" za:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Vůle");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korekce");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Vyhlazení");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC budiče");
+ LSTR MSG_TMC_CURRENT = _UxGT("Proud budičů");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybridní práh");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Domů bez senzorů");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Režim kroků");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop povolen");
+ LSTR MSG_SERVICE_RESET = _UxGT("Reset");
+ LSTR MSG_SERVICE_IN = _UxGT(" za:");
+ LSTR MSG_BACKLASH = _UxGT("Vůle");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korekce");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Vyhlazení");
}
diff --git a/Marlin/src/lcd/language/language_da.h b/Marlin/src/lcd/language/language_da.h
index ef312f1334..ef11906ed6 100644
--- a/Marlin/src/lcd/language/language_da.h
+++ b/Marlin/src/lcd/language/language_da.h
@@ -33,174 +33,171 @@
namespace Language_da {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Danish");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Danish");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" er klar");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kort isat");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kort fjernet");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Slå alle steppere fra");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Home"); // G28
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klik når du er klar");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Næste punkt");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Bed level er færdig!");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Sæt forsk. af home");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Forsk. er nu aktiv");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Sæt origin");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" er klar");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Kort isat");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Kort fjernet");
+ LSTR MSG_MAIN = _UxGT("Menu");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Slå alle steppere fra");
+ LSTR MSG_AUTO_HOME = _UxGT("Auto Home"); // G28
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klik når du er klar");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Næste punkt");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Bed level er færdig!");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Sæt forsk. af home");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Forsk. er nu aktiv");
+ LSTR MSG_SET_ORIGIN = _UxGT("Sæt origin");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Forvarm ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Forvarm ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Alle");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Bed");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" conf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Forvarm ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Forvarm ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" end ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Alle");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" Bed");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Forvarm ") PREHEAT_1_LABEL _UxGT(" conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Forvarm $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Forvarm $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Forvarm $ end");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Forvarm $ end ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Forvarm $ Alle");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Forvarm $ Bed");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Forvarm $ conf");
+ LSTR MSG_PREHEAT_M = _UxGT("Forvarm $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Forvarm $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Forvarm $ end");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Forvarm $ end ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Forvarm $ Alle");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Forvarm $ Bed");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Forvarm $ conf");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Afkøl");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Slå strøm til");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Slå strøm fra");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruder");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Flyt akser");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Juster bed");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Juster bed");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Flyt X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Flyt Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Flyt Z");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Flyt %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Flyt 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Flyt 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Flyt 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Flyt 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Hastighed");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Plade Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dyse");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Dyse ~");
+ LSTR MSG_COOLDOWN = _UxGT("Afkøl");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Slå strøm til");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Slå strøm fra");
+ LSTR MSG_EXTRUDE = _UxGT("Extruder");
+ LSTR MSG_MOVE_AXIS = _UxGT("Flyt akser");
+ LSTR MSG_BED_LEVELING = _UxGT("Juster bed");
+ LSTR MSG_LEVEL_BED = _UxGT("Juster bed");
+ LSTR MSG_MOVE_X = _UxGT("Flyt X");
+ LSTR MSG_MOVE_Y = _UxGT("Flyt Y");
+ LSTR MSG_MOVE_Z = _UxGT("Flyt Z");
+ LSTR MSG_MOVE_N_MM = _UxGT("Flyt %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Flyt 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Flyt 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Flyt 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Flyt 100mm");
+ LSTR MSG_SPEED = _UxGT("Hastighed");
+ LSTR MSG_BED_Z = _UxGT("Plade Z");
+ LSTR MSG_NOZZLE = _UxGT("Dyse");
+ LSTR MSG_NOZZLE_N = _UxGT("Dyse ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Plade");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Blæser hastighed");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Blæser hastighed ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrol");
- PROGMEM Language_Str MSG_MIN = _UxGT(" \002 Min");
- PROGMEM Language_Str MSG_MAX = _UxGT(" \002 Max");
- PROGMEM Language_Str MSG_FACTOR = _UxGT(" \002 Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Til");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Fra");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Vælg");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Vælg *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retract");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-rejse");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatur");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Bevægelse");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E i mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrast");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gem i EEPROM");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Hent fra EEPROM");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Gendan Defaults");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Genopfrisk");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info skærm");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Forbered");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pause printet");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Forsæt printet");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop printet");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Print fra SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Intet SD kort");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Dvale...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Venter på bruger...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print annulleret");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Ingen bevægelse.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("DRÆBT. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPET. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Tilbagetræk mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Skift Re.mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Tilbagetræk V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Skift Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retract");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Skift filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Skift filament *");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Skift SD kort");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Probe udenfor plade");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Selv-Test");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s først");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Opvarmning fejlet");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Fejl: reserve temp");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Temp løber løbsk");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Fejl: Maks temp");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Fejl: Min temp");
- PROGMEM Language_Str MSG_HALTED = _UxGT("PRINTER STOPPET");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reset Venligst");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // Kun et bogstav
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // Kun et bogstav
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // Kun et bogstav
- PROGMEM Language_Str MSG_HEATING = _UxGT("Opvarmer...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Opvarmer plade...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrering");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrer X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrer Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrer Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrerings Center");
+ LSTR MSG_BED = _UxGT("Plade");
+ LSTR MSG_FAN_SPEED = _UxGT("Blæser hastighed");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Blæser hastighed ~");
+ LSTR MSG_CONTROL = _UxGT("Kontrol");
+ LSTR MSG_MIN = _UxGT(" \002 Min");
+ LSTR MSG_MAX = _UxGT(" \002 Max");
+ LSTR MSG_FACTOR = _UxGT(" \002 Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
+ LSTR MSG_LCD_ON = _UxGT("Til");
+ LSTR MSG_LCD_OFF = _UxGT("Fra");
+ LSTR MSG_SELECT = _UxGT("Vælg");
+ LSTR MSG_SELECT_E = _UxGT("Vælg *");
+ LSTR MSG_A_RETRACT = _UxGT("A-retract");
+ LSTR MSG_A_TRAVEL = _UxGT("A-rejse");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatur");
+ LSTR MSG_MOTION = _UxGT("Bevægelse");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E i mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
+ LSTR MSG_CONTRAST = _UxGT("LCD kontrast");
+ LSTR MSG_STORE_EEPROM = _UxGT("Gem i EEPROM");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Hent fra EEPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Gendan Defaults");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Genopfrisk");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info skærm");
+ LSTR MSG_PREPARE = _UxGT("Forbered");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pause printet");
+ LSTR MSG_RESUME_PRINT = _UxGT("Forsæt printet");
+ LSTR MSG_STOP_PRINT = _UxGT("Stop printet");
+ LSTR MSG_MEDIA_MENU = _UxGT("Print fra SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Intet SD kort");
+ LSTR MSG_DWELL = _UxGT("Dvale...");
+ LSTR MSG_USERWAIT = _UxGT("Venter på bruger...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Print annulleret");
+ LSTR MSG_NO_MOVE = _UxGT("Ingen bevægelse.");
+ LSTR MSG_KILLED = _UxGT("DRÆBT. ");
+ LSTR MSG_STOPPED = _UxGT("STOPPET. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Tilbagetræk mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Skift Re.mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Tilbagetræk V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Skift Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Skift filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Skift filament *");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Skift SD kort");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Probe udenfor plade");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Selv-Test");
+ LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s først");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Opvarmning fejlet");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Fejl: reserve temp");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("Temp løber løbsk");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Fejl: Maks temp");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Fejl: Min temp");
+ LSTR MSG_HALTED = _UxGT("PRINTER STOPPET");
+ LSTR MSG_PLEASE_RESET = _UxGT("Reset Venligst");
+ LSTR MSG_HEATING = _UxGT("Opvarmer...");
+ LSTR MSG_BED_HEATING = _UxGT("Opvarmer plade...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrering");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrer X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrer Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrer Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrerings Center");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Om Printer");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Kort Info");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
+ LSTR MSG_INFO_MENU = _UxGT("Om Printer");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Kort Info");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Ant. Prints");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total print tid");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Længste print");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruderet");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Ant. Prints");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total print tid");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Længste print");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruderet");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Prints");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Længste");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderet");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Færdige");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Længste");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderet");
#endif
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Strømfors.");
+ LSTR MSG_INFO_PSU = _UxGT("Strømfors.");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Driv Styrke");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driv %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driv %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driv %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driv %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driv %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driv %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driv %");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Driv Styrke");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driv %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driv %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driv %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driv %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driv %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driv %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Driv %");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Forsæt print");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Forsæt print");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Forkert printer");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Forkert printer");
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Vent på start", "af filament", "skift"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Vent på", "filament udskyd."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Indsæt filament", "og tryk på knap", "for at fortsætte..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Vent på", "filament indtag"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Vent på at print", "fortsætter"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Vent på start", "af filament", "skift"));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Vent på", "filament udskyd."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Indsæt filament", "og tryk på knap", "for at fortsætte..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Vent på", "filament indtag"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Vent på at print", "fortsætter"));
#else // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Vent venligst..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Udskyder..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Indsæt og klik"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Indtager..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsætter..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Vent venligst..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Udskyder..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Indsæt og klik"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Indtager..."));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsætter..."));
#endif // LCD_HEIGHT < 4
}
diff --git a/Marlin/src/lcd/language/language_de.h b/Marlin/src/lcd/language/language_de.h
index 318f00315b..8160ad4724 100644
--- a/Marlin/src/lcd/language/language_de.h
+++ b/Marlin/src/lcd/language/language_de.h
@@ -31,620 +31,612 @@
namespace Language_de {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Deutsch");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Deutsch");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" bereit");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("JA");
- PROGMEM Language_Str MSG_NO = _UxGT("NEIN");
- PROGMEM Language_Str MSG_BACK = _UxGT("Zurück");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Abbruch...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Medium erkannt");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Medium entfernt");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Warten auf Medium");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("SD Init fehlgesch.");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Medium Lesefehler");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB Gerät entfernt");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB Start fehlge.");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall überschritten");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstopp"); // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Software-Endstopp");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Hauptmenü");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Erw. Einstellungen");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguration");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug-Menü");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Statusbalken-Test");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Home");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Z-Achsen ausgleichen");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("XYZ homen");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klick zum Starten");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nächste Koordinate");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivellieren fertig!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Ausblendhöhe");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Setze Homeversatz");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Homeversatz aktiv");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Setze Nullpunkte"); //"G92 X0 Y0 Z0" commented out in marlinui.cpp
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" bereit");
+ LSTR MSG_YES = _UxGT("JA");
+ LSTR MSG_NO = _UxGT("NEIN");
+ LSTR MSG_BACK = _UxGT("Zurück");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Abbruch...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Medium erkannt");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Medium entfernt");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Warten auf Medium");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("SD Init fehlgesch.");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Medium Lesefehler");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB Gerät entfernt");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB Start fehlge.");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall überschritten");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstopp"); // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Software-Endstopp");
+ LSTR MSG_MAIN = _UxGT("Hauptmenü");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Erw. Einstellungen");
+ LSTR MSG_CONFIGURATION = _UxGT("Konfiguration");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Motoren deaktivieren"); // M84 :: Max length 19 characters
+ LSTR MSG_DEBUG_MENU = _UxGT("Debug-Menü");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Statusbalken-Test");
+ LSTR MSG_AUTO_HOME = _UxGT("Auto Home");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Home X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Z-Achsen ausgleichen");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ homen");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klick zum Starten");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nächste Koordinate");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivellieren fertig!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Ausblendhöhe");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Setze Homeversatz");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Homeversatz aktiv");
+ LSTR MSG_SET_ORIGIN = _UxGT("Setze Nullpunkte"); //"G92 X0 Y0 Z0" commented out in marlinui.cpp
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" Vorwärmen ~");
- PROGMEM Language_Str MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" Alles Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" Bett Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" Einstellungen");
+ LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" Vorwärmen");
+ LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" Vorwärmen ~");
+ LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärmen");
+ LSTR MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" Extr. Vorwärm. ~");
+ LSTR MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" Alles Vorwärmen");
+ LSTR MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" Bett Vorwärmen");
+ LSTR MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" Einstellungen");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("$ Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("$ Vorwärmen") " ~";
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("$ Extr. Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("$ Extr. Vorwärm. ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("$ Alles Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("$ Bett Vorwärmen");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("$ Einstellungen");
+ LSTR MSG_PREHEAT_M = _UxGT("$ Vorwärmen");
+ LSTR MSG_PREHEAT_M_H = _UxGT("$ Vorwärmen") " ~";
+ LSTR MSG_PREHEAT_M_END = _UxGT("$ Extr. Vorwärmen");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("$ Extr. Vorwärm. ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("$ Alles Vorwärmen");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("$ Bett Vorwärmen");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("$ Einstellungen");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("benutzerdef. Heizen");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Abkühlen");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frequenz");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Laser");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Laserleistung");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Spindel-Steuerung");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Spindelleistung");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spindelrichtung");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Netzteil ein");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Netzteil aus");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudieren");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Einzug");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Achsen bewegen");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Bett-Nivellierung");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Bett nivellieren");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Bett ausrichten");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Nächste Ecke");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Netz Editor");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Netz bearbeiten");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Netzbearb. angeh.");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Messpunkt");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z-Wert");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Benutzer-Menü");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Sondentest");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punkt");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Zu weit draußen");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Abweichung");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX-Modus");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Werkzeugversätze");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Autom. parken");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplizieren");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Spiegelkopie");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("vollstä. Kontrolle");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2. Düse X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2. Düse Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2. Düse Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 ausführen");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL-Werkzeuge");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Berührungspunkt");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Netz manuell erst.");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Unterlegen & messen");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Messen");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Entfernen & messen");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Nächster Punkt...");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktivieren");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL deaktivieren");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Betttemperatur");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Betttemperatur");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend-Temp.");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend-Temp.");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Netz bearbeiten");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Eigenes Netz bearb.");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Feineinstellung...");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Bearbeitung beendet");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Eigenes Netz erst.");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Netz erstellen");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("benutzerdef. Heizen");
+ LSTR MSG_COOLDOWN = _UxGT("Abkühlen");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequenz");
+ LSTR MSG_LASER_MENU = _UxGT("Laser");
+ LSTR MSG_LASER_POWER = _UxGT("Laserleistung");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Spindel-Steuerung");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Spindelleistung");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindelrichtung");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Netzteil ein");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Netzteil aus");
+ LSTR MSG_EXTRUDE = _UxGT("Extrudieren");
+ LSTR MSG_RETRACT = _UxGT("Einzug");
+ LSTR MSG_MOVE_AXIS = _UxGT("Achsen bewegen");
+ LSTR MSG_BED_LEVELING = _UxGT("Bett-Nivellierung");
+ LSTR MSG_LEVEL_BED = _UxGT("Bett nivellieren");
+ LSTR MSG_BED_TRAMMING = _UxGT("Bett ausrichten");
+ LSTR MSG_NEXT_CORNER = _UxGT("Nächste Ecke");
+ LSTR MSG_MESH_EDITOR = _UxGT("Netz Editor");
+ LSTR MSG_EDIT_MESH = _UxGT("Netz bearbeiten");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Netzbearb. angeh.");
+ LSTR MSG_PROBING_POINT = _UxGT("Messpunkt");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Z-Wert");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Benutzer-Menü");
+ LSTR MSG_M48_TEST = _UxGT("M48 Sondentest");
+ LSTR MSG_M48_POINT = _UxGT("M48 Punkt");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Zu weit draußen");
+ LSTR MSG_M48_DEVIATION = _UxGT("Abweichung");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX-Modus");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Werkzeugversätze");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Autom. parken");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplizieren");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Spiegelkopie");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("vollstä. Kontrolle");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. Düse Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. Düse @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("G29 ausführen");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL-Werkzeuge");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Berührungspunkt");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Netz manuell erst.");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Unterlegen & messen");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Messen");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Entfernen & messen");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Nächster Punkt...");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktivieren");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL deaktivieren");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Betttemperatur");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Betttemperatur");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend-Temp.");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend-Temp.");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Netz bearbeiten");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Eigenes Netz bearb.");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Feineinstellung...");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Bearbeitung beendet");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Eigenes Netz erst.");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Netz erstellen");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("$ Netz erstellen");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("$ Netz validieren");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("$ Netz erstellen");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("$ Netz validieren");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Netz erstellen kalt");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Netzhöhe einst.");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Höhe");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Netz validieren");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Eig. Netz validieren");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 heizt Bett");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Düse aufheizen");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Manuell Prime...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Feste Länge Prime");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Priming fertig");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 abgebrochen");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("G26 verlassen");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Netzerst. forts.");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Netz-Nivellierung");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Punkt-Nivell.");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Gitternetz-Nivell.");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Netz nivellieren");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Eckpunkte");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Kartentyp");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Karte ausgeben");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Ausgabe für Host");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Ausgabe für CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Externe Sicherung");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("UBL-Info ausgeben");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Menge an Füllung");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manuelles Füllen");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Cleveres Füllen");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Netz Füllen");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Alles annullieren");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Nächstlieg. ann.");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Feineinst. Alles");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Feineinst. Nächstl.");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Netz-Speicherplatz");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Speicherort");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Bettnetz laden");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Bettnetz speichern");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Netz %i geladen");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Netz %i gespeichert");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Kein Speicher");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err:UBL speichern");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err:UBL wiederherst.");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Versatz: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Versatz angehalten");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Schrittweises UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Netz erstellen kalt");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Cleveres Füllen");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Netz validieren");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Feineinst. Alles");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Netz validieren");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Feineinst. Alles");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Bettnetz speichern");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Netz erstellen kalt");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Netzhöhe einst.");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Höhe");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Netz validieren");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Eig. Netz validieren");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 heizt Bett");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Düse aufheizen");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manuell Prime...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Feste Länge Prime");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Priming fertig");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 abgebrochen");
+ LSTR MSG_G26_LEAVING = _UxGT("G26 verlassen");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Netzerst. forts.");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Netz-Nivellierung");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Punkt-Nivell.");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Gitternetz-Nivell.");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Netz nivellieren");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Eckpunkte");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Kartentyp");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Karte ausgeben");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Ausgabe für Host");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Ausgabe für CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Externe Sicherung");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("UBL-Info ausgeben");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Menge an Füllung");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manuelles Füllen");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Cleveres Füllen");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Netz Füllen");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Alles annullieren");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Nächstlieg. ann.");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Feineinst. Alles");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Feineinst. Nächstl.");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Netz-Speicherplatz");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Speicherort");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Bettnetz laden");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Bettnetz speichern");
+ LSTR MSG_MESH_LOADED = _UxGT("Netz %i geladen");
+ LSTR MSG_MESH_SAVED = _UxGT("Netz %i gespeichert");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Kein Speicher");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err:UBL speichern");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err:UBL wiederherst.");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Versatz: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Versatz angehalten");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Schrittweises UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Netz erstellen kalt");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Cleveres Füllen");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Netz validieren");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Feineinst. Alles");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Netz validieren");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Feineinst. Alles");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Bettnetz speichern");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Licht-Steuerung");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Licht");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Licht-Einstellung");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rot");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Gelb");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Grün");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blau");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violett");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Weiß");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Standard");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Benutzerdefiniert");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensität Rot");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensität Grün");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensität Blau");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensität Weiß");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Helligkeit");
+ LSTR MSG_LED_CONTROL = _UxGT("Licht-Steuerung");
+ LSTR MSG_LEDS = _UxGT("Licht");
+ LSTR MSG_LED_PRESETS = _UxGT("Licht-Einstellung");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Rot");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Gelb");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Grün");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Blau");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violett");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Weiß");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Standard");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Benutzerdefiniert");
+ LSTR MSG_INTENSITY_R = _UxGT("Intensität Rot");
+ LSTR MSG_INTENSITY_G = _UxGT("Intensität Grün");
+ LSTR MSG_INTENSITY_B = _UxGT("Intensität Blau");
+ LSTR MSG_INTENSITY_W = _UxGT("Intensität Weiß");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Helligkeit");
- PROGMEM Language_Str MSG_MOVING = _UxGT("In Bewegung...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Abstand XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Bewege X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Bewege Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Bewege Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Bewege Extruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Bewege Extruder *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend zu kalt");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT(" %s mm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT(" 0,1 mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT(" 1,0 mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT(" 10,0 mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("100,0 mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Geschw.");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Bett Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Düse");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Düse ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Düse geparkt");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Düse bereit");
- PROGMEM Language_Str MSG_BED = _UxGT("Bett");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Gehäuse");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Lüfter");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Lüfter ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Gespeich. Lüfter ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Geschw. Extralüfter");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Geschw. Extralüfter ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Lüfter Kontroller");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Lüfter Leerlauf");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Motorlast Modus");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Lüfter Motorlast");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Ausschalt Delay");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flussrate");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flussrate ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Einstellungen");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Faktor");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto Temperatur");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("an");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("aus");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("PID Tuning fertig");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune fehlge. Falscher Extruder");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune fehlge. Temperatur zu hoch.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Autotune fehlge.! Timeout.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Auswählen");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Auswählen *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Beschleunigung");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Max E Jerk");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Geschwindigkeit");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("V max ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("V max ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("V max ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("V max ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("V max ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("V max ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("V max ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("V max *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("V min ");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("V min Leerfahrt");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Beschleunigung");
- PROGMEM Language_Str MSG_AMAX = _UxGT("A max "); // space intentional
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("A max ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("A max ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("A max ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("A max ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("A max ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("A max ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("A max ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("A max *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A Einzug");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A Leerfahrt");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("max. Frequenz");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("min. Vorschub");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Steps/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_E_STEPS = LCD_STR_E _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* Steps/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatur");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Bewegung");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Filamentdurchmesser");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Filamentdurchmesser *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Entladen mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Laden mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Vorschubfaktor");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Vorschubfaktor *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD-Kontrast");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Konfig. speichern");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Konfig. laden");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Standardwerte laden");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Werkseinstellungen");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fehler");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fehler");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fehler");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Einstell. gespei.");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Drucker neustarten");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aktualisieren");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Vorbereitung");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Justierung");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Power Monitor");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Strom");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Spannung");
- PROGMEM Language_Str MSG_POWER = _UxGT("Power");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Starte Druck");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Weiter");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Bestätigen");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Drucken");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reseten");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignorieren");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Abbrechen");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Fertig");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Zurück");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Weiter");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Pause...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("SD-Druck pausieren");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("SD-Druck fortsetzen");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("SD-Druck abbrechen");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Objekt drucken");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Objekt abbrechen");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Objekt abbrechen =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Wiederh. n. Stroma.");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Druck vom Medium");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Kein Medium");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Warten...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Klick zum Fortsetzen");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Druck pausiert...");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Druckt...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Druck abgebrochen");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Druck fertig");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Motoren angeschaltet");
- PROGMEM Language_Str MSG_KILLED = _UxGT("ABGEBROCHEN");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ANGEHALTEN");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Einzug mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Wechs. Einzug mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("V Einzug");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z-Sprung mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Wechs. Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Autom. Einzug");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Einzugslänge");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra Einzug");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Entladelänge");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Werkzeugwechsel");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z anheben");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime-Geschwin.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Einzug-Geschwin.");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Kopf parken");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Rückzugsgeschwindigkeit");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Lüfter Geschwindigkeit");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Lüfter Zeit");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto AN");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto AUS");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Werkzeugmigration");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-Migration");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Letzter Extruder");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrieren zu *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Filament wechseln");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Filament wechseln *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Filament laden");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Filament laden *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Filament entladen");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Filament entladen *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Alles entladen");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Medium initial."); // Manually initialize the SD-card via user interface
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Medium getauscht"); // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Medium freigeben"); // if Marlin gets confused - M22
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-Sonde außerhalb");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Korrekturfaktor");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Selbsttest");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Zurücksetzen");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Einfahren");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Ausfahren");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modus");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modus");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modus");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Setze auf 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Setze auf OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Modus: ");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("ACHTUNG: Falsche Einstellung - kann zu Beschädigung führen! Fortfahren?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("TouchMI initial.");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test Z-Versatz");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Speichern");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI ausfahren");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Z-Sonde ausfahren");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Z-Sonde einfahren");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Vorher %s%s%s homen");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Sondenversatz");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Sondenversatz X");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Sondenversatz Y");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Sondenversatz Z");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Abbr. mit Endstopp");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("HEIZEN ERFOLGLOS");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEMP-ABWEI.");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("BETT") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("GEH.") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = " " LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN");
- PROGMEM Language_Str MSG_ERR_MINTEMP = " " LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN");
- PROGMEM Language_Str MSG_HALTED = _UxGT("DRUCKER GESTOPPT");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Bitte neustarten");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("t"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("heizt...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("kühlt...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bett heizt...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Bett kühlt...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Gehäuse heizt...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Gehäuse kühlt...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrieren");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriere X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriere Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriere Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriere Mitte");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Einst. anzeig.");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autom. Kalibrierung");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Höhe setzen");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Sondenversatz Z");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Höhe");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radius");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Über den Drucker");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Drucker-Info");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Punkt-Nivellierung");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Lineare Nivellierung");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilineare Nivell.");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Netz-Nivellierung");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Drucker-Statistik");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Board-Info");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistoren");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruder");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudrate");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokoll");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: AUS");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: AN");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Beleuchtung");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Helligkeit");
+ LSTR MSG_MOVING = _UxGT("In Bewegung...");
+ LSTR MSG_FREE_XY = _UxGT("Abstand XY");
+ LSTR MSG_MOVE_X = _UxGT("Bewege X");
+ LSTR MSG_MOVE_Y = _UxGT("Bewege Y");
+ LSTR MSG_MOVE_Z = _UxGT("Bewege Z");
+ LSTR MSG_MOVE_E = _UxGT("Bewege Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Bewege Extruder *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend zu kalt");
+ LSTR MSG_MOVE_N_MM = _UxGT(" %s mm");
+ LSTR MSG_MOVE_01MM = _UxGT(" 0,1 mm");
+ LSTR MSG_MOVE_1MM = _UxGT(" 1,0 mm");
+ LSTR MSG_MOVE_10MM = _UxGT(" 10,0 mm");
+ LSTR MSG_MOVE_100MM = _UxGT("100,0 mm");
+ LSTR MSG_SPEED = _UxGT("Geschw.");
+ LSTR MSG_BED_Z = _UxGT("Bett Z");
+ LSTR MSG_NOZZLE = _UxGT("Düse");
+ LSTR MSG_NOZZLE_N = _UxGT("Düse ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Düse geparkt");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Düse bereit");
+ LSTR MSG_BED = _UxGT("Bett");
+ LSTR MSG_CHAMBER = _UxGT("Gehäuse");
+ LSTR MSG_FAN_SPEED = _UxGT("Lüfter");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Lüfter ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Gespeich. Lüfter ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Geschw. Extralüfter");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Geschw. Extralüfter ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Lüfter Kontroller");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Lüfter Leerlauf");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Motorlast Modus");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Lüfter Motorlast");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Ausschalt Delay");
+ LSTR MSG_FLOW = _UxGT("Flussrate");
+ LSTR MSG_FLOW_N = _UxGT("Flussrate ~");
+ LSTR MSG_CONTROL = _UxGT("Einstellungen");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Faktor");
+ LSTR MSG_AUTOTEMP = _UxGT("Auto Temperatur");
+ LSTR MSG_LCD_ON = _UxGT("an");
+ LSTR MSG_LCD_OFF = _UxGT("aus");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID Tuning fertig");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune fehlge. Falscher Extruder");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune fehlge. Temperatur zu hoch.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Autotune fehlge.! Timeout.");
+ LSTR MSG_SELECT = _UxGT("Auswählen");
+ LSTR MSG_SELECT_E = _UxGT("Auswählen *");
+ LSTR MSG_ACC = _UxGT("Beschleunigung");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
+ LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
+ LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
+ LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
+ LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
+ LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
+ LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ LSTR MSG_VELOCITY = _UxGT("Geschwindigkeit");
+ LSTR MSG_VMAX_A = _UxGT("V max ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("V max ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("V max ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("V max ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("V max ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("V max ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("V max ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("V max *");
+ LSTR MSG_VMIN = _UxGT("V min ");
+ LSTR MSG_VTRAV_MIN = _UxGT("V min Leerfahrt");
+ LSTR MSG_ACCELERATION = _UxGT("Beschleunigung");
+ LSTR MSG_AMAX = _UxGT("A max "); // space intentional
+ LSTR MSG_AMAX_A = _UxGT("A max ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("A max ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("A max ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("A max ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("A max ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("A max ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("A max ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("A max *");
+ LSTR MSG_A_RETRACT = _UxGT("A Einzug");
+ LSTR MSG_A_TRAVEL = _UxGT("A Leerfahrt");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("max. Frequenz");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("min. Vorschub");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Steps/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Steps/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Steps/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Steps/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Steps/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Steps/mm");
+ LSTR MSG_E_STEPS = LCD_STR_E _UxGT(" Steps/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* Steps/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatur");
+ LSTR MSG_MOTION = _UxGT("Bewegung");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Filamentdurchmesser");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Filamentdurchmesser *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Entladen mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Laden mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Vorschubfaktor");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Vorschubfaktor *");
+ LSTR MSG_CONTRAST = _UxGT("LCD-Kontrast");
+ LSTR MSG_STORE_EEPROM = _UxGT("Konfig. speichern");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Konfig. laden");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Standardwerte laden");
+ LSTR MSG_INIT_EEPROM = _UxGT("Werkseinstellungen");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fehler");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fehler");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fehler");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Einstell. gespei.");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("FW Update vom Medium");
+ LSTR MSG_RESET_PRINTER = _UxGT("Drucker neustarten");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aktualisieren");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info");
+ LSTR MSG_PREPARE = _UxGT("Vorbereitung");
+ LSTR MSG_TUNE = _UxGT("Justierung");
+ LSTR MSG_POWER_MONITOR = _UxGT("Power Monitor");
+ LSTR MSG_CURRENT = _UxGT("Strom");
+ LSTR MSG_VOLTAGE = _UxGT("Spannung");
+ LSTR MSG_POWER = _UxGT("Power");
+ LSTR MSG_START_PRINT = _UxGT("Starte Druck");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Weiter");
+ LSTR MSG_BUTTON_INIT = _UxGT("Bestätigen");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stop");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Drucken");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reseten");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorieren");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Abbrechen");
+ LSTR MSG_BUTTON_DONE = _UxGT("Fertig");
+ LSTR MSG_BUTTON_BACK = _UxGT("Zurück");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Weiter");
+ LSTR MSG_PAUSING = _UxGT("Pause...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("SD-Druck pausieren");
+ LSTR MSG_RESUME_PRINT = _UxGT("SD-Druck fortsetzen");
+ LSTR MSG_STOP_PRINT = _UxGT("SD-Druck abbrechen");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Objekt drucken");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Objekt abbrechen");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objekt abbrechen =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Wiederh. n. Stroma.");
+ LSTR MSG_MEDIA_MENU = _UxGT("Druck vom Medium");
+ LSTR MSG_NO_MEDIA = _UxGT("Kein Medium");
+ LSTR MSG_DWELL = _UxGT("Warten...");
+ LSTR MSG_USERWAIT = _UxGT("Klick zum Fortsetzen");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Druck pausiert...");
+ LSTR MSG_PRINTING = _UxGT("Druckt...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Druck abgebrochen");
+ LSTR MSG_PRINT_DONE = _UxGT("Druck fertig");
+ LSTR MSG_NO_MOVE = _UxGT("Motoren angeschaltet");
+ LSTR MSG_KILLED = _UxGT("ABGEBROCHEN");
+ LSTR MSG_STOPPED = _UxGT("ANGEHALTEN");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Einzug mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Wechs. Einzug mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("V Einzug");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z-Sprung mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Wechs. Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Autom. Einzug");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Einzugslänge");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra Einzug");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Entladelänge");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Werkzeugwechsel");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z anheben");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime-Geschwin.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Einzug-Geschwin.");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Kopf parken");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Rückzugsgeschwindigkeit");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Lüfter Geschwindigkeit");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Lüfter Zeit");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto AN");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto AUS");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Werkzeugmigration");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-Migration");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Letzter Extruder");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrieren zu *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Filament wechseln");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Filament wechseln *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Filament laden");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Filament laden *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Filament entladen");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Filament entladen *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Alles entladen");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Medium initial."); // Manually initialize the SD-card via user interface
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Medium getauscht"); // SD-card changed by user. For machines with no autocarddetect. Both send "M21"
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Medium freigeben"); // if Marlin gets confused - M22
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z-Sonde außerhalb");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Korrekturfaktor");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Selbsttest");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Zurücksetzen");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Einfahren");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Ausfahren");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modus");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modus");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modus");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Setze auf 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Setze auf OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Modus: ");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("ACHTUNG: Falsche Einstellung - kann zu Beschädigung führen! Fortfahren?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("TouchMI initial.");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z-Versatz");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Speichern");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI ausfahren");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Sonde ausfahren");
+ LSTR MSG_MANUAL_STOW = _UxGT("Z-Sonde einfahren");
+ LSTR MSG_HOME_FIRST = _UxGT("Vorher %s%s%s homen");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Sondenversatz");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Sondenversatz X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Sondenversatz Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Sondenversatz Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Abbr. mit Endstopp");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("HEIZEN ERFOLGLOS");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("REDUND. TEMP-ABWEI.");
+ LSTR MSG_THERMAL_RUNAWAY = " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BETT") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("GEH.") " " LCD_STR_THERMOMETER _UxGT(" NICHT ERREICHT");
+ LSTR MSG_ERR_MAXTEMP = " " LCD_STR_THERMOMETER _UxGT(" ÜBERSCHRITTEN");
+ LSTR MSG_ERR_MINTEMP = " " LCD_STR_THERMOMETER _UxGT(" UNTERSCHRITTEN");
+ LSTR MSG_HALTED = _UxGT("DRUCKER GESTOPPT");
+ LSTR MSG_PLEASE_RESET = _UxGT("Bitte neustarten");
+ LSTR MSG_SHORT_DAY = _UxGT("t"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ LSTR MSG_HEATING = _UxGT("heizt...");
+ LSTR MSG_COOLING = _UxGT("kühlt...");
+ LSTR MSG_BED_HEATING = _UxGT("Bett heizt...");
+ LSTR MSG_BED_COOLING = _UxGT("Bett kühlt...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Gehäuse heizt...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Gehäuse kühlt...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrieren");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriere X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriere Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriere Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriere Mitte");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Einst. anzeig.");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Autom. Kalibrierung");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Höhe setzen");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Sondenversatz Z");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Höhe");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
+ LSTR MSG_INFO_MENU = _UxGT("Über den Drucker");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Drucker-Info");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-Punkt-Nivellierung");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Lineare Nivellierung");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineare Nivell.");
+ LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ LSTR MSG_MESH_LEVELING = _UxGT("Netz-Nivellierung");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Drucker-Statistik");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Board-Info");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistoren");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruder");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baudrate");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokoll");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: AUS");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: AN");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
+ LSTR MSG_CASE_LIGHT = _UxGT("Beleuchtung");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Helligkeit");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Falscher Drucker");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Falscher Drucker");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Gesamte Drucke");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette Drucke");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Gesamte Druckzeit");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Längste Druckzeit");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Gesamt Extrudiert");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Gesamte Drucke");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette Drucke");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Gesamte Druckzeit");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längste Druckzeit");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Gesamt Extrudiert");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Drucke");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Gesamte");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Längste");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Drucke");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Komplette");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Gesamte");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längste");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Netzteil");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Motorleistung");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Treiber %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Treiber %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Treiber %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Treiber %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Treiber %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Treiber %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Treiber %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC Verbindungsfehler");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Werte speichern");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT WECHSEL");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("DRUCK PAUSIERT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMENT LADEN");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMENT ENTLADEN");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("FORTS. OPTIONEN:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Mehr entladen");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Druck weiter");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Düse: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Runout-Sensor");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout-Weg mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Homing gescheitert");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Probing gescheitert");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ LSTR MSG_INFO_PSU = _UxGT("Netzteil");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Motorleistung");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Treiber %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Treiber %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Treiber %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Treiber %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Treiber %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Treiber %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Treiber %");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC Verbindungsfehler");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Werte speichern");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT WECHSEL");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("DRUCK PAUSIERT");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMENT LADEN");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMENT ENTLADEN");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("FORTS. OPTIONEN:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Mehr entladen");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Druck weiter");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Düse: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout-Sensor");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout-Weg mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing gescheitert");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing gescheitert");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("FILAMENT WÄHLEN");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU handeln erfor.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Druck fortsetzen");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Fortfahren...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Filament laden");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Lade alle");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Düse laden");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Filament auswerfen");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Filament ~ auswerfen");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Filament entladen ");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Lade Fila. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Fila. auswerfen...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Fila. entladen...");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Alle");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("setze MMU zurück");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU zurücksetzen...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Entfernen, klicken");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("FILAMENT WÄHLEN");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU handeln erfor.");
+ LSTR MSG_MMU2_RESUME = _UxGT("Druck fortsetzen");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Fortfahren...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Filament laden");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Lade alle");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Düse laden");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Filament auswerfen");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Filament ~ auswerfen");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Filament entladen ");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Lade Fila. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Fila. auswerfen...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Fila. entladen...");
+ LSTR MSG_MMU2_ALL = _UxGT("Alle");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
+ LSTR MSG_MMU2_RESET = _UxGT("setze MMU zurück");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU zurücksetzen...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Entfernen, klicken");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Komponente =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mixer");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient"); // equal Farbverlauf
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Volle Gradient");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Mix umschalten");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Zyklus Mix");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Umgekehrte Gradient");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktives V-Tool");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("V-Tool Start");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("V-Tool Ende");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("V-Tool Alias");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("V-Tools Reseten");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("V-Tool Mix sichern");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-Tools ist resetet");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Z Start:");
- PROGMEM Language_Str MSG_END_Z = _UxGT("Z Ende:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Spiele");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_MIX = _UxGT("Mix");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponente =");
+ LSTR MSG_MIXER = _UxGT("Mixer");
+ LSTR MSG_GRADIENT = _UxGT("Gradient"); // equal Farbverlauf
+ LSTR MSG_FULL_GRADIENT = _UxGT("Volle Gradient");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Mix umschalten");
+ LSTR MSG_CYCLE_MIX = _UxGT("Zyklus Mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Umgekehrte Gradient");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktives V-Tool");
+ LSTR MSG_START_VTOOL = _UxGT("V-Tool Start");
+ LSTR MSG_END_VTOOL = _UxGT("V-Tool Ende");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("V-Tool Alias");
+ LSTR MSG_RESET_VTOOLS = _UxGT("V-Tools Reseten");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("V-Tool Mix sichern");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-Tools ist resetet");
+ LSTR MSG_START_Z = _UxGT("Z Start:");
+ LSTR MSG_END_Z = _UxGT("Z Ende:");
+ LSTR MSG_GAMES = _UxGT("Spiele");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("ungült. Seitenzahl");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("ungült. Seitengeschw.");
+ LSTR MSG_BAD_PAGE = _UxGT("ungült. Seitenzahl");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("ungült. Seitengeschw.");
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Passwort bearbeiten");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Login erforderlich");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Passwort Einstellungen");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("PIN eingeben");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Passwort ändern");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Passwort löschen");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Passwort ist ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("von vorn beginnen");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Bald speichern!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Passwort gelöscht");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Passwort bearbeiten");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Login erforderlich");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Passwort Einstellungen");
+ LSTR MSG_ENTER_DIGIT = _UxGT("PIN eingeben");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Passwort ändern");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Passwort löschen");
+ LSTR MSG_PASSWORD_SET = _UxGT("Passwort ist ");
+ LSTR MSG_START_OVER = _UxGT("von vorn beginnen");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Bald speichern!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Passwort gelöscht");
//
// Die Filament-Change-Bildschirme können bis zu 3 Zeilen auf einem 4-Zeilen-Display anzeigen
// ...oder 2 Zeilen auf einem 3-Zeilen-Display.
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Knopf drücken um", "Druck fortzusetzen"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_2_LINE("Druck ist", "pausiert..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Warte auf den", "Start des", "Filamentwechsels..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filament einlegen", "und Knopf drücken", "um fortzusetzen"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Knopf drücken um", "Düse aufzuheizen"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Düse heizt auf", "bitte warten..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Warte auf", "Entnahme", "des Filaments..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Warte auf", "Laden des", "Filaments..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Warte auf", "Spülung", "der Düse..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klicke um", "die Düsenspülung", "zu beenden"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Warte auf", "Fortsetzen des", "Drucks..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Knopf drücken um", "Druck fortzusetzen"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_2_LINE("Druck ist", "pausiert..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Warte auf den", "Start des", "Filamentwechsels..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filament einlegen", "und Knopf drücken", "um fortzusetzen"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Knopf drücken um", "Düse aufzuheizen"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Düse heizt auf", "bitte warten..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Warte auf", "Entnahme", "des Filaments..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Warte auf", "Laden des", "Filaments..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Warte auf", "Spülung", "der Düse..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Klicke um", "die Düsenspülung", "zu beenden"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Warte auf", "Fortsetzen des", "Drucks..."));
#else // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Klick zum Fortsetzen"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Pausiert..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Bitte warten..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Laden und Klick"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Klick zum Heizen"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heizen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Entnehmen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Laden..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Spülen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klick zum beenden", "der Düsenspülung"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsetzen..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Klick zum Fortsetzen"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Pausiert..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Bitte warten..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Laden und Klick"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Klick zum Heizen"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heizen..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Entnehmen..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Laden..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Spülen..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klick zum beenden", "der Düsenspülung"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Fortsetzen..."));
#endif // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Treiber"); // Max length 18 characters
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Treiber Strom");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid threshold");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorloses Homing");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Schrittmodus");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop einsch.");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" im:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Spiel");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korrektur");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Glätten");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("X Achse leveln");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto. Kalibiren");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC Treiber"); // Max length 18 characters
+ LSTR MSG_TMC_CURRENT = _UxGT("Treiber Strom");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid threshold");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorloses Homing");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Schrittmodus");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop einsch.");
+ LSTR MSG_SERVICE_RESET = _UxGT("Reset");
+ LSTR MSG_SERVICE_IN = _UxGT(" im:");
+ LSTR MSG_BACKLASH = _UxGT("Spiel");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korrektur");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Glätten");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("X Achse leveln");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto. Kalibiren");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Idle Timeout, Temperatur fällt. Drücke Okay, um erneut aufzuheizen und fortzufahren.");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Idle Timeout, Temperatur fällt. Drücke Okay, um erneut aufzuheizen und fortzufahren.");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Heizungs Timeout");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Heizungs Timeout");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Erneut aufheizen");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Erneut aufhei. ...");
+ LSTR MSG_REHEAT = _UxGT("Erneut aufheizen");
+ LSTR MSG_REHEATING = _UxGT("Erneut aufhei. ...");
}
diff --git a/Marlin/src/lcd/language/language_el.h b/Marlin/src/lcd/language/language_el.h
index 824b90a232..21f5ca6503 100644
--- a/Marlin/src/lcd/language/language_el.h
+++ b/Marlin/src/lcd/language/language_el.h
@@ -33,173 +33,185 @@
namespace Language_el {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Greek");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Greek (Greece)");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμο.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση Μοτέρ");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο"); //SHORTEN
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Αρχικό σημείο Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Αρχικό σημείο Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Επαναφορά Επ. Εκτύπωσης"); //SHORTEN
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Επιπεδοποίηση επ. Εκτύπωσης περιμενει"); //SHORTEN
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Ολοκλήρωση επιπεδοποίησης!"); //SHORTEN
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός βασικών μετατοπίσεων"); //SHORTEN
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις"); //SHORTEN
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμος.");
+ LSTR MSG_YES = _UxGT("ΝΑΙ");
+ LSTR MSG_NO = _UxGT("ΟΧΙ");
+ LSTR MSG_BACK = _UxGT("Πίσω");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Προχωρημένες ρυθμίσεις");
+ LSTR MSG_CONFIGURATION = _UxGT("Διαμόρφωση");
+
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Κάρτα εισήχθη");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Κάρτα αφαιρέθη");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Αναμονή για κάρτα");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Ματαίωση...");
+ LSTR MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" σφάλμα ανάγνωσης");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB αφαιρέθη");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Αποτυχία εκκίνησης USB");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Αποτυχία αρχικοποίησης SD");
+ LSTR MSG_MAIN = _UxGT("Αρχική Οθόνη");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση μοτέρ");
+ LSTR MSG_AUTO_HOME = _UxGT("Αυτόμ. επαναφορά XYZ");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Επαναφορά X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Επαναφορά Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Επαναφορά Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Αυτόμ. επαναφορά XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Πιέστε για έναρξη");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Τέλος επιπεδοποίησης!");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός μετατοπίσεων");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμογή μετατοπίσεων");
+ LSTR MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" bed"); //SHORTEN
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση"); //SHORTEN
+ LSTR MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" bed"); //SHORTEN
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση"); //SHORTEN
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Προθέρμανση $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Προθέρμανση $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Προθέρμανση $ End");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Προθέρμανση $ End ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Προθέρμανση $ όλα");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Προθέρμανση $ bed"); //SHORTEN
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Προθέρμανση $ επιβεβαίωση"); //SHORTEN
+ LSTR MSG_PREHEAT_M = _UxGT("Προθέρμανση $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Προθέρμανση $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Προθέρμανση $ End");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Προθέρμανση $ End ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Προθέρμανση $ όλα");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Προθέρμανση $ bed"); //SHORTEN
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Προθέρμανση $ επιβεβαίωση"); //SHORTEN
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Μειωση θερμοκρασιας");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Εξώθηση");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Ανάσυρση");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης"); //SHORTEN
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση Επ. Εκτύπωσης"); //SHORTEN
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Μετακίνηση X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Εξωθητήρας");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Εξωθητήρας *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Μετακίνηση %s μμ");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Ταχύτητα");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Επ. Εκτύπωσης Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ακροφύσιο");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Κλίνη");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Ροή");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Ροή ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Έλεγχος");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Αυτομ ρύθμιση θερ/σίας"); //SHORTEN
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
- PROGMEM Language_Str MSG_ACC = _UxGT("Επιτάχυνση");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A;
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B;
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C;
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Vαντίδραση ") LCD_STR_I;
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Vαντίδραση ") LCD_STR_J;
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Vαντίδραση ") LCD_STR_K;
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Vαντίδραση E");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("V Μέγιστο") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("V Μέγιστο") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("V Μέγιστο") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("V Μέγιστο") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("V Μέγιστο") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("V Μέγιστο") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("V Μέγιστο") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("V Μέγιστο *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("V Ελάχιστο");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Aμεγ ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Aμεγ ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Aμεγ ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Aμεγ *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
- PROGMEM Language_Str MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_I_STEPS = _UxGT("Bήματα ") LCD_STR_I _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_J_STEPS = _UxGT("Bήματα ") LCD_STR_J _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_K_STEPS = _UxGT("Bήματα ") LCD_STR_K _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Κίνηση");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Νήμα");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε μμ") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Διάμετρος νήματος *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά ασφαλούς αντιγράφου"); //SHORTEN
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Συντονισμός");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Αναστολή λειτουργίας");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Αναμονή για χρήστη");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Διακόπτεται η εκτύπωση"); //SHORTEN
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης μμ"); //SHORTEN
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση μμ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία κάρτας SD"); //SHORTEN
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης"); //SHORTEN
- PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ"); //SHORTEN
- PROGMEM Language_Str MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Ακύρωση endstop ");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Ανεπιτυχής θέρμανση");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΚΡΑΣΙΑΣ");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("ΠΕΡΙΤΗ ΘΕΡΜΟΚΡΑΣΙΑ");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("ΜΗ ΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑΣ"); //SHORTEN
- PROGMEM Language_Str MSG_HALTED = _UxGT("H εκτύπωση διακόπηκε");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Θερμαίνεται…");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Θέρμανση ΕΠ. Εκτύπωσης"); //SHORTEN
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
+ LSTR MSG_COOLDOWN = _UxGT("Αποθέρμανση");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
+ LSTR MSG_EXTRUDE = _UxGT("Εξώθηση");
+ LSTR MSG_RETRACT = _UxGT("Ανάσυρση");
+ LSTR MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
+ LSTR MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση κλίνης");
+ LSTR MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση κλίνης");
+ LSTR MSG_MOVE_X = _UxGT("Μετακίνηση X");
+ LSTR MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
+ LSTR MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
+ LSTR MSG_MOVE_E = _UxGT("Εξωθητής");
+ LSTR MSG_MOVE_EN = _UxGT("Εξωθητής *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Μετακίνηση %s μμ");
+ LSTR MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
+ LSTR MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
+ LSTR MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
+ LSTR MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
+ LSTR MSG_SPEED = _UxGT("Ταχύτητα");
+ LSTR MSG_BED_Z = _UxGT("Επ. Εκτύπωσης Z");
+ LSTR MSG_NOZZLE = _UxGT("Ακροφύσιο");
+ LSTR MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
+ LSTR MSG_BED = _UxGT("Επ. Εκτύπωσης");
+ LSTR MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
+ LSTR MSG_FLOW = _UxGT("Ροή");
+ LSTR MSG_FLOW_N = _UxGT("Ροή ~");
+ LSTR MSG_CONTROL = _UxGT("Έλεγχος");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Αυτορρύθμιση θερ/σίας");
+ LSTR MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
+ LSTR MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
+ LSTR MSG_ACC = _UxGT("Επιτάχυνση");
+ LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A;
+ LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B;
+ LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C;
+ LSTR MSG_VI_JERK = _UxGT("Vαντίδραση ") LCD_STR_I;
+ LSTR MSG_VJ_JERK = _UxGT("Vαντίδραση ") LCD_STR_J;
+ LSTR MSG_VK_JERK = _UxGT("Vαντίδραση ") LCD_STR_K;
+ LSTR MSG_VE_JERK = _UxGT("Vαντίδραση E");
+ LSTR MSG_VMAX_A = _UxGT("V Μέγιστο") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("V Μέγιστο") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("V Μέγιστο") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("V Μέγιστο") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("V Μέγιστο") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("V Μέγιστο") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("V Μέγιστο") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("V Μέγιστο *");
+ LSTR MSG_VMIN = _UxGT("V Ελάχιστο");
+ LSTR MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
+ LSTR MSG_ACCELERATION = _UxGT("Accel");
+ LSTR MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Aμεγ ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Aμεγ ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Aμεγ ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Aμεγ *");
+ LSTR MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
+ LSTR MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
+ LSTR MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
+ LSTR MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
+ LSTR MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
+ LSTR MSG_I_STEPS = _UxGT("Bήματα ") LCD_STR_I _UxGT(" ανά μμ");
+ LSTR MSG_J_STEPS = _UxGT("Bήματα ") LCD_STR_J _UxGT(" ανά μμ");
+ LSTR MSG_K_STEPS = _UxGT("Bήματα ") LCD_STR_K _UxGT(" ανά μμ");
+ LSTR MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
+ LSTR MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ");
+ LSTR MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
+ LSTR MSG_MOTION = _UxGT("Κίνηση");
+ LSTR MSG_FILAMENT = _UxGT("Νήμα");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Διάμετρος νήματος *");
+ LSTR MSG_CONTRAST = _UxGT("Αντίθεση LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Αποθήκευση σε EEPROM");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Φόρτωση από EEPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά προεπιλογών");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
+ LSTR MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
+ LSTR MSG_PREPARE = _UxGT("Προετοιμασία");
+ LSTR MSG_TUNE = _UxGT("Συντονισμός");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
+ LSTR MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
+ LSTR MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
+ LSTR MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
+ LSTR MSG_DWELL = _UxGT("Αναστολή λειτουργίας");
+ LSTR MSG_USERWAIT = _UxGT("Αναμονή για χρήστη");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Εκτύπωση διεκόπη");
+ LSTR MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
+ LSTR MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
+ LSTR MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης mm"); //SHORTEN
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία SD");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός Επ.Εκτύπωσης"); //SHORTEN
+ LSTR MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πρώτα");
+ LSTR MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
+ LSTR MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Ακύρωση endstop");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Αποτυχία θέρμανσης");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("ΘΕΡΜΙΚΗ ΔΙΑΦΥΓΗ");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("ΠΕΡΙΤΤΗ ΘΕΡΜΟΚΡΑΣΙΑ");
+ LSTR MSG_ERR_MINTEMP = _UxGT("ΑΝΕΠΑΡΚΗΣ ΘΕΡΜΟΚΡΑΣΙΑ");
+ LSTR MSG_HALTED = _UxGT("Εκτυπωτής διεκόπη");
+ LSTR MSG_HEATING = _UxGT("Θερμαίνεται…");
+ LSTR MSG_BED_HEATING = _UxGT("Θέρμανση κλίνης");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
}
diff --git a/Marlin/src/lcd/language/language_el_CY.h b/Marlin/src/lcd/language/language_el_CY.h
new file mode 100644
index 0000000000..68e9ee1459
--- /dev/null
+++ b/Marlin/src/lcd/language/language_el_CY.h
@@ -0,0 +1,38 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Greek (Cyprus)
+ *
+ * LCD Menu Messages
+ * See also https://marlinfw.org/docs/development/lcd_language.html
+ */
+
+#include "language_el.h"
+
+namespace Language_el_CY {
+ using namespace Language_el; // Inherit undefined strings from Greek (or English)
+
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Greek (Cyprus)");
+}
diff --git a/Marlin/src/lcd/language/language_el_gr.h b/Marlin/src/lcd/language/language_el_gr.h
index e5c169446b..5259962f02 100644
--- a/Marlin/src/lcd/language/language_el_gr.h
+++ b/Marlin/src/lcd/language/language_el_gr.h
@@ -33,174 +33,174 @@
namespace Language_el_gr {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Greek (Greece)");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Greek (Greece)");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμο.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_MAIN = _UxGT("Βασική Οθόνη");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση βηματιστή");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Αρχικό σημείο Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Αρχικό σημείο Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Επαναφορά στο αρχικό σημείο ΧΥΖ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Κάντε κλικ για να ξεκινήσετε");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Ολοκλήρωση επιπεδοποίησης!");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός βασικών μετατοπίσεων");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" έτοιμο.");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Εισαγωγή κάρτας");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Αφαίρεση κάρτας");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("Βασική Οθόνη");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Αυτόματη εκκίνηση");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Απενεργοποίηση βηματιστή");
+ LSTR MSG_AUTO_HOME = _UxGT("Αυτομ. επαναφορά στο αρχικό σημείο");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Αρχικό σημείο X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Αρχικό σημείο Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Αρχικό σημείο Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Επαναφορά στο αρχικό σημείο ΧΥΖ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Κάντε κλικ για να ξεκινήσετε");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Επόμενο σημείο");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Ολοκλήρωση επιπεδοποίησης!");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ορισμός βασικών μετατοπίσεων");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Εφαρμόστηκαν οι μετατοπίσεις");
+ LSTR MSG_SET_ORIGIN = _UxGT("Ορισμός προέλευσης");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" κλίνη");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση");
+ LSTR MSG_PREHEAT_1 = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" End ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" όλα");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" κλίνη");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Προθέρμανση ") PREHEAT_1_LABEL _UxGT(" επιβεβαίωση");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Προθέρμανση $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Προθέρμανση $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Προθέρμανση $ End");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Προθέρμανση $ End ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Προθέρμανση $ όλα");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Προθέρμανση $ κλίνη");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Προθέρμανση $ επιβεβαίωση");
+ LSTR MSG_PREHEAT_M = _UxGT("Προθέρμανση $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Προθέρμανση $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Προθέρμανση $ End");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Προθέρμανση $ End ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Προθέρμανση $ όλα");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Προθέρμανση $ κλίνη");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Προθέρμανση $ επιβεβαίωση");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Μειωση θερμοκρασιας");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Εξώθηση");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Ανάσυρση");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση κλίνης");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση κλίνης");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Μετακίνηση X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Εξωθητήρας");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Εξωθητήρας *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Μετακίνηση %s μμ");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Ταχύτητα");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Κλίνη Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ακροφύσιο");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Κλίνη");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Ροή");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Ροή ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Έλεγχος");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Αυτομ. ρύθμιση θερμοκρασίας");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
- PROGMEM Language_Str MSG_ACC = _UxGT("Επιτάχυνση");
- PROGMEM Language_Str MSG_JERK = _UxGT("Vαντίδραση");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A;
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B;
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C;
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Vαντίδραση ") LCD_STR_I;
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Vαντίδραση ") LCD_STR_J;
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Vαντίδραση ") LCD_STR_K;
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Vαντίδραση E");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vμεγ ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vμεγ ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vμεγ ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vμεγ ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vμεγ ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vμεγ ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vμεγ ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vμεγ *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vελαχ");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Aμεγ ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Aμεγ ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Aμεγ ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Aμεγ *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
- PROGMEM Language_Str MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_I_STEPS = _UxGT("Bήματα ") LCD_STR_I _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_J_STEPS = _UxGT("Bήματα ") LCD_STR_J _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_K_STEPS = _UxGT("Bήματα ") LCD_STR_K _UxGT(" ανά μμ");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Κίνηση");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Νήμα");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε μμ") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Διάμετρος νήματος *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Κοντράστ LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Προετοιμασία");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Συντονισμός");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Αναστολή λειτουργίας…");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Αναμονή για χρήστη…");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Διακόπτεται η εκτύπωση");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης μμ");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση μμ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία κάρτας SD");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός κλίνης");
- PROGMEM Language_Str MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ");
- PROGMEM Language_Str MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Ματαίωση endstop ");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Ανεπιτυχής θέρμανση");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Λάθος: ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΤΗΤΑΣ");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Θερμαίνεται…");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Θέρμανση κλίνης…");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
+ LSTR MSG_COOLDOWN = _UxGT("Μειωση θερμοκρασιας");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Ενεργοποίηση");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Απενεργοποίηση");
+ LSTR MSG_EXTRUDE = _UxGT("Εξώθηση");
+ LSTR MSG_RETRACT = _UxGT("Ανάσυρση");
+ LSTR MSG_MOVE_AXIS = _UxGT("Μετακίνηση άξονα");
+ LSTR MSG_BED_LEVELING = _UxGT("Επιπεδοποίηση κλίνης");
+ LSTR MSG_LEVEL_BED = _UxGT("Επιπεδοποίηση κλίνης");
+ LSTR MSG_MOVE_X = _UxGT("Μετακίνηση X");
+ LSTR MSG_MOVE_Y = _UxGT("Μετακίνηση Y");
+ LSTR MSG_MOVE_Z = _UxGT("Μετακίνηση Z");
+ LSTR MSG_MOVE_E = _UxGT("Εξωθητήρας");
+ LSTR MSG_MOVE_EN = _UxGT("Εξωθητήρας *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Μετακίνηση %s μμ");
+ LSTR MSG_MOVE_01MM = _UxGT("Μετακίνηση 0,1 μμ");
+ LSTR MSG_MOVE_1MM = _UxGT("Μετακίνηση 1 μμ");
+ LSTR MSG_MOVE_10MM = _UxGT("Μετακίνηση 10 μμ");
+ LSTR MSG_MOVE_100MM = _UxGT("Μετακίνηση 100 μμ");
+ LSTR MSG_SPEED = _UxGT("Ταχύτητα");
+ LSTR MSG_BED_Z = _UxGT("Κλίνη Z");
+ LSTR MSG_NOZZLE = _UxGT("Ακροφύσιο");
+ LSTR MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
+ LSTR MSG_BED = _UxGT("Κλίνη");
+ LSTR MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
+ LSTR MSG_FLOW = _UxGT("Ροή");
+ LSTR MSG_FLOW_N = _UxGT("Ροή ~");
+ LSTR MSG_CONTROL = _UxGT("Έλεγχος");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Αυτομ. ρύθμιση θερμοκρασίας");
+ LSTR MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
+ LSTR MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
+ LSTR MSG_ACC = _UxGT("Επιτάχυνση");
+ LSTR MSG_JERK = _UxGT("Vαντίδραση");
+ LSTR MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A;
+ LSTR MSG_VB_JERK = _UxGT("Vαντίδραση ") LCD_STR_B;
+ LSTR MSG_VC_JERK = _UxGT("Vαντίδραση ") LCD_STR_C;
+ LSTR MSG_VI_JERK = _UxGT("Vαντίδραση ") LCD_STR_I;
+ LSTR MSG_VJ_JERK = _UxGT("Vαντίδραση ") LCD_STR_J;
+ LSTR MSG_VK_JERK = _UxGT("Vαντίδραση ") LCD_STR_K;
+ LSTR MSG_VE_JERK = _UxGT("Vαντίδραση E");
+ LSTR MSG_VMAX_A = _UxGT("Vμεγ ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Vμεγ ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vμεγ ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Vμεγ ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Vμεγ ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Vμεγ ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Vμεγ ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Vμεγ *");
+ LSTR MSG_VMIN = _UxGT("Vελαχ");
+ LSTR MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
+ LSTR MSG_ACCELERATION = _UxGT("Accel");
+ LSTR MSG_AMAX_A = _UxGT("Aμεγ ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Aμεγ ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Aμεγ ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Aμεγ ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Aμεγ ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Aμεγ ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Aμεγ ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Aμεγ *");
+ LSTR MSG_A_RETRACT = _UxGT("Α-ανάσυρση");
+ LSTR MSG_A_TRAVEL = _UxGT("Α-μετατόπιση");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Bήματα ανά μμ");
+ LSTR MSG_A_STEPS = _UxGT("Bήματα ") LCD_STR_A _UxGT(" ανά μμ");
+ LSTR MSG_B_STEPS = _UxGT("Bήματα ") LCD_STR_B _UxGT(" ανά μμ");
+ LSTR MSG_C_STEPS = _UxGT("Bήματα ") LCD_STR_C _UxGT(" ανά μμ");
+ LSTR MSG_I_STEPS = _UxGT("Bήματα ") LCD_STR_I _UxGT(" ανά μμ");
+ LSTR MSG_J_STEPS = _UxGT("Bήματα ") LCD_STR_J _UxGT(" ανά μμ");
+ LSTR MSG_K_STEPS = _UxGT("Bήματα ") LCD_STR_K _UxGT(" ανά μμ");
+ LSTR MSG_E_STEPS = _UxGT("Bήματα Ε ανά μμ");
+ LSTR MSG_EN_STEPS = _UxGT("Bήματα * ανά μμ");
+ LSTR MSG_TEMPERATURE = _UxGT("Θερμοκρασία");
+ LSTR MSG_MOTION = _UxGT("Κίνηση");
+ LSTR MSG_FILAMENT = _UxGT("Νήμα");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Ε σε μμ") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Διάμετρος νήματος");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Διάμετρος νήματος *");
+ LSTR MSG_CONTRAST = _UxGT("Κοντράστ LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Αποθήκευση");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Φόρτωση");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Επαναφορά ασφαλούς αντιγράφου");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ανανέωση");
+ LSTR MSG_INFO_SCREEN = _UxGT("Οθόνη πληροφόρησης");
+ LSTR MSG_PREPARE = _UxGT("Προετοιμασία");
+ LSTR MSG_TUNE = _UxGT("Συντονισμός");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Παύση εκτύπωσης");
+ LSTR MSG_RESUME_PRINT = _UxGT("Συνέχιση εκτύπωσης");
+ LSTR MSG_STOP_PRINT = _UxGT("Διακοπή εκτύπωσης");
+ LSTR MSG_MEDIA_MENU = _UxGT("Εκτύπωση από SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Δεν βρέθηκε SD");
+ LSTR MSG_DWELL = _UxGT("Αναστολή λειτουργίας…");
+ LSTR MSG_USERWAIT = _UxGT("Αναμονή για χρήστη…");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Διακόπτεται η εκτύπωση");
+ LSTR MSG_NO_MOVE = _UxGT("Καμία κίνηση.");
+ LSTR MSG_KILLED = _UxGT("ΤΕΡΜΑΤΙΣΜΟΣ. ");
+ LSTR MSG_STOPPED = _UxGT("ΔΙΑΚΟΠΗ. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Ανάσυρση μμ");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Εναλλαγή ανάσυρσης μμ");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Ανάσυρση V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Μεταπήδηση μμ");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_AUTORETRACT = _UxGT("Αυτόματη ανάσυρση");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Αλλαγή νήματος");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Αλλαγή νήματος *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Προετοιμασία κάρτας SD");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Αλλαγή κάρτας SD");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Διερεύνηση Z εκτός κλίνης");
+ LSTR MSG_YX_UNHOMED = _UxGT("Επαναφορά Χ/Υ πριν από Ζ");
+ LSTR MSG_XYZ_UNHOMED = _UxGT("Επαναφορά ΧΥΖ πρώτα");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Μετατόπιση Ζ");
+ LSTR MSG_BABYSTEP_X = _UxGT("Μικρό βήμα Χ");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Μικρό βήμα Υ");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Μικρό βήμα Ζ");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Ματαίωση endstop ");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Ανεπιτυχής θέρμανση");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Λάθος: ΠΛΕΟΝΑΖΟΥΣΑ ΘΕΡΜΟΤΗΤΑ");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("ΔΙΑΦΥΓΗ ΘΕΡΜΟΤΗΤΑΣ");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Λάθος: ΜΕΓΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Λάθος: ΕΛΑΧΙΣΤΗ ΘΕΡΜΟΤΗΤΑ");
+ LSTR MSG_HEATING = _UxGT("Θερμαίνεται…");
+ LSTR MSG_BED_HEATING = _UxGT("Θέρμανση κλίνης…");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Βαθμονόμηση Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Βαθμονόμηση X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Βαθμονόμηση Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Βαθμονόμηση Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Βαθμονόμηση κέντρου");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Εσφαλμένος εκτυπωτής");
}
diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h
index 11c976ee41..c9413d3cea 100644
--- a/Marlin/src/lcd/language/language_en.h
+++ b/Marlin/src/lcd/language/language_en.h
@@ -30,9 +30,11 @@
* Substitutions are applied for the following characters when used
* in menu items that call lcd_put_u8str_ind_P with an index:
*
+ * $ displays an inserted C-string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
+ * @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define en 1234
@@ -44,726 +46,726 @@
#define MEDIA_TYPE_EN "Media"
namespace Language_en {
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("English");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("English");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Ready.");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("YES");
- PROGMEM Language_Str MSG_NO = _UxGT("NO");
- PROGMEM Language_Str MSG_BACK = _UxGT("Back");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Aborting...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = MEDIA_TYPE_EN _UxGT(" Inserted");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = MEDIA_TYPE_EN _UxGT(" Removed");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Waiting for card");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("SD Init Fail");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" read error");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB device removed");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB start failed");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall Overflow");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Main");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Advanced Settings");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Run Auto Files");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disable Steppers");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Progress Bar Test");
- PROGMEM Language_Str MSG_HOMING = _UxGT("Homing");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Home");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home Z");
- PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Home ") LCD_STR_I;
- PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Home ") LCD_STR_J;
- PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Home ") LCD_STR_K;
- PROGMEM Language_Str MSG_FILAMENT_SET = _UxGT("Filament Settings");
- PROGMEM Language_Str MSG_FILAMENT_MAN = _UxGT("Filament Management");
- PROGMEM Language_Str MSG_LEVBED_FL = _UxGT("Front Left");
- PROGMEM Language_Str MSG_LEVBED_FR = _UxGT("Front Right");
- PROGMEM Language_Str MSG_LEVBED_C = _UxGT("Center");
- PROGMEM Language_Str MSG_LEVBED_BL = _UxGT("Back Left");
- PROGMEM Language_Str MSG_LEVBED_BR = _UxGT("Back Right");
- PROGMEM Language_Str MSG_MANUAL_MESH = _UxGT("Manual Mesh");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteration: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Accuracy Decreasing!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Accuracy Achieved");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Homing XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Click to Begin");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Next Point");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Leveling Done!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Home Offset X");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Home Offset ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Home Offset ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Home Offset ") LCD_STR_K;
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Set Origin");
- PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Select Origin");
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Last value ");
+ // These strings should be translated
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Ready.");
+ LSTR MSG_YES = _UxGT("YES");
+ LSTR MSG_NO = _UxGT("NO");
+ LSTR MSG_BACK = _UxGT("Back");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Aborting...");
+ LSTR MSG_MEDIA_INSERTED = MEDIA_TYPE_EN _UxGT(" Inserted");
+ LSTR MSG_MEDIA_REMOVED = MEDIA_TYPE_EN _UxGT(" Removed");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Waiting for card");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("SD Init Fail");
+ LSTR MSG_MEDIA_READ_ERROR = MEDIA_TYPE_EN _UxGT(" read error");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB device removed");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB start failed");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall Overflow");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
+ LSTR MSG_MAIN = _UxGT("Main");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Advanced Settings");
+ LSTR MSG_CONFIGURATION = _UxGT("Configuration");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Run Auto Files");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Disable Steppers");
+ LSTR MSG_DEBUG_MENU = _UxGT("Debug Menu");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Progress Bar Test");
+ LSTR MSG_HOMING = _UxGT("Homing");
+ LSTR MSG_AUTO_HOME = _UxGT("Auto Home");
+ LSTR MSG_AUTO_HOME_A = _UxGT("Home @");
+ LSTR MSG_FILAMENT_SET = _UxGT("Filament Settings");
+ LSTR MSG_FILAMENT_MAN = _UxGT("Filament Management");
+ LSTR MSG_LEVBED_FL = _UxGT("Front Left");
+ LSTR MSG_LEVBED_FR = _UxGT("Front Right");
+ LSTR MSG_LEVBED_C = _UxGT("Center");
+ LSTR MSG_LEVBED_BL = _UxGT("Back Left");
+ LSTR MSG_LEVBED_BR = _UxGT("Back Right");
+ LSTR MSG_MANUAL_MESH = _UxGT("Manual Mesh");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Align");
+ LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Accuracy Decreasing!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Accuracy Achieved");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Homing XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Click to Begin");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Next Point");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Leveling Done!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Set Home Offsets");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Home Offset X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Home Offset ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Home Offset ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Home Offset ") LCD_STR_K;
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets Applied");
+ LSTR MSG_SET_ORIGIN = _UxGT("Set Origin");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Select Origin");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Last value ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preheat ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Preheat ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" All");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Bed");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Preheat ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Preheat ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" End ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" All");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Bed");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Preheat $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Preheat $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Preheat $ End");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Preheat $ End ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Preheat $ All");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Preheat $ Bed");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Preheat $ Conf");
+ LSTR MSG_PREHEAT_M = _UxGT("Preheat $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Preheat $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Preheat $ End");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Preheat $ End ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Preheat $ All");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preheat $ Bed");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preheat $ Conf");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Preheat Custom");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Cooldown");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Preheat Custom");
+ LSTR MSG_COOLDOWN = _UxGT("Cooldown");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frequency");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Laser Control");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Spindle Control");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Laser Power");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Spindle Pwr");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Toggle Laser");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Toggle Blower");
- PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Air Assist");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Test Pulse ms");
- PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Fire Pulse");
- PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Coolant Flow Fault");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Toggle Spindle");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Toggle Vacuum");
- PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Spindle Forward");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spindle Reverse");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Switch Power On");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Switch Power Off");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrude");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retract");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Move Axis");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Bed Leveling");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Level Bed");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Bed Tramming");
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Adjust bed until the probe triggers.");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Corners within tolerance. Bed trammed.");
- PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Good Points: ");
- PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Last Z: ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Next Corner");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Mesh Editor");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Edit Mesh");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Mesh Editing Stopped");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Probing Point");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z Value");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Custom Commands");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Probe Test");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Point");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Deviation");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX Mode");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
- PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("Duplicate X-Gap");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2nd Nozzle X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2nd Nozzle Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Doing G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Tools");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Tilting Point");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manually Build Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("UBL Mesh Wizard");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Place Shim & Measure");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Measure");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Remove & Measure Bed");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Moving to next");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activate UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Deactivate UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Bed Temp");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend Temp");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Mesh Edit");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit Custom Mesh");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Fine Tuning Mesh");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Build Mesh ($)");
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Build Cold Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Adjust Mesh Height");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Height Amount");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validate Mesh");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Validate Mesh ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validate Custom Mesh");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Heating Bed");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Manual priming...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Fixed Length Prime");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Done Priming");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Canceled");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Leaving G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continue Bed Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Mesh Leveling");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Point Leveling");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Grid Mesh Leveling");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Level Mesh");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Side Points");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Map Type");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Output Mesh Map");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Output for Host");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Output for CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Printer Backup");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Output UBL Info");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Fill-in Amount");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manual Fill-in");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Smart Fill-in");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Fill-in Mesh");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidate All");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidate Closest");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Fine Tune All");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Fine Tune Closest");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Storage");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Memory Slot");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Load Bed Mesh");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Save Bed Mesh");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Mesh %i Loaded");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Mesh %i Saved");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("No Storage");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err: UBL Save");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err: UBL Restore");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stopped");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Step-By-Step UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Build Cold Mesh");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Fill-in");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validate Mesh");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Fine Tune All");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validate Mesh");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Fine Tune All");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Save Bed Mesh");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequency");
+ LSTR MSG_LASER_MENU = _UxGT("Laser Control");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Spindle Control");
+ LSTR MSG_LASER_POWER = _UxGT("Laser Power");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Spindle Pwr");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Toggle Laser");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Toggle Blower");
+ LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Air Assist");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Test Pulse ms");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Fire Pulse");
+ LSTR MSG_FLOWMETER_FAULT = _UxGT("Coolant Flow Fault");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Toggle Spindle");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Toggle Vacuum");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindle Forward");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Reverse");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Switch Power On");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Switch Power Off");
+ LSTR MSG_EXTRUDE = _UxGT("Extrude");
+ LSTR MSG_RETRACT = _UxGT("Retract");
+ LSTR MSG_MOVE_AXIS = _UxGT("Move Axis");
+ LSTR MSG_BED_LEVELING = _UxGT("Bed Leveling");
+ LSTR MSG_LEVEL_BED = _UxGT("Level Bed");
+ LSTR MSG_BED_TRAMMING = _UxGT("Bed Tramming");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Adjust bed until the probe triggers.");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Corners within tolerance. Bed trammed.");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Good Points: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Last Z: ");
+ LSTR MSG_NEXT_CORNER = _UxGT("Next Corner");
+ LSTR MSG_MESH_EDITOR = _UxGT("Mesh Editor");
+ LSTR MSG_EDIT_MESH = _UxGT("Edit Mesh");
+ LSTR MSG_MESH_VIEW = _UxGT("View Mesh");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Mesh Editing Stopped");
+ LSTR MSG_PROBING_POINT = _UxGT("Probing Point");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Z Value");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Custom Commands");
+ LSTR MSG_M48_TEST = _UxGT("M48 Probe Test");
+ LSTR MSG_M48_POINT = _UxGT("M48 Point");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds");
+ LSTR MSG_M48_DEVIATION = _UxGT("Deviation");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX Mode");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("Duplicate X-Gap");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2nd Nozzle @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Doing G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL Tools");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Tilting Point");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manually Build Mesh");
+ LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Mesh Wizard");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Place Shim & Measure");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Measure");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Remove & Measure Bed");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Moving to next");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activate UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deactivate UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Bed Temp");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend Temp");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Mesh Edit");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit Custom Mesh");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Fine Tuning Mesh");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Build Mesh ($)");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Build Cold Mesh");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Adjust Mesh Height");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Height Amount");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validate Mesh");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validate Mesh ($)");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validate Custom Mesh");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Heating Bed");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manual priming...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fixed Length Prime");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Done Priming");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Canceled");
+ LSTR MSG_G26_LEAVING = _UxGT("Leaving G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continue Bed Mesh");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Leveling");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Point Leveling");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Grid Mesh Leveling");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Level Mesh");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Side Points");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Map Type");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Output Mesh Map");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Output for Host");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Output for CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Printer Backup");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Output UBL Info");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Fill-in Amount");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manual Fill-in");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Smart Fill-in");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Fill-in Mesh");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidate All");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidate Closest");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Fine Tune All");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Fine Tune Closest");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Storage");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Memory Slot");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Load Bed Mesh");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Save Bed Mesh");
+ LSTR MSG_MESH_LOADED = _UxGT("Mesh %i Loaded");
+ LSTR MSG_MESH_SAVED = _UxGT("Mesh %i Saved");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("No Storage");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: UBL Save");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: UBL Restore");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stopped");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Step-By-Step UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Build Cold Mesh");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Fill-in");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validate Mesh");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Fine Tune All");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validate Mesh");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Fine Tune All");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Save Bed Mesh");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED Control");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Lights");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Light Presets");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Red");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Yellow");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Green");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blue");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violet");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("White");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Default");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Channel =");
- PROGMEM Language_Str MSG_LEDS2 = _UxGT("Lights #2");
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Light #2 Presets");
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Brightness");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Custom Lights");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Red Intensity");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Green Intensity");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Blue Intensity");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("White Intensity");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brightness");
+ LSTR MSG_LED_CONTROL = _UxGT("LED Control");
+ LSTR MSG_LEDS = _UxGT("Lights");
+ LSTR MSG_LED_PRESETS = _UxGT("Light Presets");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Red");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Yellow");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Green");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Blue");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("White");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Default");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Channel =");
+ LSTR MSG_LEDS2 = _UxGT("Lights #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Light #2 Presets");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Brightness");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Custom Lights");
+ LSTR MSG_INTENSITY_R = _UxGT("Red Intensity");
+ LSTR MSG_INTENSITY_G = _UxGT("Green Intensity");
+ LSTR MSG_INTENSITY_B = _UxGT("Blue Intensity");
+ LSTR MSG_INTENSITY_W = _UxGT("White Intensity");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Brightness");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Moving...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Free XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Move X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Move Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Move Z");
- PROGMEM Language_Str MSG_MOVE_I = _UxGT("Move ") LCD_STR_I;
- PROGMEM Language_Str MSG_MOVE_J = _UxGT("Move ") LCD_STR_J;
- PROGMEM Language_Str MSG_MOVE_K = _UxGT("Move ") LCD_STR_K;
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Move Extruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Move E*");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend too cold");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Move %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Move 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Move 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Move 100mm");
- PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Move 0.001in");
- PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Move 0.01in");
- PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Move 0.1in");
- PROGMEM Language_Str MSG_MOVE_1IN = _UxGT("Move 1.0in");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Speed");
- PROGMEM Language_Str MSG_MAXSPEED = _UxGT("Max Speed (mm/s)");
- PROGMEM Language_Str MSG_MAXSPEED_X = _UxGT("Max ") LCD_STR_A _UxGT(" Speed");
- PROGMEM Language_Str MSG_MAXSPEED_Y = _UxGT("Max ") LCD_STR_B _UxGT(" Speed");
- PROGMEM Language_Str MSG_MAXSPEED_Z = _UxGT("Max ") LCD_STR_C _UxGT(" Speed");
- PROGMEM Language_Str MSG_MAXSPEED_E = _UxGT("Max ") LCD_STR_E _UxGT(" Speed");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozzle ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
- PROGMEM Language_Str MSG_BED = _UxGT("Bed");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Enclosure");
- PROGMEM Language_Str MSG_COOLER = _UxGT("Laser Coolant");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Toggle Cooler");
- PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Flow Safety");
- PROGMEM Language_Str MSG_LASER = _UxGT("Laser");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Speed");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan Speed ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Controller Fan");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flow");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flow ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("On");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Off");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
- PROGMEM Language_Str MSG_PID_CYCLE = _UxGT("PID Cycles");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed. Bad extruder.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed. Temperature too high.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
- PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
- PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
- PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
- PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
- PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
- PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
- PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
- PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
- PROGMEM Language_Str MSG_PID_F = _UxGT("PID-F");
- PROGMEM Language_Str MSG_PID_F_E = _UxGT("PID-F *");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Select");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Select *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Max E Jerk");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocity");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Max * Vel");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Min Velocity");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Min Travel Vel");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Acceleration");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Max * Accel");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Retract Accel");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Travel Accel");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("XY Freq Limit");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min FR Factor");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Steps/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" Steps/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E steps/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* Steps/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperature");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Motion");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Unload mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Load mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Contrast");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Store Settings");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Load Settings");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Settings Stored");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset Printer");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info Screen");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepare");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Tune");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Power monitor");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Current");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Voltage");
- PROGMEM Language_Str MSG_POWER = _UxGT("Power");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Start Print");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Next");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Init");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Print");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignore");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Cancel");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Done");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Back");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Proceed");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Skip");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Pausing...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pause Print");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Resume Print");
- PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Start Host Print");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop Print");
- PROGMEM Language_Str MSG_END_LOOPS = _UxGT("End Repeat Loops");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Printing Object");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Power Outage");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Print from ") MEDIA_TYPE_EN;
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("No ") MEDIA_TYPE_EN;
- PROGMEM Language_Str MSG_DWELL = _UxGT("Sleep...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Click to Resume...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Print Paused");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Printing...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print Aborted");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Print Done");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("No Move.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("KILLED. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPED. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retract mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retract");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Swap Length");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Tool Change");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Change Filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Change Filament *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Load Filament");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Load *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Unload Filament");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Unload *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Attach ") MEDIA_TYPE_EN;
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Change ") MEDIA_TYPE_EN;
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Release ") MEDIA_TYPE_EN;
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Skew Factor");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Stow");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Save");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s First");
- PROGMEM Language_Str MSG_ZPROBE_SETTINGS = _UxGT("Probe Settings");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset");
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Move Nozzle to Bed");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
- PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
- PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway");
- PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("Cooling Failed");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
- PROGMEM Language_Str MSG_HALTED = _UxGT("PRINTER HALTED");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Please Reset");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Heating...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Cooling...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bed Heating...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Bed Cooling...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Probe Heating...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Probe Cooling...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Chamber Heating...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Chamber Cooling...");
- PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Laser Cooling...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Calibration");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrate X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrate Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrate Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrate Center");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Settings");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibration");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Set Delta Height");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Probe Z-offset");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Height");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radius");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("About Printer");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Printer Info");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Point Leveling");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Linear Leveling");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilinear Leveling");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mesh Leveling");
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Mesh probing done");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Printer Stats");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Board Info");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruders");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocol");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
+ LSTR MSG_MOVING = _UxGT("Moving...");
+ LSTR MSG_FREE_XY = _UxGT("Free XY");
+ LSTR MSG_MOVE_X = _UxGT("Move X"); // Used by draw_edit_screen
+ LSTR MSG_MOVE_Y = _UxGT("Move Y");
+ LSTR MSG_MOVE_Z = _UxGT("Move Z");
+ LSTR MSG_MOVE_I = _UxGT("Move ") LCD_STR_I;
+ LSTR MSG_MOVE_J = _UxGT("Move ") LCD_STR_J;
+ LSTR MSG_MOVE_K = _UxGT("Move ") LCD_STR_K;
+ LSTR MSG_MOVE_E = _UxGT("Move Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Move E*");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend too cold");
+ LSTR MSG_MOVE_N_MM = _UxGT("Move %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Move 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Move 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Move 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Move 100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Move 0.001in");
+ LSTR MSG_MOVE_001IN = _UxGT("Move 0.01in");
+ LSTR MSG_MOVE_01IN = _UxGT("Move 0.1in");
+ LSTR MSG_MOVE_1IN = _UxGT("Move 1.0in");
+ LSTR MSG_SPEED = _UxGT("Speed");
+ LSTR MSG_MAXSPEED = _UxGT("Max Speed (mm/s)");
+ LSTR MSG_MAXSPEED_X = _UxGT("Max ") LCD_STR_A _UxGT(" Speed");
+ LSTR MSG_MAXSPEED_Y = _UxGT("Max ") LCD_STR_B _UxGT(" Speed");
+ LSTR MSG_MAXSPEED_Z = _UxGT("Max ") LCD_STR_C _UxGT(" Speed");
+ LSTR MSG_MAXSPEED_E = _UxGT("Max ") LCD_STR_E _UxGT(" Speed");
+ LSTR MSG_MAXSPEED_A = _UxGT("Max @ Speed");
+ LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_NOZZLE = _UxGT("Nozzle");
+ LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
+ LSTR MSG_BED = _UxGT("Bed");
+ LSTR MSG_CHAMBER = _UxGT("Enclosure");
+ LSTR MSG_COOLER = _UxGT("Laser Coolant");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Toggle Cooler");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Flow Safety");
+ LSTR MSG_LASER = _UxGT("Laser");
+ LSTR MSG_FAN_SPEED = _UxGT("Fan Speed");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Fan Speed ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Controller Fan");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
+ LSTR MSG_FLOW = _UxGT("Flow");
+ LSTR MSG_FLOW_N = _UxGT("Flow ~");
+ LSTR MSG_CONTROL = _UxGT("Control");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
+ LSTR MSG_LCD_ON = _UxGT("On");
+ LSTR MSG_LCD_OFF = _UxGT("Off");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
+ LSTR MSG_PID_CYCLE = _UxGT("PID Cycles");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed. Bad extruder.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed. Temperature too high.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
+ LSTR MSG_SELECT = _UxGT("Select");
+ LSTR MSG_SELECT_E = _UxGT("Select *");
+ LSTR MSG_ACC = _UxGT("Accel");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
+ LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
+ LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
+ LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
+ LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
+ LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
+ LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ LSTR MSG_VELOCITY = _UxGT("Velocity");
+ LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel");
+ LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel");
+ LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel");
+ LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel");
+ LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel");
+ LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel");
+ LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel");
+ LSTR MSG_VMAX_EN = _UxGT("Max * Vel");
+ LSTR MSG_VMIN = _UxGT("Min Velocity");
+ LSTR MSG_VTRAV_MIN = _UxGT("Min Travel Vel");
+ LSTR MSG_ACCELERATION = _UxGT("Acceleration");
+ LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel");
+ LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel");
+ LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel");
+ LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel");
+ LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel");
+ LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel");
+ LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel");
+ LSTR MSG_AMAX_EN = _UxGT("Max * Accel");
+ LSTR MSG_A_RETRACT = _UxGT("Retract Accel");
+ LSTR MSG_A_TRAVEL = _UxGT("Travel Accel");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("XY Freq Limit");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min FR Factor");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Steps/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Steps/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Steps/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Steps/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Steps/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Steps/mm");
+ LSTR MSG_E_STEPS = _UxGT("E steps/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* Steps/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperature");
+ LSTR MSG_MOTION = _UxGT("Motion");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Unload mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Load mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Advance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
+ LSTR MSG_CONTRAST = _UxGT("LCD Contrast");
+ LSTR MSG_BRIGHTNESS = _UxGT("LCD Brightness");
+ LSTR MSG_STORE_EEPROM = _UxGT("Store Settings");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
+ LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
+ LSTR MSG_MEDIA_UPDATE = MEDIA_TYPE_EN _UxGT(" Update");
+ LSTR MSG_RESET_PRINTER = _UxGT("Reset Printer");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info Screen");
+ LSTR MSG_PREPARE = _UxGT("Prepare");
+ LSTR MSG_TUNE = _UxGT("Tune");
+ LSTR MSG_POWER_MONITOR = _UxGT("Power monitor");
+ LSTR MSG_CURRENT = _UxGT("Current");
+ LSTR MSG_VOLTAGE = _UxGT("Voltage");
+ LSTR MSG_POWER = _UxGT("Power");
+ LSTR MSG_START_PRINT = _UxGT("Start Print");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Next");
+ LSTR MSG_BUTTON_INIT = _UxGT("Init");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stop");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Print");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reset");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignore");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Cancel");
+ LSTR MSG_BUTTON_DONE = _UxGT("Done");
+ LSTR MSG_BUTTON_BACK = _UxGT("Back");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Proceed");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Skip");
+ LSTR MSG_PAUSING = _UxGT("Pausing...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pause Print");
+ LSTR MSG_RESUME_PRINT = _UxGT("Resume Print");
+ LSTR MSG_HOST_START_PRINT = _UxGT("Start Host Print");
+ LSTR MSG_STOP_PRINT = _UxGT("Stop Print");
+ LSTR MSG_END_LOOPS = _UxGT("End Repeat Loops");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Printing Object");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Power Outage");
+ LSTR MSG_MEDIA_MENU = _UxGT("Print from ") MEDIA_TYPE_EN;
+ LSTR MSG_NO_MEDIA = _UxGT("No ") MEDIA_TYPE_EN;
+ LSTR MSG_DWELL = _UxGT("Sleep...");
+ LSTR MSG_USERWAIT = _UxGT("Click to Resume...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Print Paused");
+ LSTR MSG_PRINTING = _UxGT("Printing...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Print Aborted");
+ LSTR MSG_PRINT_DONE = _UxGT("Print Done");
+ LSTR MSG_NO_MOVE = _UxGT("No Move.");
+ LSTR MSG_KILLED = _UxGT("KILLED. ");
+ LSTR MSG_STOPPED = _UxGT("STOPPED. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retract mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retract V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Swap Length");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Tool Change");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Change Filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Change Filament *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Load Filament");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Load *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Unload Filament");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Unload *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Unload All");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Attach ") MEDIA_TYPE_EN;
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Change ") MEDIA_TYPE_EN;
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Release ") MEDIA_TYPE_EN;
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Skew Factor");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Stow");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Save");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
+ LSTR MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
+ LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s First");
+ LSTR MSG_ZPROBE_SETTINGS = _UxGT("Probe Settings");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Move Nozzle to Bed");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
+ LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
+ LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway");
+ LSTR MSG_COOLING_FAILED = _UxGT("Cooling Failed");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
+ LSTR MSG_HALTED = _UxGT("PRINTER HALTED");
+ LSTR MSG_PLEASE_RESET = _UxGT("Please Reset");
+ LSTR MSG_HEATING = _UxGT("Heating...");
+ LSTR MSG_COOLING = _UxGT("Cooling...");
+ LSTR MSG_BED_HEATING = _UxGT("Bed Heating...");
+ LSTR MSG_BED_COOLING = _UxGT("Bed Cooling...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Probe Heating...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Probe Cooling...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Chamber Heating...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Chamber Cooling...");
+ LSTR MSG_LASER_COOLING = _UxGT("Laser Cooling...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Calibration");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrate X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrate Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrate Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrate Center");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Settings");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibration");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Set Delta Height");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Probe Z-offset");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Height");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
+ LSTR MSG_INFO_MENU = _UxGT("About Printer");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Printer Info");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-Point Leveling");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Linear Leveling");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilinear Leveling");
+ LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ LSTR MSG_MESH_LEVELING = _UxGT("Mesh Leveling");
+ LSTR MSG_MESH_DONE = _UxGT("Mesh probing done");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Printer Stats");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Board Info");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruders");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocol");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Case Light");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER");
+ LSTR MSG_CASE_LIGHT = _UxGT("Case Light");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Print Count");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total Print Time");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded Total");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Print Count");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total Print Time");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded Total");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Prints");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Longest");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Drive Strength");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT CHANGE");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PRINT PAUSED");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LOAD FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("UNLOAD FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("RESUME OPTIONS:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purge more");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continue");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm");
- PROGMEM Language_Str MSG_RUNOUT_ENABLE = _UxGT("Enable Runout");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Homing Failed");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ LSTR MSG_INFO_PSU = _UxGT("PSU");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Drive Strength");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT CHANGE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PRINT PAUSED");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LOAD FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("UNLOAD FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("RESUME OPTIONS:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purge more");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continue");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm");
+ LSTR MSG_RUNOUT_ENABLE = _UxGT("Enable Runout");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing Failed");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOOSE FILAMENT");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Needs Attention.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("MMU Resume");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("MMU Resuming...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Load");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("MMU Load All");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Load to Nozzle");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Eject");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Eject ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Unload");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Loading Fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejecting Fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Unloading Fil....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("All");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reset MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU Resetting...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOOSE FILAMENT");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Needs Attention.");
+ LSTR MSG_MMU2_RESUME = _UxGT("MMU Resume");
+ LSTR MSG_MMU2_RESUMING = _UxGT("MMU Resuming...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Load");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Load All");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Load to Nozzle");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Eject");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Eject ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Unload");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Loading Fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejecting Fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Unloading Fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("All");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Reset MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU Resetting...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Component =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mixer");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Full Gradient");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Toggle Mix");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle Mix");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Reverse Gradient");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Start V-tool");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" End V-tool");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Start Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" End Z:");
+ LSTR MSG_MIX = _UxGT("Mix");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Component =");
+ LSTR MSG_MIXER = _UxGT("Mixer");
+ LSTR MSG_GRADIENT = _UxGT("Gradient");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Toggle Mix");
+ LSTR MSG_CYCLE_MIX = _UxGT("Cycle Mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Reverse Gradient");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
+ LSTR MSG_START_VTOOL = _UxGT("Start V-tool");
+ LSTR MSG_END_VTOOL = _UxGT(" End V-tool");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
+ LSTR MSG_START_Z = _UxGT("Start Z:");
+ LSTR MSG_END_Z = _UxGT(" End Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Games");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_GAMES = _UxGT("Games");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Bad page index");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
+ LSTR MSG_BAD_PAGE = _UxGT("Bad page index");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Edit Password");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Login Required");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Password Settings");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Enter Digit");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Set/Edit Password");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Remove Password");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Password is ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Start Over");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Remember to Save!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Password Removed");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Edit Password");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Login Required");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Password Settings");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Enter Digit");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Set/Edit Password");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Remove Password");
+ LSTR MSG_PASSWORD_SET = _UxGT("Password is ");
+ LSTR MSG_START_OVER = _UxGT("Start Over");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Remember to Save!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Password Removed");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Press Button", "to resume print"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wait for", "filament change", "to start"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wait for", "filament load"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Press Button", "to resume print"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wait for", "filament change", "to start"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wait for", "filament load"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Click to continue"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Please wait..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insert and Click"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Click to heat"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heating..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejecting..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Loading..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purging..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Click to finish"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Resuming..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Click to continue"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Please wait..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insert and Click"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Click to heat"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Heating..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejecting..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Loading..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purging..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Click to finish"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Resuming..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Driver Current");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" in:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correction");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
+ LSTR MSG_TMC_CURRENT = _UxGT("Driver Current");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
+ LSTR MSG_SERVICE_RESET = _UxGT("Reset");
+ LSTR MSG_SERVICE_IN = _UxGT(" in:");
+ LSTR MSG_BACKLASH = _UxGT("Backlash");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Correction");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Level X Axis");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrate");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Level X Axis");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrate");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Idle timeout, temperature decreased. Press Okay to reheat and again to resume.");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Idle timeout, temperature decreased. Press Okay to reheat and again to resume.");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Heater Timeout");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Heater Timeout");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Reheat");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Reheating...");
- PROGMEM Language_Str MSG_REHEATDONE = _UxGT("Reheat Done");
+ LSTR MSG_REHEAT = _UxGT("Reheat");
+ LSTR MSG_REHEATING = _UxGT("Reheating...");
+ LSTR MSG_REHEATDONE = _UxGT("Reheat Done");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard");
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Probing Z Reference");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Moving to Probing Pos");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Probing Z Reference");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Moving to Probing Pos");
- PROGMEM Language_Str MSG_SOUND = _UxGT("Sound");
+ LSTR MSG_SOUND = _UxGT("Sound");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Top Left");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Bottom Left");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Top Right");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Bottom Right");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Calibration Completed");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Calibration Failed");
+ LSTR MSG_TOP_LEFT = _UxGT("Top Left");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Bottom Left");
+ LSTR MSG_TOP_RIGHT = _UxGT("Top Right");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Bottom Right");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibration Completed");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibration Failed");
- PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" driver backward");
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" driver backward");
- PROGMEM Language_Str MSG_SD_CARD = _UxGT("SD Card");
- PROGMEM Language_Str MSG_USB_DISK = _UxGT("USB Disk");
+ LSTR MSG_SD_CARD = _UxGT("SD Card");
+ LSTR MSG_USB_DISK = _UxGT("USB Disk");
+
+ // These strings can be the same in all languages
+ LSTR MSG_MARLIN = _UxGT("Marlin");
+ LSTR MSG_SHORT_DAY = _UxGT("d"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ LSTR MSG_PID_P = _UxGT("PID-P");
+ LSTR MSG_PID_P_E = _UxGT("PID-P *");
+ LSTR MSG_PID_I = _UxGT("PID-I");
+ LSTR MSG_PID_I_E = _UxGT("PID-I *");
+ LSTR MSG_PID_D = _UxGT("PID-D");
+ LSTR MSG_PID_D_E = _UxGT("PID-D *");
+ LSTR MSG_PID_C = _UxGT("PID-C");
+ LSTR MSG_PID_C_E = _UxGT("PID-C *");
+ LSTR MSG_PID_F = _UxGT("PID-F");
+ LSTR MSG_PID_F_E = _UxGT("PID-F *");
+ LSTR MSG_BACKLASH_A = LCD_STR_A;
+ LSTR MSG_BACKLASH_B = LCD_STR_B;
+ LSTR MSG_BACKLASH_C = LCD_STR_C;
+ LSTR MSG_BACKLASH_I = LCD_STR_I;
+ LSTR MSG_BACKLASH_J = LCD_STR_J;
+ LSTR MSG_BACKLASH_K = LCD_STR_K;
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_es.h b/Marlin/src/lcd/language/language_es.h
index 1213d9e1fe..62dd69b526 100644
--- a/Marlin/src/lcd/language/language_es.h
+++ b/Marlin/src/lcd/language/language_es.h
@@ -31,575 +31,564 @@
namespace Language_es {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Spanish");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Spanish");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Lista");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("SI");
- PROGMEM Language_Str MSG_NO = _UxGT("NO");
- PROGMEM Language_Str MSG_BACK = _UxGT("Atrás");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD/USB insertado");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD/USB retirado");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Esperando al SD/USB");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Fallo al iniciar SD");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/USB");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbordamiento de subllamada");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ajustes avanzados");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Inicio automático");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prob. barra progreso");
- PROGMEM Language_Str MSG_HOMING = _UxGT("Origen");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Llevar al origen");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Origen X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Origen Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Origen Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto alineado Z");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteración: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("¡Precisión disminuyendo!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Precisión conseguida");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Pulsar para comenzar");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Siguiente punto");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("¡Nivelación lista!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Compen. Altura");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ajustar desfases");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicada");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Establecer origen");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Lista");
+ LSTR MSG_YES = _UxGT("SI");
+ LSTR MSG_NO = _UxGT("NO");
+ LSTR MSG_BACK = _UxGT("Atrás");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("SD/USB insertado");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("SD/USB retirado");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Esperando al SD/USB");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Fallo al iniciar SD");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Error lectura SD/USB");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbordamiento de subllamada");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
+ LSTR MSG_MAIN = _UxGT("Menú principal");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Ajustes avanzados");
+ LSTR MSG_CONFIGURATION = _UxGT("Configuración");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Inicio automático");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menú depuración");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Prob. barra progreso");
+ LSTR MSG_HOMING = _UxGT("Origen");
+ LSTR MSG_AUTO_HOME = _UxGT("Llevar al origen");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Origen X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Origen Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Origen Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto alineado Z");
+ LSTR MSG_ITERATION = _UxGT("G34 Iteración: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("¡Precisión disminuyendo!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Precisión conseguida");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Origen XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Pulsar para comenzar");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Siguiente punto");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("¡Nivelación lista!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Compen. Altura");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ajustar desfases");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfase aplicada");
+ LSTR MSG_SET_ORIGIN = _UxGT("Establecer origen");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Precal. ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Precal. ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Fusor");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Fusor ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Todo");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Cama");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Ajuste");
+ LSTR MSG_PREHEAT_1 = _UxGT("Precal. ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Precal. ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Fusor");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Fusor ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Todo");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Cama");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Precal. ") PREHEAT_1_LABEL _UxGT(" Ajuste");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Precal. $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Precal. $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Precal. $ Fusor");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Precal. $ Fusor ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Precal. $ Todo");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Precal. $ Cama");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Precal. $ Ajuste");
+ LSTR MSG_PREHEAT_M = _UxGT("Precal. $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Precal. $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Precal. $ Fusor");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Precal. $ Fusor ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Precal. $ Todo");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Precal. $ Cama");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Precal. $ Ajuste");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Precal. manual");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Enfriar");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frecuencia");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Control Láser");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Potencia Láser");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Control Mandrino");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Potencia Mandrino");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Invertir giro");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Encender Fuente");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Apagar Fuente");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruir");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retraer");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover ejes");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelando Cama");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar Cama");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Recorrido Cama");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Siguente Esquina");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor Mallado");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Editar Mallado");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Ed. Mallado parada");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Sondear Punto");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Índice X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Índice Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valor Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Com. Personalizados");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Probar Sonda");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punto");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Desviación");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Desfase Herramienta");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Aparcado");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicar");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Reflejada");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2ª Fusor X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2ª Fusor Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2ª Fusor Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Hacer G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Herramientas UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Nivelado UBL");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Crear Mallado man.");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Colocar cuña y Medir");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Medir");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Retirar y Medir Cama");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover al Siguente");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Cama");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Cama perso.");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Fusor");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Fusor perso.");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Editar Mallado");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Mallado perso.");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste fino Mallado");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Term. edici. Mallado");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Mallado Pers.");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Mallado");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Precal. manual");
+ LSTR MSG_COOLDOWN = _UxGT("Enfriar");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frecuencia");
+ LSTR MSG_LASER_MENU = _UxGT("Control Láser");
+ LSTR MSG_LASER_POWER = _UxGT("Potencia Láser");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Control Mandrino");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Potencia Mandrino");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Invertir giro");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Encender Fuente");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Apagar Fuente");
+ LSTR MSG_EXTRUDE = _UxGT("Extruir");
+ LSTR MSG_RETRACT = _UxGT("Retraer");
+ LSTR MSG_MOVE_AXIS = _UxGT("Mover ejes");
+ LSTR MSG_BED_LEVELING = _UxGT("Nivelando Cama");
+ LSTR MSG_LEVEL_BED = _UxGT("Nivelar Cama");
+ LSTR MSG_BED_TRAMMING = _UxGT("Recorrido Cama");
+ LSTR MSG_NEXT_CORNER = _UxGT("Siguente Esquina");
+ LSTR MSG_MESH_EDITOR = _UxGT("Editor Mallado");
+ LSTR MSG_EDIT_MESH = _UxGT("Editar Mallado");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Ed. Mallado parada");
+ LSTR MSG_PROBING_POINT = _UxGT("Sondear Punto");
+ LSTR MSG_MESH_X = _UxGT("Índice X");
+ LSTR MSG_MESH_Y = _UxGT("Índice Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Valor Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Com. Personalizados");
+ LSTR MSG_M48_TEST = _UxGT("M48 Probar Sonda");
+ LSTR MSG_M48_POINT = _UxGT("M48 Punto");
+ LSTR MSG_M48_DEVIATION = _UxGT("Desviación");
+ LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Desfase Herramienta");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Aparcado");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicar");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Reflejada");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2ª Fusor Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2ª Fusor @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Hacer G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("Herramientas UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Nivelado UBL");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Crear Mallado man.");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Colocar cuña y Medir");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Medir");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Retirar y Medir Cama");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover al Siguente");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Cama");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Cama perso.");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Fusor");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Fusor perso.");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Editar Mallado");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Mallado perso.");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste fino Mallado");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Term. edici. Mallado");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Mallado Pers.");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Mallado");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Crear Mallado ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Valid. Mall. ($)");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crear Mallado ($)");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Valid. Mall. ($)");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Mallado Frío");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar alt. Mallado");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Cantidad de altura");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valid. Mallado");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valid. Mall. perso.");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Calentando Cama");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Calent. Boquilla");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Imprimado manual...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Impri. longit. fija");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Imprimación Lista");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Cancelado");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Dejando G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Contin. Mallado cama");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Nivelando Mallado");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelando 3Puntos");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niv. Mall. cuadri");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Nivel de Mallado");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterales");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo de mapa ");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Salida Mapa mallado");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Salida para el host");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salida para CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Cópia de seg. ext");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Salida Info. UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidad de relleno");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Relleno manual");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Relleno inteligente");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Mallado de relleno");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar proximos");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajustar Fino Todo");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Fino proxi.");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacen de Mallado");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Huecos memoria");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Cargar Mall. cama");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Guardar Mall. cama");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Malla %i Cargada");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Malla %i Guardada");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Sin guardar");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Error: Guardar UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Error: Restaurar UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Parado");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crear Mall. Frío");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Relleno intelig.");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valid. Mallado");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajustar Fino Todo");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valid. Mallado");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajustar Fino Todo");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Guardar Mall. cama");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Mallado Frío");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar alt. Mallado");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Cantidad de altura");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valid. Mallado");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valid. Mall. perso.");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Calentando Cama");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Calent. Boquilla");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Imprimado manual...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Impri. longit. fija");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Imprimación Lista");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Cancelado");
+ LSTR MSG_G26_LEAVING = _UxGT("Dejando G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Contin. Mallado cama");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nivelando Mallado");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelando 3Puntos");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niv. Mall. cuadri");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivel de Mallado");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterales");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo de mapa ");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Salida Mapa mallado");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Salida para el host");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salida para CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Cópia de seg. ext");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Salida Info. UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidad de relleno");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Relleno manual");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Relleno inteligente");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Mallado de relleno");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar proximos");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajustar Fino Todo");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Fino proxi.");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacen de Mallado");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Huecos memoria");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Cargar Mall. cama");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Guardar Mall. cama");
+ LSTR MSG_MESH_LOADED = _UxGT("Malla %i Cargada");
+ LSTR MSG_MESH_SAVED = _UxGT("Malla %i Guardada");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Sin guardar");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Error: Guardar UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Error: Restaurar UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Parado");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crear Mall. Frío");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Relleno intelig.");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valid. Mallado");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajustar Fino Todo");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valid. Mallado");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajustar Fino Todo");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Guardar Mall. cama");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Control LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("LEDS");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Color predefinido");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rojo");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Naranja");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Amarillo");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Verde");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Azul");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Blanco");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Color personalizado");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensidad Rojo");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensidad Verde");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensidad Azul");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensidad Blanco");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brillo");
+ LSTR MSG_LED_CONTROL = _UxGT("Control LED");
+ LSTR MSG_LEDS = _UxGT("LEDS");
+ LSTR MSG_LED_PRESETS = _UxGT("Color predefinido");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Rojo");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Naranja");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Amarillo");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Verde");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Azul");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Blanco");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Color personalizado");
+ LSTR MSG_INTENSITY_R = _UxGT("Intensidad Rojo");
+ LSTR MSG_INTENSITY_G = _UxGT("Intensidad Verde");
+ LSTR MSG_INTENSITY_B = _UxGT("Intensidad Azul");
+ LSTR MSG_INTENSITY_W = _UxGT("Intensidad Blanco");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Brillo");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Moviendo...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Libre XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extrusor *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend muy frio");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mover %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidad");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Cama Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Boquilla");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Boquilla ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Boquilla Aparcada");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Boquilla en Espera");
- PROGMEM Language_Str MSG_BED = _UxGT("Cama");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Recinto");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ventilador");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ventilador ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Vent. almacenado ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Ext. ventil.");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Ext. ventil. ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Controlador Vent.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Velocidad en reposo");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo Auto");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Velocidad Activa");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Periodo de reposo");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flujo");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flujo ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Factor");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temp. Autom.");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Enc");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Apg");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Auto-ajuste");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Auto-ajuste *");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Seleccionar");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Seleccionar *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Aceleración");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Max E Jerk");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Desvi. Unión");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocidad");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Max * Vel");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vel. viaje min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Acceleración");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Acel. max") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Acel. max") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Acel. max") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Acel. max") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Acel. max") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Acel. max") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Acel. max") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Acel. max *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Acel. retrac.");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Acel. Viaje");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pasos/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* pasos/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Movimiento");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diámetro Fil.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Diámetro Fil. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carga mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avance K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Avance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Guardar EEPROM");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar EEPROM");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Rest. fábrica");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Err: Índice EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versión EEPROM");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetear Impresora");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Pantalla de Inf.");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Ajustar");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Iniciar impresión");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Siguinte");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Iniciar");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Parar");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimir");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reiniciar");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Cancelar");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Listo");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Retroceder");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Proceder");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Reanudar impresión");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Detener impresión");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Imprimiendo Objeto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Rec. Fallo electrico");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprim. desde SD/USB");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("SD/USB no presente");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Reposo...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Pulsar para Reanudar");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Impresión Pausada");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Imprimiendo...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impresión cancelada");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Impresión Completada");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sin movimiento");
- PROGMEM Language_Str MSG_KILLED = _UxGT("MUERTA");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("DETENIDA");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Interc. Retraer mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Levantar mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Interc. DesRet mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retracción Auto.");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Inter. longitud");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purgar longitud");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Cambiar Herramienta");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Aumentar Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vel. de Cebado");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vel. de retracción");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar filamento");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambiar filamento *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Cargar filamento");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Cargar filamento *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Descargar filamento");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Descargar fil. *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar todo");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera cama");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Factor de desviación");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Auto-Prueba");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reiniciar");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Subir pistón");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Bajar pistón");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Modo Software");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Modo 5V");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Modo OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Modo almacenar");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Poner BLTouch a 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Poner BLTouch a OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Informe de drenaje");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("PELIGRO: ¡Una mala configuración puede producir daños! ¿Proceder igualmente?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test de desfase Z");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Guardar");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Subir TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Subir Sonda Z");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Bajar Sonda Z");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Origen %s%s%s Prim.");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Desf. Sonda");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Desf. Sonda X");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Desf. Sonda Y");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desf. Sonda Z");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropaso X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Calent. fallido");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP. REDUN.");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CAMARA");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err:TEMP. MÁX");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err:TEMP. MIN");
- PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESORA DETENIDA");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Por favor, reinicie");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Calentando...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Enfriando...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Calentando Cama...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Enfriando Cama...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Calentando Cámara...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Enfriando Cámara...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibración Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Est. Altura Delta");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Ajustar Sonda Z");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altura");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radio");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Info. Impresora");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info. Impresora");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Nivelando 3puntos");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Nivelando Lineal");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Nivelando Bilineal");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Nivelando UBL");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nivelando en Mallado");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estadísticas Imp.");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. Controlador");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudios");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Vig. Fuga Térm.: OFF");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Vig. Fuga Térm.: ON");
+ LSTR MSG_MOVING = _UxGT("Moviendo...");
+ LSTR MSG_FREE_XY = _UxGT("Libre XY");
+ LSTR MSG_MOVE_X = _UxGT("Mover X");
+ LSTR MSG_MOVE_Y = _UxGT("Mover Y");
+ LSTR MSG_MOVE_Z = _UxGT("Mover Z");
+ LSTR MSG_MOVE_E = _UxGT("Extrusor");
+ LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend muy frio");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mover %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
+ LSTR MSG_SPEED = _UxGT("Velocidad");
+ LSTR MSG_BED_Z = _UxGT("Cama Z");
+ LSTR MSG_NOZZLE = _UxGT("Boquilla");
+ LSTR MSG_NOZZLE_N = _UxGT("Boquilla ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Boquilla Aparcada");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Boquilla en Espera");
+ LSTR MSG_BED = _UxGT("Cama");
+ LSTR MSG_CHAMBER = _UxGT("Recinto");
+ LSTR MSG_FAN_SPEED = _UxGT("Ventilador");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Ventilador ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Vent. almacenado ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Ext. ventil.");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Ext. ventil. ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Controlador Vent.");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Velocidad en reposo");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo Auto");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Velocidad Activa");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Periodo de reposo");
+ LSTR MSG_FLOW = _UxGT("Flujo");
+ LSTR MSG_FLOW_N = _UxGT("Flujo ~");
+ LSTR MSG_CONTROL = _UxGT("Control");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Factor");
+ LSTR MSG_AUTOTEMP = _UxGT("Temp. Autom.");
+ LSTR MSG_LCD_ON = _UxGT("Enc");
+ LSTR MSG_LCD_OFF = _UxGT("Apg");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Auto-ajuste");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Auto-ajuste *");
+ LSTR MSG_SELECT = _UxGT("Seleccionar");
+ LSTR MSG_SELECT_E = _UxGT("Seleccionar *");
+ LSTR MSG_ACC = _UxGT("Aceleración");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
+ LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
+ LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
+ LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
+ LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
+ LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
+ LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desvi. Unión");
+ LSTR MSG_VELOCITY = _UxGT("Velocidad");
+ LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel");
+ LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel");
+ LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel");
+ LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel");
+ LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel");
+ LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel");
+ LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel");
+ LSTR MSG_VMAX_EN = _UxGT("Max * Vel");
+ LSTR MSG_VMIN = _UxGT("Vmin");
+ LSTR MSG_VTRAV_MIN = _UxGT("Vel. viaje min");
+ LSTR MSG_ACCELERATION = _UxGT("Acceleración");
+ LSTR MSG_AMAX_A = _UxGT("Acel. max") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Acel. max") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Acel. max") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Acel. max") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Acel. max") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Acel. max") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Acel. max") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Acel. max *");
+ LSTR MSG_A_RETRACT = _UxGT("Acel. retrac.");
+ LSTR MSG_A_TRAVEL = _UxGT("Acel. Viaje");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pasos/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pasos/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" pasos/mm");
+ LSTR MSG_E_STEPS = _UxGT("E pasos/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* pasos/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Movimiento");
+ LSTR MSG_FILAMENT = _UxGT("Filamento");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Diámetro Fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diámetro Fil. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Carga mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Avance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *");
+ LSTR MSG_CONTRAST = _UxGT("Contraste LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Guardar EEPROM");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Cargar EEPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. fábrica");
+ LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: EEPROM CRC");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Índice EEPROM");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versión EEPROM");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB");
+ LSTR MSG_RESET_PRINTER = _UxGT("Resetear Impresora");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
+ LSTR MSG_INFO_SCREEN = _UxGT("Pantalla de Inf.");
+ LSTR MSG_PREPARE = _UxGT("Preparar");
+ LSTR MSG_TUNE = _UxGT("Ajustar");
+ LSTR MSG_START_PRINT = _UxGT("Iniciar impresión");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Siguinte");
+ LSTR MSG_BUTTON_INIT = _UxGT("Iniciar");
+ LSTR MSG_BUTTON_STOP = _UxGT("Parar");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Imprimir");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reiniciar");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Cancelar");
+ LSTR MSG_BUTTON_DONE = _UxGT("Listo");
+ LSTR MSG_BUTTON_BACK = _UxGT("Retroceder");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Proceder");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
+ LSTR MSG_RESUME_PRINT = _UxGT("Reanudar impresión");
+ LSTR MSG_STOP_PRINT = _UxGT("Detener impresión");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimiendo Objeto");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Rec. Fallo electrico");
+ LSTR MSG_MEDIA_MENU = _UxGT("Imprim. desde SD/USB");
+ LSTR MSG_NO_MEDIA = _UxGT("SD/USB no presente");
+ LSTR MSG_DWELL = _UxGT("Reposo...");
+ LSTR MSG_USERWAIT = _UxGT("Pulsar para Reanudar");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Impresión Pausada");
+ LSTR MSG_PRINTING = _UxGT("Imprimiendo...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Impresión cancelada");
+ LSTR MSG_PRINT_DONE = _UxGT("Impresión Completada");
+ LSTR MSG_NO_MOVE = _UxGT("Sin movimiento");
+ LSTR MSG_KILLED = _UxGT("MUERTA");
+ LSTR MSG_STOPPED = _UxGT("DETENIDA");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Interc. Retraer mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Levantar mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("DesRet mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Interc. DesRet mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("DesRet V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Retracción Auto.");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Inter. longitud");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purgar longitud");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Cambiar Herramienta");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Aumentar Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vel. de Cebado");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vel. de retracción");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Cambiar filamento");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambiar filamento *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Cargar filamento");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Cargar filamento *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Descargar filamento");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descargar fil. *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar todo");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z fuera cama");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Factor de desviación");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Auto-Prueba");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reiniciar");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Subir pistón");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Bajar pistón");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Modo Software");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Modo 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Modo OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Modo almacenar");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Poner BLTouch a 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Poner BLTouch a OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Informe de drenaje");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("PELIGRO: ¡Una mala configuración puede producir daños! ¿Proceder igualmente?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test de desfase Z");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Guardar");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Subir TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Subir Sonda Z");
+ LSTR MSG_MANUAL_STOW = _UxGT("Bajar Sonda Z");
+ LSTR MSG_HOME_FIRST = _UxGT("Origen %s%s%s Prim.");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Desf. Sonda");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Desf. Sonda X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Desf. Sonda Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desf. Sonda Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Micropaso X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Cancelado - Endstop");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Calent. fallido");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP. REDUN.");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CAMARA");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err:TEMP. MÁX");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err:TEMP. MIN");
+ LSTR MSG_HALTED = _UxGT("IMPRESORA DETENIDA");
+ LSTR MSG_PLEASE_RESET = _UxGT("Por favor, reinicie");
+ LSTR MSG_HEATING = _UxGT("Calentando...");
+ LSTR MSG_COOLING = _UxGT("Enfriando...");
+ LSTR MSG_BED_HEATING = _UxGT("Calentando Cama...");
+ LSTR MSG_BED_COOLING = _UxGT("Enfriando Cama...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Calentando Cámara...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Enfriando Cámara...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibración Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Est. Altura Delta");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Ajustar Sonda Z");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Altura");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Radio");
+ LSTR MSG_INFO_MENU = _UxGT("Info. Impresora");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info. Impresora");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Nivelando 3puntos");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelando Lineal");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelando Bilineal");
+ LSTR MSG_UBL_LEVELING = _UxGT("Nivelando UBL");
+ LSTR MSG_MESH_LEVELING = _UxGT("Nivelando en Mallado");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Estadísticas Imp.");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. Controlador");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baudios");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Vig. Fuga Térm.: OFF");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Vig. Fuga Térm.: ON");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz cabina");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo cabina");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Impresora incorrecta");
+ LSTR MSG_CASE_LIGHT = _UxGT("Luz cabina");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo cabina");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impresora incorrecta");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Cont. de impresión");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tiempo total de imp.");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impresión más larga");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruido");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Cont. de impresión");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tiempo total de imp.");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impresión más larga");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruido");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impresiones");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Más larga");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impresiones");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Más larga");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp. Mínima");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp. Máxima");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("F. Aliment.");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Fuerza de empuje");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERROR CONEX. TMC");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPC. REINICIO:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar más");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar imp.");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Boquilla: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sens. filamento");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist. filamento mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Ir a origen Fallado");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondeo Fallado");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp. Mínima");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp. Máxima");
+ LSTR MSG_INFO_PSU = _UxGT("F. Aliment.");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Fuerza de empuje");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %");
+ LSTR MSG_ERROR_TMC = _UxGT("ERROR CONEX. TMC");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPC. REINICIO:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar más");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar imp.");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Boquilla: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Sens. filamento");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist. filamento mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Ir a origen Fallado");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondeo Fallado");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ELIJE FILAMENTO");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("¡Actu. MMU Firmware!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Necesita Cuidado");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Continuar imp.");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Resumiendo...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar hasta boqui.");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Expulsar Filamento ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Todo");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Retirar, y pulsar");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ELIJE FILAMENTO");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("¡Actu. MMU Firmware!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Necesita Cuidado");
+ LSTR MSG_MMU2_RESUME = _UxGT("Continuar imp.");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Resumiendo...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar hasta boqui.");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Expulsar Filamento ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("Todo");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retirar, y pulsar");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mezcla");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Componente =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Miezclador");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Degradado");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Degradado Total");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Mezcla Conmutada");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Mezcla Cíclica");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Mezcla de Degradado");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Degradado inverso");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Activar Herr.V");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Inicio Herr.V");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Fin Herr.V");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias Herr.V");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reiniciar Herr.V");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Cometer mezc. Herr.V");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("Herr.V reiniciados");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Inicio Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Fin Z:");
+ LSTR MSG_MIX = _UxGT("Mezcla");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente =");
+ LSTR MSG_MIXER = _UxGT("Miezclador");
+ LSTR MSG_GRADIENT = _UxGT("Degradado");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Degradado Total");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Mezcla Conmutada");
+ LSTR MSG_CYCLE_MIX = _UxGT("Mezcla Cíclica");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Mezcla de Degradado");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Degradado inverso");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Activar Herr.V");
+ LSTR MSG_START_VTOOL = _UxGT("Inicio Herr.V");
+ LSTR MSG_END_VTOOL = _UxGT(" Fin Herr.V");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias Herr.V");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Reiniciar Herr.V");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Cometer mezc. Herr.V");
+ LSTR MSG_VTOOLS_RESET = _UxGT("Herr.V reiniciados");
+ LSTR MSG_START_Z = _UxGT("Inicio Z:");
+ LSTR MSG_END_Z = _UxGT(" Fin Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Juegos");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_GAMES = _UxGT("Juegos");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Pulsar el botón para", "reanudar impresión"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Aparcando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando para", "iniciar el cambio", "de filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserte el filamento", "y pulse el botón", "para continuar..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pulse el botón para", "calentar la boquilla"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Calentando boquilla", "Espere por favor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Espere para", "liberar el filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Espere para", "cargar el filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere para", "purgar el filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Pulse para finalizar", "la purga de filamen."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impresora", "para reanudar..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Pulsar el botón para", "reanudar impresión"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Aparcando..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando para", "iniciar el cambio", "de filamento"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserte el filamento", "y pulse el botón", "para continuar..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pulse el botón para", "calentar la boquilla"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Calentando boquilla", "Espere por favor..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Espere para", "liberar el filamento"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Espere para", "cargar el filamento"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere para", "purgar el filamento"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Pulse para finalizar", "la purga de filamen."));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impresora", "para reanudar..."));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Pulse para continuar"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Aparcando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Por Favor espere..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserte y Pulse"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Pulse para Calentar"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Calentando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Liberando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Pulse para finalizar"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reanudando..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Pulse para continuar"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Aparcando..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Por Favor espere..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserte y Pulse"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Pulse para Calentar"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Calentando..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Liberando..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Pulse para finalizar"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reanudando..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Amperaje Controlador");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Límite Hibrido");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Origen sin sensores");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reiniciar");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" dentro:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Corrección");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
+ LSTR MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
+ LSTR MSG_TMC_CURRENT = _UxGT("Amperaje Controlador");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Límite Hibrido");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Origen sin sensores");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
+ LSTR MSG_SERVICE_RESET = _UxGT("Reiniciar");
+ LSTR MSG_SERVICE_IN = _UxGT(" dentro:");
+ LSTR MSG_BACKLASH = _UxGT("Backlash");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Corrección");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Nivel Eje X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrar");
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("T. de esp. Calent.");
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Recalentar");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Recalentando...");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivel Eje X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrar");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("T. de esp. Calent.");
+ LSTR MSG_REHEAT = _UxGT("Recalentar");
+ LSTR MSG_REHEATING = _UxGT("Recalentando...");
}
diff --git a/Marlin/src/lcd/language/language_eu.h b/Marlin/src/lcd/language/language_eu.h
index 30cc4931d8..fc8f2e0f62 100644
--- a/Marlin/src/lcd/language/language_eu.h
+++ b/Marlin/src/lcd/language/language_eu.h
@@ -34,298 +34,295 @@
namespace Language_eu {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 1;
- PROGMEM Language_Str LANGUAGE = _UxGT("Basque-Euskera");
+ constexpr uint8_t CHARSIZE = 1;
+ LSTR LANGUAGE = _UxGT("Basque-Euskera");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" prest.");
- PROGMEM Language_Str MSG_BACK = _UxGT("Atzera");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Txartela sartuta");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Txartela kenduta");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu nagusia");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Auto hasiera");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Itzali motoreak");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Arazketa Menua");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Prog. Barra Proba");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Hasierara joan");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X jatorrira");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y jatorrira");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z jatorrira");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("XYZ hasieraratzen");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klik egin hasteko");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Hurrengo Puntua");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Berdintzea eginda");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Etxe. offset eza.");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsetak ezarrita");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Hasiera ipini");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" prest.");
+ LSTR MSG_BACK = _UxGT("Atzera");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Txartela sartuta");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Txartela kenduta");
+ LSTR MSG_MAIN = _UxGT("Menu nagusia");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Auto hasiera");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Itzali motoreak");
+ LSTR MSG_DEBUG_MENU = _UxGT("Arazketa Menua");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Prog. Barra Proba");
+ LSTR MSG_AUTO_HOME = _UxGT("Hasierara joan");
+ LSTR MSG_AUTO_HOME_X = _UxGT("X jatorrira");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Y jatorrira");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Z jatorrira");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ hasieraratzen");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klik egin hasteko");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Hurrengo Puntua");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Berdintzea eginda");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Etxe. offset eza.");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsetak ezarrita");
+ LSTR MSG_SET_ORIGIN = _UxGT("Hasiera ipini");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Berotu ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Berotu ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Guztia");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ohea");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ezarp.");
+ LSTR MSG_PREHEAT_1 = _UxGT("Berotu ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Berotu ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Amaia ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Guztia");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ohea");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Berotu ") PREHEAT_1_LABEL _UxGT(" Ezarp.");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Berotu $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Berotu $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Berotu $ Amaia");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Berotu $ Amaia ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Berotu $ Guztia");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Berotu $ Ohea");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Berotu $ Ezarp.");
+ LSTR MSG_PREHEAT_M = _UxGT("Berotu $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Berotu $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Berotu $ Amaia");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Berotu $ Amaia ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Berotu $ Guztia");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Berotu $ Ohea");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Berotu $ Ezarp.");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Hoztu");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Energia piztu");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Energia itzali");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Estruitu");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Atzera eragin");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Ardatzak mugitu");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Ohe berdinketa");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Ohea berdindu");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Ertzak berdindu");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Hurrengo ertza");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Sarea editatu");
+ LSTR MSG_COOLDOWN = _UxGT("Hoztu");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Energia piztu");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Energia itzali");
+ LSTR MSG_EXTRUDE = _UxGT("Estruitu");
+ LSTR MSG_RETRACT = _UxGT("Atzera eragin");
+ LSTR MSG_MOVE_AXIS = _UxGT("Ardatzak mugitu");
+ LSTR MSG_BED_LEVELING = _UxGT("Ohe berdinketa");
+ LSTR MSG_LEVEL_BED = _UxGT("Ohea berdindu");
+ LSTR MSG_BED_TRAMMING = _UxGT("Ertzak berdindu");
+ LSTR MSG_NEXT_CORNER = _UxGT("Hurrengo ertza");
+ LSTR MSG_EDIT_MESH = _UxGT("Sarea editatu");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 exekutatzen");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Tresnak");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Sarea eskuz sortu");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Neurtu");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktibatu");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL desaktibatu");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Ohearen tenperatura");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Mutur beroaren tenp.");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Sarea editatu");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Sarea editatzea eginda");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Sarea sortu");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("G29 exekutatzen");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL Tresnak");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Sarea eskuz sortu");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Neurtu");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktibatu");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL desaktibatu");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Ohearen tenperatura");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Mutur beroaren tenp.");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Sarea editatu");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Sarea editatzea eginda");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Sarea sortu");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("$ sarea sortu");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("$ sarea balioetsi");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("$ sarea sortu");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("$ sarea balioetsi");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Sare hotza sortu");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Sarearen altuera doitu");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sarea balioetsi");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Ohe sarea balioetsi");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Sare berdinketa");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3 puntuko berdinketa");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Lauki-sare berdinketa");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Sarea berdindu");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Mapa mota");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED ezarpenak");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Argiak");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Argi aurrehautaketak");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Gorria");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Laranja");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Horia");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Berdea");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Urdina");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Bioleta");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Zuria");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Lehenetsia");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Argi pertsonalizatuak");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intentsitate gorria");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intentsitate berdea");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intentsitate urdina");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intentsitate zuria");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Distira");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Sare hotza sortu");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Sarearen altuera doitu");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sarea balioetsi");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Ohe sarea balioetsi");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Sare berdinketa");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3 puntuko berdinketa");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Lauki-sare berdinketa");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Sarea berdindu");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Mapa mota");
+ LSTR MSG_LED_CONTROL = _UxGT("LED ezarpenak");
+ LSTR MSG_LEDS = _UxGT("Argiak");
+ LSTR MSG_LED_PRESETS = _UxGT("Argi aurrehautaketak");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Gorria");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Laranja");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Horia");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Berdea");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Urdina");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Bioleta");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Zuria");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Lehenetsia");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Argi pertsonalizatuak");
+ LSTR MSG_INTENSITY_R = _UxGT("Intentsitate gorria");
+ LSTR MSG_INTENSITY_G = _UxGT("Intentsitate berdea");
+ LSTR MSG_INTENSITY_B = _UxGT("Intentsitate urdina");
+ LSTR MSG_INTENSITY_W = _UxGT("Intentsitate zuria");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Distira");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Mugitzen...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Askatu XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mugitu X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mugitu Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mugitu Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Estrusorea");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Estrusorea *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mugitu %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mugitu 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mugitu 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mugitu 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mugitu 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Abiadura");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Ohea");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Pita");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Pita ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Ohea");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Haizagailu abiadura");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Haizagailu abiadura ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Haiz.gehig. abiadura");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Haiz.gehig. abiadura ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxua");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxua ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrola");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto tenperatura");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Aukeratu");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Aukeratu *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Azelerazioa");
- PROGMEM Language_Str MSG_JERK = _UxGT("Astindua");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-astindua");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-astindua");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-astindua");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-astindua");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-astindua");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-astindua");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-astindua");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VBidaia min");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrakt");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-bidaia");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pausoak/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pausoak/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pausoak/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pausoak/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" pausoak/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" pausoak/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" pausoak/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pausoak/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* pausoak/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Tenperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Mugimendua");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Harizpia");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E mm3-tan");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Hariz. Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Hariz. Dia. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Deskargatu mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Kargatu mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K Aurrerapena");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("K Aurrerapena *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrastea");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gorde memoria");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Kargatu memoria");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Larri. berriz.");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM-a hasieratu");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Berriz kargatu");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Pantaila info");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Prestatu");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Doitu");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausatu inprimak.");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Jarraitu inprima.");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Gelditu inprima.");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("SD-tik inprimatu");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Ez dago SD-rik");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Lo egin...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Aginduak zain...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Inprim. geldi.");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Inprim. deusezta.");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Mugimendu gabe.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("AKABATUTA. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("GELDITUTA. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Atzera egin mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Atzera mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Atzera egin V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Igo mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Atzera egin mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap Atzera mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Atzera egin V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Atzera egin");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Aldatu harizpia");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Aldatu harizpia *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Harizpia kargatu");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Harizpia kargatu *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Harizpia deskargatu");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Harizpia deskargatu *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Erabat deskargatu");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Hasieratu SD-a");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Aldatu txartela");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z zunda kanpora");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Okertze faktorea");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch AutoProba");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("BLTouch berrabia.");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch jaitsi/luzatu");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("BLTouch igo/jaso");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Etxera %s%s%s lehenengo");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Konpentsatu");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Mikro-urratsa X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Mikro-urratsa Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Mikro-urratsa Z");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop deusezta.");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Err: Beroketa");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: Tenperatura");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TENP. KONTROL EZA");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: Tenp Maximoa");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: Tenp Minimoa");
- PROGMEM Language_Str MSG_HALTED = _UxGT("INPRIMA. GELDIRIK");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Berrabia. Mesedez");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Berotzen...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Ohea Berotzen...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibraketa");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibratu X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibratu Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibratu Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibratu Zentrua");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta ezarpenak");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Kalibraketa");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Alt. Ezar.");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra diagonala");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altuera");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Erradioa");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Inprimagailu Inf.");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Inprimagailu Inf.");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3 puntuko berdinketa");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Berdinketa lineala");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Berdinketa bilinearra");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Sare berdinketa");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Inprima. estatis.");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Txartelaren Info.");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistoreak");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Estrusoreak");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudioak");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokoloa");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Kabina Argia");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Argiaren Distira");
+ LSTR MSG_MOVING = _UxGT("Mugitzen...");
+ LSTR MSG_FREE_XY = _UxGT("Askatu XY");
+ LSTR MSG_MOVE_X = _UxGT("Mugitu X");
+ LSTR MSG_MOVE_Y = _UxGT("Mugitu Y");
+ LSTR MSG_MOVE_Z = _UxGT("Mugitu Z");
+ LSTR MSG_MOVE_E = _UxGT("Estrusorea");
+ LSTR MSG_MOVE_EN = _UxGT("Estrusorea *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mugitu %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mugitu 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mugitu 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mugitu 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mugitu 100mm");
+ LSTR MSG_SPEED = _UxGT("Abiadura");
+ LSTR MSG_BED_Z = _UxGT("Z Ohea");
+ LSTR MSG_NOZZLE = _UxGT("Pita");
+ LSTR MSG_NOZZLE_N = _UxGT("Pita ~");
+ LSTR MSG_BED = _UxGT("Ohea");
+ LSTR MSG_FAN_SPEED = _UxGT("Haizagailu abiadura");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Haizagailu abiadura ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Haiz.gehig. abiadura");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Haiz.gehig. abiadura ~");
+ LSTR MSG_FLOW = _UxGT("Fluxua");
+ LSTR MSG_FLOW_N = _UxGT("Fluxua ~");
+ LSTR MSG_CONTROL = _UxGT("Kontrola");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+ LSTR MSG_AUTOTEMP = _UxGT("Auto tenperatura");
+ LSTR MSG_SELECT = _UxGT("Aukeratu");
+ LSTR MSG_SELECT_E = _UxGT("Aukeratu *");
+ LSTR MSG_ACC = _UxGT("Azelerazioa");
+ LSTR MSG_JERK = _UxGT("Astindua");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-astindua");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-astindua");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-astindua");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-astindua");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-astindua");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-astindua");
+ LSTR MSG_VE_JERK = _UxGT("Ve-astindua");
+ LSTR MSG_VTRAV_MIN = _UxGT("VBidaia min");
+ LSTR MSG_A_RETRACT = _UxGT("A-retrakt");
+ LSTR MSG_A_TRAVEL = _UxGT("A-bidaia");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Pausoak/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pausoak/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pausoak/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pausoak/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pausoak/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pausoak/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" pausoak/mm");
+ LSTR MSG_E_STEPS = _UxGT("E pausoak/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* pausoak/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Tenperatura");
+ LSTR MSG_MOTION = _UxGT("Mugimendua");
+ LSTR MSG_FILAMENT = _UxGT("Harizpia");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E mm3-tan");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Hariz. Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Hariz. Dia. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Deskargatu mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Kargatu mm");
+ LSTR MSG_ADVANCE_K = _UxGT("K Aurrerapena");
+ LSTR MSG_ADVANCE_K_E = _UxGT("K Aurrerapena *");
+ LSTR MSG_CONTRAST = _UxGT("LCD kontrastea");
+ LSTR MSG_STORE_EEPROM = _UxGT("Gorde memoria");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Kargatu memoria");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Larri. berriz.");
+ LSTR MSG_INIT_EEPROM = _UxGT("EEPROM-a hasieratu");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Berriz kargatu");
+ LSTR MSG_INFO_SCREEN = _UxGT("Pantaila info");
+ LSTR MSG_PREPARE = _UxGT("Prestatu");
+ LSTR MSG_TUNE = _UxGT("Doitu");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausatu inprimak.");
+ LSTR MSG_RESUME_PRINT = _UxGT("Jarraitu inprima.");
+ LSTR MSG_STOP_PRINT = _UxGT("Gelditu inprima.");
+ LSTR MSG_MEDIA_MENU = _UxGT("SD-tik inprimatu");
+ LSTR MSG_NO_MEDIA = _UxGT("Ez dago SD-rik");
+ LSTR MSG_DWELL = _UxGT("Lo egin...");
+ LSTR MSG_USERWAIT = _UxGT("Aginduak zain...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Inprim. geldi.");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Inprim. deusezta.");
+ LSTR MSG_NO_MOVE = _UxGT("Mugimendu gabe.");
+ LSTR MSG_KILLED = _UxGT("AKABATUTA. ");
+ LSTR MSG_STOPPED = _UxGT("GELDITUTA. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Atzera egin mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Atzera mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Atzera egin V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Igo mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Atzera egin mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Swap Atzera mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Atzera egin V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Atzera egin");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Aldatu harizpia");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Aldatu harizpia *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Harizpia kargatu");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Harizpia kargatu *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Harizpia deskargatu");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Harizpia deskargatu *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Erabat deskargatu");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Hasieratu SD-a");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Aldatu txartela");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z zunda kanpora");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Okertze faktorea");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch AutoProba");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("BLTouch berrabia.");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("BLTouch jaitsi/luzatu");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("BLTouch igo/jaso");
+ LSTR MSG_HOME_FIRST = _UxGT("Etxera %s%s%s lehenengo");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Konpentsatu");
+ LSTR MSG_BABYSTEP_X = _UxGT("Mikro-urratsa X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Mikro-urratsa Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Mikro-urratsa Z");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop deusezta.");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Err: Beroketa");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: Tenperatura");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("TENP. KONTROL EZA");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err: Tenp Maximoa");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err: Tenp Minimoa");
+ LSTR MSG_HALTED = _UxGT("INPRIMA. GELDIRIK");
+ LSTR MSG_PLEASE_RESET = _UxGT("Berrabia. Mesedez");
+ LSTR MSG_HEATING = _UxGT("Berotzen...");
+ LSTR MSG_BED_HEATING = _UxGT("Ohea Berotzen...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibraketa");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibratu X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibratu Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibratu Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibratu Zentrua");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta ezarpenak");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Kalibraketa");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Alt. Ezar.");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra diagonala");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Altuera");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Erradioa");
+ LSTR MSG_INFO_MENU = _UxGT("Inprimagailu Inf.");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Inprimagailu Inf.");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3 puntuko berdinketa");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Berdinketa lineala");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Berdinketa bilinearra");
+ LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
+ LSTR MSG_MESH_LEVELING = _UxGT("Sare berdinketa");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Inprima. estatis.");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Txartelaren Info.");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistoreak");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Estrusoreak");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baudioak");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokoloa");
+ LSTR MSG_CASE_LIGHT = _UxGT("Kabina Argia");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Argiaren Distira");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Inprim. Zenbaketa");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Inprim. denbora");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Imprimatze luzeena");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Estruituta guztira");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Inprim. Zenbaketa");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Inprim. denbora");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Imprimatze luzeena");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Estruituta guztira");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Inprimatze");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Guztira");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Luzeena");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Estrusio");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Inprimatze");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Burututa");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Guztira");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Luzeena");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Estrusio");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Tenp. Minimoa");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Tenp. Maximoa");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Elikadura-iturria");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Driver-aren potentzia");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Idatzi DAC EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("HARIZPIA ALDATU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("HARIZPIA KARGATU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("HARIZPIA DESKARGATU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ALDAKETA AUKERAK:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Inprima. jarraitu");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Pita: ");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Hasi. huts egin du");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Neurketak huts egin du");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Tenp. Minimoa");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Tenp. Maximoa");
+ LSTR MSG_INFO_PSU = _UxGT("Elikadura-iturria");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Driver-aren potentzia");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Idatzi DAC EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("HARIZPIA ALDATU");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("HARIZPIA KARGATU");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("HARIZPIA DESKARGATU");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ALDAKETA AUKERAK:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Inprima. jarraitu");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Pita: ");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Hasi. huts egin du");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Neurketak huts egin du");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Inprimagailu okerra");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Inprimagailu okerra");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Mesedez, itxaron..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Deskargatzen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Sartu eta click egin"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Berotzen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Kargatzen..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Mesedez, itxaron..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Deskargatzen..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Sartu eta click egin"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Berotzen..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Kargatzen..."));
}
diff --git a/Marlin/src/lcd/language/language_fi.h b/Marlin/src/lcd/language/language_fi.h
index 0d3b97cc44..075b5b2744 100644
--- a/Marlin/src/lcd/language/language_fi.h
+++ b/Marlin/src/lcd/language/language_fi.h
@@ -33,99 +33,99 @@
namespace Language_fi {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Finnish");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Finnish");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" valmis.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kortti asetettu");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kortti poistettu");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Palaa");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Automaatti");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Vapauta moottorit");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Aja referenssiin");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Aseta origo");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" valmis.");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Kortti asetettu");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Kortti poistettu");
+ LSTR MSG_MAIN = _UxGT("Palaa");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Automaatti");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Vapauta moottorit");
+ LSTR MSG_AUTO_HOME = _UxGT("Aja referenssiin");
+ LSTR MSG_SET_ORIGIN = _UxGT("Aseta origo");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Kaikki");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Alusta");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Esilämm. ") PREHEAT_1_LABEL _UxGT(" konf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Esilämmitä ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Esilämmitä ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT("Suutin ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Kaikki");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Esilä. ") PREHEAT_1_LABEL _UxGT(" Alusta");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Esilämm. ") PREHEAT_1_LABEL _UxGT(" konf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Esilämmitä $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Esilämmitä $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Esilä. $Suutin");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Esilä. $Suutin ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Esilä. $ Kaikki");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Esilä. $ Alusta");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Esilämm. $ konf");
+ LSTR MSG_PREHEAT_M = _UxGT("Esilämmitä $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Esilämmitä $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Esilä. $Suutin");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Esilä. $Suutin ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Esilä. $ Kaikki");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Esilä. $ Alusta");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Esilämm. $ konf");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Jäähdytä");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Virta päälle");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Virta pois");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Pursota");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Vedä takaisin");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Liikuta akseleita");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Liikuta X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Liikuta Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Liikuta Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extruder *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Liikuta %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Liikuta 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Liikuta 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Liikuta 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Liikuta 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Nopeus");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Suutin");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Suutin ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Alusta");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Tuul. nopeus");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Tuul. nopeus ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Virtaus");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Virtaus ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrolli");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Kerr");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
- PROGMEM Language_Str MSG_ACC = _UxGT("Kiihtyv");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VLiike min");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-peruuta");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Lämpötila");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Liike");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontrasti");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Tallenna muistiin");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Lataa muistista");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Palauta oletus");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Päivitä");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Seuraa");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Valmistele");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Säädä");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Keskeytä tulostus");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Jatka tulostusta");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Pysäytä tulostus");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Korttivalikko");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Ei korttia");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Nukkumassa...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Odotet. valintaa");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Ei liiketta.");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Vedä mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Va. Vedä mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Vedä V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Va. Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoVeto.");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrointi");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibroi X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibroi Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibroi Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibroi Center");
+ LSTR MSG_COOLDOWN = _UxGT("Jäähdytä");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Virta päälle");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Virta pois");
+ LSTR MSG_EXTRUDE = _UxGT("Pursota");
+ LSTR MSG_RETRACT = _UxGT("Vedä takaisin");
+ LSTR MSG_MOVE_AXIS = _UxGT("Liikuta akseleita");
+ LSTR MSG_MOVE_X = _UxGT("Liikuta X");
+ LSTR MSG_MOVE_Y = _UxGT("Liikuta Y");
+ LSTR MSG_MOVE_Z = _UxGT("Liikuta Z");
+ LSTR MSG_MOVE_E = _UxGT("Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Extruder *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Liikuta %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Liikuta 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Liikuta 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Liikuta 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Liikuta 100mm");
+ LSTR MSG_SPEED = _UxGT("Nopeus");
+ LSTR MSG_NOZZLE = _UxGT("Suutin");
+ LSTR MSG_NOZZLE_N = _UxGT("Suutin ~");
+ LSTR MSG_BED = _UxGT("Alusta");
+ LSTR MSG_FAN_SPEED = _UxGT("Tuul. nopeus");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Tuul. nopeus ~");
+ LSTR MSG_FLOW = _UxGT("Virtaus");
+ LSTR MSG_FLOW_N = _UxGT("Virtaus ~");
+ LSTR MSG_CONTROL = _UxGT("Kontrolli");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Kerr");
+ LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
+ LSTR MSG_ACC = _UxGT("Kiihtyv");
+ LSTR MSG_VTRAV_MIN = _UxGT("VLiike min");
+ LSTR MSG_A_RETRACT = _UxGT("A-peruuta");
+ LSTR MSG_TEMPERATURE = _UxGT("Lämpötila");
+ LSTR MSG_MOTION = _UxGT("Liike");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_CONTRAST = _UxGT("LCD kontrasti");
+ LSTR MSG_STORE_EEPROM = _UxGT("Tallenna muistiin");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Lataa muistista");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Palauta oletus");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Päivitä");
+ LSTR MSG_INFO_SCREEN = _UxGT("Seuraa");
+ LSTR MSG_PREPARE = _UxGT("Valmistele");
+ LSTR MSG_TUNE = _UxGT("Säädä");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Keskeytä tulostus");
+ LSTR MSG_RESUME_PRINT = _UxGT("Jatka tulostusta");
+ LSTR MSG_STOP_PRINT = _UxGT("Pysäytä tulostus");
+ LSTR MSG_MEDIA_MENU = _UxGT("Korttivalikko");
+ LSTR MSG_NO_MEDIA = _UxGT("Ei korttia");
+ LSTR MSG_DWELL = _UxGT("Nukkumassa...");
+ LSTR MSG_USERWAIT = _UxGT("Odotet. valintaa");
+ LSTR MSG_NO_MOVE = _UxGT("Ei liiketta.");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Vedä mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Va. Vedä mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Vedä V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Z mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Va. Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_AUTORETRACT = _UxGT("AutoVeto.");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrointi");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibroi X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibroi Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibroi Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibroi Center");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Väärä tulostin");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Väärä tulostin");
}
diff --git a/Marlin/src/lcd/language/language_fr.h b/Marlin/src/lcd/language/language_fr.h
index ef15d069dc..77472e4fbb 100644
--- a/Marlin/src/lcd/language/language_fr.h
+++ b/Marlin/src/lcd/language/language_fr.h
@@ -33,630 +33,624 @@
namespace Language_fr {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Français");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Français");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" prête.");
- PROGMEM Language_Str MSG_YES = _UxGT("Oui");
- PROGMEM Language_Str MSG_NO = _UxGT("Non");
- PROGMEM Language_Str MSG_BACK = _UxGT("Retour");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Annulation...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Média inséré");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Média retiré");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Attente média");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Err lecture média");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB débranché");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Erreur média USB");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Butées");
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Butées SW");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. avancée");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuration");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Exéc. auto.gcode");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Arrêter moteurs");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu debug");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barre progress.");
- PROGMEM Language_Str MSG_HOMING = _UxGT("Origine");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Origine auto");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Origine X auto");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Origine Y auto");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Origine Z auto");
- PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Origine ") LCD_STR_I _UxGT(" auto");
- PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Origine ") LCD_STR_J _UxGT(" auto");
- PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Origine ") LCD_STR_K _UxGT(" auto");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Align. Z auto");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Origine XYZ...");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Clic pour commencer");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Point suivant");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Mise à niveau OK!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Hauteur lissée");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Régl. décal origine");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Décal. origine X");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Décal. origine Y");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Décal. origine Z");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Décal. origine ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Décal. origine ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Décal. origine ") LCD_STR_K;
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Décalages appliqués");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Régler origine");
- PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Assistant Molettes");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Molette du lit"); // Not a selection of the origin
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Ecart origine ");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" prête.");
+ LSTR MSG_YES = _UxGT("Oui");
+ LSTR MSG_NO = _UxGT("Non");
+ LSTR MSG_BACK = _UxGT("Retour");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Annulation...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Média inséré");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Média retiré");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Attente média");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Err lecture média");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB débranché");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Erreur média USB");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Butées");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Butées SW");
+ LSTR MSG_MAIN = _UxGT("Menu principal");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Config. avancée");
+ LSTR MSG_CONFIGURATION = _UxGT("Configuration");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Exéc. auto.gcode");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Arrêter moteurs");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menu debug");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barre progress.");
+ LSTR MSG_HOMING = _UxGT("Origine");
+ LSTR MSG_AUTO_HOME = _UxGT("Origine auto");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Origine X auto");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Origine Y auto");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Origine Z auto");
+ LSTR MSG_AUTO_HOME_I = _UxGT("Origine ") LCD_STR_I _UxGT(" auto");
+ LSTR MSG_AUTO_HOME_J = _UxGT("Origine ") LCD_STR_J _UxGT(" auto");
+ LSTR MSG_AUTO_HOME_K = _UxGT("Origine ") LCD_STR_K _UxGT(" auto");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Align. Z auto");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Origine XYZ...");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Clic pour commencer");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Point suivant");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Mise à niveau OK!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Hauteur lissée");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Régl. décal origine");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Décal. origine X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Décal. origine Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Décal. origine Z");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Décal. origine ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Décal. origine ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Décal. origine ") LCD_STR_K;
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Décalages appliqués");
+ LSTR MSG_SET_ORIGIN = _UxGT("Régler origine");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Assistant Molettes");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Molette du lit"); // Not a selection of the origin
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Ecart origine ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Préchauffage ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Préchauffage ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" Tout");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" lit");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Régler préch. ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1 = _UxGT("Préchauffage ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Préchauffage ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" buse ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" Tout");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Préch. ") PREHEAT_1_LABEL _UxGT(" lit");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Régler préch. ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Préchauffage $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Préchauffage $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Préch. $ buse");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Préch. $ buse ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Préch. $ Tout");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Préch. $ lit");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Régler préch. $");
+ LSTR MSG_PREHEAT_M = _UxGT("Préchauffage $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Préchauffage $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Préch. $ buse");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Préch. $ buse ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Préch. $ Tout");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Préch. $ lit");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Régler préch. $");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Préchauf. perso");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Refroidir");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Contrôle Laser");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Puissance");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Inverser broches");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Allumer alim.");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Eteindre alim.");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrusion");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Rétractation");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Déplacer un axe");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Régler Niv. lit");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Niveau du lit");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Niveau des coins");
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Relever le coin jusqu'à la sonde");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Coins dans la tolérance. Niveau lit ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Coin suivant");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Modif. maille"); // 13 car. max
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Modifier grille");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Modification arrêtée");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Mesure point");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valeur Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Commandes perso");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Préchauf. perso");
+ LSTR MSG_COOLDOWN = _UxGT("Refroidir");
+ LSTR MSG_LASER_MENU = _UxGT("Contrôle Laser");
+ LSTR MSG_LASER_POWER = _UxGT("Puissance");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Inverser broches");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Allumer alim.");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Eteindre alim.");
+ LSTR MSG_EXTRUDE = _UxGT("Extrusion");
+ LSTR MSG_RETRACT = _UxGT("Rétractation");
+ LSTR MSG_MOVE_AXIS = _UxGT("Déplacer un axe");
+ LSTR MSG_BED_LEVELING = _UxGT("Régler Niv. lit");
+ LSTR MSG_LEVEL_BED = _UxGT("Niveau du lit");
+ LSTR MSG_BED_TRAMMING = _UxGT("Niveau des coins");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Relever le coin jusqu'à la sonde");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Coins dans la tolérance. Niveau lit ");
+ LSTR MSG_NEXT_CORNER = _UxGT("Coin suivant");
+ LSTR MSG_MESH_EDITOR = _UxGT("Modif. maille"); // 13 car. max
+ LSTR MSG_EDIT_MESH = _UxGT("Modifier grille");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Modification arrêtée");
+ LSTR MSG_PROBING_POINT = _UxGT("Mesure point");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Valeur Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Commandes perso");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Mesure point");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("Ecart sonde Z M48");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Ecart");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("Point M48");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Mode IDEX");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copie miroir");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Contrôle complet");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Offsets Outil");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("Buse 2 X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("Buse 2 Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("Buse 2 Z");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26: Chauffage du lit");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("Buse en chauffe...");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Amorce manuelle...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Amorce longueur fixe");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Amorce terminée");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 annulé");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Sortie G26");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 en cours");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Outils UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Niveau lit unifié");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Maillage manuel");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Poser câle & mesurer");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Mesure");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("ôter et mesurer lit");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Aller au suivant");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activer l'UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Désactiver l'UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Température lit");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Température lit");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Température buse");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Température buse");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Modifier grille");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif. grille perso");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Réglage fin");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Terminer");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Créer la grille");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Mesure point");
+ LSTR MSG_M48_TEST = _UxGT("Ecart sonde Z M48");
+ LSTR MSG_M48_DEVIATION = _UxGT("Ecart");
+ LSTR MSG_M48_POINT = _UxGT("Point M48");
+ LSTR MSG_IDEX_MENU = _UxGT("Mode IDEX");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copie miroir");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Contrôle complet");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Offsets Outil");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("Buse 2 Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("Buse 2 @");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26: Chauffage du lit");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("Buse en chauffe...");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Amorce manuelle...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Amorce longueur fixe");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Amorce terminée");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 annulé");
+ LSTR MSG_G26_LEAVING = _UxGT("Sortie G26");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("G29 en cours");
+ LSTR MSG_UBL_TOOLS = _UxGT("Outils UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Niveau lit unifié");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Maillage manuel");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Poser câle & mesurer");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Mesure");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("ôter et mesurer lit");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Aller au suivant");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activer l'UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Désactiver l'UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Température lit");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Température lit");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Température buse");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Température buse");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Modifier grille");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif. grille perso");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Réglage fin");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Terminer");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Créer la grille");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Créer grille $");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Impr. grille $");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Créer grille $");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Impr. grille $");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Créer grille ...");
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Mesure à froid");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajuster haut. couche");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Hauteur (x0.1mm)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Vérifier grille");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Impr. grille ...");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continuer grille");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Niveau par mailles");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Niveau à 3 points");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niveau par grille");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Effectuer mesures");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Points latéraux");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Type de carte");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Exporter grille");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Export pour hôte");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Export en CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Export sauvegarde");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Infos debug UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Nombre de points");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Remplissage manuel");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Remplissage auto");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Remplissage grille");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Tout effacer");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Effacer le + près");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Réglage fin (tous)");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Réglage fin + près");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Stockage grille");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot mémoire");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Charger la grille");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Stocker la grille");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Grille %i chargée");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Grille %i enreg.");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Pas de mémoire");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err: Enreg. UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ouvrir UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Décal. Z arrêté");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Assistant UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Mesure à froid");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Compléter auto.");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Vérifier grille");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Réglage fin");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Vérifier grille");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Réglage fin");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Stocker grille");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Créer grille ...");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Mesure à froid");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajuster haut. couche");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Hauteur (x0.1mm)");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Vérifier grille");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Impr. grille ...");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continuer grille");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Niveau par mailles");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Niveau à 3 points");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Niveau par grille");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Effectuer mesures");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Points latéraux");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Type de carte");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Exporter grille");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Export pour hôte");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Export en CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Export sauvegarde");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Infos debug UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Nombre de points");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Remplissage manuel");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Remplissage auto");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Remplissage grille");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Tout effacer");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Effacer le + près");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Réglage fin (tous)");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Réglage fin + près");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Stockage grille");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot mémoire");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Charger la grille");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Stocker la grille");
+ LSTR MSG_MESH_LOADED = _UxGT("Grille %i chargée");
+ LSTR MSG_MESH_SAVED = _UxGT("Grille %i enreg.");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Pas de mémoire");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: Enreg. UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ouvrir UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Décal. Z arrêté");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Assistant UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Mesure à froid");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Compléter auto.");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Vérifier grille");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Réglage fin");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Vérifier grille");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Réglage fin");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Stocker grille");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Contrôle LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Lumière");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Préregl. LED");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rouge");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Jaune");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Vert");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Bleu");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violet");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Blanc");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Defaut");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("LEDs perso.");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensité rouge");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensité vert");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensité bleu");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensité blanc");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Luminosité");
+ LSTR MSG_LED_CONTROL = _UxGT("Contrôle LED");
+ LSTR MSG_LEDS = _UxGT("Lumière");
+ LSTR MSG_LED_PRESETS = _UxGT("Préregl. LED");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Rouge");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Jaune");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Vert");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Bleu");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Blanc");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Defaut");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("LEDs perso.");
+ LSTR MSG_INTENSITY_R = _UxGT("Intensité rouge");
+ LSTR MSG_INTENSITY_G = _UxGT("Intensité vert");
+ LSTR MSG_INTENSITY_B = _UxGT("Intensité bleu");
+ LSTR MSG_INTENSITY_W = _UxGT("Intensité blanc");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Luminosité");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Déplacement...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Débloquer XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Déplacer X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Déplacer Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Déplacer Z");
- PROGMEM Language_Str MSG_MOVE_I = _UxGT("Déplacer ") LCD_STR_I;
- PROGMEM Language_Str MSG_MOVE_J = _UxGT("Déplacer ") LCD_STR_J;
- PROGMEM Language_Str MSG_MOVE_K = _UxGT("Déplacer ") LCD_STR_K;
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extruder *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Buse trop froide");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Déplacer %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Déplacer 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Déplacer 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Déplacer 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Déplacer 100mm");
- PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Déplacer 0.001\"");
- PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Déplacer 0.01\"");
- PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Déplacer 0.1\"");
- PROGMEM Language_Str MSG_MOVE_1IN = _UxGT("Déplacer 1\"");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Vitesse");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Lit Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Buse");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Buse ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Lit");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Caisson");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vit. ventil. "); // 15 car. max
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vit. ventil. ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Vit. enreg. ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra ventil. ");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra ventil. ~");
+ LSTR MSG_MOVING = _UxGT("Déplacement...");
+ LSTR MSG_FREE_XY = _UxGT("Débloquer XY");
+ LSTR MSG_MOVE_X = _UxGT("Déplacer X");
+ LSTR MSG_MOVE_Y = _UxGT("Déplacer Y");
+ LSTR MSG_MOVE_Z = _UxGT("Déplacer Z");
+ LSTR MSG_MOVE_I = _UxGT("Déplacer ") LCD_STR_I;
+ LSTR MSG_MOVE_J = _UxGT("Déplacer ") LCD_STR_J;
+ LSTR MSG_MOVE_K = _UxGT("Déplacer ") LCD_STR_K;
+ LSTR MSG_MOVE_E = _UxGT("Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Extruder *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Buse trop froide");
+ LSTR MSG_MOVE_N_MM = _UxGT("Déplacer %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Déplacer 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Déplacer 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Déplacer 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Déplacer 100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Déplacer 0.001\"");
+ LSTR MSG_MOVE_001IN = _UxGT("Déplacer 0.01\"");
+ LSTR MSG_MOVE_01IN = _UxGT("Déplacer 0.1\"");
+ LSTR MSG_MOVE_1IN = _UxGT("Déplacer 1\"");
+ LSTR MSG_SPEED = _UxGT("Vitesse");
+ LSTR MSG_BED_Z = _UxGT("Lit Z");
+ LSTR MSG_NOZZLE = _UxGT("Buse");
+ LSTR MSG_NOZZLE_N = _UxGT("Buse ~");
+ LSTR MSG_BED = _UxGT("Lit");
+ LSTR MSG_CHAMBER = _UxGT("Caisson");
+ LSTR MSG_FAN_SPEED = _UxGT("Vit. ventil. "); // 15 car. max
+ LSTR MSG_FAN_SPEED_N = _UxGT("Vit. ventil. ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Vit. enreg. ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra ventil. ");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra ventil. ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flux");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flux ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Contrôler");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Facteur");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temp. Auto.");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Marche");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Arrêt");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Tuning PID terminé");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Echec Autotune! E incorrect");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Echec Autotune! Temp. trop haute");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Echec Autotune! Opér. expirée");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Sélectionner");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Sélectionner *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Accélération");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT(" jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT(" jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT(" jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT(" jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT(" jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT(" jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve jerk");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Vélocité");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vit. Max ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vit. Max ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vit. Max ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vit. Max ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vit. Max ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vit. Max ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vit. Max ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vit. Max *");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Déviat. jonct.");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vit. Min");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vmin course");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accélération");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max Accél. ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max Accél. ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max Accél. ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Max Accél. ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Max Accél. ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Max Accél. ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max Accél. ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Max Accél. *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Acc.rétraction");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Acc.course");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Fréquence max");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Vitesse min");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pas/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pas/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pas/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pas/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" pas/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" pas/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" pas/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pas/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* pas/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Température");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Mouvement");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("Limite en mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("Limite *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diamètre fil.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Diamètre fil. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Retrait mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Charger mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avance K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Avance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Enregistrer config.");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Charger config.");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restaurer défauts");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialiser EEPROM");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Config. enregistrée");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("MaJ Firmware SD");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("RaZ imprimante");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualiser");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Surveiller");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Préparer");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Régler");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Démarrer impression");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Suivant");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Init.");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimer");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignorer");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Annuler");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Terminé");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Retour");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Procéder");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Passer");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Mise en pause...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pause impression");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Reprendre impr.");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Arrêter impr.");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Impression objet");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Annuler objet");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Annuler objet =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Récup. coup.");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Impression SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Pas de média");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Repos...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Attente utilis.");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Impr. en pause");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Impression");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impr. annulée");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Moteurs bloqués");
- PROGMEM Language_Str MSG_KILLED = _UxGT("KILLED");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPÉ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Rétractation mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Ech. rétr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Vit. rétract°");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saut Z mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Rét.reprise mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ech.reprise mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("V.rét. reprise");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("V.éch. reprise");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Rétraction auto");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Changement outil");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vitesse primaire");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse rétract°");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Garer Extrudeur");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vitesse reprise");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vit. ventil.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Temps ventil.");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Migration d'outil");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Migration auto");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Extrudeur Final");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrer vers *");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Attente buse");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Longueur retrait");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Longueur Extra");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Longueur de purge");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Changer filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Changer filament *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Charger filament");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Charger filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Retrait filament");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Retrait filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Retirer tout");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Charger le média");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Actualiser média");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Retirer le média");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonde Z hors lit");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Facteur écart");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Ranger");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Déployer");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Mode SW");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Mode 5V");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Mode OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Appliquer Mode");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Mise en 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Mise en OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Afficher Mode");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init. TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test décalage Z");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Sauvegarde");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Déployer TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Déployer Sonde Z");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Ranger Sonde Z");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Origine %s%s%s Premier");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Position sonde Z");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Décalage X");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Décalage Y");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Décalage Z");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
- PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
- PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Butée abandon");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Err de chauffe");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err TEMP. REDONDANTE");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Err THERMIQUE");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err TEMP. MAX");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err TEMP. MIN");
+ LSTR MSG_FLOW = _UxGT("Flux");
+ LSTR MSG_FLOW_N = _UxGT("Flux ~");
+ LSTR MSG_CONTROL = _UxGT("Contrôler");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Facteur");
+ LSTR MSG_AUTOTEMP = _UxGT("Temp. Auto.");
+ LSTR MSG_LCD_ON = _UxGT("Marche");
+ LSTR MSG_LCD_OFF = _UxGT("Arrêt");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Tuning PID terminé");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Echec Autotune! E incorrect");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Echec Autotune! Temp. trop haute");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Echec Autotune! Opér. expirée");
+ LSTR MSG_SELECT = _UxGT("Sélectionner");
+ LSTR MSG_SELECT_E = _UxGT("Sélectionner *");
+ LSTR MSG_ACC = _UxGT("Accélération");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT(" jerk");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT(" jerk");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT(" jerk");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT(" jerk");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT(" jerk");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT(" jerk");
+ LSTR MSG_VE_JERK = _UxGT("Ve jerk");
+ LSTR MSG_VELOCITY = _UxGT("Vélocité");
+ LSTR MSG_VMAX_A = _UxGT("Vit. Max ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Vit. Max ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vit. Max ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Vit. Max ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Vit. Max ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Vit. Max ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Vit. Max ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Vit. Max *");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Déviat. jonct.");
+ LSTR MSG_VMIN = _UxGT("Vit. Min");
+ LSTR MSG_VTRAV_MIN = _UxGT("Vmin course");
+ LSTR MSG_ACCELERATION = _UxGT("Accélération");
+ LSTR MSG_AMAX_A = _UxGT("Max Accél. ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Max Accél. ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Max Accél. ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Max Accél. ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Max Accél. ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Max Accél. ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Max Accél. ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Max Accél. *");
+ LSTR MSG_A_RETRACT = _UxGT("Acc.rétraction");
+ LSTR MSG_A_TRAVEL = _UxGT("Acc.course");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Fréquence max");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Vitesse min");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Pas/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pas/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pas/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pas/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pas/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pas/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" pas/mm");
+ LSTR MSG_E_STEPS = _UxGT("E pas/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* pas/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Température");
+ LSTR MSG_MOTION = _UxGT("Mouvement");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("Limite en mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("Limite *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Diamètre fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diamètre fil. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Retrait mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Charger mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Avance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *");
+ LSTR MSG_BRIGHTNESS = _UxGT("Luminosité LCD");
+ LSTR MSG_CONTRAST = _UxGT("Contraste LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Enregistrer config.");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Charger config.");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restaurer défauts");
+ LSTR MSG_INIT_EEPROM = _UxGT("Initialiser EEPROM");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Config. enregistrée");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("MaJ Firmware SD");
+ LSTR MSG_RESET_PRINTER = _UxGT("RaZ imprimante");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Actualiser");
+ LSTR MSG_INFO_SCREEN = _UxGT("Surveiller");
+ LSTR MSG_PREPARE = _UxGT("Préparer");
+ LSTR MSG_TUNE = _UxGT("Régler");
+ LSTR MSG_START_PRINT = _UxGT("Démarrer impression");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Suivant");
+ LSTR MSG_BUTTON_INIT = _UxGT("Init.");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stop");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Imprimer");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reset");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorer");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Annuler");
+ LSTR MSG_BUTTON_DONE = _UxGT("Terminé");
+ LSTR MSG_BUTTON_BACK = _UxGT("Retour");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Procéder");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Passer");
+ LSTR MSG_PAUSING = _UxGT("Mise en pause...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pause impression");
+ LSTR MSG_RESUME_PRINT = _UxGT("Reprendre impr.");
+ LSTR MSG_STOP_PRINT = _UxGT("Arrêter impr.");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Impression objet");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Annuler objet");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Annuler objet =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Récup. coup.");
+ LSTR MSG_MEDIA_MENU = _UxGT("Impression SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Pas de média");
+ LSTR MSG_DWELL = _UxGT("Repos...");
+ LSTR MSG_USERWAIT = _UxGT("Attente utilis.");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Impr. en pause");
+ LSTR MSG_PRINTING = _UxGT("Impression");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Impr. annulée");
+ LSTR MSG_NO_MOVE = _UxGT("Moteurs bloqués");
+ LSTR MSG_KILLED = _UxGT("KILLED");
+ LSTR MSG_STOPPED = _UxGT("STOPPÉ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Rétractation mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Ech. rétr. mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Vit. rétract°");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saut Z mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Rét.reprise mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ech.reprise mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("V.rét. reprise");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("V.éch. reprise");
+ LSTR MSG_AUTORETRACT = _UxGT("Rétraction auto");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Changement outil");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Augmenter Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Vitesse primaire");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vitesse rétract°");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Garer Extrudeur");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vitesse reprise");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vit. ventil.");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Temps ventil.");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Migration d'outil");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Migration auto");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Extrudeur Final");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrer vers *");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Attente buse");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Longueur retrait");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Longueur Extra");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Longueur de purge");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Changer filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Changer filament *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Charger filament");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Charger filament *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Retrait filament");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Retrait filament *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Retirer tout");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Charger le média");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Actualiser média");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Retirer le média");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonde Z hors lit");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Facteur écart");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Ranger");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Déployer");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Mode SW");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Mode 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Mode OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Appliquer Mode");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Mise en 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Mise en OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Afficher Mode");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Init. TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test décalage Z");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Sauvegarde");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Déployer TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Déployer Sonde Z");
+ LSTR MSG_MANUAL_STOW = _UxGT("Ranger Sonde Z");
+ LSTR MSG_HOME_FIRST = _UxGT("Origine %s%s%s Premier");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Position sonde Z");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Décalage X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Décalage Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Décalage Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
+ LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
+ LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Butée abandon");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Err de chauffe");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err TEMP. REDONDANTE");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("Err THERMIQUE");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err TEMP. MAX");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err TEMP. MIN");
- PROGMEM Language_Str MSG_HALTED = _UxGT("IMPR. STOPPÉE");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Redémarrer SVP");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("j"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
+ LSTR MSG_HALTED = _UxGT("IMPR. STOPPÉE");
+ LSTR MSG_PLEASE_RESET = _UxGT("Redémarrer SVP");
+ LSTR MSG_SHORT_DAY = _UxGT("j"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("en chauffe...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Refroidissement");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Lit en chauffe...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Refroid. du lit...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Probe en chauffe...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Refroid. Probe...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Chauffe caisson...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Refroid. caisson...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibration Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrer X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrer Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrer Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrer centre");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Réglages Delta");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Calibration Auto");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Hauteur Delta");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Delta Z sonde");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diagonale");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Hauteur");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Rayon");
+ LSTR MSG_HEATING = _UxGT("en chauffe...");
+ LSTR MSG_COOLING = _UxGT("Refroidissement");
+ LSTR MSG_BED_HEATING = _UxGT("Lit en chauffe...");
+ LSTR MSG_BED_COOLING = _UxGT("Refroid. du lit...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Probe en chauffe...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Refroid. Probe...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Chauffe caisson...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Refroid. caisson...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibration Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrer X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrer Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrer Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrer centre");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Réglages Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Calibration Auto");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Hauteur Delta");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Delta Z sonde");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diagonale");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Hauteur");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Rayon");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Infos imprimante");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Infos imprimante");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Niveau à 3 points");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Niveau linéaire");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Niveau bilinéaire");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Niveau lit unifié");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Niveau par grille");
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Niveau terminé");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Stats. imprimante");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Infos carte");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistances");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrudeurs");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Bauds");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocole");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Protection inactive");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Protection active");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
+ LSTR MSG_INFO_MENU = _UxGT("Infos imprimante");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Infos imprimante");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Niveau à 3 points");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Niveau linéaire");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Niveau bilinéaire");
+ LSTR MSG_UBL_LEVELING = _UxGT("Niveau lit unifié");
+ LSTR MSG_MESH_LEVELING = _UxGT("Niveau par grille");
+ LSTR MSG_MESH_DONE = _UxGT("Niveau terminé");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Stats. imprimante");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Infos carte");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistances");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudeurs");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Bauds");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocole");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Protection inactive");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Protection active");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Lumière caisson");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosité");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Imprimante incorrecte");
+ LSTR MSG_CASE_LIGHT = _UxGT("Lumière caisson");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosité");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Imprimante incorrecte");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Nbre impressions");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tps impr. total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impr. la + longue");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total filament");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nbre impressions");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tps impr. total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impr. la + longue");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total filament");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("+ long");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Filament");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impressions");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Terminées");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("+ long");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Filament");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp Min");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp Max");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Alim.");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Puiss. moteur ");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = _UxGT("Driver ") LCD_STR_A _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = _UxGT("Driver ") LCD_STR_B _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = _UxGT("Driver ") LCD_STR_C _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = _UxGT("Driver ") LCD_STR_I _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = _UxGT("Driver ") LCD_STR_J _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = _UxGT("Driver ") LCD_STR_K _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("Driver E %");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM sauv.");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERREUR CONNEXION TMC");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp Min");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Max");
+ LSTR MSG_INFO_PSU = _UxGT("Alim.");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Puiss. moteur ");
+ LSTR MSG_DAC_PERCENT_A = _UxGT("Driver ") LCD_STR_A _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_B = _UxGT("Driver ") LCD_STR_B _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_C = _UxGT("Driver ") LCD_STR_C _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_I = _UxGT("Driver ") LCD_STR_I _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_J = _UxGT("Driver ") LCD_STR_J _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_K = _UxGT("Driver ") LCD_STR_K _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("Driver E %");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM sauv.");
+ LSTR MSG_ERROR_TMC = _UxGT("ERREUR CONNEXION TMC");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CHANGER FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPR. PAUSE");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CHARGER FIL");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DECHARGER FIL");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPTIONS REPRISE:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purger encore");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Reprendre impr.");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Buse: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Capteur fil.");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Echec origine");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Echec sonde");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CHANGER FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPR. PAUSE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CHARGER FIL");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DECHARGER FIL");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPTIONS REPRISE:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purger encore");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Reprendre impr.");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Buse: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Capteur fil.");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Echec origine");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Echec sonde");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("MAJ firmware MMU!!");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOISIR FILAMENT");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU ne répond plus");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Continuer Imp. MMU");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Reprise MMU...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Charge dans MMU");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Charger tous dans MMU");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Charger dans buse");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejecter fil. du MMU");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Ejecter fil. ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Retrait filament");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Chargem. fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejection fil...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Retrait fil....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Tous");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Réinit. MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Réinit. MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Retrait, click");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("MAJ firmware MMU!!");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOISIR FILAMENT");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU ne répond plus");
+ LSTR MSG_MMU2_RESUME = _UxGT("Continuer Imp. MMU");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Reprise MMU...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Charge dans MMU");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Charger tous dans MMU");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Charger dans buse");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejecter fil. du MMU");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Ejecter fil. ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Retrait filament");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Chargem. fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejection fil...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Retrait fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("Tous");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Réinit. MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Réinit. MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Retrait, click");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Composante =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mixeur");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Dégradé");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Dégradé complet");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Toggle mix");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle mix");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Mix dégradé");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Inverser dégradé");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Début V-tool");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Fin V-tool");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Réinit. V-tools");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Valider Mix V-tool");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools réinit. ok");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Début Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Fin Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Jeux");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Casse-briques");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Labyrinthe");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Composante =");
+ LSTR MSG_MIXER = _UxGT("Mixeur");
+ LSTR MSG_GRADIENT = _UxGT("Dégradé");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Dégradé complet");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Toggle mix");
+ LSTR MSG_CYCLE_MIX = _UxGT("Cycle mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Mix dégradé");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Inverser dégradé");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
+ LSTR MSG_START_VTOOL = _UxGT("Début V-tool");
+ LSTR MSG_END_VTOOL = _UxGT(" Fin V-tool");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Réinit. V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Valider Mix V-tool");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools réinit. ok");
+ LSTR MSG_START_Z = _UxGT("Début Z:");
+ LSTR MSG_END_Z = _UxGT(" Fin Z:");
+ LSTR MSG_GAMES = _UxGT("Jeux");
+ LSTR MSG_BRICKOUT = _UxGT("Casse-briques");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Labyrinthe");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Erreur index page");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Erreur vitesse page");
+ LSTR MSG_BAD_PAGE = _UxGT("Erreur index page");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Erreur vitesse page");
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Presser bouton", "pour reprendre"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Attente filament", "pour démarrer"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insérer filament", "et app. bouton", "pour continuer..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Presser le bouton", "pour chauffer..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Buse en chauffe", "Patienter SVP..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Attente", "retrait du filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Attente", "chargement filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Attente", "Purge filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Presser pour finir", "la purge du filament"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Attente reprise", "impression"));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Presser bouton", "pour reprendre"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parking..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Attente filament", "pour démarrer"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insérer filament", "et app. bouton", "pour continuer..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Presser le bouton", "pour chauffer..."));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Buse en chauffe", "Patienter SVP..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Attente", "retrait du filament"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Attente", "chargement filament"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Attente", "Purge filament"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Presser pour finir", "la purge du filament"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Attente reprise", "impression"));
#else // LCD_HEIGHT < 4
// Up to 2 lines allowed
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clic pour continuer"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Patience..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insérer fil."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Chauffer ?"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Chauffage..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Retrait fil..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Chargement..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purge..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Terminer ?"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprise..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clic pour continuer"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Patience..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insérer fil."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Chauffer ?"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Chauffage..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Retrait fil..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Chargement..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purge..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Terminer ?"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Reprise..."));
#endif // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Courant driver");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Seuil hybride");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Home sans capteur");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Mode pas à pas");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop activé");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Réinit.");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" dans:");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correction");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Lissage");
+ LSTR MSG_TMC_CURRENT = _UxGT("Courant driver");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Seuil hybride");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Home sans capteur");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Mode pas à pas");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop activé");
+ LSTR MSG_SERVICE_RESET = _UxGT("Réinit.");
+ LSTR MSG_SERVICE_IN = _UxGT(" dans:");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Correction");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Lissage");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Niveau axe X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Etalon. auto.");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Niveau axe X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Etalon. auto.");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("En protection, temp. réduite. Ok pour rechauffer et continuer.");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("En protection, temp. réduite. Ok pour rechauffer et continuer.");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("En protection");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("En protection");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Chauffer");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Réchauffe...");
+ LSTR MSG_REHEAT = _UxGT("Chauffer");
+ LSTR MSG_REHEATING = _UxGT("Réchauffe...");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Assistant Sonde Z");
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Mesure référence");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Dépl. vers pos");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Assistant Sonde Z");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Mesure référence");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Dépl. vers pos");
- PROGMEM Language_Str MSG_SOUND = _UxGT("Sons");
+ LSTR MSG_SOUND = _UxGT("Sons");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Coin haut gauche");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Coin bas gauche");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Coin haut droit");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Coin bas droit");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Calibration terminée");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Échec de l'étalonnage");
+ LSTR MSG_TOP_LEFT = _UxGT("Coin haut gauche");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Coin bas gauche");
+ LSTR MSG_TOP_RIGHT = _UxGT("Coin haut droit");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Coin bas droit");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibration terminée");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Échec de l'étalonnage");
- PROGMEM Language_Str MSG_SD_CARD = _UxGT("Carte SD");
- PROGMEM Language_Str MSG_USB_DISK = _UxGT("Clé USB");
+ LSTR MSG_SD_CARD = _UxGT("Carte SD");
+ LSTR MSG_USB_DISK = _UxGT("Clé USB");
}
diff --git a/Marlin/src/lcd/language/language_gl.h b/Marlin/src/lcd/language/language_gl.h
index e29a2772ff..0252cf30ec 100644
--- a/Marlin/src/lcd/language/language_gl.h
+++ b/Marlin/src/lcd/language/language_gl.h
@@ -33,590 +33,579 @@
namespace Language_gl {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 1;
- PROGMEM Language_Str LANGUAGE = _UxGT("Galician");
+ constexpr uint8_t CHARSIZE = 1;
+ LSTR LANGUAGE = _UxGT("Galician");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" lista.");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("SI");
- PROGMEM Language_Str MSG_NO = _UxGT("NON");
- PROGMEM Language_Str MSG_BACK = _UxGT("Atrás");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Tarxeta inserida");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tarxeta retirada");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Agardando ao SD/USB");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Erro lectura SD/USB");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbord. Subch.");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("FinCarro");
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("FinCarro SW");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menú principal");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Axustes avanzados");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuración");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autoarranque");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menú depuración");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progreso");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ir a orixe");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Ir orixe X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Ir orixe Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Ir orixe Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Autoaliñar Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Ir orixes XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Prema pulsador");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Seguinte punto");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Fin Nivelación!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Compensación Altura");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Axustar Desfases");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfases aplicados");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Fixar orixe");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" lista.");
+ LSTR MSG_YES = _UxGT("SI");
+ LSTR MSG_NO = _UxGT("NON");
+ LSTR MSG_BACK = _UxGT("Atrás");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Cancelando...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Tarxeta inserida");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Tarxeta retirada");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Agardando ao SD/USB");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Erro lectura SD/USB");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Disp. USB retirado");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Inicio USB fallido");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Desbord. Subch.");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("FinCarro");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("FinCarro SW");
+ LSTR MSG_MAIN = _UxGT("Menú principal");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Axustes avanzados");
+ LSTR MSG_CONFIGURATION = _UxGT("Configuración");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Autoarranque");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Apagar motores");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menú depuración");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barra progreso");
+ LSTR MSG_AUTO_HOME = _UxGT("Ir a orixe");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Ir orixe X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Ir orixe Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Ir orixe Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Autoaliñar Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Ir orixes XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Prema pulsador");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Seguinte punto");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Fin Nivelación!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Compensación Altura");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Axustar Desfases");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Desfases aplicados");
+ LSTR MSG_SET_ORIGIN = _UxGT("Fixar orixe");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Prequentar ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Prequentar ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Todo");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Cama");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" conf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Prequentar ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Prequentar ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Bico ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Todo");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" Cama");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preque. ") PREHEAT_1_LABEL _UxGT(" conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Prequentar $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Prequentar $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Preque. $ Bico");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Preque. $ Bico ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Preque. $ Todo");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Preque. $ Cama");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Preque. $ conf");
+ LSTR MSG_PREHEAT_M = _UxGT("Prequentar $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Prequentar $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Preque. $ Bico");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Preque. $ Bico ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Preque. $ Todo");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preque. $ Cama");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preque. $ conf");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Preque. Personali.");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Arrefriar");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frecuencia");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Control Láser");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Potencia Láser");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Control Fuso");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Potencia Fuso");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Inverter xiro");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Acender");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Apagar");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extruír");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retraer");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover eixe");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelando Cama");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar Cama");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Nivelar Cantos");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Seguinte Canto");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor Mallado");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Editar Mallado");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Ed. Mallado Detida");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Punto de Proba");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Índice X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Índice Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valor Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Comandos Personaliz.");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Probar Sonda");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punto");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Desviación");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Ferramentas Compens");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicación");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Espello");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2º Bico X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2º Bico Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2º Bico Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Executando G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Facer Malla Manual");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Colocar Calzo e Medir");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Medir");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Quitar e Medir Cama");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover ao Seguinte");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp Cama");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp Cama");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp Bico");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp Bico");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Editar Malla");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Malla Person.");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Axuste Fino da Malla");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Fin Edición da Malla");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Malla Person.");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Malla");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Preque. Personali.");
+ LSTR MSG_COOLDOWN = _UxGT("Arrefriar");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frecuencia");
+ LSTR MSG_LASER_MENU = _UxGT("Control Láser");
+ LSTR MSG_LASER_POWER = _UxGT("Potencia Láser");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Control Fuso");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Potencia Fuso");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Inverter xiro");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Acender");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Apagar");
+ LSTR MSG_EXTRUDE = _UxGT("Extruír");
+ LSTR MSG_RETRACT = _UxGT("Retraer");
+ LSTR MSG_MOVE_AXIS = _UxGT("Mover eixe");
+ LSTR MSG_BED_LEVELING = _UxGT("Nivelando Cama");
+ LSTR MSG_LEVEL_BED = _UxGT("Nivelar Cama");
+ LSTR MSG_BED_TRAMMING = _UxGT("Nivelar Cantos");
+ LSTR MSG_NEXT_CORNER = _UxGT("Seguinte Canto");
+ LSTR MSG_MESH_EDITOR = _UxGT("Editor Mallado");
+ LSTR MSG_EDIT_MESH = _UxGT("Editar Mallado");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Ed. Mallado Detida");
+ LSTR MSG_PROBING_POINT = _UxGT("Punto de Proba");
+ LSTR MSG_MESH_X = _UxGT("Índice X");
+ LSTR MSG_MESH_Y = _UxGT("Índice Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Valor Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comandos Personaliz.");
+ LSTR MSG_M48_TEST = _UxGT("M48 Probar Sonda");
+ LSTR MSG_M48_POINT = _UxGT("M48 Punto");
+ LSTR MSG_M48_DEVIATION = _UxGT("Desviación");
+ LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Ferramentas Compens");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicación");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia Espello");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Control Total");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2º Bico Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2º Bico @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Executando G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Punto de inclinación");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Facer Malla Manual");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Colocar Calzo e Medir");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Medir");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Quitar e Medir Cama");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Mover ao Seguinte");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activar UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Desactivar UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp Cama");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp Cama");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp Bico");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp Bico");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Editar Malla");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit. Malla Person.");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Axuste Fino da Malla");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Fin Edición da Malla");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crear Malla Person.");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crear Malla");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Crear Malla ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Validar Malla ($)");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crear Malla ($)");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validar Malla ($)");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Malla Fría");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Axustar Altura Malla");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altura");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malla");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malla perso.");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Quentando Cama");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Quentando Bico");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Traballo manual...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Traballo Lonxit Fixa");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Fin Traballo");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Cancelado");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Saíndo de G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malla");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Nivelación Malla");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelación 3Puntos");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelación Grid");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malla");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterais");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa ");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Gardar Mapa");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar ao Host");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Gardar en CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup Externo");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Info do UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidade de Recheo");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Recheo Manual");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Recheo Intelixente");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Recheo da Malla");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar cercanos");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Axustar Fino Todo");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Axustar Fino Cerc");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacenamento Malla");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Rañura Memoria");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Cargar Malla Cama");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Gardar Malla Cama");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Malla %i Cargada");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Malla %i Gardada");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Sen Gardar");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Erro: Gardadado UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Erro: Recuperación UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Detido");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Crear Malla Fría");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Recheo Intelixente");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validar Malla");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Axustar Fino Todo");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validar Malla");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Axustar Fino Todo");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Gardar Malla Cama");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Crear Malla Fría");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Axustar Altura Malla");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altura");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malla");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malla perso.");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Quentando Cama");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Quentando Bico");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Traballo manual...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Traballo Lonxit Fixa");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Fin Traballo");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Cancelado");
+ LSTR MSG_G26_LEAVING = _UxGT("Saíndo de G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malla");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nivelación Malla");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelación 3Puntos");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelación Grid");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malla");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Puntos Laterais");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa ");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Gardar Mapa");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar ao Host");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Gardar en CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup Externo");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Info do UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Cantidade de Recheo");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Recheo Manual");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Recheo Intelixente");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Recheo da Malla");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar todo");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar cercanos");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Axustar Fino Todo");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Axustar Fino Cerc");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Almacenamento Malla");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Rañura Memoria");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Cargar Malla Cama");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Gardar Malla Cama");
+ LSTR MSG_MESH_LOADED = _UxGT("Malla %i Cargada");
+ LSTR MSG_MESH_SAVED = _UxGT("Malla %i Gardada");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Sen Gardar");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Erro: Gardadado UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Erro: Recuperación UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Desfase de Z: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Desfase de Z Detido");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Paso a Paso");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Crear Malla Fría");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Recheo Intelixente");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validar Malla");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Axustar Fino Todo");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validar Malla");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Axustar Fino Todo");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Gardar Malla Cama");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Control LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Luces");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Axustes Luz");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Vermello");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Laranxa");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Amarelo");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Verde");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Azul");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Branco");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Luces personalizadas");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensidade Vermello");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensidade Verde");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensidade Azul");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensidade Branco");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brillo");
+ LSTR MSG_LED_CONTROL = _UxGT("Control LED");
+ LSTR MSG_LEDS = _UxGT("Luces");
+ LSTR MSG_LED_PRESETS = _UxGT("Axustes Luz");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Vermello");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Laranxa");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Amarelo");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Verde");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Azul");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Índigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violeta");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Branco");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Por defecto");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Luces personalizadas");
+ LSTR MSG_INTENSITY_R = _UxGT("Intensidade Vermello");
+ LSTR MSG_INTENSITY_G = _UxGT("Intensidade Verde");
+ LSTR MSG_INTENSITY_B = _UxGT("Intensidade Azul");
+ LSTR MSG_INTENSITY_W = _UxGT("Intensidade Branco");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Brillo");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Movendo...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Libre XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrusor");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extrusor *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Bico moi frío");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mover %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Cama Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Bico");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Bico ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Bico Estacionado");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Bico Standby");
- PROGMEM Language_Str MSG_BED = _UxGT("Cama");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Cámara");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ventilador Mem. ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Vent. Extra");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Vent. Extra ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Controlador Vent.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Velocidade Repouso");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo Auto");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Velocidade Activa");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Tempo Repouso");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxo ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Acender");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Apagar");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("Auto-Sint. PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("Auto-Sint. PID *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Fin Auto-Sint PID");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-Sint. fallida. Extrusor danado.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-Sint. fallida. Temperatura moi alta.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Auto-Sint. fallida. Tempo excedido.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Escolla");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Escolla *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Acel");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Max E Jerk");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Desvío Unión");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocidade");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel");
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Max * Vel");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("V-viaxe min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Aceleración");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Max * Accel");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrac.");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-viaxe");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Frecuencia max");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Avance min");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" pasos/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E pasos/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* pasos/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Movemento");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diam. fil.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Diam. fil. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carga mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avance K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Avance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Constraste LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Gardar Configuración");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Cargar Configuración");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Rest. Defecto");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Erro: CRC EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Erro: Índice EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Erro: Versión EEPROM");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Config Gardada");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reiniciar Impresora");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Información");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Axustar");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Comezar impresión");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Seguinte");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Comezar");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Deter");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimir");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reiniciar");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Cancelar");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Listo");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Atrás");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Proceder");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Pausando...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Retomar impresión");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Deter impresión");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Imprimindo Obxecto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancelar Obxecto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Obxecto =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impresión");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Tarxeta SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Sen tarxeta SD");
- PROGMEM Language_Str MSG_DWELL = _UxGT("En repouso...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Prema para Retomar..");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Impresión Pausada");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Imprimindo...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impresión Cancelada");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Fin Impresión");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sen movemento.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("MORTO.");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("DETIDO.");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Cambio retra. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Alzar Z mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Recup. retra. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Cambio recup. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Recuperacion V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retracción");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Lonxitude Retracción");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Cambio Extra");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lonxitude de Purga");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Cambiar Ferramenta");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Velocidade prim.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vel. de Retracción");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Extrusor Est.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vel. Recuperación");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vel. Ventilador");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Tempo Ventilador");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Cambio Ferramenta");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Cambio Automático");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Último Extrusor");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Cambio a *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambiar Filamento");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambiar Filamento *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Cargar Filamento");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Cargar Filamento *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Descargar Filamento");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Descargar Filamento *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar Todo");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda-Z fóra Cama");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Factor de Desviación");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Auto-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reiniciar");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Recoller");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Estender");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Modo Software");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Modo 5V");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Modo OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Modo Almacenar");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Axustar BLTouch a 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Axustar BLTouch a OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Modo de Informe");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERIGO: Unha mala configuración pode producir daños! Proceder igualmente?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test de Desfase Z");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Gardar");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estender TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda Z");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Recoller Sonda Z");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Orixe %s%s%s Primeiro");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Desfases Sonda");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Desfase Sonda X");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Desfase Sonda Y");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Micropaso X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Erro FinCarro");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Fallo Quentando");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CÁMARA");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Erro:TEMP MÁX");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Erro:TEMP MÍN");
- PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESORA DETIDA");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Debe reiniciar!");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Quentando...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Arrefriando...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Quentando cama...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Enfriando Cama...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Quentando Cámara...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Arrefriando Cámara...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Ax. Altura Delta");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Axustar Sonda Z");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altura");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radio");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Acerca de...");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Información");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Nivelación 3puntos");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Nivelación Lineal");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Nivelación Bilineal");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Nivelación UBL");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nivelación en Malla");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Placa nai");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baudios");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Reloxo Traballo: OFF");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Reloxo Traballo: ON");
+ LSTR MSG_MOVING = _UxGT("Movendo...");
+ LSTR MSG_FREE_XY = _UxGT("Libre XY");
+ LSTR MSG_MOVE_X = _UxGT("Mover X");
+ LSTR MSG_MOVE_Y = _UxGT("Mover Y");
+ LSTR MSG_MOVE_Z = _UxGT("Mover Z");
+ LSTR MSG_MOVE_E = _UxGT("Extrusor");
+ LSTR MSG_MOVE_EN = _UxGT("Extrusor *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Bico moi frío");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mover %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
+ LSTR MSG_SPEED = _UxGT("Velocidade");
+ LSTR MSG_BED_Z = _UxGT("Cama Z");
+ LSTR MSG_NOZZLE = _UxGT("Bico");
+ LSTR MSG_NOZZLE_N = _UxGT("Bico ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Bico Estacionado");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Bico Standby");
+ LSTR MSG_BED = _UxGT("Cama");
+ LSTR MSG_CHAMBER = _UxGT("Cámara");
+ LSTR MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Ventilador Mem. ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Vent. Extra");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Vent. Extra ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Controlador Vent.");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Velocidade Repouso");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo Auto");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Velocidade Activa");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Tempo Repouso");
+ LSTR MSG_FLOW = _UxGT("Fluxo");
+ LSTR MSG_FLOW_N = _UxGT("Fluxo ~");
+ LSTR MSG_CONTROL = _UxGT("Control");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Temperatura Auto.");
+ LSTR MSG_LCD_ON = _UxGT("Acender");
+ LSTR MSG_LCD_OFF = _UxGT("Apagar");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("Auto-Sint. PID");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("Auto-Sint. PID *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Fin Auto-Sint PID");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-Sint. fallida. Extrusor danado.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-Sint. fallida. Temperatura moi alta.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Auto-Sint. fallida. Tempo excedido.");
+ LSTR MSG_SELECT = _UxGT("Escolla");
+ LSTR MSG_SELECT_E = _UxGT("Escolla *");
+ LSTR MSG_ACC = _UxGT("Acel");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("Max ") LCD_STR_A _UxGT(" Jerk");
+ LSTR MSG_VB_JERK = _UxGT("Max ") LCD_STR_B _UxGT(" Jerk");
+ LSTR MSG_VC_JERK = _UxGT("Max ") LCD_STR_C _UxGT(" Jerk");
+ LSTR MSG_VI_JERK = _UxGT("Max ") LCD_STR_I _UxGT(" Jerk");
+ LSTR MSG_VJ_JERK = _UxGT("Max ") LCD_STR_J _UxGT(" Jerk");
+ LSTR MSG_VK_JERK = _UxGT("Max ") LCD_STR_K _UxGT(" Jerk");
+ LSTR MSG_VE_JERK = _UxGT("Max E Jerk");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desvío Unión");
+ LSTR MSG_VELOCITY = _UxGT("Velocidade");
+ LSTR MSG_VMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Vel");
+ LSTR MSG_VMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Vel");
+ LSTR MSG_VMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Vel");
+ LSTR MSG_VMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Vel");
+ LSTR MSG_VMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Vel");
+ LSTR MSG_VMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Vel");
+ LSTR MSG_VMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Vel");
+ LSTR MSG_VMAX_EN = _UxGT("Max * Vel");
+ LSTR MSG_VMIN = _UxGT("Vmin");
+ LSTR MSG_VTRAV_MIN = _UxGT("V-viaxe min");
+ LSTR MSG_ACCELERATION = _UxGT("Aceleración");
+ LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel");
+ LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel");
+ LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel");
+ LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel");
+ LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel");
+ LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel");
+ LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel");
+ LSTR MSG_AMAX_EN = _UxGT("Max * Accel");
+ LSTR MSG_A_RETRACT = _UxGT("A-retrac.");
+ LSTR MSG_A_TRAVEL = _UxGT("A-viaxe");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frecuencia max");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Avance min");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Pasos/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" pasos/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" pasos/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" pasos/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" pasos/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" pasos/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" pasos/mm");
+ LSTR MSG_E_STEPS = _UxGT("E pasos/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* pasos/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Movemento");
+ LSTR MSG_FILAMENT = _UxGT("Filamento");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E en mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Diam. fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diam. fil. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Descarga mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Carga mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Avance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Avance K *");
+ LSTR MSG_CONTRAST = _UxGT("Constraste LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Gardar Configuración");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Cargar Configuración");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. Defecto");
+ LSTR MSG_INIT_EEPROM = _UxGT("Inicializar EEPROM");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Erro: CRC EEPROM");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Erro: Índice EEPROM");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Erro: Versión EEPROM");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Config Gardada");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Actualizar SD/USB");
+ LSTR MSG_RESET_PRINTER = _UxGT("Reiniciar Impresora");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Recargar");
+ LSTR MSG_INFO_SCREEN = _UxGT("Información");
+ LSTR MSG_PREPARE = _UxGT("Preparar");
+ LSTR MSG_TUNE = _UxGT("Axustar");
+ LSTR MSG_START_PRINT = _UxGT("Comezar impresión");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Seguinte");
+ LSTR MSG_BUTTON_INIT = _UxGT("Comezar");
+ LSTR MSG_BUTTON_STOP = _UxGT("Deter");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Imprimir");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reiniciar");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Cancelar");
+ LSTR MSG_BUTTON_DONE = _UxGT("Listo");
+ LSTR MSG_BUTTON_BACK = _UxGT("Atrás");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Proceder");
+ LSTR MSG_PAUSING = _UxGT("Pausando...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impresión");
+ LSTR MSG_RESUME_PRINT = _UxGT("Retomar impresión");
+ LSTR MSG_STOP_PRINT = _UxGT("Deter impresión");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimindo Obxecto");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Obxecto");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Obxecto =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impresión");
+ LSTR MSG_MEDIA_MENU = _UxGT("Tarxeta SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Sen tarxeta SD");
+ LSTR MSG_DWELL = _UxGT("En repouso...");
+ LSTR MSG_USERWAIT = _UxGT("Prema para Retomar..");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Impresión Pausada");
+ LSTR MSG_PRINTING = _UxGT("Imprimindo...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Impresión Cancelada");
+ LSTR MSG_PRINT_DONE = _UxGT("Fin Impresión");
+ LSTR MSG_NO_MOVE = _UxGT("Sen movemento.");
+ LSTR MSG_KILLED = _UxGT("MORTO.");
+ LSTR MSG_STOPPED = _UxGT("DETIDO.");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retraer mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Cambio retra. mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraer V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Alzar Z mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Recup. retra. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Cambio recup. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Recuperacion V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Retracción");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Lonxitude Retracción");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Cambio Extra");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lonxitude de Purga");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Cambiar Ferramenta");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Velocidade prim.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Vel. de Retracción");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Extrusor Est.");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Vel. Recuperación");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Vel. Ventilador");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Tempo Ventilador");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Cambio Ferramenta");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Cambio Automático");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Último Extrusor");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Cambio a *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Cambiar Filamento");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambiar Filamento *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Cargar Filamento");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Cargar Filamento *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Descargar Filamento");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descargar Filamento *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descargar Todo");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD/USB");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Cambiar SD/USB");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Lanzar SD/USB");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda-Z fóra Cama");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Factor de Desviación");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Auto-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reiniciar");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Recoller");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Estender");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Modo Software");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Modo 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Modo OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Modo Almacenar");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Axustar BLTouch a 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Axustar BLTouch a OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Modo de Informe");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERIGO: Unha mala configuración pode producir daños! Proceder igualmente?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Iniciar TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test de Desfase Z");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Gardar");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estender TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda Z");
+ LSTR MSG_MANUAL_STOW = _UxGT("Recoller Sonda Z");
+ LSTR MSG_HOME_FIRST = _UxGT("Orixe %s%s%s Primeiro");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Desfases Sonda");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Desfase Sonda X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Desfase Sonda Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desfase Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Micropaso X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Micropaso Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Micropaso Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Erro FinCarro");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Fallo Quentando");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("FUGA TÉRMICA");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("FUGA TÉRMICA CAMA");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("FUGA TÉRMICA CÁMARA");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Erro:TEMP MÁX");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Erro:TEMP MÍN");
+ LSTR MSG_HALTED = _UxGT("IMPRESORA DETIDA");
+ LSTR MSG_PLEASE_RESET = _UxGT("Debe reiniciar!");
+ LSTR MSG_HEATING = _UxGT("Quentando...");
+ LSTR MSG_COOLING = _UxGT("Arrefriando...");
+ LSTR MSG_BED_HEATING = _UxGT("Quentando cama...");
+ LSTR MSG_BED_COOLING = _UxGT("Enfriando Cama...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Quentando Cámara...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Arrefriando Cámara...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibracion Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Configuración Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibración");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Ax. Altura Delta");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Axustar Sonda Z");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonal");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Altura");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Radio");
+ LSTR MSG_INFO_MENU = _UxGT("Acerca de...");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Información");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Nivelación 3puntos");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelación Lineal");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelación Bilineal");
+ LSTR MSG_UBL_LEVELING = _UxGT("Nivelación UBL");
+ LSTR MSG_MESH_LEVELING = _UxGT("Nivelación en Malla");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Placa nai");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusores");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baudios");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Reloxo Traballo: OFF");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Reloxo Traballo: ON");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz da Caixa");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo Luces");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("IMPRESORA INCORRECTA");
+ LSTR MSG_CASE_LIGHT = _UxGT("Luz da Caixa");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Brillo Luces");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("IMPRESORA INCORRECTA");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total Impresións");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo Total Imp.");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Impresión máis longa");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruído");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total Impresións");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo Total Imp.");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Impresión máis longa");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extruído");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Impresións");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Máis Longa");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Impresións");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Máis Longa");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruido");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Fonte Alimentación");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Forza do Motor");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERRO CONEX. TMC");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCIÓN DE RETOMAR:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar máis");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Retomar traballo");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bico: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sensor Filamento");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm Sensor Fil");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Fallo ao ir á Orixe");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Fallo ao Sondar");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
+ LSTR MSG_INFO_PSU = _UxGT("Fonte Alimentación");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Forza do Motor");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %");
+ LSTR MSG_ERROR_TMC = _UxGT("ERRO CONEX. TMC");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escribe DAC EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIAR FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESIÓN PAUSADA");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARGAR FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARGAR FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCIÓN DE RETOMAR:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar máis");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Retomar traballo");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bico: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Sensor Filamento");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm Sensor Fil");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Fallo ao ir á Orixe");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Fallo ao Sondar");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ESCOLLE FILAMENTO");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Actualizar FW MMU!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Precisa Atención.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Retomar impr.");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Retomando...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar até bico");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Expulsar Filamento ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil...");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Todo");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Expulsar, premer");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ESCOLLE FILAMENTO");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Actualizar FW MMU!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Precisa Atención.");
+ LSTR MSG_MMU2_RESUME = _UxGT("Retomar impr.");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Retomando...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Cargar Filamento");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Cargar Todo");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Cargar até bico");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Expulsar Filamento");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Expulsar Filamento ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Descargar Filamento");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Cargando Fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Expulsando Fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Descargando Fil...");
+ LSTR MSG_MMU2_ALL = _UxGT("Todo");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Reiniciar MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Reiniciando MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Expulsar, premer");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mestura");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Compoñente =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mesturadora");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Degradado");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Degradado Total");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Mestura Conmutada");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Mestura Cíclica");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Mestura de Degradado");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Degradado Inverso");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Activar Ferr-V");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Inicio Ferr-V");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Fin Ferr-V");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias Ferr-V");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reiniciar Ferr-V");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit mest. Ferr-V");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("Ferr-V reiniciadas");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Inicio Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Fin Z:");
+ LSTR MSG_MIX = _UxGT("Mestura");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Compoñente =");
+ LSTR MSG_MIXER = _UxGT("Mesturadora");
+ LSTR MSG_GRADIENT = _UxGT("Degradado");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Degradado Total");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Mestura Conmutada");
+ LSTR MSG_CYCLE_MIX = _UxGT("Mestura Cíclica");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Mestura de Degradado");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Degradado Inverso");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Activar Ferr-V");
+ LSTR MSG_START_VTOOL = _UxGT("Inicio Ferr-V");
+ LSTR MSG_END_VTOOL = _UxGT(" Fin Ferr-V");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias Ferr-V");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Reiniciar Ferr-V");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Commit mest. Ferr-V");
+ LSTR MSG_VTOOLS_RESET = _UxGT("Ferr-V reiniciadas");
+ LSTR MSG_START_Z = _UxGT("Inicio Z:");
+ LSTR MSG_END_Z = _UxGT(" Fin Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Xogos");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Labirinto");
+ LSTR MSG_GAMES = _UxGT("Xogos");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Labirinto");
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Preme o botón para", "continuar impresión"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Estacionando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Agarde para", "comezar cambio", "de filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Introduza o", "filamento e", "faga click"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Prema o botón para", "quentar o bico"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Quentando bico", "Agarde, por favor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Agarde pola", "descarga do", "filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Agarde pola", "carga do", "filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Agarde para", "purgar o filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Prema para finalizar", "a purga do filamen."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Agarde a que", "se retome", "a impresión"));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Preme o botón para", "continuar impresión"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Estacionando..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Agarde para", "comezar cambio", "de filamento"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Introduza o", "filamento e", "faga click"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Prema o botón para", "quentar o bico"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Quentando bico", "Agarde, por favor..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Agarde pola", "descarga do", "filamento"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Agarde pola", "carga do", "filamento"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Agarde para", "purgar o filamento"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Prema para finalizar", "a purga do filamen."));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Agarde a que", "se retome", "a impresión"));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premer para continuar"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Estacionando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Agarde..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Introduza e click"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Prema para quentar"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Quentando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Descargando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Prema para finalizar"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Retomando..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premer para continuar"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Estacionando..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Agarde..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Introduza e click"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Prema para quentar"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Quentando..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Descargando..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Cargando..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Prema para finalizar"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Retomando..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Controlador Actual");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Limiar Hibrido");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Orixe sen Sensores");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reiniciar");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" dentro:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Reacción");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Corrección");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
+ LSTR MSG_TMC_DRIVERS = _UxGT("Controladores TMC");
+ LSTR MSG_TMC_CURRENT = _UxGT("Controlador Actual");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Limiar Hibrido");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Orixe sen Sensores");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Modo de pasos");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Habilit.");
+ LSTR MSG_SERVICE_RESET = _UxGT("Reiniciar");
+ LSTR MSG_SERVICE_IN = _UxGT(" dentro:");
+ LSTR MSG_BACKLASH = _UxGT("Reacción");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Corrección");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Suavizado");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Nivel Eixe X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrar");
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Tempo exc. Quent.");
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Requentar");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Requentando...");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivel Eixe X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrar");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Tempo exc. Quent.");
+ LSTR MSG_REHEAT = _UxGT("Requentar");
+ LSTR MSG_REHEATING = _UxGT("Requentando...");
}
diff --git a/Marlin/src/lcd/language/language_hr.h b/Marlin/src/lcd/language/language_hr.h
index e4cbdaed6c..e828b489f6 100644
--- a/Marlin/src/lcd/language/language_hr.h
+++ b/Marlin/src/lcd/language/language_hr.h
@@ -33,139 +33,138 @@
namespace Language_hr {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Croatian");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Croatian");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" spreman.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD kartica umetnuta");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD kartica uklonjena");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_MAIN = _UxGT("Main");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Auto pokretanje");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Ugasi steppere");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Automatski homing");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home-aj X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home-aj Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home-aj Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Home-aj XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klikni za početak");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sljedeća točka");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Niveliranje gotovo!");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Postavi home offsete");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets postavljeni");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Postavi ishodište");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" spreman.");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("SD kartica umetnuta");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("SD kartica uklonjena");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("Main");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Auto pokretanje");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Ugasi steppere");
+ LSTR MSG_AUTO_HOME = _UxGT("Automatski homing");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Home-aj X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Home-aj Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Home-aj Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Home-aj XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klikni za početak");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sljedeća točka");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Niveliranje gotovo!");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Postavi home offsete");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets postavljeni");
+ LSTR MSG_SET_ORIGIN = _UxGT("Postavi ishodište");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Predgrij ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Predgrij ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Sve");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Bed");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" conf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Predgrij ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Predgrij ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Dizna ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Sve");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" Bed");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Predgrij ") PREHEAT_1_LABEL _UxGT(" conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Predgrij $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Predgrij $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Predgrij $ Dizna");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Predgrij $ Dizna ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Predgrij $ Sve");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Predgrij $ Bed");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Predgrij $ conf");
+ LSTR MSG_PREHEAT_M = _UxGT("Predgrij $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Predgrij $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Predgrij $ Dizna");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Predgrij $ Dizna ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Predgrij $ Sve");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Predgrij $ Bed");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Predgrij $ conf");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Hlađenje");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Uključi napajanje");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Isključi napajanje");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Miči os");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Niveliraj bed");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Niveliraj bed");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Miči X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Miči Y");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Miči %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Miči 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Miči 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Miči 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Miči 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Brzina");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dizna");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Dizna ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Bed");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Brzina ventilatora");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Brzina ventilatora ~");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Odaberi");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Odaberi *");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperature");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Gibanje");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD-a");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Pohrani u memoriju");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Učitaj memoriju");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Učitaj Defaults");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Osvježi");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info screen");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Pripremi");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pauziraj print");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Nastavi print");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Zaustavi print");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Printaj s SD kartice");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Nema SD kartice");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Čekaj korisnika...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print otkazan");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ZAUSTAVLJEN. ");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Promijeni filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Promijeni filament *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Init. SD karticu");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Promijeni SD karticu");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Grijanje neuspješno");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Grijanje...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Grijanje Bed-a...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibracija");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriraj X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriraj Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriraj Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriraj Središte");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O printeru");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Podaci o printeru");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statistika printera");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Podaci o elektronici");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruderi");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Osvjetljenje");
+ LSTR MSG_COOLDOWN = _UxGT("Hlađenje");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Uključi napajanje");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Isključi napajanje");
+ LSTR MSG_MOVE_AXIS = _UxGT("Miči os");
+ LSTR MSG_BED_LEVELING = _UxGT("Niveliraj bed");
+ LSTR MSG_LEVEL_BED = _UxGT("Niveliraj bed");
+ LSTR MSG_MOVE_X = _UxGT("Miči X");
+ LSTR MSG_MOVE_Y = _UxGT("Miči Y");
+ LSTR MSG_MOVE_N_MM = _UxGT("Miči %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Miči 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Miči 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Miči 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Miči 100mm");
+ LSTR MSG_SPEED = _UxGT("Brzina");
+ LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_NOZZLE = _UxGT("Dizna");
+ LSTR MSG_NOZZLE_N = _UxGT("Dizna ~");
+ LSTR MSG_BED = _UxGT("Bed");
+ LSTR MSG_FAN_SPEED = _UxGT("Brzina ventilatora");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Brzina ventilatora ~");
+ LSTR MSG_SELECT = _UxGT("Odaberi");
+ LSTR MSG_SELECT_E = _UxGT("Odaberi *");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperature");
+ LSTR MSG_MOTION = _UxGT("Gibanje");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
+ LSTR MSG_CONTRAST = _UxGT("Kontrast LCD-a");
+ LSTR MSG_STORE_EEPROM = _UxGT("Pohrani u memoriju");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Učitaj memoriju");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Učitaj Defaults");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Osvježi");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info screen");
+ LSTR MSG_PREPARE = _UxGT("Pripremi");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pauziraj print");
+ LSTR MSG_RESUME_PRINT = _UxGT("Nastavi print");
+ LSTR MSG_STOP_PRINT = _UxGT("Zaustavi print");
+ LSTR MSG_MEDIA_MENU = _UxGT("Printaj s SD kartice");
+ LSTR MSG_NO_MEDIA = _UxGT("Nema SD kartice");
+ LSTR MSG_USERWAIT = _UxGT("Čekaj korisnika...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Print otkazan");
+ LSTR MSG_STOPPED = _UxGT("ZAUSTAVLJEN. ");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Promijeni filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Promijeni filament *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Init. SD karticu");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Promijeni SD karticu");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Grijanje neuspješno");
+ LSTR MSG_HEATING = _UxGT("Grijanje...");
+ LSTR MSG_BED_HEATING = _UxGT("Grijanje Bed-a...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibracija");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibriraj X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibriraj Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibriraj Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibriraj Središte");
+ LSTR MSG_INFO_MENU = _UxGT("O printeru");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Podaci o printeru");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Statistika printera");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Podaci o elektronici");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruderi");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ LSTR MSG_CASE_LIGHT = _UxGT("Osvjetljenje");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Neispravan pisač");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Neispravan pisač");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Broj printova");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Ukupno printanja");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najduži print");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano ukupno");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Broj printova");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Ukupno printanja");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najduži print");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano ukupno");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Printovi");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Ukupno");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najduži");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Printovi");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Završeni");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Ukupno");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najduži");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrudirano");
#endif
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Napajanje");
+ LSTR MSG_INFO_PSU = _UxGT("Napajanje");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Nastavi print");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Nastavi print");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Čekaj", "filament unload"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Pričekaj", "filament load"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Nastavljam..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Čekaj", "filament unload"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Pričekaj", "filament load"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Nastavljam..."));
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekaj početak", "filamenta", "promijeni"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Umetni filament", "i pritisni tipku", "za nastavak..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čekaj početak", "filamenta", "promijeni"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Umetni filament", "i pritisni tipku", "za nastavak..."));
#else
// Up to 2 lines allowed
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT("Pričekaj...");
- //PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("?", "?"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT("Pričekaj...");
#endif
}
diff --git a/Marlin/src/lcd/language/language_hu.h b/Marlin/src/lcd/language/language_hu.h
index 2b879a7d6f..4028ab10cd 100644
--- a/Marlin/src/lcd/language/language_hu.h
+++ b/Marlin/src/lcd/language/language_hu.h
@@ -36,709 +36,691 @@
namespace Language_hu {
using namespace Language_en; // A fordítás az örökölt Amerikai Angol (English) karakterláncokat használja.
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Magyar");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Magyar");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Kész.");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("IGEN");
- PROGMEM Language_Str MSG_NO = _UxGT("NEM");
- PROGMEM Language_Str MSG_BACK = _UxGT("Vissza");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Megszakítás...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Tároló behelyezve");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Tároló eltávolítva");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Várakozás a tárolóra");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("SD-kártya hiba");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Tároló olvasási hiba");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB eltávolítva");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB eszköz hiba");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Túlfolyás");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Végállás"); // Maximum 8 karakter
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Szoft. végállás");
- PROGMEM Language_Str MSG_MAIN = _UxGT("");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("További beállítások");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguráció");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Fájl auto. futtatás");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motorok kikapcsolása");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Hiba Menü");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Haladás sáv teszt");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("X-Y-Z auto kezdöpont");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X kezdöpont");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y kezdöpont");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z kezdöpont");
- PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Kezdö ") LCD_STR_I;
- PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Kezdö ") LCD_STR_J;
- PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Kezdö ") LCD_STR_K;
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-igazítás");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Ismétlés: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Pontosság csökken!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Pontosság elérve");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("X-Y-Z kezdöpont");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kattints a kezdéshez.");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Következö pont");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Szintezés kész!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Szint csökkentés");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Kezdöpont eltolás");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("X Kezdö eltol.");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Y Kezdö eltol.");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Z Kezdö eltol.");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Kezdö eltol. ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Kezdö eltol. ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Kezdö eltol. ") LCD_STR_K;
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Eltolás beállítva.");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Eredeti Be");
- PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Elektromos varázsló");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Eredeti választása");
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Utolsó érték ");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Kész.");
+ LSTR MSG_YES = _UxGT("IGEN");
+ LSTR MSG_NO = _UxGT("NEM");
+ LSTR MSG_BACK = _UxGT("Vissza");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Megszakítás...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Tároló behelyezve");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Tároló eltávolítva");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Várakozás a tárolóra");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("SD-kártya hiba");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Tároló olvasási hiba");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB eltávolítva");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB eszköz hiba");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Túlfolyás");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Végállás"); // Maximum 8 karakter
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Szoft. végállás");
+ LSTR MSG_MAIN = _UxGT("");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("További beállítások");
+ LSTR MSG_CONFIGURATION = _UxGT("Konfiguráció");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Fájl auto. futtatás");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Motorok kikapcsolása");
+ LSTR MSG_DEBUG_MENU = _UxGT("Hiba Menü");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Haladás sáv teszt");
+ LSTR MSG_AUTO_HOME = _UxGT("X-Y-Z auto kezdöpont");
+ LSTR MSG_AUTO_HOME_X = _UxGT("X kezdöpont");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Y kezdöpont");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Z kezdöpont");
+ LSTR MSG_AUTO_HOME_I = _UxGT("Kezdö ") LCD_STR_I;
+ LSTR MSG_AUTO_HOME_J = _UxGT("Kezdö ") LCD_STR_J;
+ LSTR MSG_AUTO_HOME_K = _UxGT("Kezdö ") LCD_STR_K;
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-igazítás");
+ LSTR MSG_ITERATION = _UxGT("G34 Ismétlés: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Pontosság csökken!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Pontosság elérve");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("X-Y-Z kezdöpont");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kattints a kezdéshez.");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Következö pont");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Szintezés kész!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Szint csökkentés");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Kezdöpont eltolás");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("X Kezdö eltol.");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Y Kezdö eltol.");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Z Kezdö eltol.");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Kezdö eltol. ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Kezdö eltol. ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Kezdö eltol. ") LCD_STR_K;
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Eltolás beállítva.");
+ LSTR MSG_SET_ORIGIN = _UxGT("Eredeti Be");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Elektromos varázsló");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Eredeti választása");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Utolsó érték ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Fütés ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Fütés ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Fej");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Fej ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Mind");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Ágy");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Beáll");
+ LSTR MSG_PREHEAT_1 = _UxGT("Fütés ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Fütés ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Fej");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Fej ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Mind");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Ágy");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Fütés ") PREHEAT_1_LABEL _UxGT(" Beáll");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Fütés $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Fütés $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Fütés $ Fej");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Fütés $ Fej ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Fütés $ Mind");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Fütés $ Ágy");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Fütés $ Beáll");
+ LSTR MSG_PREHEAT_M = _UxGT("Fütés $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Fütés $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Fütés $ Fej");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Fütés $ Fej ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Fütés $ Mind");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Fütés $ Ágy");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Fütés $ Beáll");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Egyedi elömelegítés");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Visszahütés");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Egyedi elömelegítés");
+ LSTR MSG_COOLDOWN = _UxGT("Visszahütés");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frekvencia");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Lézer vezérlés");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Orsó vezérlés");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Lézer telj.");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Orsó telj.");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Lézer váltás");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Hütés váltás");
- PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Levegö segéd");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Impulzus teszt ms");
- PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Tüz impulzus");
- PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Áramlási hiba");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Orsóváltás");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Vákuum váltás");
- PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Orsó elöre");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Orsó hátra");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Bekapcsolás");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Kikapcsolás");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Adagol");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Visszahúz");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Tengelyek mozgatása");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Ágy szintezés");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Ágy szintezése");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Sarok szint");
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Ágy emelése a szonda váltásig");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Minden sarok tolerancián belül. Szint jó.");
- PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Jó pontok: ");
- PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Utolsó Z: ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Következö sarok");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Háló szerkesztö");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Háló szerkesztése");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Háló szerk. állj");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Próbapont");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z érték");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Egyéni parancs");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Szonda teszt");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Pont");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Szonda határon kívül");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Eltérés");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX mód");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Eszköz eltolás");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Automata parkolás");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikálás");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Tükrözött másolás");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Teljes felügyelet");
- PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("X-hézag másolása");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2. fej X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2. fej Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2. fej Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Szintezz! G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL eszköz");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Egységes ágy szint");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Döntési pont");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Kézi háló építés");
- PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("UBL Háló varázsló");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Tégy alátétet és mérj");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Mérés");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Üres ágyat mérj");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Továbblépés");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktívál");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL deaktívál");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Ágy höfok");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Egyéni ágy höfok");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Fejhöfok");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Egyéni fejhöfok");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Háló szerkesztés");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Egyéni háló szerkesztés");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Finomított háló");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Háló kész");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Egyéni háló építés");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Háló építés");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Háló építés ($)");
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Hideg háló építés");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Háló magasság állítás");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Magasság összege");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Háló elfogadás");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Háló elfogadás ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valódi háló elfogadása");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Ágy fütés");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Fej fütés");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Kézi alapozás...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Fix hosszúságú alap");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Alapozás kész");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Törölve");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Kilépö G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Ágy háló folyt.");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Háló szintezés");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Pontos szintezés");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Rács szintezés");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Háló szint");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Oldal pontok");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Térkép típus");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Háló térkép kimenet");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host kimenet");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV kimenet");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Nyomtató bizt.mentés");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("UBL infó kimenet");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Kitöltési költség");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Kézi kitöltés");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Okos kitöltés");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Háló kitöltés");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Minden érvénytelen");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Közelebbi érvénytelen");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Mindet finomhangolja");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Közelebbi finomhangolása");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Háló tárolás");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Memória foglalat");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Ágy háló betöltés");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Ágy háló mentés");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("M117 Háló %i betöltve");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("M117 Háló %i mentve");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Nincs tároló");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Hiba: UBL mentés");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Hiba: UBL visszaáll.");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-eltolás: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-eltolás leállítva");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Lépésröl lépésre UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Hideg háló készítés");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Inteligens kitöltés");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Háló érvényesítés");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Minden finomítása");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Háló érvényesítés");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Minden finomítása");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Ágy háló mentése");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frekvencia");
+ LSTR MSG_LASER_MENU = _UxGT("Lézer vezérlés");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Orsó vezérlés");
+ LSTR MSG_LASER_POWER = _UxGT("Lézer telj.");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Orsó telj.");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Lézer váltás");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Hütés váltás");
+ LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Levegö segéd");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Impulzus teszt ms");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Tüz impulzus");
+ LSTR MSG_FLOWMETER_FAULT = _UxGT("Áramlási hiba");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Orsóváltás");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Vákuum váltás");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Orsó elöre");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Orsó hátra");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Bekapcsolás");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Kikapcsolás");
+ LSTR MSG_EXTRUDE = _UxGT("Adagol");
+ LSTR MSG_RETRACT = _UxGT("Visszahúz");
+ LSTR MSG_MOVE_AXIS = _UxGT("Tengelyek mozgatása");
+ LSTR MSG_BED_LEVELING = _UxGT("Ágy szintezés");
+ LSTR MSG_LEVEL_BED = _UxGT("Ágy szintezése");
+ LSTR MSG_BED_TRAMMING = _UxGT("Sarok szint");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Ágy emelése a szonda váltásig");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Minden sarok tolerancián belül. Szint jó.");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Jó pontok: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Utolsó Z: ");
+ LSTR MSG_NEXT_CORNER = _UxGT("Következö sarok");
+ LSTR MSG_MESH_EDITOR = _UxGT("Háló szerkesztö");
+ LSTR MSG_EDIT_MESH = _UxGT("Háló szerkesztése");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Háló szerk. állj");
+ LSTR MSG_PROBING_POINT = _UxGT("Próbapont");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Z érték");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Egyéni parancs");
+ LSTR MSG_M48_TEST = _UxGT("M48 Szonda teszt");
+ LSTR MSG_M48_POINT = _UxGT("M48 Pont");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Szonda határon kívül");
+ LSTR MSG_M48_DEVIATION = _UxGT("Eltérés");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX mód");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Eszköz eltolás");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Automata parkolás");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikálás");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Tükrözött másolás");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Teljes felügyelet");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("X-hézag másolása");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. fej Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. fej @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Szintezz! G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL eszköz");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Egységes ágy szint");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Döntési pont");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Kézi háló építés");
+ LSTR MSG_UBL_MESH_WIZARD = _UxGT("UBL Háló varázsló");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Tégy alátétet és mérj");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Mérés");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Üres ágyat mérj");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Továbblépés");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL aktívál");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL deaktívál");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Ágy höfok");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Egyéni ágy höfok");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Fejhöfok");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Egyéni fejhöfok");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Háló szerkesztés");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Egyéni háló szerkesztés");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Finomított háló");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Háló kész");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Egyéni háló építés");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Háló építés");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Háló építés ($)");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Hideg háló építés");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Háló magasság állítás");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Magasság összege");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Háló elfogadás");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Háló elfogadás ($)");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valódi háló elfogadása");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Ágy fütés");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Fej fütés");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Kézi alapozás...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fix hosszúságú alap");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Alapozás kész");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Törölve");
+ LSTR MSG_G26_LEAVING = _UxGT("Kilépö G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Ágy háló folyt.");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Háló szintezés");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Pontos szintezés");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Rács szintezés");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Háló szint");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Oldal pontok");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Térkép típus");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Háló térkép kimenet");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host kimenet");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV kimenet");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Nyomtató bizt.mentés");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("UBL infó kimenet");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Kitöltési költség");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Kézi kitöltés");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Okos kitöltés");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Háló kitöltés");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Minden érvénytelen");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Közelebbi érvénytelen");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Mindet finomhangolja");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Közelebbi finomhangolása");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Háló tárolás");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Memória foglalat");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Ágy háló betöltés");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Ágy háló mentés");
+ LSTR MSG_MESH_LOADED = _UxGT("M117 Háló %i betöltve");
+ LSTR MSG_MESH_SAVED = _UxGT("M117 Háló %i mentve");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Nincs tároló");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Hiba: UBL mentés");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Hiba: UBL visszaáll.");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-eltolás: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-eltolás leállítva");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Lépésröl lépésre UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Hideg háló készítés");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Inteligens kitöltés");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Háló érvényesítés");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Minden finomítása");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Háló érvényesítés");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Minden finomítása");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Ágy háló mentése");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED vezérlés");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Világítás");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Beállított színek");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Piros");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Narancs");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Sárga");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Zöld");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Kék");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigó");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Viola");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Fehér");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Alapérték");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Csatorna =");
- PROGMEM Language_Str MSG_LEDS2 = _UxGT("LED-ek #2");
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Fény #2 megadott");
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Fényerö");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Egyéni szín");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Piros intenzitás");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Zöld intenzitás");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Kék intenzitás");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Fehér intenzitás");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Fényerö");
+ LSTR MSG_LED_CONTROL = _UxGT("LED vezérlés");
+ LSTR MSG_LEDS = _UxGT("Világítás");
+ LSTR MSG_LED_PRESETS = _UxGT("Beállított színek");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Piros");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Narancs");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Sárga");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Zöld");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Kék");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigó");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Viola");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Fehér");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Alapérték");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Csatorna =");
+ LSTR MSG_LEDS2 = _UxGT("LED-ek #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Fény #2 megadott");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Fényerö");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Egyéni szín");
+ LSTR MSG_INTENSITY_R = _UxGT("Piros intenzitás");
+ LSTR MSG_INTENSITY_G = _UxGT("Zöld intenzitás");
+ LSTR MSG_INTENSITY_B = _UxGT("Kék intenzitás");
+ LSTR MSG_INTENSITY_W = _UxGT("Fehér intenzitás");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Fényerö");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Mozgás...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("XY szabad");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("X mozgás");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Y mozgás");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Z mozgás");
- PROGMEM Language_Str MSG_MOVE_I = _UxGT("Mozgás ") LCD_STR_I;
- PROGMEM Language_Str MSG_MOVE_J = _UxGT("Mozgás ") LCD_STR_J;
- PROGMEM Language_Str MSG_MOVE_K = _UxGT("Mozgás ") LCD_STR_K;
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Adagoló");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Adagoló *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("A fej túl hideg");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mozgás %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mozgás 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mozgás 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mozgás 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mozgás 100mm");
- PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Mozgás 0.025mm");
- PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Mozgás 0.254mm");
- PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Mozgás 2.54mm");
- PROGMEM Language_Str MSG_MOVE_1IN = _UxGT("Mozgáá 25.4mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Sebesség");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Z ágy");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Fej");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Fej ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Fej parkolva");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Fej készenlétbe");
- PROGMEM Language_Str MSG_BED = _UxGT("Ágy");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Burkolat");
- PROGMEM Language_Str MSG_COOLER = _UxGT("Lézer hütövíz");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Hütö kapcsoló");
- PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Áramlásbiztonság");
- PROGMEM Language_Str MSG_LASER = _UxGT("Lézer");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Hütés sebesség");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Hütés sebesség =");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Tárolt hütés =");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra hütés sebesség");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra hütés sebesség =");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Hütésvezérlés");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Alapjárat");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Automatikus mód");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktív sebesség");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Készenlét");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Folyás");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Folyás ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Konfiguráció");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Minimum");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Maximum");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Tényezö");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Automata höfok");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Be");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Ki");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID hangolás");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID hangolás *");
- PROGMEM Language_Str MSG_PID_CYCLE = _UxGT("PID ciklus");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("PID hangolás kész");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Hangolási hiba. Rossz adagoló.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Hangolási hiba. Magas hömérséklet.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Hangolási hiba! Idötúllépés.");
- PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
- PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
- PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
- PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
- PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
- PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
- PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
- PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
- PROGMEM Language_Str MSG_PID_F = _UxGT("PID-F");
- PROGMEM Language_Str MSG_PID_F_E = _UxGT("PID-F *");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Kiválaszt");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Kiválaszt *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Gyorsítás");
- PROGMEM Language_Str MSG_JERK = _UxGT("Rántás");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Seb.") LCD_STR_A _UxGT("-Rántás");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Seb.") LCD_STR_B _UxGT("-Rántás");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Seb.") LCD_STR_C _UxGT("-Rántás");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Seb.") LCD_STR_I _UxGT("-Rántás");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Seb.") LCD_STR_J _UxGT("-Rántás");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Seb.") LCD_STR_K _UxGT("-Rántás");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("E ránt. seb.");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Csomopont eltérés");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Sebesség");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Max Seb. ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Max Seb. ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Max Seb. ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Max Seb. ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Max Seb. ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Max Seb. ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Max Seb. ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Max sebesség *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Min sebesség");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Min utazó.seb.");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Gyorsulás");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max gyors. ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max gyors. ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max gyors. ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Max gyors. ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Max gyors. ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Max gyors. ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max gyors. ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Max gyorsulás *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Visszahúzás");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Utazás");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Max frekvencia");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min elötolás");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Lépés/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" Lépés/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" Lépés/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" Lépés/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" Lépés/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" Lépés/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" Lépés/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E lépés/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("*Lépés/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Höfok");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Mozgatások");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Nyomtatószál");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E mm³-ben");
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit mm³-ben");
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Szál. átm.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Szál. átm. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Kiadás mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Betöltés mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Haladó K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Haladó K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD kontraszt");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Mentés EEPROM");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Betöltés EEPROM");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Alapértelmezett");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM inicializálás");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Hiba: EEPROM CRC");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Hiba: EEPROM index");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Hiba: EEPROM verzió");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Beállítások mentve");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Tároló frissítés");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Nyomtató újraindítása");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Frissítés");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Vezérlés");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Hangolás");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Teljesítménymonitor");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Jelenlegi");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Feszültség");
- PROGMEM Language_Str MSG_POWER = _UxGT("Energia");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Nyomtatás indítása");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Tovább");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Kezdet");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Állj");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Nyomtatás");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Újraindítás");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Mellöz");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Mégse");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Kész");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Vissza");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Folytatás");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Kihagy");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Szüneteltetve...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Nyomtatás szünetelés");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Nyomtatás folytatása");
- PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Hoszt indítás");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Nyomtatás leállítása");
- PROGMEM Language_Str MSG_END_LOOPS = _UxGT("Hurok ismétlés vége");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Objektum nyomtatása");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Objektum törlése");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Objektum törlése =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Kiesés helyreáll.");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Nyomtatás tárolóról");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Nincs tároló");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Alvás...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Katt a folytatáshoz...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Nyomtatás szünetelve");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Nyomtatás...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Nyomtatás leállítva");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Nyomtatás kész");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Nincs mozgás.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("HALOTT! ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("MEGÁLLT! ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Visszahúzás mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Visszahúzás cs. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Viszahúzás");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Ugrás mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Visszah.helyre mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Csere.visszah.helyre mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Visszahúzás V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S Vissza.h V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto visszah.");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Visszahúzás távolság");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra csere");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Tisztítási távolság");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Szerszámcsere");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z emelés");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Fösebesség");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Visszah. sebesség");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Fej parkolás");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Visszav.visszah. sebesség");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("FAN sebesség");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("FAN idö");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto BE");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto KI");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Szerszámcsere");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Automata csere");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Utolsó adagoló");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Csere *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Szálcsere");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Szálcsere *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Szál betöltés");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Szál betöltés *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Szál eltávolítás");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Szál eltávolítás *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Mindet eltávolít");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Tároló");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Tároló csere");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Tároló Kiadása");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z szonda tálcán kivül");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Ferdeség faktor");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Önteszt");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Visszaállítás");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Elhelyez");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Telepít");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mód");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mód");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mód");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Módok");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch 5V mód");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch OD mód");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Jelentés");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("VESZÉLY: A rossz beállítások kárt okozhatnak! Biztos továbblép?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Kezd TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z eltolás teszt");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Mentés");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI használ");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Z-Szonda telepítés");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Z-Szonda elhelyezés");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Elöször %s%s%s kell");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Szonda eltolások");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("X szonda eltolás");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Y szonda eltolás");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z szonda eltolás");
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Fej az ágyhoz");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Mikrolépés X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Mikrolépés Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Mikrolépés Z");
- PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Mikrolépés ") LCD_STR_I;
- PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Mikrolépés ") LCD_STR_J;
- PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Mikrolépés ") LCD_STR_K;
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Teljes");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Végállás megszakítva!");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Fütés hiba!");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Hiba: SZÜKSÉGTELEN HÖFOK");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("FÜTÉS KIMARADÁS");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ÁGY FÜTÉS KIMARADÁS");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("KAMRA FÜTÉS KIMARADÁS");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Hütés kimaradás");
- PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("Hütés sikertelen");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Hiba: MAX höfok");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Hiba: MIN höfok");
- PROGMEM Language_Str MSG_HALTED = _UxGT("A NYOMTATÓ LEÁLLT");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Indítsd újra!");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("n"); // Csak egy karakter
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("ó"); // Csak egy karakter
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("p"); // Csak egy karakter
- PROGMEM Language_Str MSG_HEATING = _UxGT("Fütés...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Hütés...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Ágy fütés...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Ágy hütés...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Szonda fütése...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Szonda hütése...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Kamra fütés...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Kamra hütés...");
- PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Lézer hütés...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta kalibráció");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("X kalibrálás");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Y kalibrálás");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Z kalibrálás");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Központ kalibrálás");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta beállítások");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto kalibráció");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta magasság kalib.");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z eltolás");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag rúd");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Magasság");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Sugár");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("A Nyomtatóról");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Nyomtató infó");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Pontos szintezés");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Lineáris szintezés");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilineáris szintezés");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Egységes ágy szintezés");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Háló szintezés");
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Háló szintezés kész");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statisztikák");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Alaplap infó");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termisztorok");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Adagolók");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Átviteli sebesség");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Futáselemzés: KI");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Futáselemzés: BE");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Fej üresjárati idök.");
+ LSTR MSG_MOVING = _UxGT("Mozgás...");
+ LSTR MSG_FREE_XY = _UxGT("XY szabad");
+ LSTR MSG_MOVE_X = _UxGT("X mozgás");
+ LSTR MSG_MOVE_Y = _UxGT("Y mozgás");
+ LSTR MSG_MOVE_Z = _UxGT("Z mozgás");
+ LSTR MSG_MOVE_I = _UxGT("Mozgás ") LCD_STR_I;
+ LSTR MSG_MOVE_J = _UxGT("Mozgás ") LCD_STR_J;
+ LSTR MSG_MOVE_K = _UxGT("Mozgás ") LCD_STR_K;
+ LSTR MSG_MOVE_E = _UxGT("Adagoló");
+ LSTR MSG_MOVE_EN = _UxGT("Adagoló *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("A fej túl hideg");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mozgás %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mozgás 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mozgás 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mozgás 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mozgás 100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Mozgás 0.025mm");
+ LSTR MSG_MOVE_001IN = _UxGT("Mozgás 0.254mm");
+ LSTR MSG_MOVE_01IN = _UxGT("Mozgás 2.54mm");
+ LSTR MSG_MOVE_1IN = _UxGT("Mozgáá 25.4mm");
+ LSTR MSG_SPEED = _UxGT("Sebesség");
+ LSTR MSG_BED_Z = _UxGT("Z ágy");
+ LSTR MSG_NOZZLE = _UxGT("Fej");
+ LSTR MSG_NOZZLE_N = _UxGT("Fej ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Fej parkolva");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Fej készenlétbe");
+ LSTR MSG_BED = _UxGT("Ágy");
+ LSTR MSG_CHAMBER = _UxGT("Burkolat");
+ LSTR MSG_COOLER = _UxGT("Lézer hütövíz");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Hütö kapcsoló");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Áramlásbiztonság");
+ LSTR MSG_LASER = _UxGT("Lézer");
+ LSTR MSG_FAN_SPEED = _UxGT("Hütés sebesség");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Hütés sebesség =");
+ LSTR MSG_STORED_FAN_N = _UxGT("Tárolt hütés =");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra hütés sebesség");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra hütés sebesség =");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Hütésvezérlés");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Alapjárat");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Automatikus mód");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktív sebesség");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Készenlét");
+ LSTR MSG_FLOW = _UxGT("Folyás");
+ LSTR MSG_FLOW_N = _UxGT("Folyás ~");
+ LSTR MSG_CONTROL = _UxGT("Konfiguráció");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Minimum");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Maximum");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Tényezö");
+ LSTR MSG_AUTOTEMP = _UxGT("Automata höfok");
+ LSTR MSG_LCD_ON = _UxGT("Be");
+ LSTR MSG_LCD_OFF = _UxGT("Ki");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID hangolás");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID hangolás *");
+ LSTR MSG_PID_CYCLE = _UxGT("PID ciklus");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID hangolás kész");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Hangolási hiba. Rossz adagoló.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Hangolási hiba. Magas hömérséklet.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Hangolási hiba! Idötúllépés.");
+ LSTR MSG_SELECT = _UxGT("Kiválaszt");
+ LSTR MSG_SELECT_E = _UxGT("Kiválaszt *");
+ LSTR MSG_ACC = _UxGT("Gyorsítás");
+ LSTR MSG_JERK = _UxGT("Rántás");
+ LSTR MSG_VA_JERK = _UxGT("Seb.") LCD_STR_A _UxGT("-Rántás");
+ LSTR MSG_VB_JERK = _UxGT("Seb.") LCD_STR_B _UxGT("-Rántás");
+ LSTR MSG_VC_JERK = _UxGT("Seb.") LCD_STR_C _UxGT("-Rántás");
+ LSTR MSG_VI_JERK = _UxGT("Seb.") LCD_STR_I _UxGT("-Rántás");
+ LSTR MSG_VJ_JERK = _UxGT("Seb.") LCD_STR_J _UxGT("-Rántás");
+ LSTR MSG_VK_JERK = _UxGT("Seb.") LCD_STR_K _UxGT("-Rántás");
+ LSTR MSG_VE_JERK = _UxGT("E ránt. seb.");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Csomopont eltérés");
+ LSTR MSG_VELOCITY = _UxGT("Sebesség");
+ LSTR MSG_VMAX_A = _UxGT("Max Seb. ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Max Seb. ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Max Seb. ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Max Seb. ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Max Seb. ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Max Seb. ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Max Seb. ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Max sebesség *");
+ LSTR MSG_VMIN = _UxGT("Min sebesség");
+ LSTR MSG_VTRAV_MIN = _UxGT("Min utazó.seb.");
+ LSTR MSG_ACCELERATION = _UxGT("Gyorsulás");
+ LSTR MSG_AMAX_A = _UxGT("Max gyors. ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Max gyors. ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Max gyors. ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Max gyors. ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Max gyors. ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Max gyors. ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Max gyors. ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Max gyorsulás *");
+ LSTR MSG_A_RETRACT = _UxGT("Visszahúzás");
+ LSTR MSG_A_TRAVEL = _UxGT("Utazás");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Max frekvencia");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min elötolás");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Lépés/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Lépés/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Lépés/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Lépés/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Lépés/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Lépés/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Lépés/mm");
+ LSTR MSG_E_STEPS = _UxGT("E lépés/mm");
+ LSTR MSG_EN_STEPS = _UxGT("*Lépés/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Höfok");
+ LSTR MSG_MOTION = _UxGT("Mozgatások");
+ LSTR MSG_FILAMENT = _UxGT("Nyomtatószál");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E mm³-ben");
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit mm³-ben");
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Szál. átm.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Szál. átm. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Kiadás mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Betöltés mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Haladó K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Haladó K *");
+ LSTR MSG_CONTRAST = _UxGT("LCD kontraszt");
+ LSTR MSG_STORE_EEPROM = _UxGT("Mentés EEPROM");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Betöltés EEPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Alapértelmezett");
+ LSTR MSG_INIT_EEPROM = _UxGT("EEPROM inicializálás");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hiba: EEPROM CRC");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hiba: EEPROM index");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hiba: EEPROM verzió");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Beállítások mentve");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Tároló frissítés");
+ LSTR MSG_RESET_PRINTER = _UxGT("Nyomtató újraindítása");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Frissítés");
+ LSTR MSG_INFO_SCREEN = _UxGT("");
+ LSTR MSG_PREPARE = _UxGT("Vezérlés");
+ LSTR MSG_TUNE = _UxGT("Hangolás");
+ LSTR MSG_POWER_MONITOR = _UxGT("Teljesítménymonitor");
+ LSTR MSG_CURRENT = _UxGT("Jelenlegi");
+ LSTR MSG_VOLTAGE = _UxGT("Feszültség");
+ LSTR MSG_POWER = _UxGT("Energia");
+ LSTR MSG_START_PRINT = _UxGT("Nyomtatás indítása");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Tovább");
+ LSTR MSG_BUTTON_INIT = _UxGT("Kezdet");
+ LSTR MSG_BUTTON_STOP = _UxGT("Állj");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Nyomtatás");
+ LSTR MSG_BUTTON_RESET = _UxGT("Újraindítás");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Mellöz");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Mégse");
+ LSTR MSG_BUTTON_DONE = _UxGT("Kész");
+ LSTR MSG_BUTTON_BACK = _UxGT("Vissza");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Folytatás");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Kihagy");
+ LSTR MSG_PAUSING = _UxGT("Szüneteltetve...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Nyomtatás szünetelés");
+ LSTR MSG_RESUME_PRINT = _UxGT("Nyomtatás folytatása");
+ LSTR MSG_HOST_START_PRINT = _UxGT("Hoszt indítás");
+ LSTR MSG_STOP_PRINT = _UxGT("Nyomtatás leállítása");
+ LSTR MSG_END_LOOPS = _UxGT("Hurok ismétlés vége");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Objektum nyomtatása");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Objektum törlése");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Objektum törlése =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Kiesés helyreáll.");
+ LSTR MSG_MEDIA_MENU = _UxGT("Nyomtatás tárolóról");
+ LSTR MSG_NO_MEDIA = _UxGT("Nincs tároló");
+ LSTR MSG_DWELL = _UxGT("Alvás...");
+ LSTR MSG_USERWAIT = _UxGT("Katt a folytatáshoz...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Nyomtatás szünetelve");
+ LSTR MSG_PRINTING = _UxGT("Nyomtatás...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Nyomtatás leállítva");
+ LSTR MSG_PRINT_DONE = _UxGT("Nyomtatás kész");
+ LSTR MSG_NO_MOVE = _UxGT("Nincs mozgás.");
+ LSTR MSG_KILLED = _UxGT("HALOTT! ");
+ LSTR MSG_STOPPED = _UxGT("MEGÁLLT! ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Visszahúzás mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Visszahúzás cs. mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Viszahúzás");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Ugrás mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Visszah.helyre mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Csere.visszah.helyre mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Visszahúzás V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S Vissza.h V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto visszah.");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Visszahúzás távolság");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra csere");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Tisztítási távolság");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Szerszámcsere");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z emelés");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Fösebesség");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Visszah. sebesség");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Fej parkolás");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Visszav.visszah. sebesség");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("FAN sebesség");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("FAN idö");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto BE");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto KI");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Szerszámcsere");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Automata csere");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Utolsó adagoló");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Csere *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Szálcsere");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Szálcsere *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Szál betöltés");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Szál betöltés *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Szál eltávolítás");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Szál eltávolítás *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Mindet eltávolít");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Tároló");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Tároló csere");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Tároló Kiadása");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z szonda tálcán kivül");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Ferdeség faktor");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Önteszt");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Visszaállítás");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Elhelyez");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Telepít");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mód");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mód");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mód");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Módok");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch 5V mód");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch OD mód");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Jelentés");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("VESZÉLY: A rossz beállítások kárt okozhatnak! Biztos továbblép?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Kezd TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z eltolás teszt");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Mentés");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI használ");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Szonda telepítés");
+ LSTR MSG_MANUAL_STOW = _UxGT("Z-Szonda elhelyezés");
+ LSTR MSG_HOME_FIRST = _UxGT("Elöször %s%s%s kell");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Szonda eltolások");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("X szonda eltolás");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Y szonda eltolás");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z szonda eltolás");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Fej az ágyhoz");
+ LSTR MSG_BABYSTEP_X = _UxGT("Mikrolépés X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Mikrolépés Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Mikrolépés Z");
+ LSTR MSG_BABYSTEP_I = _UxGT("Mikrolépés ") LCD_STR_I;
+ LSTR MSG_BABYSTEP_J = _UxGT("Mikrolépés ") LCD_STR_J;
+ LSTR MSG_BABYSTEP_K = _UxGT("Mikrolépés ") LCD_STR_K;
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Teljes");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Végállás megszakítva!");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Fütés hiba!");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Hiba: SZÜKSÉGTELEN HÖFOK");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("FÜTÉS KIMARADÁS");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ÁGY FÜTÉS KIMARADÁS");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("KAMRA FÜTÉS KIMARADÁS");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Hütés kimaradás");
+ LSTR MSG_COOLING_FAILED = _UxGT("Hütés sikertelen");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Hiba: MAX höfok");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Hiba: MIN höfok");
+ LSTR MSG_HALTED = _UxGT("A NYOMTATÓ LEÁLLT");
+ LSTR MSG_PLEASE_RESET = _UxGT("Indítsd újra!");
+ LSTR MSG_SHORT_DAY = _UxGT("n"); // Csak egy karakter
+ LSTR MSG_SHORT_HOUR = _UxGT("ó"); // Csak egy karakter
+ LSTR MSG_SHORT_MINUTE = _UxGT("p"); // Csak egy karakter
+ LSTR MSG_HEATING = _UxGT("Fütés...");
+ LSTR MSG_COOLING = _UxGT("Hütés...");
+ LSTR MSG_BED_HEATING = _UxGT("Ágy fütés...");
+ LSTR MSG_BED_COOLING = _UxGT("Ágy hütés...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Szonda fütése...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Szonda hütése...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Kamra fütés...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Kamra hütés...");
+ LSTR MSG_LASER_COOLING = _UxGT("Lézer hütés...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta kalibráció");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("X kalibrálás");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Y kalibrálás");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Z kalibrálás");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Központ kalibrálás");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta beállítások");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto kalibráció");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta magasság kalib.");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z eltolás");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag rúd");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Magasság");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Sugár");
+ LSTR MSG_INFO_MENU = _UxGT("A Nyomtatóról");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Nyomtató infó");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-Pontos szintezés");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Lineáris szintezés");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineáris szintezés");
+ LSTR MSG_UBL_LEVELING = _UxGT("Egységes ágy szintezés");
+ LSTR MSG_MESH_LEVELING = _UxGT("Háló szintezés");
+ LSTR MSG_MESH_DONE = _UxGT("Háló szintezés kész");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Statisztikák");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Alaplap infó");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termisztorok");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Adagolók");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Átviteli sebesség");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Futáselemzés: KI");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Futáselemzés: BE");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Fej üresjárati idök.");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Munkalámpa");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Fényerösség");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("HELYTELEN NYOMTATÓ");
+ LSTR MSG_CASE_LIGHT = _UxGT("Munkalámpa");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Fényerösség");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("HELYTELEN NYOMTATÓ");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Nyomtatás számláló");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Befejezett");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Összes nyomtatási idö");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Leghosszabb munkaidö");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Összes anyag");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nyomtatás számláló");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Befejezett");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Összes nyomtatási idö");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Leghosszabb munkaidö");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Összes anyag");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Nyomtatások");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Befejezett");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Összes");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Leghosszabb");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Kiadott");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Nyomtatások");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Befejezett");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Összes");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Leghosszabb");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Kiadott");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min höfok");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max höfok");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Meghajtási erö");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Meghajtó %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Meghajtó %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Meghajtó %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Meghajtó %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Meghajtó %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Meghajtó %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E meghajtó %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC CSATLAKOZÁSI HIBA");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM írása");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("NYOMTATÓSZÁL CSERE");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("NYOMTATÁS SZÜNETEL");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("SZÁL BETÖLTÉS");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("SZÁL ELTÁVOLÍTÁS");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("FOLYTATÁSI OPCIÓ:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Tisztítsd meg");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Folytatás");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Fej: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Túlfutás szenzor");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Túlfutás táv. mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Tájolási hiba");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Szondázás hiba");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Min höfok");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Max höfok");
+ LSTR MSG_INFO_PSU = _UxGT("PSU");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Meghajtási erö");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Meghajtó %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Meghajtó %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Meghajtó %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Meghajtó %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Meghajtó %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Meghajtó %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E meghajtó %");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC CSATLAKOZÁSI HIBA");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM írása");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("NYOMTATÓSZÁL CSERE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("NYOMTATÁS SZÜNETEL");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("SZÁL BETÖLTÉS");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("SZÁL ELTÁVOLÍTÁS");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("FOLYTATÁSI OPCIÓ:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Tisztítsd meg");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Folytatás");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Fej: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Túlfutás szenzor");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Túlfutás táv. mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Tájolási hiba");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Szondázás hiba");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("SZÁLVÁLASZTÁS");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("MMU szoftver feltöltése!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU figyelmeztetés.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Nyomtatás folytatása");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Folytatás...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Szál betöltése");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Összes betöltése");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Fej betöltése");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Szál kidobás");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Szál kidobás ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Kiadja a szálat");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Szál betölt. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Szál kidobás. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Szál kiadása....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Mind");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Nyomtatószál ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("MMU újraindítás");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU újraindul...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Kidob, kattint");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("SZÁLVÁLASZTÁS");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("MMU szoftver feltöltése!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU figyelmeztetés.");
+ LSTR MSG_MMU2_RESUME = _UxGT("Nyomtatás folytatása");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Folytatás...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Szál betöltése");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Összes betöltése");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Fej betöltése");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Szál kidobás");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Szál kidobás ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Kiadja a szálat");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Szál betölt. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Szál kidobás. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Szál kiadása....");
+ LSTR MSG_MMU2_ALL = _UxGT("Mind");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Nyomtatószál ~");
+ LSTR MSG_MMU2_RESET = _UxGT("MMU újraindítás");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU újraindul...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Kidob, kattint");
- PROGMEM Language_Str MSG_MIX = _UxGT("Kever");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Összetevö =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Keverö");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Színátm.");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Teljes színátm.");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Váltás keverésre");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Ciklikus keverés");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Színátm. keverés");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Fordított színátm.");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktív V-szerszám");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Kezdés V-szerszám");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Vége V-szerszám");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Ál V-szerszám");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Újra V-szerszám");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Gyors V-szerszám Kev.");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-szersz. visszaáll.");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Kezdés Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Vége Z:");
+ LSTR MSG_MIX = _UxGT("Kever");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Összetevö =");
+ LSTR MSG_MIXER = _UxGT("Keverö");
+ LSTR MSG_GRADIENT = _UxGT("Színátm.");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Teljes színátm.");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Váltás keverésre");
+ LSTR MSG_CYCLE_MIX = _UxGT("Ciklikus keverés");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Színátm. keverés");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Fordított színátm.");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktív V-szerszám");
+ LSTR MSG_START_VTOOL = _UxGT("Kezdés V-szerszám");
+ LSTR MSG_END_VTOOL = _UxGT(" Vége V-szerszám");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Ál V-szerszám");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Újra V-szerszám");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Gyors V-szerszám Kev.");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-szersz. visszaáll.");
+ LSTR MSG_START_Z = _UxGT("Kezdés Z:");
+ LSTR MSG_END_Z = _UxGT(" Vége Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Játékok");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_GAMES = _UxGT("Játékok");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Rossz oldalindex");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Rossz oldalsebesség");
+ LSTR MSG_BAD_PAGE = _UxGT("Rossz oldalindex");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Rossz oldalsebesség");
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Jelszó szerkesztése");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Belépés szükséges");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Jelszóbeállítások");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Írja be a számokat");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Jelszó Beáll/Szerk");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Jelszó törlése");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("A jelszó ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Újrakezdés");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Mentsd el!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Jelszó törölve");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Jelszó szerkesztése");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Belépés szükséges");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Jelszóbeállítások");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Írja be a számokat");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Jelszó Beáll/Szerk");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Jelszó törlése");
+ LSTR MSG_PASSWORD_SET = _UxGT("A jelszó ");
+ LSTR MSG_START_OVER = _UxGT("Újrakezdés");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Mentsd el!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Jelszó törölve");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nyomj gombot", "nyomtatás folytatáshoz"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkolás..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Várj míg", "szálcsere", "indítás"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Szál behelyezés", "majd nyomj gombot", "a folytatáshoz"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nyomj gombot", "a fej fütéséhez"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Fej fütése", "Kérlek várj..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Várj a", "szál kiadására"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Várj a", "szál betöltésére"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Várj a", "szál tisztításra"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Kattints a készre", "szál tiszta"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Várj a nyomtatóra", "majd folytat..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nyomj gombot", "nyomtatás folytatáshoz"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkolás..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Várj míg", "szálcsere", "indítás"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Szál behelyezés", "majd nyomj gombot", "a folytatáshoz"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nyomj gombot", "a fej fütéséhez"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Fej fütése", "Kérlek várj..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Várj a", "szál kiadására"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Várj a", "szál betöltésére"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Várj a", "szál tisztításra"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Kattints a készre", "szál tiszta"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Várj a nyomtatóra", "majd folytat..."));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Katt a folytatáshoz"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkolás..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Kérlek várj..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Behelyez majd katt"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Katt a fütéshez"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Fütés..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Kiadás..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Betöltés..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Tisztítás..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Katt ha kész"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Folytatás..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Katt a folytatáshoz"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkolás..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Kérlek várj..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Behelyez majd katt"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Katt a fütéshez"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Fütés..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Kiadás..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Betöltés..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Tisztítás..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Katt ha kész"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Folytatás..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC meghajtók");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Meghajtó áram");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hibrid küszöbérték");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Motoros kezdöpont");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Léptetö mód");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop mód");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Újraindítás");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" be:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Holtjáték");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korrekció");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Simítás");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC meghajtók");
+ LSTR MSG_TMC_CURRENT = _UxGT("Meghajtó áram");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hibrid küszöbérték");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Motoros kezdöpont");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Léptetö mód");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop mód");
+ LSTR MSG_SERVICE_RESET = _UxGT("Újraindítás");
+ LSTR MSG_SERVICE_IN = _UxGT(" be:");
+ LSTR MSG_BACKLASH = _UxGT("Holtjáték");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korrekció");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Simítás");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("X tengely szint");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Önkalibrálás");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("X tengely szint");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Önkalibrálás");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Tétlenségi idökorlát, a hömérséklet csökkent. Nyomd meg az OK gombot az ismételt felfütéshez, és újra a folytatáshoz.");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Tétlenségi idökorlát, a hömérséklet csökkent. Nyomd meg az OK gombot az ismételt felfütéshez, és újra a folytatáshoz.");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Fütés idökorlátja");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Fütés idökorlátja");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Újrafüt");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Újrafütés...");
+ LSTR MSG_REHEAT = _UxGT("Újrafüt");
+ LSTR MSG_REHEATING = _UxGT("Újrafütés...");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Z szonda varázsló");
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Z referencia mérés");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Menj a próba pontra");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Z szonda varázsló");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Z referencia mérés");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Menj a próba pontra");
- PROGMEM Language_Str MSG_SOUND = _UxGT("Hang");
+ LSTR MSG_SOUND = _UxGT("Hang");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Bal felsö");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Bal alsó");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Jobb felsö");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Jobb alsó");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrálás befejezve");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Kalibrálási hiba");
+ LSTR MSG_TOP_LEFT = _UxGT("Bal felsö");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Bal alsó");
+ LSTR MSG_TOP_RIGHT = _UxGT("Jobb felsö");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Jobb alsó");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrálás befejezve");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrálási hiba");
- PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" meghajtók hátra");
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" meghajtók hátra");
- PROGMEM Language_Str MSG_SD_CARD = _UxGT("SD Kártya");
- PROGMEM Language_Str MSG_USB_DISK = _UxGT("USB Lemez");
+ LSTR MSG_SD_CARD = _UxGT("SD Kártya");
+ LSTR MSG_USB_DISK = _UxGT("USB Lemez");
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_it.h b/Marlin/src/lcd/language/language_it.h
index 388498fe8f..2e2529a845 100644
--- a/Marlin/src/lcd/language/language_it.h
+++ b/Marlin/src/lcd/language/language_it.h
@@ -30,9 +30,11 @@
* Substitutions are applied for the following characters when used
* in menu items that call lcd_put_u8str_ind_P with an index:
*
+ * $ displays an inserted C-string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
+ * @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define DISPLAY_CHARSET_ISO10646_1
@@ -40,701 +42,693 @@
namespace Language_it {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 1;
- PROGMEM Language_Str LANGUAGE = _UxGT("Italiano");
+ constexpr uint8_t CHARSIZE = 1;
+ LSTR LANGUAGE = _UxGT("Italiano");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pronta.");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("Si");
- PROGMEM Language_Str MSG_NO = _UxGT("No");
- PROGMEM Language_Str MSG_BACK = _UxGT("Indietro");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Annullando...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Media inserito");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Media rimosso");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Aspettando media");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Inizial.SD fallita");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Err.leggendo media");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Dispos.USB rimosso");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Avvio USB fallito");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Overflow subchiamate");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Finecor."); // Max 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Finecorsa Soft");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principale");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Impostaz. avanzate");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configurazione");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Esegui files auto");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Disabilita Motori");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu di debug");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test barra avanzam.");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Home");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Home X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Home Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Home Z");
- PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Home ") LCD_STR_I;
- PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Home ") LCD_STR_J;
- PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Home ") LCD_STR_K;
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Allineam.automat. Z");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("Iterazione G34: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Precisione in calo!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Precisione raggiunta");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Home assi XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Premi per iniziare");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Punto successivo");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Livel. terminato!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Imp. offset home");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Offset home X");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Offset home Y");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Offset home Z");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Offset home ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Offset home ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Offset home ") LCD_STR_K;
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset applicato");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Imposta Origine");
- PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Wizard Tramming");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Selez. origine");
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Ultimo valore ");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pronta.");
+ LSTR MSG_YES = _UxGT("Si");
+ LSTR MSG_NO = _UxGT("No");
+ LSTR MSG_BACK = _UxGT("Indietro");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Annullando...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Media inserito");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Media rimosso");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Aspettando media");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Inizial.SD fallita");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Err.leggendo media");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Dispos.USB rimosso");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Avvio USB fallito");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Overflow subchiamate");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Finecor."); // Max 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Finecorsa Soft");
+ LSTR MSG_MAIN = _UxGT("Menu principale");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Impostaz. avanzate");
+ LSTR MSG_CONFIGURATION = _UxGT("Configurazione");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Esegui files auto");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Disabilita Motori");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menu di debug");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test barra avanzam.");
+ LSTR MSG_AUTO_HOME = _UxGT("Auto Home");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Home X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Home Z");
+ LSTR MSG_AUTO_HOME_I = _UxGT("Home ") LCD_STR_I;
+ LSTR MSG_AUTO_HOME_J = _UxGT("Home ") LCD_STR_J;
+ LSTR MSG_AUTO_HOME_K = _UxGT("Home ") LCD_STR_K;
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Allineam.automat. Z");
+ LSTR MSG_ITERATION = _UxGT("Iterazione G34: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Precisione in calo!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Precisione raggiunta");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Home assi XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Premi per iniziare");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Punto successivo");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Livel. terminato!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Fade Height");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Imp. offset home");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Offset home X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Offset home Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Offset home Z");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Offset home ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Offset home ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Offset home ") LCD_STR_K;
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset applicato");
+ LSTR MSG_SET_ORIGIN = _UxGT("Imposta Origine");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Wizard Tramming");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Selez. origine");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Ultimo valore ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preriscalda ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Preriscalda ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Tutto");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Piatto");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" conf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Preriscalda ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Preriscalda ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Ugello ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Tutto");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" Piatto");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preris.") PREHEAT_1_LABEL _UxGT(" conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Preriscalda $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Preriscalda $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Preris.$ Ugello");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Preris.$ Ugello ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Preris.$ Tutto");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Preris.$ Piatto");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Preris.$ conf");
+ LSTR MSG_PREHEAT_M = _UxGT("Preriscalda $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Preriscalda $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Preris.$ Ugello");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Preris.$ Ugello ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Preris.$ Tutto");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preris.$ Piatto");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preris.$ conf");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Prerisc.personal.");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Raffredda");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Prerisc.personal.");
+ LSTR MSG_COOLDOWN = _UxGT("Raffredda");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frequenza");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Controllo laser");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Controllo mandrino");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Potenza laser");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Potenza mandrino");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Alterna Laser");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Alterna soffiatore");
- PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Alterna aria supp.");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("ms impulso di test");
- PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Spara impulso");
- PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Err.flusso refrig.");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Alterna mandrino");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Alterna vuoto");
- PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Mandrino in avanti");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Inverti mandrino");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Accendi aliment.");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Spegni aliment.");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Estrudi");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Ritrai");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Muovi Asse");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Livella piano");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Livella piano");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Tramming piano");
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Regola la vite finché la sonda non rileva il piano.");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Tolleranza raggiunta su tutti gli angoli. Piano livellato!");
- PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Punti buoni: ");
- PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Ultimo Z: ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Prossimo punto");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor Mesh");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Modifica Mesh");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Modif. Mesh Fermata");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Punto sondato");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Indice X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Indice Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valore di Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Comandi personaliz.");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("Test sonda M48");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("Punto M48");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Sonda oltre i limiti");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Deviazione");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Strumenti Offsets");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicazione");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia speculare");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pieno controllo");
- PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("X-Gap-X duplicato");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2° ugello X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2° ugello Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2° ugello Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 in corso");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Strumenti UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Livel.letto unificato");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punto inclinaz.");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Mesh Manuale");
- PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("Creaz.guid.mesh UBL");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Metti spes. e misura");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Misura");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Rimuovi e mis.piatto");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Spostamento succes.");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Attiva UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Disattiva UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Piatto");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Piatto");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Ugello");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Ugello");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Modifica Mesh");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif.Mesh personal.");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Ritocca Mesh");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Modif.Mesh fatta");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crea Mesh personal.");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Crea Mesh");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequenza");
+ LSTR MSG_LASER_MENU = _UxGT("Controllo laser");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Controllo mandrino");
+ LSTR MSG_LASER_POWER = _UxGT("Potenza laser");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Potenza mandrino");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Alterna Laser");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Alterna soffiatore");
+ LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Alterna aria supp.");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("ms impulso di test");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Spara impulso");
+ LSTR MSG_FLOWMETER_FAULT = _UxGT("Err.flusso refrig.");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Alterna mandrino");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Alterna vuoto");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Mandrino in avanti");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Inverti mandrino");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Accendi aliment.");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Spegni aliment.");
+ LSTR MSG_EXTRUDE = _UxGT("Estrudi");
+ LSTR MSG_RETRACT = _UxGT("Ritrai");
+ LSTR MSG_MOVE_AXIS = _UxGT("Muovi Asse");
+ LSTR MSG_BED_LEVELING = _UxGT("Livella piano");
+ LSTR MSG_LEVEL_BED = _UxGT("Livella piano");
+ LSTR MSG_BED_TRAMMING = _UxGT("Tramming piano");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Regola la vite finché la sonda non rileva il piano.");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Tolleranza raggiunta su tutti gli angoli. Piano livellato!");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Punti buoni: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Ultimo Z: ");
+ LSTR MSG_NEXT_CORNER = _UxGT("Prossimo punto");
+ LSTR MSG_MESH_EDITOR = _UxGT("Editor Mesh");
+ LSTR MSG_EDIT_MESH = _UxGT("Modifica Mesh");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Modif. Mesh Fermata");
+ LSTR MSG_PROBING_POINT = _UxGT("Punto sondato");
+ LSTR MSG_MESH_X = _UxGT("Indice X");
+ LSTR MSG_MESH_Y = _UxGT("Indice Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Valore di Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comandi personaliz.");
+ LSTR MSG_M48_TEST = _UxGT("Test sonda M48");
+ LSTR MSG_M48_POINT = _UxGT("Punto M48");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Sonda oltre i limiti");
+ LSTR MSG_M48_DEVIATION = _UxGT("Deviazione");
+ LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Strumenti Offsets");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicazione");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Copia speculare");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pieno controllo");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("X-Gap-X duplicato");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2° ugello Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2° ugello @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("G29 in corso");
+ LSTR MSG_UBL_TOOLS = _UxGT("Strumenti UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Livel.letto unificato");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Punto inclinaz.");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Mesh Manuale");
+ LSTR MSG_UBL_MESH_WIZARD = _UxGT("Creaz.guid.mesh UBL");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Metti spes. e misura");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Misura");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Rimuovi e mis.piatto");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Spostamento succes.");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Attiva UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Disattiva UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Piatto");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Piatto");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Ugello");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Ugello");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Modifica Mesh");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Modif.Mesh personal.");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Ritocca Mesh");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Modif.Mesh fatta");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Crea Mesh personal.");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Crea Mesh");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Crea Mesh ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Valida Mesh ($)");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Crea Mesh ($)");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Valida Mesh ($)");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Crea Mesh a freddo");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Aggiusta Alt. Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altezza");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valida Mesh");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 riscald.letto");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 riscald.ugello");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Priming manuale...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Prime a lung.fissa");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Priming terminato");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Annullato");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Uscita da G26");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valida Mesh pers.");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continua Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Livell. Mesh");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Livell. 3 Punti");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Livell. Griglia Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Livella Mesh");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Punti laterali");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo di Mappa");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Esporta Mappa");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Esporta per Host");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Esporta in CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup esterno");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Esporta Info UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Riempimento");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Riempimento Manuale");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Riempimento Smart");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Riempimento Mesh");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalida Tutto");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalid.Punto Vicino");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Ritocca All");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ritocca Punto Vicino");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Salvate");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot di memoria");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Carica Mesh Piatto");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Salva Mesh Piatto");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Mesh %i caricata");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Mesh %i salvata");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Nessuna memoria");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err: Salvataggio UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ripristino UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Fermato");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo passo");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crea Mesh a freddo");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Riempimento Smart");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valida Mesh");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ritocca All");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valida Mesh");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ritocca All");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Salva Mesh Piatto");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Crea Mesh a freddo");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Aggiusta Alt. Mesh");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Altezza");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Valida Mesh");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 riscald.letto");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 riscald.ugello");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Priming manuale...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Prime a lung.fissa");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Priming terminato");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Annullato");
+ LSTR MSG_G26_LEAVING = _UxGT("Uscita da G26");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Valida Mesh pers.");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continua Mesh");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Livell. Mesh");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Livell. 3 Punti");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Livell. Griglia Mesh");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Livella Mesh");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Punti laterali");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo di Mappa");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Esporta Mappa");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Esporta per Host");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Esporta in CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Backup esterno");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Esporta Info UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Riempimento");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Riempimento Manuale");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Riempimento Smart");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Riempimento Mesh");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalida Tutto");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalid.Punto Vicino");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Ritocca All");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ritocca Punto Vicino");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Salvate");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot di memoria");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Carica Mesh Piatto");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Salva Mesh Piatto");
+ LSTR MSG_MESH_LOADED = _UxGT("Mesh %i caricata");
+ LSTR MSG_MESH_SAVED = _UxGT("Mesh %i salvata");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Nessuna memoria");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: Salvataggio UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: Ripristino UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Fermato");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo passo");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Crea Mesh a freddo");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Riempimento Smart");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Valida Mesh");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ritocca All");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Valida Mesh");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ritocca All");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Salva Mesh Piatto");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Controllo LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Luci");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Presets luce");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Rosso");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Arancione");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Giallo");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Verde");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blu");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indaco");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Viola");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Bianco");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Predefinito");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Canale =");
- PROGMEM Language_Str MSG_LEDS2 = _UxGT("Luci #2");
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Presets luce #2");
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Luminosità");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Luci personalizzate");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensità rosso");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensità verde");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensità blu");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensità bianco");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Luminosità");
+ LSTR MSG_LED_CONTROL = _UxGT("Controllo LED");
+ LSTR MSG_LEDS = _UxGT("Luci");
+ LSTR MSG_LED_PRESETS = _UxGT("Presets luce");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Rosso");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Arancione");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Giallo");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Verde");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Blu");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indaco");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Viola");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Bianco");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Predefinito");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Canale =");
+ LSTR MSG_LEDS2 = _UxGT("Luci #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Presets luce #2");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Luminosità");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Luci personalizzate");
+ LSTR MSG_INTENSITY_R = _UxGT("Intensità rosso");
+ LSTR MSG_INTENSITY_G = _UxGT("Intensità verde");
+ LSTR MSG_INTENSITY_B = _UxGT("Intensità blu");
+ LSTR MSG_INTENSITY_W = _UxGT("Intensità bianco");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Luminosità");
- PROGMEM Language_Str MSG_MOVING = _UxGT("In movimento...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("XY liberi");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Muovi X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Muovi Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Muovi Z");
- PROGMEM Language_Str MSG_MOVE_I = _UxGT("Muovi ") LCD_STR_I;
- PROGMEM Language_Str MSG_MOVE_J = _UxGT("Muovi ") LCD_STR_J;
- PROGMEM Language_Str MSG_MOVE_K = _UxGT("Muovi ") LCD_STR_K;
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Estrusore");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Estrusore *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Ugello freddo");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Muovi di %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Muovi di 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Muovi di 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Muovi di 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Muovi di 100mm");
- PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Muovi di 0.001\"");
- PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Muovi di 0.01\"");
- PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Muovi di 0.1\"");
- PROGMEM Language_Str MSG_MOVE_1IN = _UxGT("Muovi di 1\"");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Velocità");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Piatto Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Ugello");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Ugello ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Ugello parcheggiato");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Ugello in pausa");
- PROGMEM Language_Str MSG_BED = _UxGT("Piatto");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Camera");
- PROGMEM Language_Str MSG_COOLER = _UxGT("Raffreddam. laser");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Alterna raffreddam.");
- PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Sicurezza flusso");
- PROGMEM Language_Str MSG_LASER = _UxGT("Laser");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. ventola"); // Max 15 characters
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. ventola ~"); // Max 15 characters
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ventola mem. ~"); // Max 15 characters
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra vel.vent."); // Max 15 characters
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra v.vent. ~"); // Max 15 characters
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Controller vent.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Vel. inattivo");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo autom.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Vel. attivo");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Tempo inattivo");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flusso");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flusso ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Controllo");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("On");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Off");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("Calibrazione PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("Calibraz. PID *");
- PROGMEM Language_Str MSG_PID_CYCLE = _UxGT("Ciclo PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Calibr.PID eseguita");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Calibrazione fallita. Estrusore errato.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Calibrazione fallita. Temperatura troppo alta.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Calibrazione fallita! Tempo scaduto.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Seleziona");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Seleziona *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-jerk");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Deviaz. giunzioni");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocità");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VTrav min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accelerazione");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel");
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Max * Accel");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-Ritrazione");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-Spostamento");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequenza max");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passi/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" passi/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" passi/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" passi/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" passi/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" passi/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" passi/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E passi/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* passi/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Movimento");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("Limite E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("Limite E *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diam. filo");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Diam. filo *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Rimuovi mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carica mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K Avanzamento");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("K Avanzamento *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contrasto LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Salva impostazioni");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carica impostazioni");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Ripristina imp.");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inizializza EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Err: CRC EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Err: Indice EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versione EEPROM");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Impostazioni mem.");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aggiorna media");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetta stampante");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aggiorna");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Schermata info");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepara");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Regola");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Controllo aliment.");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Corrente");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Tensione");
- PROGMEM Language_Str MSG_POWER = _UxGT("Potenza");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Avvia stampa");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Prossimo");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inizializza");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Stampa");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Resetta");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignora");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Annulla");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Fatto");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Indietro");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Procedi");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Salta");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Messa in pausa...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausa stampa");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Riprendi stampa");
- PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Host Avvio");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Arresta stampa");
- PROGMEM Language_Str MSG_END_LOOPS = _UxGT("Fine cicli di rip.");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Stampa Oggetto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancella Oggetto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Canc. Oggetto =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Ripresa da PowerLoss");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Stampa da media");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Media non presente");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Sospensione...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Premi tasto..");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Stampa sospesa");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Stampa...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Stampa Annullata");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Stampa Eseguita");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Nessun Movimento");
- PROGMEM Language_Str MSG_KILLED = _UxGT("UCCISO. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ARRESTATO. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Ritrai mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Scamb. Ritrai mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Ritrai V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Salta mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Avanza mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Scamb. Avanza mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Avanza V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Scamb. Avanza V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRitrai");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Lunghezza scambio");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra scambio");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lunghezza spurgo");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Cambio utensile");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Risalita Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Velocità innesco");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Velocità ritrazione");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Parcheggia testa");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Velocità ventola");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Tempo ventola");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Migrazione utensile");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migrazione");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Ultimo estrusore");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migra a *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Cambia filamento");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Cambia filam. *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Carica filamento");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Carica filamento *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Rimuovi filamento");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Rimuovi filam. *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Rimuovi tutto");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Collega media");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Cambia media");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Rilascia media");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z probe fuori piatto");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Fattore distorsione");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Autotest BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Resetta BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Estendi BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("BLTouch modo SW");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch modo 5V");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch modo OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("BLTouch modo mem.");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Metti BLTouch a 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Metti BLTouch a OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Segnala modo");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERICOLO: impostazioni errate possono cause danni! Procedo comunque?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Inizializ.TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test Z offset");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Memorizzare");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estendi TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Estendi Sonda-Z");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Ritrai BLTouch");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Ritrai Sonda-Z");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s prima");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Offsets sonda");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Offset X sonda");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Offset Y sonda");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z sonda");
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Muovi ugel.su letto");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
- PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
- PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Totali");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Interrompi se FC");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Risc.Fallito"); // Max 12 characters
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP RIDONDANTE");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TEMP FUORI CONTROLLO");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TEMP PIAT.FUORI CTRL");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("T.CAMERA FUORI CTRL");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("RAFFREDAM.FUORI CTRL");
- PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("Raffreddam. fallito");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MASSIMA");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
- PROGMEM Language_Str MSG_HALTED = _UxGT("STAMPANTE FERMATA");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Riavviare prego");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("g"); // One character
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character
- PROGMEM Language_Str MSG_HEATING = _UxGT("Riscaldamento...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Raffreddamento..");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Risc. piatto...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Raffr. piatto...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Risc. sonda...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Raffr. sonda...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Risc. camera...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Raffr. camera...");
- PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Raffr. laser...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibraz. Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra centro");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Impostaz. Delta");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto calibrazione");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Imp. altezza Delta");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Offset sonda-Z");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonale");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altezza");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Raggio");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Info su stampante");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info. stampante");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Livel. a 3 punti");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Livel. Lineare");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Livel. Bilineare");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Livel.piatto unific.");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Livel. Mesh");
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Sond.mesh eseguito");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statistiche");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. scheda");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Estrusori");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocollo");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Controllo fuga: OFF");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Controllo fuga: ON");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Timeout inatt.ugello");
+ LSTR MSG_MOVING = _UxGT("In movimento...");
+ LSTR MSG_FREE_XY = _UxGT("XY liberi");
+ LSTR MSG_MOVE_X = _UxGT("Muovi X");
+ LSTR MSG_MOVE_Y = _UxGT("Muovi Y");
+ LSTR MSG_MOVE_Z = _UxGT("Muovi Z");
+ LSTR MSG_MOVE_I = _UxGT("Muovi ") LCD_STR_I;
+ LSTR MSG_MOVE_J = _UxGT("Muovi ") LCD_STR_J;
+ LSTR MSG_MOVE_K = _UxGT("Muovi ") LCD_STR_K;
+ LSTR MSG_MOVE_E = _UxGT("Estrusore");
+ LSTR MSG_MOVE_EN = _UxGT("Estrusore *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Ugello freddo");
+ LSTR MSG_MOVE_N_MM = _UxGT("Muovi di %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Muovi di 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Muovi di 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Muovi di 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Muovi di 100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Muovi di 0.001\"");
+ LSTR MSG_MOVE_001IN = _UxGT("Muovi di 0.01\"");
+ LSTR MSG_MOVE_01IN = _UxGT("Muovi di 0.1\"");
+ LSTR MSG_MOVE_1IN = _UxGT("Muovi di 1\"");
+ LSTR MSG_SPEED = _UxGT("Velocità");
+ LSTR MSG_BED_Z = _UxGT("Piatto Z");
+ LSTR MSG_NOZZLE = _UxGT("Ugello");
+ LSTR MSG_NOZZLE_N = _UxGT("Ugello ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Ugello parcheggiato");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Ugello in pausa");
+ LSTR MSG_BED = _UxGT("Piatto");
+ LSTR MSG_CHAMBER = _UxGT("Camera");
+ LSTR MSG_COOLER = _UxGT("Raffreddam. laser");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Alterna raffreddam.");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Sicurezza flusso");
+ LSTR MSG_LASER = _UxGT("Laser");
+ LSTR MSG_FAN_SPEED = _UxGT("Vel. ventola"); // Max 15 characters
+ LSTR MSG_FAN_SPEED_N = _UxGT("Vel. ventola ~"); // Max 15 characters
+ LSTR MSG_STORED_FAN_N = _UxGT("Ventola mem. ~"); // Max 15 characters
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra vel.vent."); // Max 15 characters
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra v.vent. ~"); // Max 15 characters
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Controller vent.");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Vel. inattivo");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Modo autom.");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Vel. attivo");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Tempo inattivo");
+ LSTR MSG_FLOW = _UxGT("Flusso");
+ LSTR MSG_FLOW_N = _UxGT("Flusso ~");
+ LSTR MSG_CONTROL = _UxGT("Controllo");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
+ LSTR MSG_LCD_ON = _UxGT("On");
+ LSTR MSG_LCD_OFF = _UxGT("Off");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("Calibrazione PID");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("Calibraz. PID *");
+ LSTR MSG_PID_CYCLE = _UxGT("Ciclo PID");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Calibr.PID eseguita");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Calibrazione fallita. Estrusore errato.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Calibrazione fallita. Temperatura troppo alta.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Calibrazione fallita! Tempo scaduto.");
+ LSTR MSG_SELECT = _UxGT("Seleziona");
+ LSTR MSG_SELECT_E = _UxGT("Seleziona *");
+ LSTR MSG_ACC = _UxGT("Accel");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-jerk");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-jerk");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-jerk");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-jerk");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-jerk");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-jerk");
+ LSTR MSG_VE_JERK = _UxGT("Ve-jerk");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Deviaz. giunzioni");
+ LSTR MSG_VELOCITY = _UxGT("Velocità");
+ LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Vmax *");
+ LSTR MSG_VMIN = _UxGT("Vmin");
+ LSTR MSG_VTRAV_MIN = _UxGT("VTrav min");
+ LSTR MSG_ACCELERATION = _UxGT("Accelerazione");
+ LSTR MSG_AMAX_A = _UxGT("Max ") LCD_STR_A _UxGT(" Accel");
+ LSTR MSG_AMAX_B = _UxGT("Max ") LCD_STR_B _UxGT(" Accel");
+ LSTR MSG_AMAX_C = _UxGT("Max ") LCD_STR_C _UxGT(" Accel");
+ LSTR MSG_AMAX_I = _UxGT("Max ") LCD_STR_I _UxGT(" Accel");
+ LSTR MSG_AMAX_J = _UxGT("Max ") LCD_STR_J _UxGT(" Accel");
+ LSTR MSG_AMAX_K = _UxGT("Max ") LCD_STR_K _UxGT(" Accel");
+ LSTR MSG_AMAX_E = _UxGT("Max ") LCD_STR_E _UxGT(" Accel");
+ LSTR MSG_AMAX_EN = _UxGT("Max * Accel");
+ LSTR MSG_A_RETRACT = _UxGT("A-Ritrazione");
+ LSTR MSG_A_TRAVEL = _UxGT("A-Spostamento");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequenza max");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Passi/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" passi/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" passi/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" passi/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" passi/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" passi/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" passi/mm");
+ LSTR MSG_E_STEPS = _UxGT("E passi/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* passi/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Movimento");
+ LSTR MSG_FILAMENT = _UxGT("Filamento");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("Limite E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("Limite E *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Diam. filo");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diam. filo *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Rimuovi mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Carica mm");
+ LSTR MSG_ADVANCE_K = _UxGT("K Avanzamento");
+ LSTR MSG_ADVANCE_K_E = _UxGT("K Avanzamento *");
+ LSTR MSG_CONTRAST = _UxGT("Contrasto LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Salva impostazioni");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Carica impostazioni");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Ripristina imp.");
+ LSTR MSG_INIT_EEPROM = _UxGT("Inizializza EEPROM");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Err: CRC EEPROM");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Err: Indice EEPROM");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Err: Versione EEPROM");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Impostazioni mem.");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Aggiorna media");
+ LSTR MSG_RESET_PRINTER = _UxGT("Resetta stampante");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Aggiorna");
+ LSTR MSG_INFO_SCREEN = _UxGT("Schermata info");
+ LSTR MSG_PREPARE = _UxGT("Prepara");
+ LSTR MSG_TUNE = _UxGT("Regola");
+ LSTR MSG_POWER_MONITOR = _UxGT("Controllo aliment.");
+ LSTR MSG_CURRENT = _UxGT("Corrente");
+ LSTR MSG_VOLTAGE = _UxGT("Tensione");
+ LSTR MSG_POWER = _UxGT("Potenza");
+ LSTR MSG_START_PRINT = _UxGT("Avvia stampa");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Prossimo");
+ LSTR MSG_BUTTON_INIT = _UxGT("Inizializza");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stop");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Stampa");
+ LSTR MSG_BUTTON_RESET = _UxGT("Resetta");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignora");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Annulla");
+ LSTR MSG_BUTTON_DONE = _UxGT("Fatto");
+ LSTR MSG_BUTTON_BACK = _UxGT("Indietro");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Procedi");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Salta");
+ LSTR MSG_PAUSING = _UxGT("Messa in pausa...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausa stampa");
+ LSTR MSG_RESUME_PRINT = _UxGT("Riprendi stampa");
+ LSTR MSG_HOST_START_PRINT = _UxGT("Host Avvio");
+ LSTR MSG_STOP_PRINT = _UxGT("Arresta stampa");
+ LSTR MSG_END_LOOPS = _UxGT("Fine cicli di rip.");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Stampa Oggetto");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Cancella Oggetto");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Canc. Oggetto =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Ripresa da PowerLoss");
+ LSTR MSG_MEDIA_MENU = _UxGT("Stampa da media");
+ LSTR MSG_NO_MEDIA = _UxGT("Media non presente");
+ LSTR MSG_DWELL = _UxGT("Sospensione...");
+ LSTR MSG_USERWAIT = _UxGT("Premi tasto..");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Stampa sospesa");
+ LSTR MSG_PRINTING = _UxGT("Stampa...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Stampa Annullata");
+ LSTR MSG_PRINT_DONE = _UxGT("Stampa Eseguita");
+ LSTR MSG_NO_MOVE = _UxGT("Nessun Movimento");
+ LSTR MSG_KILLED = _UxGT("UCCISO. ");
+ LSTR MSG_STOPPED = _UxGT("ARRESTATO. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Ritrai mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Scamb. Ritrai mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Ritrai V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Salta mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Avanza mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Scamb. Avanza mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Avanza V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Scamb. Avanza V");
+ LSTR MSG_AUTORETRACT = _UxGT("AutoRitrai");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Lunghezza scambio");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Extra scambio");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Lunghezza spurgo");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Cambio utensile");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Risalita Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Velocità innesco");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Velocità ritrazione");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Parcheggia testa");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Velocità ventola");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Tempo ventola");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Migrazione utensile");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migrazione");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Ultimo estrusore");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migra a *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Cambia filamento");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Cambia filam. *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Carica filamento");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Carica filamento *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Rimuovi filamento");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Rimuovi filam. *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Rimuovi tutto");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Collega media");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Cambia media");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Rilascia media");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z probe fuori piatto");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Fattore distorsione");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Autotest BLTouch");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Resetta BLTouch");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Estendi BLTouch");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("BLTouch modo SW");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("BLTouch modo 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("BLTouch modo OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("BLTouch modo mem.");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Metti BLTouch a 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Metti BLTouch a OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Segnala modo");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("PERICOLO: impostazioni errate possono cause danni! Procedo comunque?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Inizializ.TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z offset");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Memorizzare");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Estendi TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Estendi Sonda-Z");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Ritrai BLTouch");
+ LSTR MSG_MANUAL_STOW = _UxGT("Ritrai Sonda-Z");
+ LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s prima");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Offsets sonda");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Offset X sonda");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Offset Y sonda");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z sonda");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Muovi ugel.su letto");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
+ LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
+ LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Totali");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Interrompi se FC");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Risc.Fallito"); // Max 12 characters
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: TEMP RIDONDANTE");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("TEMP FUORI CONTROLLO");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TEMP PIAT.FUORI CTRL");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("T.CAMERA FUORI CTRL");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("RAFFREDAM.FUORI CTRL");
+ LSTR MSG_COOLING_FAILED = _UxGT("Raffreddam. fallito");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err: TEMP MASSIMA");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err: TEMP MINIMA");
+ LSTR MSG_HALTED = _UxGT("STAMPANTE FERMATA");
+ LSTR MSG_PLEASE_RESET = _UxGT("Riavviare prego");
+ LSTR MSG_SHORT_DAY = _UxGT("g"); // One character
+ LSTR MSG_SHORT_HOUR = _UxGT("h"); // One character
+ LSTR MSG_SHORT_MINUTE = _UxGT("m"); // One character
+ LSTR MSG_HEATING = _UxGT("Riscaldamento...");
+ LSTR MSG_COOLING = _UxGT("Raffreddamento..");
+ LSTR MSG_BED_HEATING = _UxGT("Risc. piatto...");
+ LSTR MSG_BED_COOLING = _UxGT("Raffr. piatto...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Risc. sonda...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Raffr. sonda...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Risc. camera...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Raffr. camera...");
+ LSTR MSG_LASER_COOLING = _UxGT("Raffr. laser...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibraz. Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibra X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibra Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibra Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibra centro");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Impostaz. Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto calibrazione");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Imp. altezza Delta");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Offset sonda-Z");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Barra Diagonale");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Altezza");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Raggio");
+ LSTR MSG_INFO_MENU = _UxGT("Info su stampante");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info. stampante");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Livel. a 3 punti");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Livel. Lineare");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Livel. Bilineare");
+ LSTR MSG_UBL_LEVELING = _UxGT("Livel.piatto unific.");
+ LSTR MSG_MESH_LEVELING = _UxGT("Livel. Mesh");
+ LSTR MSG_MESH_DONE = _UxGT("Sond.mesh eseguito");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Statistiche");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. scheda");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistori");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Estrusori");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocollo");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Controllo fuga: OFF");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Controllo fuga: ON");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Timeout inatt.ugello");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luci Case");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosità Luci");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("STAMPANTE ERRATA");
+ LSTR MSG_CASE_LIGHT = _UxGT("Luci Case");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Luminosità Luci");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("STAMPANTE ERRATA");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Contat. stampa");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completati");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo totale");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Lavoro più lungo");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Totale estruso");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Contat. stampa");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completati");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo totale");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Lavoro più lungo");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Totale estruso");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Stampe");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completati");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Durata");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Più lungo");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Estruso");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Stampe");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completati");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Durata");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Più lungo");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Estruso");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp min");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp max");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Alimentatore");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Potenza Drive");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = _UxGT("Driver ") LCD_STR_A _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = _UxGT("Driver ") LCD_STR_B _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = _UxGT("Driver ") LCD_STR_C _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = _UxGT("Driver ") LCD_STR_I _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = _UxGT("Driver ") LCD_STR_J _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = _UxGT("Driver ") LCD_STR_K _UxGT(" %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("Driver E %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ERR.CONNESSIONE TMC");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Scrivi DAC EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIO FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("STAMPA IN PAUSA");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARICA FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("RIMUOVI FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPZIONI RIPRESA:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Spurga di più");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Riprendi stampa");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Ugello: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sens.filo termin."); // Max 17 characters
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm filo term.");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Home fallito");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondaggio fallito");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp min");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp max");
+ LSTR MSG_INFO_PSU = _UxGT("Alimentatore");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Potenza Drive");
+ LSTR MSG_DAC_PERCENT_A = _UxGT("Driver ") LCD_STR_A _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_B = _UxGT("Driver ") LCD_STR_B _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_C = _UxGT("Driver ") LCD_STR_C _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_I = _UxGT("Driver ") LCD_STR_I _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_J = _UxGT("Driver ") LCD_STR_J _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_K = _UxGT("Driver ") LCD_STR_K _UxGT(" %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("Driver E %");
+ LSTR MSG_ERROR_TMC = _UxGT("ERR.CONNESSIONE TMC");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Scrivi DAC EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("CAMBIO FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("STAMPA IN PAUSA");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARICA FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("RIMUOVI FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPZIONI RIPRESA:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Spurga di più");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Riprendi stampa");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Ugello: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Sens.filo termin."); // Max 17 characters
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dist mm filo term.");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Home fallito");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondaggio fallito");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("SCELTA FILAMENTO");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Agg.firmware MMU!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU chiede attenz.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("MMU riprendi");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("MMU ripresa...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU carica");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("MMU carica tutto");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Carica fino ugello");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU espelli");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU espelli ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU scarica");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Caric.fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Esplus.filam. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Scaric.filam. ...");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Tutto");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Azzera MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Azzeramento MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Rimuovi, click");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("SCELTA FILAMENTO");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Agg.firmware MMU!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU chiede attenz.");
+ LSTR MSG_MMU2_RESUME = _UxGT("MMU riprendi");
+ LSTR MSG_MMU2_RESUMING = _UxGT("MMU ripresa...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU carica");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU carica tutto");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Carica fino ugello");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU espelli");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU espelli ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU scarica");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Caric.fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Esplus.filam. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Scaric.filam. ...");
+ LSTR MSG_MMU2_ALL = _UxGT("Tutto");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Azzera MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Azzeramento MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Rimuovi, click");
- PROGMEM Language_Str MSG_MIX = _UxGT("Miscela");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Componente =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Miscelatore");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradiente");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Gradiente pieno");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Alterna miscela");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Ciclo miscela");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Miscela gradiente");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Inverti gradiente");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("V-tool attivo");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("V-tool iniziale");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("V-tool finale");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("V-tool alias");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Ripristina V-tools");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit mix V-tool");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools ripristin.");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Z inizio:");
- PROGMEM Language_Str MSG_END_Z = _UxGT("Z fine:");
+ LSTR MSG_MIX = _UxGT("Miscela");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Componente =");
+ LSTR MSG_MIXER = _UxGT("Miscelatore");
+ LSTR MSG_GRADIENT = _UxGT("Gradiente");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Gradiente pieno");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Alterna miscela");
+ LSTR MSG_CYCLE_MIX = _UxGT("Ciclo miscela");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Miscela gradiente");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Inverti gradiente");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("V-tool attivo");
+ LSTR MSG_START_VTOOL = _UxGT("V-tool iniziale");
+ LSTR MSG_END_VTOOL = _UxGT("V-tool finale");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("V-tool alias");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Ripristina V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Commit mix V-tool");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools ripristin.");
+ LSTR MSG_START_Z = _UxGT("Z inizio:");
+ LSTR MSG_END_Z = _UxGT("Z fine:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Giochi");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_GAMES = _UxGT("Giochi");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Indice pag. errato");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Vel. pag. errata");
+ LSTR MSG_BAD_PAGE = _UxGT("Indice pag. errato");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Vel. pag. errata");
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Modif.password");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Login richiesto");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Impostaz.password");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Inserisci cifra");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Imp./Modif.password");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Elimina password");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("La password è ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Ricominciare");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Ricordati di mem.!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Password eliminata");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Modif.password");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Login richiesto");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Impostaz.password");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Inserisci cifra");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Imp./Modif.password");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Elimina password");
+ LSTR MSG_PASSWORD_SET = _UxGT("La password è ");
+ LSTR MSG_START_OVER = _UxGT("Ricominciare");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Ricordati di mem.!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Password eliminata");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Premi per", "riprendere", "la stampa"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcheggiando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Attendere avvio", "del cambio", "di filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserisci il", "filamento e premi", "per continuare"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premi per", "riscaldare ugello"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Riscaldam. ugello", "Attendere prego..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Attendere", "l'espulsione", "del filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Attendere", "il caricamento", "del filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Attendere", "lo spurgo", "del filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Premi x terminare", "lo spurgo", "del filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Attendere", "la ripresa", "della stampa..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Premi per", "riprendere", "la stampa"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcheggiando..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Attendere avvio", "del cambio", "di filamento"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Inserisci il", "filamento e premi", "per continuare"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Premi per", "riscaldare ugello"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Riscaldam. ugello", "Attendere prego..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Attendere", "l'espulsione", "del filamento"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Attendere", "il caricamento", "del filamento"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Attendere", "lo spurgo", "del filamento"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Premi x terminare", "lo spurgo", "del filamento"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Attendere", "la ripresa", "della stampa..."));
#else // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premi x continuare"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Attendere..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserisci e premi"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Riscalda ugello"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Riscaldamento..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Espulsione..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Caricamento..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Spurgo filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Premi x terminare"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Ripresa..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Premi x continuare"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Attendere..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Inserisci e premi"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Riscalda ugello"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Riscaldamento..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Espulsione..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Caricamento..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Spurgo filamento"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Premi x terminare"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Ripresa..."));
#endif // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Driver TMC");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Correnti driver");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Soglia modo ibrido");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorless homing");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stealthchop");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("Stealthchop");
+ LSTR MSG_TMC_DRIVERS = _UxGT("Driver TMC");
+ LSTR MSG_TMC_CURRENT = _UxGT("Correnti driver");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Soglia modo ibrido");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorless homing");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stealthchop");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Stealthchop");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Resetta");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" tra:");
+ LSTR MSG_SERVICE_RESET = _UxGT("Resetta");
+ LSTR MSG_SERVICE_IN = _UxGT(" tra:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Gioco");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Correzione");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Appianamento");
+ LSTR MSG_BACKLASH = _UxGT("Gioco");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Correzione");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Appianamento");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Livello asse X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibra");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Livello asse X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibra");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Timeout inattività, temperatura diminuita. Premere OK per riscaldare e riprendere di nuovo.");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Timeout inattività, temperatura diminuita. Premere OK per riscaldare e riprendere di nuovo.");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Timeout riscaldatore");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Timeout riscaldatore");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Riscalda");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Riscaldando...");
- PROGMEM Language_Str MSG_REHEATDONE = _UxGT("Riscaldato");
+ LSTR MSG_REHEAT = _UxGT("Riscalda");
+ LSTR MSG_REHEATING = _UxGT("Riscaldando...");
+ LSTR MSG_REHEATDONE = _UxGT("Riscaldato");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Wizard Z offset");
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Altezza di riferimento sonda");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Spostati in posizione di rilevazione");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Wizard Z offset");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Altezza di riferimento sonda");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Spostati in posizione di rilevazione");
- PROGMEM Language_Str MSG_SOUND = _UxGT("Suoni");
+ LSTR MSG_SOUND = _UxGT("Suoni");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Alto sinistra");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Basso sinistra");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Alto destra");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Basso destra");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Calibrazione completata");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Calibrazione fallita");
+ LSTR MSG_TOP_LEFT = _UxGT("Alto sinistra");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Basso sinistra");
+ LSTR MSG_TOP_RIGHT = _UxGT("Alto destra");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Basso destra");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibrazione completata");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibrazione fallita");
- PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" driver invertito");
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" driver invertito");
- PROGMEM Language_Str MSG_SD_CARD = _UxGT("Scheda SD");
- PROGMEM Language_Str MSG_USB_DISK = _UxGT("Disco USB");
+ LSTR MSG_SD_CARD = _UxGT("Scheda SD");
+ LSTR MSG_USB_DISK = _UxGT("Disco USB");
}
diff --git a/Marlin/src/lcd/language/language_jp_kana.h b/Marlin/src/lcd/language/language_jp_kana.h
index c0fe2451b0..1d291ed3ad 100644
--- a/Marlin/src/lcd/language/language_jp_kana.h
+++ b/Marlin/src/lcd/language/language_jp_kana.h
@@ -34,229 +34,226 @@
namespace Language_jp_kana {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 3;
- PROGMEM Language_Str LANGUAGE = _UxGT("Japanese");
+ constexpr uint8_t CHARSIZE = 3;
+ LSTR LANGUAGE = _UxGT("Japanese");
// This is just to show the potential benefit of Unicode.
// This translation can be improved by using the full charset of unicode codeblock U+30A0 to U+30FF.
// 片仮名表示定義
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" ジュンビカンリョウ");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("メディアガソウニュウサレマシタ"); // "Card inserted"
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("メディアガアリマセン"); // "Card removed"
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("メディアノトリダシ");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("エンドストップ"); // "Endstops" // Max length 8 characters
- PROGMEM Language_Str MSG_MAIN = _UxGT("メイン"); // "Main"
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("ジドウカイシ"); // "Autostart"
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("モーターデンゲン オフ"); // "Disable steppers"
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("デバッグメニュー"); // "Debug Menu"
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("プログレスバー テスト"); // "Progress Bar Test"
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("ゲンテンフッキ"); // "Auto home"
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Xジク ゲンテンフッキ"); // "Home X"
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Yジク ゲンテンフッキ"); // "Home Y"
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Zジク ゲンテンフッキ"); // "Home Z"
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("ゲンテンフッキチュウ"); // "Homing XYZ"
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("レベリングカイシ"); // "Click to Begin"
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("ツギノソクテイテンヘ"); // "Next Point"
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("レベリングカンリョウ"); // "Leveling Done!"
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("キジュンオフセットセッテイ"); // "Set home offsets"
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("オフセットガテキヨウサレマシタ"); // "Offsets applied"
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("キジュンセット"); // "Set origin"
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" ジュンビカンリョウ");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("メディアガソウニュウサレマシタ"); // "Card inserted"
+ LSTR MSG_MEDIA_REMOVED = _UxGT("メディアガアリマセン"); // "Card removed"
+ LSTR MSG_RELEASE_MEDIA = _UxGT("メディアノトリダシ");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("エンドストップ"); // "Endstops" // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("メイン"); // "Main"
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("ジドウカイシ"); // "Autostart"
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("モーターデンゲン オフ"); // "Disable steppers"
+ LSTR MSG_DEBUG_MENU = _UxGT("デバッグメニュー"); // "Debug Menu"
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("プログレスバー テスト"); // "Progress Bar Test"
+ LSTR MSG_AUTO_HOME = _UxGT("ゲンテンフッキ"); // "Auto home"
+ LSTR MSG_AUTO_HOME_X = _UxGT("Xジク ゲンテンフッキ"); // "Home X"
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Yジク ゲンテンフッキ"); // "Home Y"
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Zジク ゲンテンフッキ"); // "Home Z"
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("ゲンテンフッキチュウ"); // "Homing XYZ"
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("レベリングカイシ"); // "Click to Begin"
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("ツギノソクテイテンヘ"); // "Next Point"
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("レベリングカンリョウ"); // "Leveling Done!"
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("キジュンオフセットセッテイ"); // "Set home offsets"
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("オフセットガテキヨウサレマシタ"); // "Offsets applied"
+ LSTR MSG_SET_ORIGIN = _UxGT("キジュンセット"); // "Set origin"
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" ヨネツ"); // "Preheat " PREHEAT_1_LABEL
- PROGMEM Language_Str MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" ヨネツ ~"); // "Preheat " PREHEAT_1_LABEL
- PROGMEM Language_Str MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" ヨネツノズル"); // " Nozzle"
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ~"); // " Nozzle"
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" スベテヨネツ"); // " All"
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" ベッドヨネツ"); // " Bed"
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" ヨネツセッテイ"); // " conf"
+ LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" ヨネツ"); // "Preheat " PREHEAT_1_LABEL
+ LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" ヨネツ ~"); // "Preheat " PREHEAT_1_LABEL
+ LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" ヨネツノズル"); // " Nozzle"
+ LSTR MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" ヨネツノズル ~"); // " Nozzle"
+ LSTR MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" スベテヨネツ"); // " All"
+ LSTR MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" ベッドヨネツ"); // " Bed"
+ LSTR MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" ヨネツセッテイ"); // " conf"
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("$ ヨネツ"); // "Preheat " PREHEAT_1_LABEL
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("$ ヨネツ ~"); // "Preheat " PREHEAT_1_LABEL
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("$ ヨネツノズル"); // " Nozzle"
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("$ ヨネツノズル ~"); // " Nozzle"
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("$ スベテヨネツ"); // " All"
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("$ ベッドヨネツ"); // " Bed"
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("$ ヨネツセッテイ"); // " conf"
+ LSTR MSG_PREHEAT_M = _UxGT("$ ヨネツ"); // "Preheat " PREHEAT_1_LABEL
+ LSTR MSG_PREHEAT_M_H = _UxGT("$ ヨネツ ~"); // "Preheat " PREHEAT_1_LABEL
+ LSTR MSG_PREHEAT_M_END = _UxGT("$ ヨネツノズル"); // " Nozzle"
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("$ ヨネツノズル ~"); // " Nozzle"
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("$ スベテヨネツ"); // " All"
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("$ ベッドヨネツ"); // " Bed"
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("$ ヨネツセッテイ"); // " conf"
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("カネツテイシ"); // "Cooldown"
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("デンゲン オン"); // "Switch power on"
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("デンゲン オフ"); // "Switch power off"
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("オシダシ"); // "Extrude"
- PROGMEM Language_Str MSG_RETRACT = _UxGT("ヒキコミセッテイ"); // "Retract"
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("ジクイドウ"); // "Move axis"
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("ベッドレベリング"); // "Bed leveling"
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("ベッドレベリング"); // "Level bed"
+ LSTR MSG_COOLDOWN = _UxGT("カネツテイシ"); // "Cooldown"
+ LSTR MSG_SWITCH_PS_ON = _UxGT("デンゲン オン"); // "Switch power on"
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("デンゲン オフ"); // "Switch power off"
+ LSTR MSG_EXTRUDE = _UxGT("オシダシ"); // "Extrude"
+ LSTR MSG_RETRACT = _UxGT("ヒキコミセッテイ"); // "Retract"
+ LSTR MSG_MOVE_AXIS = _UxGT("ジクイドウ"); // "Move axis"
+ LSTR MSG_BED_LEVELING = _UxGT("ベッドレベリング"); // "Bed leveling"
+ LSTR MSG_LEVEL_BED = _UxGT("ベッドレベリング"); // "Level bed"
- PROGMEM Language_Str MSG_MOVING = _UxGT("イドウチュウ"); // "Moving..."
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("XYジク カイホウ"); // "Free XY"
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Xジク イドウ"); // "Move X"
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Yジク イドウ"); // "Move Y"
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Zジク イドウ"); // "Move Z"
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("エクストルーダー"); // "Extruder"
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("%smm イドウ"); // "Move 0.025mm"
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("0.1mm イドウ"); // "Move 0.1mm"
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT(" 1mm イドウ"); // "Move 1mm"
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT(" 10mm イドウ"); // "Move 10mm"
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT(" 100mm イドウ"); // "Move 100mm"
- PROGMEM Language_Str MSG_SPEED = _UxGT("ソクド"); // "Speed"
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Zオフセット"); // "Bed Z"
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("ノズル"); // "Nozzle"
- PROGMEM Language_Str MSG_BED = _UxGT("ベッド"); // "Bed"
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("ファンソクド"); // "Fan speed"
- PROGMEM Language_Str MSG_FLOW = _UxGT("トシュツリョウ"); // "Flow"
- PROGMEM Language_Str MSG_CONTROL = _UxGT("セイギョ"); // "Control"
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" サイテイ"); // " Min"
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" サイコウ"); // " Max"
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" ファクター"); // " Fact"
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("ジドウオンドセイギョ"); // "Autotemp"
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("オン"); // "On"
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("オフ"); // "Off"
- PROGMEM Language_Str MSG_SELECT = _UxGT("センタク"); // "Select"
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("センタク *");
- PROGMEM Language_Str MSG_ACC = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel"
- PROGMEM Language_Str MSG_JERK = _UxGT("ヤクドウ mm/s"); // "Jerk"
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_A; // "Va-jerk"
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_B; // "Vb-jerk"
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_C; // "Vc-jerk"
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_I; // "Va-jerk"
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_J; // "Vb-jerk"
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_K; // "Vc-jerk"
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT("ステップ/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT("ステップ/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT("ステップ/mm");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("エクストルーダー ヤクド"); // "Ve-jerk"
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("サイダイオクリソクド ") LCD_STR_A; // "Vmax A"
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("サイダイオクリソクド ") LCD_STR_B; // "Vmax B"
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("サイダイオクリソクド ") LCD_STR_C; // "Vmax C"
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("サイダイオクリソクド ") LCD_STR_I; // "Vmax I"
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("サイダイオクリソクド ") LCD_STR_J; // "Vmax J"
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("サイダイオクリソクド ") LCD_STR_K; // "Vmax K"
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("サイダイオクリソクド ") LCD_STR_E; // "Vmax E"
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("サイダイオクリソクド *"); // "Vmax E1"
- PROGMEM Language_Str MSG_VMIN = _UxGT("サイショウオクリソクド"); // "Vmin"
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("サイショウイドウソクド"); // "VTrav min"
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel"
- PROGMEM Language_Str MSG_AMAX = _UxGT("サイダイカソクド "); // "Amax "
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("ヒキコミカソクド"); // "A-retract"
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("イドウカソクド"); // "A-travel"
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("オンド"); // "Temperature"
- PROGMEM Language_Str MSG_MOTION = _UxGT("ウゴキセッテイ"); // "Motion"
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("フィラメント"); // "Filament"
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("フィラメントチョッケイ"); // "Fil. Dia."
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("フィラメントチョッケイ *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCDコントラスト"); // "LCD contrast"
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("EEPROMヘホゾン"); // "Store memory"
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("EEPROMカラヨミコミ"); // "Load memory"
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("セッテイリセット"); // "Restore Defaults"
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("リフレッシュ"); // "Refresh"
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("ジョウホウガメン"); // "Info screen"
- PROGMEM Language_Str MSG_PREPARE = _UxGT("ジュンビセッテイ"); // "Prepare"
- PROGMEM Language_Str MSG_TUNE = _UxGT("チョウセイ"); // "Tune"
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("イチジテイシ"); // "Pause print"
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("プリントサイカイ"); // "Resume print"
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("プリントテイシ"); // "Stop print"
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("メディアカラプリント"); // "Print from SD"
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("メディアガアリマセン"); // "Card removed"
- PROGMEM Language_Str MSG_DWELL = _UxGT("キュウシ"); // "Sleep..."
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("ツヅケルニハクリックシテクダサイ"); // "Wait for user..."
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("プリントガチュウシサレマシタ"); // "Print aborted"
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("ウゴキマセン"); // "No move."
- PROGMEM Language_Str MSG_KILLED = _UxGT("ヒジョウテイシ"); // "KILLED. "
- PROGMEM Language_Str MSG_STOPPED = _UxGT("テイシシマシタ"); // "STOPPED. "
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("ヒキコミリョウ mm"); // "Retract mm"
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("ヒキコミリョウS mm"); // "Swap Re.mm"
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("ヒキコミソクド mm/s"); // "Retract V"
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("ノズルタイヒ mm"); // "Hop mm"
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("ホショウリョウ mm"); // "Unretr. mm"
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("ホショウリョウS mm"); // "S Unretr. mm"
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("ホショウソクド mm/s"); // "Unretract V"
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("ジドウヒキコミ"); // "Auto-Retract"
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("フィラメントコウカン"); // "Change filament"
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("メディアサイヨミコミ"); // "Init. SD card"
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("メディアコウカン"); // "Change SD card"
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Zプローブ ベッドガイ"); // "Z probe out. bed"
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch ジコシンダン"); // "BLTouch Self-Test"
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("BLTouch リセット"); // "Reset BLTouch"
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ"); // "Home ... first"
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Zオフセット"); // "Z Offset"
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Xジク ビドウ"); // "Babystep X"
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Yジク ビドウ"); // "Babystep Y"
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Zジク ビドウ"); // "Babystep Z"
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("イドウゲンカイケンチキノウ"); // "Endstop abort"
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("カネツシッパイ"); // "Heating failed"
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("エラー:ジョウチョウサーミスターキノウ"); // "Err: REDUNDANT TEMP"
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ネツボウソウ"); // "THERMAL RUNAWAY"
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("エラー:サイコウオンチョウカ"); // "Err: MAXTEMP"
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("エラー:サイテイオンミマン"); // "Err: MINTEMP"
- PROGMEM Language_Str MSG_HALTED = _UxGT("プリンターハテイシシマシタ"); // "PRINTER HALTED"
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("リセットシテクダサイ"); // "Please reset"
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("カネツチュウ"); // "Heating..."
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("ベッド カネツチュウ"); // "Bed Heating..."
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("デルタ コウセイ"); // "Delta Calibration"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Xジク コウセイ"); // "Calibrate X"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Yジク コウセイ"); // "Calibrate Y"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Zジク コウセイ"); // "Calibrate Z"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("チュウシン コウセイ"); // "Calibrate Center"
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("コノプリンターニツイテ"); // "About Printer"
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("プリンタージョウホウ"); // "Printer Info"
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("プリントジョウキョウ"); // "Printer Stats"
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("セイギョケイジョウホウ"); // "Board Info"
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("サーミスター"); // "Thermistors"
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("エクストルーダースウ"); // "Extruders"
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("ボーレート"); // "Baud"
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("プロトコル"); // "Protocol"
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("キョウタイナイショウメイ"); // "Case light"
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("プリントスウ "); // "Print Count"
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("カンリョウスウ"); // "Completed"
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("プリントジカンルイケイ"); // "Total print time"
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("サイチョウプリントジカン"); // "Longest job time"
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("フィラメントシヨウリョウルイケイ"); // "Extruded total"
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("セッテイサイテイオン"); // "Min Temp"
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("セッテイサイコウオン"); // "Max Temp"
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("デンゲンシュベツ"); // "Power Supply"
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("モータークドウリョク"); // "Drive Strength"
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" DACシュツリョク %"); // "X Driver %"
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" DACシュツリョク %"); // "Y Driver %"
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" DACシュツリョク %"); // "Z Driver %"
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" DACシュツリョク %"); // "I Driver %"
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" DACシュツリョク %"); // "J Driver %"
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" DACシュツリョク %"); // "K Driver %"
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E DACシュツリョク %"); // "E Driver %"
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("EEPROMヘホゾン"); // "Store memory"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("イチジテイシ");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("プリントサイカイ"); // "Resume print"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("コウカンヲカイシシマス", "シバラクオマチクダサイ")); // "Wait for start of the filament"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("フィラメントヌキダシチュウ", "シバラクオマチクダサイ")); // "Wait for filament unload"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("フィラメントヲソウニュウシ,", "クリックスルトゾッコウシマス")); // "Insert filament and press button"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("フィラメントソウテンチュウ", "シバラクオマチクダサイ")); // "Wait for filament load"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("プリントヲサイカイシマス", "シバラクオマチクダサイ")); // "Wait for print to resume"
+ LSTR MSG_MOVING = _UxGT("イドウチュウ"); // "Moving..."
+ LSTR MSG_FREE_XY = _UxGT("XYジク カイホウ"); // "Free XY"
+ LSTR MSG_MOVE_X = _UxGT("Xジク イドウ"); // "Move X"
+ LSTR MSG_MOVE_Y = _UxGT("Yジク イドウ"); // "Move Y"
+ LSTR MSG_MOVE_Z = _UxGT("Zジク イドウ"); // "Move Z"
+ LSTR MSG_MOVE_E = _UxGT("エクストルーダー"); // "Extruder"
+ LSTR MSG_MOVE_N_MM = _UxGT("%smm イドウ"); // "Move 0.025mm"
+ LSTR MSG_MOVE_01MM = _UxGT("0.1mm イドウ"); // "Move 0.1mm"
+ LSTR MSG_MOVE_1MM = _UxGT(" 1mm イドウ"); // "Move 1mm"
+ LSTR MSG_MOVE_10MM = _UxGT(" 10mm イドウ"); // "Move 10mm"
+ LSTR MSG_MOVE_100MM = _UxGT(" 100mm イドウ"); // "Move 100mm"
+ LSTR MSG_SPEED = _UxGT("ソクド"); // "Speed"
+ LSTR MSG_BED_Z = _UxGT("Zオフセット"); // "Bed Z"
+ LSTR MSG_NOZZLE = _UxGT("ノズル"); // "Nozzle"
+ LSTR MSG_BED = _UxGT("ベッド"); // "Bed"
+ LSTR MSG_FAN_SPEED = _UxGT("ファンソクド"); // "Fan speed"
+ LSTR MSG_FLOW = _UxGT("トシュツリョウ"); // "Flow"
+ LSTR MSG_CONTROL = _UxGT("セイギョ"); // "Control"
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" サイテイ"); // " Min"
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" サイコウ"); // " Max"
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" ファクター"); // " Fact"
+ LSTR MSG_AUTOTEMP = _UxGT("ジドウオンドセイギョ"); // "Autotemp"
+ LSTR MSG_LCD_ON = _UxGT("オン"); // "On"
+ LSTR MSG_LCD_OFF = _UxGT("オフ"); // "Off"
+ LSTR MSG_SELECT = _UxGT("センタク"); // "Select"
+ LSTR MSG_SELECT_E = _UxGT("センタク *");
+ LSTR MSG_ACC = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel"
+ LSTR MSG_JERK = _UxGT("ヤクドウ mm/s"); // "Jerk"
+ LSTR MSG_VA_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_A; // "Va-jerk"
+ LSTR MSG_VB_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_B; // "Vb-jerk"
+ LSTR MSG_VC_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_C; // "Vc-jerk"
+ LSTR MSG_VI_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_I; // "Va-jerk"
+ LSTR MSG_VJ_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_J; // "Vb-jerk"
+ LSTR MSG_VK_JERK = _UxGT("ジク ヤクドウ mm/s") LCD_STR_K; // "Vc-jerk"
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT("ステップ/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT("ステップ/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT("ステップ/mm");
+ LSTR MSG_VE_JERK = _UxGT("エクストルーダー ヤクド"); // "Ve-jerk"
+ LSTR MSG_VMAX_A = _UxGT("サイダイオクリソクド ") LCD_STR_A; // "Vmax A"
+ LSTR MSG_VMAX_B = _UxGT("サイダイオクリソクド ") LCD_STR_B; // "Vmax B"
+ LSTR MSG_VMAX_C = _UxGT("サイダイオクリソクド ") LCD_STR_C; // "Vmax C"
+ LSTR MSG_VMAX_I = _UxGT("サイダイオクリソクド ") LCD_STR_I; // "Vmax I"
+ LSTR MSG_VMAX_J = _UxGT("サイダイオクリソクド ") LCD_STR_J; // "Vmax J"
+ LSTR MSG_VMAX_K = _UxGT("サイダイオクリソクド ") LCD_STR_K; // "Vmax K"
+ LSTR MSG_VMAX_E = _UxGT("サイダイオクリソクド ") LCD_STR_E; // "Vmax E"
+ LSTR MSG_VMAX_EN = _UxGT("サイダイオクリソクド *"); // "Vmax E1"
+ LSTR MSG_VMIN = _UxGT("サイショウオクリソクド"); // "Vmin"
+ LSTR MSG_VTRAV_MIN = _UxGT("サイショウイドウソクド"); // "VTrav min"
+ LSTR MSG_ACCELERATION = _UxGT("カソクド mm/s") SUPERSCRIPT_TWO; // "Accel"
+ LSTR MSG_AMAX = _UxGT("サイダイカソクド "); // "Amax "
+ LSTR MSG_A_RETRACT = _UxGT("ヒキコミカソクド"); // "A-retract"
+ LSTR MSG_A_TRAVEL = _UxGT("イドウカソクド"); // "A-travel"
+ LSTR MSG_TEMPERATURE = _UxGT("オンド"); // "Temperature"
+ LSTR MSG_MOTION = _UxGT("ウゴキセッテイ"); // "Motion"
+ LSTR MSG_FILAMENT = _UxGT("フィラメント"); // "Filament"
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("フィラメントチョッケイ"); // "Fil. Dia."
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("フィラメントチョッケイ *");
+ LSTR MSG_CONTRAST = _UxGT("LCDコントラスト"); // "LCD contrast"
+ LSTR MSG_STORE_EEPROM = _UxGT("EEPROMヘホゾン"); // "Store memory"
+ LSTR MSG_LOAD_EEPROM = _UxGT("EEPROMカラヨミコミ"); // "Load memory"
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("セッテイリセット"); // "Restore Defaults"
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("リフレッシュ"); // "Refresh"
+ LSTR MSG_INFO_SCREEN = _UxGT("ジョウホウガメン"); // "Info screen"
+ LSTR MSG_PREPARE = _UxGT("ジュンビセッテイ"); // "Prepare"
+ LSTR MSG_TUNE = _UxGT("チョウセイ"); // "Tune"
+ LSTR MSG_PAUSE_PRINT = _UxGT("イチジテイシ"); // "Pause print"
+ LSTR MSG_RESUME_PRINT = _UxGT("プリントサイカイ"); // "Resume print"
+ LSTR MSG_STOP_PRINT = _UxGT("プリントテイシ"); // "Stop print"
+ LSTR MSG_MEDIA_MENU = _UxGT("メディアカラプリント"); // "Print from SD"
+ LSTR MSG_NO_MEDIA = _UxGT("メディアガアリマセン"); // "Card removed"
+ LSTR MSG_DWELL = _UxGT("キュウシ"); // "Sleep..."
+ LSTR MSG_USERWAIT = _UxGT("ツヅケルニハクリックシテクダサイ"); // "Wait for user..."
+ LSTR MSG_PRINT_ABORTED = _UxGT("プリントガチュウシサレマシタ"); // "Print aborted"
+ LSTR MSG_NO_MOVE = _UxGT("ウゴキマセン"); // "No move."
+ LSTR MSG_KILLED = _UxGT("ヒジョウテイシ"); // "KILLED. "
+ LSTR MSG_STOPPED = _UxGT("テイシシマシタ"); // "STOPPED. "
+ LSTR MSG_CONTROL_RETRACT = _UxGT("ヒキコミリョウ mm"); // "Retract mm"
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("ヒキコミリョウS mm"); // "Swap Re.mm"
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("ヒキコミソクド mm/s"); // "Retract V"
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("ノズルタイヒ mm"); // "Hop mm"
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("ホショウリョウ mm"); // "Unretr. mm"
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("ホショウリョウS mm"); // "S Unretr. mm"
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("ホショウソクド mm/s"); // "Unretract V"
+ LSTR MSG_AUTORETRACT = _UxGT("ジドウヒキコミ"); // "Auto-Retract"
+ LSTR MSG_FILAMENTCHANGE = _UxGT("フィラメントコウカン"); // "Change filament"
+ LSTR MSG_ATTACH_MEDIA = _UxGT("メディアサイヨミコミ"); // "Init. SD card"
+ LSTR MSG_CHANGE_MEDIA = _UxGT("メディアコウカン"); // "Change SD card"
+ LSTR MSG_ZPROBE_OUT = _UxGT("Zプローブ ベッドガイ"); // "Z probe out. bed"
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch ジコシンダン"); // "BLTouch Self-Test"
+ LSTR MSG_BLTOUCH_RESET = _UxGT("BLTouch リセット"); // "Reset BLTouch"
+ LSTR MSG_HOME_FIRST = _UxGT("サキニ %s%s%s ヲフッキサセテクダサイ"); // "Home ... first"
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Zオフセット"); // "Z Offset"
+ LSTR MSG_BABYSTEP_X = _UxGT("Xジク ビドウ"); // "Babystep X"
+ LSTR MSG_BABYSTEP_Y = _UxGT("Yジク ビドウ"); // "Babystep Y"
+ LSTR MSG_BABYSTEP_Z = _UxGT("Zジク ビドウ"); // "Babystep Z"
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("イドウゲンカイケンチキノウ"); // "Endstop abort"
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("カネツシッパイ"); // "Heating failed"
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("エラー:ジョウチョウサーミスターキノウ"); // "Err: REDUNDANT TEMP"
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("ネツボウソウ"); // "THERMAL RUNAWAY"
+ LSTR MSG_ERR_MAXTEMP = _UxGT("エラー:サイコウオンチョウカ"); // "Err: MAXTEMP"
+ LSTR MSG_ERR_MINTEMP = _UxGT("エラー:サイテイオンミマン"); // "Err: MINTEMP"
+ LSTR MSG_HALTED = _UxGT("プリンターハテイシシマシタ"); // "PRINTER HALTED"
+ LSTR MSG_PLEASE_RESET = _UxGT("リセットシテクダサイ"); // "Please reset"
+ LSTR MSG_HEATING = _UxGT("カネツチュウ"); // "Heating..."
+ LSTR MSG_BED_HEATING = _UxGT("ベッド カネツチュウ"); // "Bed Heating..."
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("デルタ コウセイ"); // "Delta Calibration"
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Xジク コウセイ"); // "Calibrate X"
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Yジク コウセイ"); // "Calibrate Y"
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Zジク コウセイ"); // "Calibrate Z"
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("チュウシン コウセイ"); // "Calibrate Center"
+ LSTR MSG_INFO_MENU = _UxGT("コノプリンターニツイテ"); // "About Printer"
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("プリンタージョウホウ"); // "Printer Info"
+ LSTR MSG_INFO_STATS_MENU = _UxGT("プリントジョウキョウ"); // "Printer Stats"
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("セイギョケイジョウホウ"); // "Board Info"
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("サーミスター"); // "Thermistors"
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("エクストルーダースウ"); // "Extruders"
+ LSTR MSG_INFO_BAUDRATE = _UxGT("ボーレート"); // "Baud"
+ LSTR MSG_INFO_PROTOCOL = _UxGT("プロトコル"); // "Protocol"
+ LSTR MSG_CASE_LIGHT = _UxGT("キョウタイナイショウメイ"); // "Case light"
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("プリントスウ "); // "Print Count"
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("カンリョウスウ"); // "Completed"
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("プリントジカンルイケイ"); // "Total print time"
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("サイチョウプリントジカン"); // "Longest job time"
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("フィラメントシヨウリョウルイケイ"); // "Extruded total"
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("セッテイサイテイオン"); // "Min Temp"
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("セッテイサイコウオン"); // "Max Temp"
+ LSTR MSG_INFO_PSU = _UxGT("デンゲンシュベツ"); // "Power Supply"
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("モータークドウリョク"); // "Drive Strength"
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" DACシュツリョク %"); // "X Driver %"
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" DACシュツリョク %"); // "Y Driver %"
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" DACシュツリョク %"); // "Z Driver %"
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" DACシュツリョク %"); // "I Driver %"
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" DACシュツリョク %"); // "J Driver %"
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" DACシュツリョク %"); // "K Driver %"
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E DACシュツリョク %"); // "E Driver %"
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("EEPROMヘホゾン"); // "Store memory"
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("イチジテイシ");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("プリントサイカイ"); // "Resume print"
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("コウカンヲカイシシマス", "シバラクオマチクダサイ")); // "Wait for start of the filament"
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("フィラメントヌキダシチュウ", "シバラクオマチクダサイ")); // "Wait for filament unload"
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("フィラメントヲソウニュウシ,", "クリックスルトゾッコウシマス")); // "Insert filament and press button"
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("フィラメントソウテンチュウ", "シバラクオマチクダサイ")); // "Wait for filament load"
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("プリントヲサイカイシマス", "シバラクオマチクダサイ")); // "Wait for print to resume"
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("マチガッタプリンター"); // "Wrong printer"
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("マチガッタプリンター"); // "Wrong printer"
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("セッテイカンリ");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("ショウサイセッテイ");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("コショカイフク");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROMショキカ");
+ LSTR MSG_CONFIGURATION = _UxGT("セッテイカンリ");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("ショウサイセッテイ");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("コショカイフク");
+ LSTR MSG_INIT_EEPROM = _UxGT("EEPROMショキカ");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("ツギヘ");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("ショキカ");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("ストップ");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("プリント");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("リセット");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("キャンセル");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("カンリョウ");
+ LSTR MSG_BUTTON_NEXT = _UxGT("ツギヘ");
+ LSTR MSG_BUTTON_INIT = _UxGT("ショキカ");
+ LSTR MSG_BUTTON_STOP = _UxGT("ストップ");
+ LSTR MSG_BUTTON_PRINT = _UxGT("プリント");
+ LSTR MSG_BUTTON_RESET = _UxGT("リセット");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("キャンセル");
+ LSTR MSG_BUTTON_DONE = _UxGT("カンリョウ");
- PROGMEM Language_Str MSG_YES = _UxGT("ハイ");
- PROGMEM Language_Str MSG_NO = _UxGT("イイエ");
- PROGMEM Language_Str MSG_BACK = _UxGT("モドリ");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("ソクド");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("ステップ/mm");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("ユーザーコマンド");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("プリントガイチジテイシサレマシタ");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("プリントチュウ...");
+ LSTR MSG_YES = _UxGT("ハイ");
+ LSTR MSG_NO = _UxGT("イイエ");
+ LSTR MSG_BACK = _UxGT("モドリ");
+ LSTR MSG_VELOCITY = _UxGT("ソクド");
+ LSTR MSG_STEPS_PER_MM = _UxGT("ステップ/mm");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("ユーザーコマンド");
+ LSTR MSG_PRINT_PAUSED = _UxGT("プリントガイチジテイシサレマシタ");
+ LSTR MSG_PRINTING = _UxGT("プリントチュウ...");
}
diff --git a/Marlin/src/lcd/language/language_ko_KR.h b/Marlin/src/lcd/language/language_ko_KR.h
index 20700896c1..4ecdd5bb2d 100644
--- a/Marlin/src/lcd/language/language_ko_KR.h
+++ b/Marlin/src/lcd/language/language_ko_KR.h
@@ -30,77 +30,77 @@
namespace Language_ko_KR {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 1;
- PROGMEM Language_Str LANGUAGE = _UxGT("Korean");
+ constexpr uint8_t CHARSIZE = 1;
+ LSTR LANGUAGE = _UxGT("Korean");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" 준비.");
- PROGMEM Language_Str MSG_BACK = _UxGT("뒤로");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("카드 삽입됨");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("카드 제거됨");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("엔드스탑");
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("소프트 엔드스탑");
- PROGMEM Language_Str MSG_MAIN = _UxGT("뒤로");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("고급 설정");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("설정");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("자동 시작");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("모터 정지");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("디버깅 메뉴");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("프로그레스바 테스트");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("오토홈");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X 홈으로");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y 홈으로");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z 홈으로");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("XYZ 홈으로");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("누르면 시작합니다");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("다음 Point");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("레벨링 완료!");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" 준비.");
+ LSTR MSG_BACK = _UxGT("뒤로");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("카드 삽입됨");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("카드 제거됨");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("엔드스탑");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("소프트 엔드스탑");
+ LSTR MSG_MAIN = _UxGT("뒤로");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("고급 설정");
+ LSTR MSG_CONFIGURATION = _UxGT("설정");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("자동 시작");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("모터 정지");
+ LSTR MSG_DEBUG_MENU = _UxGT("디버깅 메뉴");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("프로그레스바 테스트");
+ LSTR MSG_AUTO_HOME = _UxGT("오토홈");
+ LSTR MSG_AUTO_HOME_X = _UxGT("X 홈으로");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Y 홈으로");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Z 홈으로");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ 홈으로");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("누르면 시작합니다");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("다음 Point");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("레벨링 완료!");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("예열하기 - ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("예열하기 - ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ~");
+ LSTR MSG_PREHEAT_1 = _UxGT("예열하기 - ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("예열하기 - ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("예열하기 - ") PREHEAT_1_LABEL _UxGT(" 노즐 ~");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("예열하기 - $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("예열하기 - $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("예열하기 - $ 노즐");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("예열하기 - $ 노즐 ~");
+ LSTR MSG_PREHEAT_M = _UxGT("예열하기 - $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("예열하기 - $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("예열하기 - $ 노즐");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("예열하기 - $ 노즐 ~");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Custom 예열");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("식히기");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("스위치 전원 켜기");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("스위치 전원 끄기");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("밀어내기");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("당기기");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("축 이동");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("베드 레벨링");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("미러 사본");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("오토레벨링 하기");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("노즐");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("노즐 ~");
- PROGMEM Language_Str MSG_BED = _UxGT("베드");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("펜 속도");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("펜 속도 ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("엑스트라 펜 속도");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("엑스트라 펜 속도 ~");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("온도");
- PROGMEM Language_Str MSG_MOTION = _UxGT("동작");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("설정 저장하기");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("설정 읽어오기");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("설정 되돌리기");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM 초기화");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("새로고침");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("처음으로");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("준비하기");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("일시정지");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("재시작");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("출력중지");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("SD 카드출력");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("SD 카드없음");
- PROGMEM Language_Str MSG_DWELL = _UxGT("슬립모드...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("일시 정지됨");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("출력중...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("취소됨");
- PROGMEM Language_Str MSG_KILLED = _UxGT("죽음. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("멈춤. ");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("잘못된 프린터");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Custom 예열");
+ LSTR MSG_COOLDOWN = _UxGT("식히기");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("스위치 전원 켜기");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("스위치 전원 끄기");
+ LSTR MSG_EXTRUDE = _UxGT("밀어내기");
+ LSTR MSG_RETRACT = _UxGT("당기기");
+ LSTR MSG_MOVE_AXIS = _UxGT("축 이동");
+ LSTR MSG_BED_LEVELING = _UxGT("베드 레벨링");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("미러 사본");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("오토레벨링 하기");
+ LSTR MSG_NOZZLE = _UxGT("노즐");
+ LSTR MSG_NOZZLE_N = _UxGT("노즐 ~");
+ LSTR MSG_BED = _UxGT("베드");
+ LSTR MSG_FAN_SPEED = _UxGT("펜 속도");
+ LSTR MSG_FAN_SPEED_N = _UxGT("펜 속도 ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("엑스트라 펜 속도");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("엑스트라 펜 속도 ~");
+ LSTR MSG_TEMPERATURE = _UxGT("온도");
+ LSTR MSG_MOTION = _UxGT("동작");
+ LSTR MSG_STORE_EEPROM = _UxGT("설정 저장하기");
+ LSTR MSG_LOAD_EEPROM = _UxGT("설정 읽어오기");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("설정 되돌리기");
+ LSTR MSG_INIT_EEPROM = _UxGT("EEPROM 초기화");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("새로고침");
+ LSTR MSG_INFO_SCREEN = _UxGT("처음으로");
+ LSTR MSG_PREPARE = _UxGT("준비하기");
+ LSTR MSG_PAUSE_PRINT = _UxGT("일시정지");
+ LSTR MSG_RESUME_PRINT = _UxGT("재시작");
+ LSTR MSG_STOP_PRINT = _UxGT("출력중지");
+ LSTR MSG_MEDIA_MENU = _UxGT("SD 카드출력");
+ LSTR MSG_NO_MEDIA = _UxGT("SD 카드없음");
+ LSTR MSG_DWELL = _UxGT("슬립모드...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("일시 정지됨");
+ LSTR MSG_PRINTING = _UxGT("출력중...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("취소됨");
+ LSTR MSG_KILLED = _UxGT("죽음. ");
+ LSTR MSG_STOPPED = _UxGT("멈춤. ");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("잘못된 프린터");
}
diff --git a/Marlin/src/lcd/language/language_nl.h b/Marlin/src/lcd/language/language_nl.h
index 1eef4ca424..b44d09d07c 100644
--- a/Marlin/src/lcd/language/language_nl.h
+++ b/Marlin/src/lcd/language/language_nl.h
@@ -34,199 +34,196 @@
namespace Language_nl {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 1;
- PROGMEM Language_Str LANGUAGE = _UxGT("Dutch");
+ constexpr uint8_t CHARSIZE = 1;
+ LSTR LANGUAGE = _UxGT("Dutch");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" gereed.");
- PROGMEM Language_Str MSG_BACK = _UxGT("Terug");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Kaart ingestoken");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Kaart verwijderd");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_MAIN = _UxGT("Hoofdmenu");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motoren uit");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Menu"); // accepted English terms
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Vooruitgang Test");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" gereed.");
+ LSTR MSG_BACK = _UxGT("Terug");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Kaart ingestoken");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Kaart verwijderd");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("Hoofdmenu");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Motoren uit");
+ LSTR MSG_DEBUG_MENU = _UxGT("Debug Menu"); // accepted English terms
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Vooruitgang Test");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klik voor begin");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Volgende Plaats");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Bed level kompl.");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Zet home offsets");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("H offset toegep.");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Nulpunt instellen");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klik voor begin");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Volgende Plaats");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Bed level kompl.");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Zet home offsets");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("H offset toegep.");
+ LSTR MSG_SET_ORIGIN = _UxGT("Nulpunt instellen");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" voorverwarmen");
- PROGMEM Language_Str MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" voorverw. ~");
- PROGMEM Language_Str MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" voorverw. Einde");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" voorverw. aan");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" voorverw. Bed");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" verw. conf");
+ LSTR MSG_PREHEAT_1 = PREHEAT_1_LABEL _UxGT(" voorverwarmen");
+ LSTR MSG_PREHEAT_1_H = PREHEAT_1_LABEL _UxGT(" voorverw. ~");
+ LSTR MSG_PREHEAT_1_END = PREHEAT_1_LABEL _UxGT(" voorverw. Einde");
+ LSTR MSG_PREHEAT_1_END_E = PREHEAT_1_LABEL _UxGT(" voorverw. Einde ~");
+ LSTR MSG_PREHEAT_1_ALL = PREHEAT_1_LABEL _UxGT(" voorverw. aan");
+ LSTR MSG_PREHEAT_1_BEDONLY = PREHEAT_1_LABEL _UxGT(" voorverw. Bed");
+ LSTR MSG_PREHEAT_1_SETTINGS = PREHEAT_1_LABEL _UxGT(" verw. conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("$ voorverwarmen");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("$ voorverw. ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("$ voorverw. Einde");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("$ voorverw. Einde ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("$ voorverw. aan");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("$ voorverw. Bed");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("$ verw. conf");
+ LSTR MSG_PREHEAT_M = _UxGT("$ voorverwarmen");
+ LSTR MSG_PREHEAT_M_H = _UxGT("$ voorverw. ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("$ voorverw. Einde");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("$ voorverw. Einde ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("$ voorverw. aan");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("$ voorverw. Bed");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("$ verw. conf");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Afkoelen");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Stroom aan");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Stroom uit");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrude");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retract");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("As verplaatsen");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Bed Leveling");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Level bed");
+ LSTR MSG_COOLDOWN = _UxGT("Afkoelen");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Stroom aan");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Stroom uit");
+ LSTR MSG_EXTRUDE = _UxGT("Extrude");
+ LSTR MSG_RETRACT = _UxGT("Retract");
+ LSTR MSG_MOVE_AXIS = _UxGT("As verplaatsen");
+ LSTR MSG_BED_LEVELING = _UxGT("Bed Leveling");
+ LSTR MSG_LEVEL_BED = _UxGT("Level bed");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Verplaatsen...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Vrij XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Verplaats X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Verplaats Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Verplaats Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extruder *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Verplaats %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Verplaats 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Verplaats 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Verplaats 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Verplaats 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Snelheid");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozzle ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Bed");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan snelheid");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan snelheid ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flow");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flow ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Aan");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Uit");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Selecteer");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Selecteer *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Versn");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatuur");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Beweging");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K"); // accepted english dutch
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *"); // accepted english dutch
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD contrast");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Geheugen opslaan");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Geheugen laden");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Noodstop reset");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ververs");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info scherm");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Voorbereiden");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Afstellen");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Print pauzeren");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Print hervatten");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Print stoppen");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Print van SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Geen SD kaart");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Slapen...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Wachten...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print afgebroken");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Geen beweging.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("Afgebroken. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("Gestopt. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retract mm"); // accepted English term in Dutch
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Ruil Retract mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retract F");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ruil Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretr. FR");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retract");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Verv. Filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Verv. Filament *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Init. SD kaart");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Verv. SD Kaart");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z probe uit. bed");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Zelf-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s Eerst");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Offset"); // accepted English term in Dutch
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystap X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystap Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystap Z");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop afbr.");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Voorverw. fout");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Redun. temp fout");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Therm. wegloop");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: Max. temp");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: Min. temp");
- PROGMEM Language_Str MSG_HALTED = _UxGT("PRINTER GESTOPT");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reset A.U.B.");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only. Keep English standard
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Voorwarmen...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bed voorverw...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Calibratie");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibreer X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibreer Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibreer Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibreer Midden");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibratie");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Zet Delta Hoogte");
+ LSTR MSG_MOVING = _UxGT("Verplaatsen...");
+ LSTR MSG_FREE_XY = _UxGT("Vrij XY");
+ LSTR MSG_MOVE_X = _UxGT("Verplaats X");
+ LSTR MSG_MOVE_Y = _UxGT("Verplaats Y");
+ LSTR MSG_MOVE_Z = _UxGT("Verplaats Z");
+ LSTR MSG_MOVE_E = _UxGT("Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Extruder *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Verplaats %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Verplaats 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Verplaats 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Verplaats 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Verplaats 100mm");
+ LSTR MSG_SPEED = _UxGT("Snelheid");
+ LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_NOZZLE = _UxGT("Nozzle");
+ LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
+ LSTR MSG_BED = _UxGT("Bed");
+ LSTR MSG_FAN_SPEED = _UxGT("Fan snelheid");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Fan snelheid ~");
+ LSTR MSG_FLOW = _UxGT("Flow");
+ LSTR MSG_FLOW_N = _UxGT("Flow ~");
+ LSTR MSG_CONTROL = _UxGT("Control");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
+ LSTR MSG_LCD_ON = _UxGT("Aan");
+ LSTR MSG_LCD_OFF = _UxGT("Uit");
+ LSTR MSG_SELECT = _UxGT("Selecteer");
+ LSTR MSG_SELECT_E = _UxGT("Selecteer *");
+ LSTR MSG_ACC = _UxGT("Versn");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatuur");
+ LSTR MSG_MOTION = _UxGT("Beweging");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_ADVANCE_K = _UxGT("Advance K"); // accepted english dutch
+ LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *"); // accepted english dutch
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
+ LSTR MSG_CONTRAST = _UxGT("LCD contrast");
+ LSTR MSG_STORE_EEPROM = _UxGT("Geheugen opslaan");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Geheugen laden");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Noodstop reset");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Ververs");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info scherm");
+ LSTR MSG_PREPARE = _UxGT("Voorbereiden");
+ LSTR MSG_TUNE = _UxGT("Afstellen");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Print pauzeren");
+ LSTR MSG_RESUME_PRINT = _UxGT("Print hervatten");
+ LSTR MSG_STOP_PRINT = _UxGT("Print stoppen");
+ LSTR MSG_MEDIA_MENU = _UxGT("Print van SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Geen SD kaart");
+ LSTR MSG_DWELL = _UxGT("Slapen...");
+ LSTR MSG_USERWAIT = _UxGT("Wachten...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Print afgebroken");
+ LSTR MSG_NO_MOVE = _UxGT("Geen beweging.");
+ LSTR MSG_KILLED = _UxGT("Afgebroken. ");
+ LSTR MSG_STOPPED = _UxGT("Gestopt. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retract mm"); // accepted English term in Dutch
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Ruil Retract mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retract F");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Ruil Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretr. FR");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Verv. Filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Verv. Filament *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Init. SD kaart");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Verv. SD Kaart");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z probe uit. bed");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Zelf-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
+ LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s Eerst");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Offset"); // accepted English term in Dutch
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystap X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystap Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystap Z");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop afbr.");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Voorverw. fout");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Redun. temp fout");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("Therm. wegloop");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err: Max. temp");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err: Min. temp");
+ LSTR MSG_HALTED = _UxGT("PRINTER GESTOPT");
+ LSTR MSG_PLEASE_RESET = _UxGT("Reset A.U.B.");
+ LSTR MSG_HEATING = _UxGT("Voorwarmen...");
+ LSTR MSG_BED_HEATING = _UxGT("Bed voorverw...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Calibratie");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibreer X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibreer Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibreer Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibreer Midden");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibratie");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Zet Delta Hoogte");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Case licht");
+ LSTR MSG_CASE_LIGHT = _UxGT("Case licht");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Onjuiste printer");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Onjuiste printer");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Printed Aantal");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Totaal Voltooid");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Totale Printtijd");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Langste Printtijd");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Totaal Extrudeert");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Printed Aantal");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Totaal Voltooid");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Totale Printtijd");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Langste Printtijd");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Totaal Extrudeert");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Aantal");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Voltooid");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Printtijd ");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Langste");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Aantal");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Voltooid");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Printtijd ");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Langste");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extrud.");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU"); // accepted English term in Dutch
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ LSTR MSG_INFO_PSU = _UxGT("PSU"); // accepted English term in Dutch
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Motorstroom");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Motorstroom");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC Opslaan");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Hervat print");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: "); // accepted English term
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC Opslaan");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Hervat print");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: "); // accepted English term
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
// Up to 3 lines
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wacht voor start", "filament te", "verwisselen"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament uit", "te laden"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle verw.", "Wacht a.u.b."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Laad filament", "en druk knop", "om verder..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament te", "laden"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Wacht voor print", "om verder", "te gaan"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Wacht voor start", "filament te", "verwisselen"));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament uit", "te laden"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle verw.", "Wacht a.u.b."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Laad filament", "en druk knop", "om verder..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Wacht voor", "filament te", "laden"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Wacht voor print", "om verder", "te gaan"));
#else
// Up to 2 lines
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Wacht voor", "start..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wacht voor", "uitladen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Verwarmen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Laad filament", "en druk knop"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wacht voor", "inladen..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wacht voor", "printing..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Wacht voor", "start..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wacht voor", "uitladen..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Klik knop om...", "verw. nozzle.")); //nozzle accepted English term
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Verwarmen..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_2_LINE("Laad filament", "en druk knop"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wacht voor", "inladen..."));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wacht voor", "printing..."));
#endif
}
diff --git a/Marlin/src/lcd/language/language_pl.h b/Marlin/src/lcd/language/language_pl.h
index c1620a8fa6..2dde747378 100644
--- a/Marlin/src/lcd/language/language_pl.h
+++ b/Marlin/src/lcd/language/language_pl.h
@@ -30,9 +30,11 @@
* Substitutions are applied for the following characters when used
* in menu items that call lcd_put_u8str_ind_P with an index:
*
+ * $ displays an inserted C-string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
+ * @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define DISPLAY_CHARSET_ISO10646_PL
@@ -40,671 +42,515 @@
namespace Language_pl {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Polski");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Polski");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" gotowy.");
- //PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("TAK");
- PROGMEM Language_Str MSG_NO = _UxGT("NIE");
- PROGMEM Language_Str MSG_BACK = _UxGT("Wstecz");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Przerywanie...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Karta włożona");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Karta usunięta");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Oczekiwanie na kartę");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Błąd inicializacji karty");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Bład odczytu karty");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Urządzenie USB usunięte");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Błąd uruchomienia USB");
- //PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Subcall Overflow");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Krańców."); // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Progr. Krańcówki");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu główne");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Ustawienie zaawansowane");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguracja");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Wyłącz silniki");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debugowania");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testowy pasek postępu");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Pozycja zerowa");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Zeruj X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Zeruj Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Zeruj Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Autowyrównanie Z");
- //PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteration: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Spadek dokładności!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Osiągnięto dokładność");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Pozycja zerowa");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kliknij by rozp.");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Następny punkt");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Wypoziomowano!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Wys. zanikania");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ust. poz. zer.");
- //PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Home Offset X");
- //PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Home Offset Y");
- //PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Home Offset Z");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Poz. zerowa ust.");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ustaw punkt zero");
- //PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Tramming Wizard");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Wybierz punkt zero");
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Poprzednia wartość ");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" gotowy.");
+ LSTR MSG_YES = _UxGT("TAK");
+ LSTR MSG_NO = _UxGT("NIE");
+ LSTR MSG_BACK = _UxGT("Wstecz");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Przerywanie...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Karta włożona");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Karta usunięta");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Oczekiwanie na kartę");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Błąd inicializacji karty");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Bład odczytu karty");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Urządzenie USB usunięte");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Błąd uruchomienia USB");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Krańców."); // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Progr. Krańcówki");
+ LSTR MSG_MAIN = _UxGT("Menu główne");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Ustawienie zaawansowane");
+ LSTR MSG_CONFIGURATION = _UxGT("Konfiguracja");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Wyłącz silniki");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menu Debugowania");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Testowy pasek postępu");
+ LSTR MSG_AUTO_HOME = _UxGT("Pozycja zerowa");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Zeruj X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Zeruj Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Zeruj Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Autowyrównanie Z");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Spadek dokładności!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Osiągnięto dokładność");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Pozycja zerowa");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kliknij by rozp.");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Następny punkt");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Wypoziomowano!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Wys. zanikania");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ust. poz. zer.");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Poz. zerowa ust.");
+ LSTR MSG_SET_ORIGIN = _UxGT("Ustaw punkt zero");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Wybierz punkt zero");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Poprzednia wartość ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" wsz.");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" stół");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" ustaw.");
+ LSTR MSG_PREHEAT_1 = _UxGT("Rozgrzej ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Rozgrzej ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" Dysza ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" wsz.");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" stół");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Rozgrzej ") PREHEAT_1_LABEL _UxGT(" ustaw.");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Rozgrzej $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Rozgrzej $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Rozgrzej $ Dysza");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Rozgrzej $ Dysza ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Rozgrzej $ wsz.");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Rozgrzej $ stół");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Rozgrzej $ ustaw.");
+ LSTR MSG_PREHEAT_M = _UxGT("Rozgrzej $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Rozgrzej $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Rozgrzej $ Dysza");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Rozgrzej $ Dysza ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Rozgrzej $ wsz.");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Rozgrzej $ stół");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Rozgrzej $ ustaw.");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Rozgrzej własne ust.");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Chłodzenie");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Rozgrzej własne ust.");
+ LSTR MSG_COOLDOWN = _UxGT("Chłodzenie");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Częstotliwość");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Sterowanie Lasera");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Sterowanie wrzeciona");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Zasilanie Lasera");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Zasilanie wrzeciona");
- //PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Toggle Laser");
- //PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Toggle Blower");
- //PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Air Assist");
- //PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Test Pulse ms");
- //PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Fire Pulse");
- //PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Coolant Flow Fault");
- //PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Toggle Spindle");
- //PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Toggle Vacuum");
- //PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Spindle Forward");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Rewers wrzeciona");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Włącz zasilacz");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Wyłącz zasilacz");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Ekstruzja");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Wycofanie");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Ruch osi");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Poziomowanie stołu");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Wypoziomuj stół");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Narożniki poziomowania");
- //PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Raise Bed Until Probe Triggered");
- //PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("All Corners Within Tolerance. Level Bed");
- //PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Good Points: ");
- //PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Last Z: ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Nastepny narożnik");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Edytor siatki");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Edycja siatki");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Edycja siatki zatrzymana");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Punkt pomiarowy");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Indeks X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Indeks Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Wartość Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Własne Polecenia");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Test sondy");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punky");
- //PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Odchylenie");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Tryb IDEX");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Przesunięcie narzędzia");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Parkowanie");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikowanie");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Kopia lustrzana");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pełne sterowanie");
- //PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("Duplicate X-Gap");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2ga dysza X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2ga dysza Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2ga dysza Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Wykonywanie G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Narzędzia UBL");
- //PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Punkt pochylenia");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ręczne Budowanie Siatki");
- //PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("UBL Mesh Wizard");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Umieść podkładkę i zmierz");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Zmierz");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Usuń & Zmierz Stół");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Przesuwanie do następnego");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Aktywacja UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Dezaktywacja UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temperatura stołu");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temperatura stołu");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temperatura dyszy");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temperatura dyszy");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Edycja siatki");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edycja własnej siatki");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Dostrajanie siatki");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec edycji siati");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Buduj własna siatkę");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Buduj siatkę");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Buduj siatkę ($)");
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Buduj siatkę na zimno");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Dostrojenie wysokości siatki");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Wartość wysokości");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sprawdzenie siatki");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Sprawdzenie siatki ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Sprawdzenie własnej siatki");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Nagrzewanie stołu");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Nagrzewanie dyszy");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Napełnianie ręczne...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Napełnij kreśloną długością");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Napełnianie zakończone");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Przewane");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Opuszczanie G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Kontynuuj tworzenie siatki");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Poziomowanie siatką");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Poziomowaie 3-punktowe");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Poziomowaie według siatki");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Poziomuj siatkę");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Punkty boczne");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Rodzaj mapy");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Wyslij mapę siatki");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Wyslij do Hosta");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Wyslij do CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Kopia poza drukarką");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Wyslij info UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Stopień wypełnienia");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ręczne wypełnienie");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Inteligentne wypełnienie");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Wypełnienie siatki");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Unieważnij wszystko");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Unieważnij najbliższy");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Dostrajaj wszystko");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Dostrajaj najbliższy");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Przechowywanie siatki");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot Pamięci");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Załaduj siatkę stołu");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Zapisz siatkę stołu");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Siatka %i załadowana");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Siatka %i zapisana");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Brak magazynu");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Błąd: Zapis UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Bład: Odczyt UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Przesunięcie Z: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Przesunięcie Z zatrzymane");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Krok po kroku");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Tworzenie zimnej siatki");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Inteligentne wypełnienie");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Sprawdzenie siatki");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Dostrojenie wszystkiego");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Sprawdzenie siatki");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Dostrojenie wszystkiego");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Zapis siatki stołu");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Częstotliwość");
+ LSTR MSG_LASER_MENU = _UxGT("Sterowanie Lasera");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Sterowanie wrzeciona");
+ LSTR MSG_LASER_POWER = _UxGT("Zasilanie Lasera");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Zasilanie wrzeciona");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Rewers wrzeciona");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Włącz zasilacz");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Wyłącz zasilacz");
+ LSTR MSG_EXTRUDE = _UxGT("Ekstruzja");
+ LSTR MSG_RETRACT = _UxGT("Wycofanie");
+ LSTR MSG_MOVE_AXIS = _UxGT("Ruch osi");
+ LSTR MSG_BED_LEVELING = _UxGT("Poziomowanie stołu");
+ LSTR MSG_LEVEL_BED = _UxGT("Wypoziomuj stół");
+ LSTR MSG_BED_TRAMMING = _UxGT("Narożniki poziomowania");
+ LSTR MSG_NEXT_CORNER = _UxGT("Nastepny narożnik");
+ LSTR MSG_MESH_EDITOR = _UxGT("Edytor siatki");
+ LSTR MSG_EDIT_MESH = _UxGT("Edycja siatki");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Edycja siatki zatrzymana");
+ LSTR MSG_PROBING_POINT = _UxGT("Punkt pomiarowy");
+ LSTR MSG_MESH_X = _UxGT("Indeks X");
+ LSTR MSG_MESH_Y = _UxGT("Indeks Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Wartość Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Własne Polecenia");
+ LSTR MSG_M48_TEST = _UxGT("M48 Test sondy");
+ LSTR MSG_M48_POINT = _UxGT("M48 Punky");
+ LSTR MSG_M48_DEVIATION = _UxGT("Odchylenie");
+ LSTR MSG_IDEX_MENU = _UxGT("Tryb IDEX");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Przesunięcie narzędzia");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Parkowanie");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikowanie");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Kopia lustrzana");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Pełne sterowanie");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2ga dysza Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2ga dysza @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Wykonywanie G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("Narzędzia UBL");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Punkt pochylenia");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ręczne Budowanie Siatki");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Umieść podkładkę i zmierz");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Zmierz");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Usuń & Zmierz Stół");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Przesuwanie do następnego");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktywacja UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Dezaktywacja UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temperatura stołu");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temperatura stołu");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temperatura dyszy");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temperatura dyszy");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Edycja siatki");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edycja własnej siatki");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Dostrajanie siatki");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec edycji siati");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Buduj własna siatkę");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Buduj siatkę");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Buduj siatkę ($)");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Buduj siatkę na zimno");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Dostrojenie wysokości siatki");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Wartość wysokości");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Sprawdzenie siatki");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Sprawdzenie siatki ($)");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Sprawdzenie własnej siatki");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Nagrzewanie stołu");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Nagrzewanie dyszy");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Napełnianie ręczne...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Napełnij kreśloną długością");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Napełnianie zakończone");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Przewane");
+ LSTR MSG_G26_LEAVING = _UxGT("Opuszczanie G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Kontynuuj tworzenie siatki");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Poziomowanie siatką");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Poziomowaie 3-punktowe");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Poziomowaie według siatki");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Poziomuj siatkę");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Punkty boczne");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Rodzaj mapy");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Wyslij mapę siatki");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Wyslij do Hosta");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Wyslij do CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Kopia poza drukarką");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Wyslij info UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Stopień wypełnienia");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ręczne wypełnienie");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Inteligentne wypełnienie");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Wypełnienie siatki");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Unieważnij wszystko");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Unieważnij najbliższy");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Dostrajaj wszystko");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Dostrajaj najbliższy");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Przechowywanie siatki");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot Pamięci");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Załaduj siatkę stołu");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Zapisz siatkę stołu");
+ LSTR MSG_MESH_LOADED = _UxGT("Siatka %i załadowana");
+ LSTR MSG_MESH_SAVED = _UxGT("Siatka %i zapisana");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Brak magazynu");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Błąd: Zapis UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Bład: Odczyt UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Przesunięcie Z: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Przesunięcie Z zatrzymane");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL Krok po kroku");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Tworzenie zimnej siatki");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Inteligentne wypełnienie");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Sprawdzenie siatki");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Dostrojenie wszystkiego");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Sprawdzenie siatki");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Dostrojenie wszystkiego");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Zapis siatki stołu");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Sterowanie LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Światła");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Ustawienia świateł");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Czerwony");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Pomarańczowy");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Zółty");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Zielony");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Niebieski");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indygo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Fioletowy");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Biały");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Domyślny");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Kanał =");
- //PROGMEM Language_Str MSG_LEDS2 = _UxGT("Lights #2");
- //PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Light #2 Presets");
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Jasność");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Własne światła");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Czerwony");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Zielony");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Niebieski");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Biały");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Jasność");
+ LSTR MSG_LED_CONTROL = _UxGT("Sterowanie LED");
+ LSTR MSG_LEDS = _UxGT("Światła");
+ LSTR MSG_LED_PRESETS = _UxGT("Ustawienia świateł");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Czerwony");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Pomarańczowy");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Zółty");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Zielony");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Niebieski");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indygo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fioletowy");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Biały");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Domyślny");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Kanał =");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Jasność");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Własne światła");
+ LSTR MSG_INTENSITY_R = _UxGT("Czerwony");
+ LSTR MSG_INTENSITY_G = _UxGT("Zielony");
+ LSTR MSG_INTENSITY_B = _UxGT("Niebieski");
+ LSTR MSG_INTENSITY_W = _UxGT("Biały");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Jasność");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Ruch...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Swobodne XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Przesuń w X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Przesuń w Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Przesuń w Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Ekstruzja (os E)");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Ekstruzja (os E) *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Dysza za zimna");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Przesuń co %s mm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Przesuń co .1 mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Przesuń co 1 mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Przesuń co 10 mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Przesuń co 100 mm");
- PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Przesuń co 0.001 cala");
- PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Przesuń co 0.01 cala");
- PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Przesuń co 0.1 cala");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Predkość");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Stół Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Dysza");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Dysza ~");
- //PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Dysza w oczekiwaniu");
- PROGMEM Language_Str MSG_BED = _UxGT("Stół");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Obudowa");
- //PROGMEM Language_Str MSG_COOLER = _UxGT("Laser Coolant");
- //PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Toggle Cooler");
- //PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Flow Safety");
- //PROGMEM Language_Str MSG_LASER = _UxGT("Laser");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Obroty wentylatora");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Obroty wentylatora ~");
- //PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Obroty dodatkowego wentylatora");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Obroty dodatkowego wentylatora ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Wentylator kontrolera");
- //PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
- //PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
- //PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
- //PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Przepływ");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Przepływ ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Ustawienia");
- //PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- //PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Mnożnik");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto. temperatura");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Wł.");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Wył.");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autostrojenie");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autostrojenie *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Strojenie PID zakończone");
- //PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed. Bad extruder.");
- //PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed. Temperature too high.");
- //PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
- //PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
- //PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
- //PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
- //PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
- //PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
- //PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
- //PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
- //PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
- //PROGMEM Language_Str MSG_PID_F = _UxGT("PID-F");
- //PROGMEM Language_Str MSG_PID_F_E = _UxGT("PID-F *");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Wybierz");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Wybierz *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Przyspieszenie");
- PROGMEM Language_Str MSG_JERK = _UxGT("Zryw");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Zryw V") LCD_STR_A;
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Zryw V") LCD_STR_B;
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Zryw V") LCD_STR_C;
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Zryw V") LCD_STR_I;
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Zryw V") LCD_STR_J;
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Zryw V") LCD_STR_K;
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Zryw Ve");
- //PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Prędkość (V)");
+ LSTR MSG_MOVING = _UxGT("Ruch...");
+ LSTR MSG_FREE_XY = _UxGT("Swobodne XY");
+ LSTR MSG_MOVE_X = _UxGT("Przesuń w X");
+ LSTR MSG_MOVE_Y = _UxGT("Przesuń w Y");
+ LSTR MSG_MOVE_Z = _UxGT("Przesuń w Z");
+ LSTR MSG_MOVE_E = _UxGT("Ekstruzja (os E)");
+ LSTR MSG_MOVE_EN = _UxGT("Ekstruzja (os E) *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Dysza za zimna");
+ LSTR MSG_MOVE_N_MM = _UxGT("Przesuń co %s mm");
+ LSTR MSG_MOVE_01MM = _UxGT("Przesuń co .1 mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Przesuń co 1 mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Przesuń co 10 mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Przesuń co 100 mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Przesuń co 0.001 cala");
+ LSTR MSG_MOVE_001IN = _UxGT("Przesuń co 0.01 cala");
+ LSTR MSG_MOVE_01IN = _UxGT("Przesuń co 0.1 cala");
+ LSTR MSG_SPEED = _UxGT("Predkość");
+ LSTR MSG_BED_Z = _UxGT("Stół Z");
+ LSTR MSG_NOZZLE = _UxGT("Dysza");
+ LSTR MSG_NOZZLE_N = _UxGT("Dysza ~");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Dysza w oczekiwaniu");
+ LSTR MSG_BED = _UxGT("Stół");
+ LSTR MSG_CHAMBER = _UxGT("Obudowa");
+ LSTR MSG_FAN_SPEED = _UxGT("Obroty wentylatora");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Obroty wentylatora ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Obroty dodatkowego wentylatora");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Obroty dodatkowego wentylatora ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Wentylator kontrolera");
+ LSTR MSG_FLOW = _UxGT("Przepływ");
+ LSTR MSG_FLOW_N = _UxGT("Przepływ ~");
+ LSTR MSG_CONTROL = _UxGT("Ustawienia");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Mnożnik");
+ LSTR MSG_AUTOTEMP = _UxGT("Auto. temperatura");
+ LSTR MSG_LCD_ON = _UxGT("Wł.");
+ LSTR MSG_LCD_OFF = _UxGT("Wył.");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autostrojenie");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autostrojenie *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Strojenie PID zakończone");
+ LSTR MSG_SELECT = _UxGT("Wybierz");
+ LSTR MSG_SELECT_E = _UxGT("Wybierz *");
+ LSTR MSG_ACC = _UxGT("Przyspieszenie");
+ LSTR MSG_JERK = _UxGT("Zryw");
+ LSTR MSG_VA_JERK = _UxGT("Zryw V") LCD_STR_A;
+ LSTR MSG_VB_JERK = _UxGT("Zryw V") LCD_STR_B;
+ LSTR MSG_VC_JERK = _UxGT("Zryw V") LCD_STR_C;
+ LSTR MSG_VI_JERK = _UxGT("Zryw V") LCD_STR_I;
+ LSTR MSG_VJ_JERK = _UxGT("Zryw V") LCD_STR_J;
+ LSTR MSG_VK_JERK = _UxGT("Zryw V") LCD_STR_K;
+ LSTR MSG_VE_JERK = _UxGT("Zryw Ve");
+ LSTR MSG_VELOCITY = _UxGT("Prędkość (V)");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vskok min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Przyspieszenie (A)");
+ LSTR MSG_VTRAV_MIN = _UxGT("Vskok min");
+ LSTR MSG_ACCELERATION = _UxGT("Przyspieszenie (A)");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-wycofanie");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-przesuń.");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Częstotliwość max");
- //PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("kroki/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" kroki/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" kroki/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" kroki/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" kroki/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" kroki/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" kroki/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E kroki/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* kroki/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Ruch");
- //PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E w mm") SUPERSCRIPT_THREE;
- //PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
- //PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Śr. fil.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Śr. fil. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Wysuń mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Wsuń mm");
- //PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
- //PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Zapisz w pamięci");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Wczytaj z pamięci");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Ustaw. fabryczne");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initializuj EEPROM");
- //PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
- //PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
- //PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
- //PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Settings Stored");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Uaktualnij kartę");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetuj drukarkę");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Odswież");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Ekran główny");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Przygotuj");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Strojenie");
- //PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Power monitor");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Natężenie");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Napięcie");
- PROGMEM Language_Str MSG_POWER = _UxGT("Moc");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Start wydruku");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Następny");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inic.");
- //PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Drukuj");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Resetuj");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignoruj");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Przerwij");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Gotowe");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Wstecz");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Kontynuuj");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Pomiń");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Wstrzymywanie...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Wstrzymaj druk");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Wznowienie");
- //PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Host Start");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop");
- //PROGMEM Language_Str MSG_END_LOOPS = _UxGT("End Repeat Loops");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Drukowanie obiektu");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Anunuj obiekt");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Anunuj obiekt =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Odzyskiwanie po awarii");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Karta SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Brak karty");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Uśpij...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Oczekiwanie...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Druk wstrzymany");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Drukowanie...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Druk przerwany");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Druk zakończony");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Brak ruchu");
- PROGMEM Language_Str MSG_KILLED = _UxGT("Ubity. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("Zatrzymany. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Wycofaj mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Z Wycof. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Wycofaj V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Skok Z mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Cof. wycof. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Z Cof. wyc. mm");
- //PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Cof. wycof. V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto. wycofanie");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Długość zmiany");
- //PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Długość oczyszczania");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Zmiana narzędzia");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Podniesienie Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prędkość napełniania");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Prędkość wycofania");
- //PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
- //PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
- //PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
- //PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
- //PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto ON");
- //PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto OFF");
- //PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
- //PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
- //PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
- //PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Zmień filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Zmień filament *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Wsuń Filament");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Wsuń Filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Wysuń Filament");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Wysuń Filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Wysuń wszystkie");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Inicjal. karty SD");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Zmiana karty SD");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Zwolnienie karty");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z za stołem");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Współczynik skrzywienia");
- //PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Self-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
- //PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Stow");
- //PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
- //PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
- //PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
- //PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
- //PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
- //PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
- //PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
- //PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("UWAGA: Złe ustawienia mogą uszkodzić drukarkę. Kontynuować?");
- //PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- //PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
- //PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
- //PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Save");
- //PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
- //PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
- //PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Najpierw Home %s%s%s");
- //PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
- //PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
- //PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z");
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Przesuń dyszę do stołu");
- //PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- //PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- //PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Łącznie");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Błąd krańcówki");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Rozgrz. nieudane");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Błąd temperatury");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ZANIK TEMPERATURY");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ZANIK TEMP. STOŁU");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ZANIK TEMP.KOMORY");
- //PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("Cooler Runaway");
- //PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("Cooling Failed");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Błąd: MAXTEMP");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Błąd: MINTEMP");
- PROGMEM Language_Str MSG_HALTED = _UxGT("Drukarka zatrzym.");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Proszę zresetować");
- //PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("g"); // One character only
- //PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Rozgrzewanie...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Chłodzenie...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Rozgrzewanie stołu...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Chłodzenie stołu...");
- //PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Probe Heating...");
- //PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Probe Cooling...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Rozgrzewanie komory...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Chłodzenie komory...");
- //PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Laser Cooling...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Kalibrowanie Delty");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibruj X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibruj Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibruj Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibruj środek");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Ustawienia delty");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto kalibrowanie");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Ustaw wysokość delty");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Przesun. Z sondy");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Ukośne ramię");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Wysokość");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Promień");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O drukarce");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info drukarki");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Poziomowanie 3-punktowe");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Poziomowanie liniowe");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Poziomowanie biliniowe");
- //PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Poziomowanie siatką");
- //PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Mesh probing done");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Statystyki");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info płyty");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Ekstrudery");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Predkość USB");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokół");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Zegar pracy: OFF");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Zegar pracy: ON");
- //PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
+ LSTR MSG_A_RETRACT = _UxGT("A-wycofanie");
+ LSTR MSG_A_TRAVEL = _UxGT("A-przesuń.");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Częstotliwość max");
+ LSTR MSG_STEPS_PER_MM = _UxGT("kroki/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" kroki/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" kroki/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" kroki/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" kroki/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" kroki/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" kroki/mm");
+ LSTR MSG_E_STEPS = _UxGT("E kroki/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* kroki/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Ruch");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E w mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Śr. fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Śr. fil. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Wysuń mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Wsuń mm");
+ LSTR MSG_CONTRAST = _UxGT("Kontrast LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Zapisz w pamięci");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Wczytaj z pamięci");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Ustaw. fabryczne");
+ LSTR MSG_INIT_EEPROM = _UxGT("Initializuj EEPROM");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Uaktualnij kartę");
+ LSTR MSG_RESET_PRINTER = _UxGT("Resetuj drukarkę");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Odswież");
+ LSTR MSG_INFO_SCREEN = _UxGT("Ekran główny");
+ LSTR MSG_PREPARE = _UxGT("Przygotuj");
+ LSTR MSG_TUNE = _UxGT("Strojenie");
+ LSTR MSG_CURRENT = _UxGT("Natężenie");
+ LSTR MSG_VOLTAGE = _UxGT("Napięcie");
+ LSTR MSG_POWER = _UxGT("Moc");
+ LSTR MSG_START_PRINT = _UxGT("Start wydruku");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Następny");
+ LSTR MSG_BUTTON_INIT = _UxGT("Inic.");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Drukuj");
+ LSTR MSG_BUTTON_RESET = _UxGT("Resetuj");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignoruj");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Przerwij");
+ LSTR MSG_BUTTON_DONE = _UxGT("Gotowe");
+ LSTR MSG_BUTTON_BACK = _UxGT("Wstecz");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Kontynuuj");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Pomiń");
+ LSTR MSG_PAUSING = _UxGT("Wstrzymywanie...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Wstrzymaj druk");
+ LSTR MSG_RESUME_PRINT = _UxGT("Wznowienie");
+ LSTR MSG_STOP_PRINT = _UxGT("Stop");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Drukowanie obiektu");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Anunuj obiekt");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Anunuj obiekt =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Odzyskiwanie po awarii");
+ LSTR MSG_MEDIA_MENU = _UxGT("Karta SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Brak karty");
+ LSTR MSG_DWELL = _UxGT("Uśpij...");
+ LSTR MSG_USERWAIT = _UxGT("Oczekiwanie...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Druk wstrzymany");
+ LSTR MSG_PRINTING = _UxGT("Drukowanie...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Druk przerwany");
+ LSTR MSG_PRINT_DONE = _UxGT("Druk zakończony");
+ LSTR MSG_NO_MOVE = _UxGT("Brak ruchu");
+ LSTR MSG_KILLED = _UxGT("Ubity. ");
+ LSTR MSG_STOPPED = _UxGT("Zatrzymany. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Wycofaj mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Z Wycof. mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Wycofaj V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Skok Z mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Cof. wycof. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Z Cof. wyc. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Cof. wycof. V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto. wycofanie");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Długość zmiany");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Długość oczyszczania");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Zmiana narzędzia");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Podniesienie Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prędkość napełniania");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Prędkość wycofania");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Zmień filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Zmień filament *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Wsuń Filament");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Wsuń Filament *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Wysuń Filament");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Wysuń Filament *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Wysuń wszystkie");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Inicjal. karty SD");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Zmiana karty SD");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Zwolnienie karty");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z za stołem");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Współczynik skrzywienia");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Self-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset BLTouch");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("UWAGA: Złe ustawienia mogą uszkodzić drukarkę. Kontynuować?");
+ LSTR MSG_HOME_FIRST = _UxGT("Najpierw Home %s%s%s");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Offset Z");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Przesuń dyszę do stołu");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Łącznie");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Błąd krańcówki");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Rozgrz. nieudane");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Błąd temperatury");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("ZANIK TEMPERATURY");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ZANIK TEMP. STOŁU");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ZANIK TEMP.KOMORY");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Błąd: MAXTEMP");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Błąd: MINTEMP");
+ LSTR MSG_HALTED = _UxGT("Drukarka zatrzym.");
+ LSTR MSG_PLEASE_RESET = _UxGT("Proszę zresetować");
+ LSTR MSG_SHORT_HOUR = _UxGT("g"); // One character only
+ LSTR MSG_HEATING = _UxGT("Rozgrzewanie...");
+ LSTR MSG_COOLING = _UxGT("Chłodzenie...");
+ LSTR MSG_BED_HEATING = _UxGT("Rozgrzewanie stołu...");
+ LSTR MSG_BED_COOLING = _UxGT("Chłodzenie stołu...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Rozgrzewanie komory...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Chłodzenie komory...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Kalibrowanie Delty");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibruj X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibruj Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibruj Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibruj środek");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Ustawienia delty");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto kalibrowanie");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Ustaw wysokość delty");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Przesun. Z sondy");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Ukośne ramię");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Wysokość");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Promień");
+ LSTR MSG_INFO_MENU = _UxGT("O drukarce");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info drukarki");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Poziomowanie 3-punktowe");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Poziomowanie liniowe");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Poziomowanie biliniowe");
+ LSTR MSG_MESH_LEVELING = _UxGT("Poziomowanie siatką");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Statystyki");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Info płyty");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Ekstrudery");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Predkość USB");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokół");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Zegar pracy: OFF");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Zegar pracy: ON");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Oświetlenie obudowy");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jasność oświetlenia");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Niepoprawna drukarka");
+ LSTR MSG_CASE_LIGHT = _UxGT("Oświetlenie obudowy");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jasność oświetlenia");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Niepoprawna drukarka");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Czas druku");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Czas druku");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Razem");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Wydrukowano");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Ukończono");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Razem");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdł. druk");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Użyty fil.");
#endif
- //PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
- //PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Zasilacz");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Siła silnika");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Siła %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Siła %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Siła %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Siła %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Siła %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Siła %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Siła %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC BŁĄD POŁĄCZENIA");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Zapisz DAC EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("ZMIEŃ FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("WYDRUK WSTRZYMANY");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("WSUŃ FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("WYSUŃ FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCJE WZNOWIENIA:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Oczyść więcej");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Kontynuuj");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Dysza: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Czujnik filamentu");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Dystans do czujnika mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Zerowanie nieudane");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondowanie nieudane");
+ LSTR MSG_INFO_PSU = _UxGT("Zasilacz");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Siła silnika");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Siła %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Siła %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Siła %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Siła %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Siła %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Siła %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Siła %");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC BŁĄD POŁĄCZENIA");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Zapisz DAC EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("ZMIEŃ FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("WYDRUK WSTRZYMANY");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("WSUŃ FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("WYSUŃ FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("OPCJE WZNOWIENIA:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Oczyść więcej");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Kontynuuj");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Dysza: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Czujnik filamentu");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Dystans do czujnika mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Zerowanie nieudane");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondowanie nieudane");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("WYBIERZ FILAMENT");
- //PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Uaktualnij firmware MMU!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU wymaga uwagi.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Wznów wydruk");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Wznawianie...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Wsuń filament");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Wsuń wszystko");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Wsuń do dyszy");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Wysuń filament");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Wysuń filament ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Wysuń filament");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Wsuwanie fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Wysuwanie fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Wysuwanie fil....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Wszystko");
- //PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Resetuj MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Resetowanie MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Usuń, kliknij");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("WYBIERZ FILAMENT");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Uaktualnij firmware MMU!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU wymaga uwagi.");
+ LSTR MSG_MMU2_RESUME = _UxGT("Wznów wydruk");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Wznawianie...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Wsuń filament");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Wsuń wszystko");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Wsuń do dyszy");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Wysuń filament");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Wysuń filament ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Wysuń filament");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Wsuwanie fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Wysuwanie fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Wysuwanie fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("Wszystko");
+ LSTR MSG_MMU2_RESET = _UxGT("Resetuj MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Resetowanie MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Usuń, kliknij");
- PROGMEM Language_Str MSG_MIX = _UxGT("Miks");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Komponent =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mikser");
- //PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Pełny gradient");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Przełacz miks");
- //PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle Mix");
- //PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Odwrotny gradient");
- //PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
- //PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Start V-tool");
- //PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" End V-tool");
- //PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
- //PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
- //PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
- //PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
- //PROGMEM Language_Str MSG_START_Z = _UxGT("Start Z:");
- //PROGMEM Language_Str MSG_END_Z = _UxGT(" End Z:");
+ LSTR MSG_MIX = _UxGT("Miks");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent =");
+ LSTR MSG_MIXER = _UxGT("Mikser");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Pełny gradient");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Przełacz miks");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Odwrotny gradient");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Gry");
- //PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- //PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- //PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- //PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_GAMES = _UxGT("Gry");
- //PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Bad page index");
- //PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Zmień hasło");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Wymagane zalogowanie");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Ustawienia hasła");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Wprowadź cyfrę");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Ustaw/zmień hasło");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Usuń hasło");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Hasło to ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Od nowa");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Pamiętaj by zapisać!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Hasło usunięte");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Zmień hasło");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Wymagane zalogowanie");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Ustawienia hasła");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Wprowadź cyfrę");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Ustaw/zmień hasło");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Usuń hasło");
+ LSTR MSG_PASSWORD_SET = _UxGT("Hasło to ");
+ LSTR MSG_START_OVER = _UxGT("Od nowa");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Pamiętaj by zapisać!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Hasło usunięte");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nacisnik przycisk", "by wznowić drukowanie"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkowanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Czekam na", "zmianę filamentu", "by wystartować"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Włóż filament", "i naciśnij przycisk", "by kontynuować"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Naciśnij przycisk", "by nagrzać dyszę"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nagrzewanie dyszy", "Proszę czekać..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Czekam na", "wyjęcie filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Czekam na", "włożenie filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Czekam na", "oczyszczenie filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Kliknij by zakończyć", "oczyszczanie filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Czekam na", "wznowienie wydruku..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nacisnik przycisk", "by wznowić drukowanie"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkowanie..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Czekam na", "zmianę filamentu", "by wystartować"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Włóż filament", "i naciśnij przycisk", "by kontynuować"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Naciśnij przycisk", "by nagrzać dyszę"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nagrzewanie dyszy", "Proszę czekać..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Czekam na", "wyjęcie filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Czekam na", "włożenie filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Czekam na", "oczyszczenie filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Kliknij by zakończyć", "oczyszczanie filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Czekam na", "wznowienie wydruku..."));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknij by kontynuować"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkowanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Proszę czekać..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Włóż i kliknij"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknij by nagrzać"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nagrzewanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Wysuwanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Wsuwanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Oczyszczanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Kliknij by zakończyć"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Wznawianie..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknij by kontynuować"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkowanie..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Proszę czekać..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Włóż i kliknij"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknij by nagrzać"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Nagrzewanie..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Wysuwanie..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Wsuwanie..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Oczyszczanie..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Kliknij by zakończyć"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Wznawianie..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Sterowniki TMC");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Prąd sterownika");
- //PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Zerowanie bezczujnikowe");
- //PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
- //PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
- //PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
- //PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" in:");
- //PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korekcja");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Wygładzanie");
+ LSTR MSG_TMC_DRIVERS = _UxGT("Sterowniki TMC");
+ LSTR MSG_TMC_CURRENT = _UxGT("Prąd sterownika");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Zerowanie bezczujnikowe");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korekcja");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Wygładzanie");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Wypoziomuj oś X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Autokalibracja");
- #if ENABLED(TOUCH_UI_FTDI_EVE)
- //PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Idle timeout, temperature decreased. Press Okay to reheat and again to resume.");
- #else
- //PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Heater Timeout");
- #endif
- //PROGMEM Language_Str MSG_REHEAT = _UxGT("Reheat");
- //PROGMEM Language_Str MSG_REHEATING = _UxGT("Reheating...");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Wypoziomuj oś X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Autokalibracja");
- //PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Z Probe Wizard");
- //PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Probing Z Reference");
- //PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Moving to Probing Pos");
+ LSTR MSG_SOUND = _UxGT("Dźwięk");
- PROGMEM Language_Str MSG_SOUND = _UxGT("Dźwięk");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibracja zakończona");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibracja nie powiodła się");
- //PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Top Left");
- //PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Bottom Left");
- //PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Top Right");
- //PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Bottom Right");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Kalibracja zakończona");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Kalibracja nie powiodła się");
-
- //PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" driver backward");
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_pt.h b/Marlin/src/lcd/language/language_pt.h
index 630f38e2d9..13f62f693b 100644
--- a/Marlin/src/lcd/language/language_pt.h
+++ b/Marlin/src/lcd/language/language_pt.h
@@ -34,141 +34,141 @@
namespace Language_pt {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Portuguese");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Portuguese");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pronta.");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desactivar motores");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ir para origem");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Ir para origem X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Ir para origem Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Ir para origem Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Click para iniciar");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo ponto");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Pronto !");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Definir desvio");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets aplicados");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Definir origem");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pronta.");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
+ LSTR MSG_MAIN = _UxGT("Menu principal");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Desactivar motores");
+ LSTR MSG_AUTO_HOME = _UxGT("Ir para origem");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Ir para origem X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Ir para origem Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Ir para origem Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Click para iniciar");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo ponto");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Pronto !");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Definir desvio");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offsets aplicados");
+ LSTR MSG_SET_ORIGIN = _UxGT("Definir origem");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" Tudo");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" ") LCD_STR_THERMOMETER _UxGT("Base");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Definições ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL _UxGT(" Bico ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" Tudo");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq. ") PREHEAT_1_LABEL _UxGT(" ") LCD_STR_THERMOMETER _UxGT("Base");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Definições ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Pre-aquecer $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Pre-aquecer $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Pre-aquecer $ Bico");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Pre-aquecer $ Bico ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Pre-aq. $ Tudo");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Pre-aq. $ ") LCD_STR_THERMOMETER _UxGT("Base");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Definições $");
+ LSTR MSG_PREHEAT_M = _UxGT("Pre-aquecer $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Pre-aquecer $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Pre-aquecer $ Bico");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Pre-aquecer $ Bico ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Pre-aq. $ Tudo");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Pre-aq. $ ") LCD_STR_THERMOMETER _UxGT("Base");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Definições $");
#endif
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Arrefecer");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ligar");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Desligar");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudir");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retrair");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover eixo");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Mover Extrusor");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Mover Extrusor *");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mover %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
- PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Bico");
- PROGMEM Language_Str MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Bico ~");
- PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Base");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. ventoinha");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. ventoinha ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxo ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Controlo");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retracção");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-movimento");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passo/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" passo/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" passo/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" passo/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" passo/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" passo/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" passo/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E passo/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* passo/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Movimento");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E em mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Diam.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Diam. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Guardar na memoria");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Carregar da memoria");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Rest. de emergen.");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Recarregar");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Monitorizar");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Afinar");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Retomar impressão");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Parar impressão");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Sem cartão SD");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Em espera...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Á espera de ordem");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impressão cancelada");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sem movimento");
- PROGMEM Language_Str MSG_KILLED = _UxGT("EMERGÊNCIA. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("PARADO. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT(" Retrair mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Troca Retrair mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT(" Retrair V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT(" Levantar mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT(" DesRet mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Troca DesRet mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT(" DesRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT(" Auto-Retract");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Trocar filamento");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Trocar filamento *");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Inici. cartão SD");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Trocar cartão SD");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sensor fora/base");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Desvio Z");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Fim de curso");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: T Máxima");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: T Mínima");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Aquecendo...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Aquecendo base...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibração Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+ LSTR MSG_COOLDOWN = _UxGT("Arrefecer");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Ligar");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Desligar");
+ LSTR MSG_EXTRUDE = _UxGT("Extrudir");
+ LSTR MSG_RETRACT = _UxGT("Retrair");
+ LSTR MSG_MOVE_AXIS = _UxGT("Mover eixo");
+ LSTR MSG_MOVE_X = _UxGT("Mover X");
+ LSTR MSG_MOVE_Y = _UxGT("Mover Y");
+ LSTR MSG_MOVE_Z = _UxGT("Mover Z");
+ LSTR MSG_MOVE_E = _UxGT("Mover Extrusor");
+ LSTR MSG_MOVE_EN = _UxGT("Mover Extrusor *");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mover %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
+ LSTR MSG_SPEED = _UxGT("Velocidade");
+ LSTR MSG_BED_Z = _UxGT("Base Z");
+ LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" Bico");
+ LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Bico ~");
+ LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Base");
+ LSTR MSG_FAN_SPEED = _UxGT("Vel. ventoinha");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Vel. ventoinha ~");
+ LSTR MSG_FLOW = _UxGT("Fluxo");
+ LSTR MSG_FLOW_N = _UxGT("Fluxo ~");
+ LSTR MSG_CONTROL = _UxGT("Controlo");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_A_RETRACT = _UxGT("A-retracção");
+ LSTR MSG_A_TRAVEL = _UxGT("A-movimento");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Passo/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" passo/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" passo/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" passo/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" passo/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" passo/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" passo/mm");
+ LSTR MSG_E_STEPS = _UxGT("E passo/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* passo/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Movimento");
+ LSTR MSG_FILAMENT = _UxGT("Filamento");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E em mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Diam.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Diam. *");
+ LSTR MSG_CONTRAST = _UxGT("Contraste");
+ LSTR MSG_STORE_EEPROM = _UxGT("Guardar na memoria");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Carregar da memoria");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Rest. de emergen.");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Recarregar");
+ LSTR MSG_INFO_SCREEN = _UxGT("Monitorizar");
+ LSTR MSG_PREPARE = _UxGT("Preparar");
+ LSTR MSG_TUNE = _UxGT("Afinar");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
+ LSTR MSG_RESUME_PRINT = _UxGT("Retomar impressão");
+ LSTR MSG_STOP_PRINT = _UxGT("Parar impressão");
+ LSTR MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Sem cartão SD");
+ LSTR MSG_DWELL = _UxGT("Em espera...");
+ LSTR MSG_USERWAIT = _UxGT("Á espera de ordem");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Impressão cancelada");
+ LSTR MSG_NO_MOVE = _UxGT("Sem movimento");
+ LSTR MSG_KILLED = _UxGT("EMERGÊNCIA. ");
+ LSTR MSG_STOPPED = _UxGT("PARADO. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT(" Retrair mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Troca Retrair mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT(" Retrair V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT(" Levantar mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT(" DesRet mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Troca DesRet mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT(" DesRet V");
+ LSTR MSG_AUTORETRACT = _UxGT(" Auto-Retract");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Trocar filamento");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Trocar filamento *");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Inici. cartão SD");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Trocar cartão SD");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sensor fora/base");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Desvio Z");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Fim de curso");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err: T Máxima");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err: T Mínima");
+ LSTR MSG_HEATING = _UxGT("Aquecendo...");
+ LSTR MSG_BED_HEATING = _UxGT("Aquecendo base...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibração Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Fim de curso");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Fim de curso");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Superior Esquerdo");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Inferior Esquerdo");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Superior Direto");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Inferior Direto");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Calibração Completa");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Calibração Falhou");
+ LSTR MSG_TOP_LEFT = _UxGT("Superior Esquerdo");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Inferior Esquerdo");
+ LSTR MSG_TOP_RIGHT = _UxGT("Superior Direto");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Inferior Direto");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibração Completa");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibração Falhou");
}
diff --git a/Marlin/src/lcd/language/language_pt_br.h b/Marlin/src/lcd/language/language_pt_br.h
index 21be3a2931..7d97d48336 100644
--- a/Marlin/src/lcd/language/language_pt_br.h
+++ b/Marlin/src/lcd/language/language_pt_br.h
@@ -31,465 +31,461 @@
namespace Language_pt_br {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Portuguese (BR)");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Portuguese (BR)");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pronto.");
- PROGMEM Language_Str MSG_YES = _UxGT("SIM");
- PROGMEM Language_Str MSG_NO = _UxGT("NÃO");
- PROGMEM Language_Str MSG_BACK = _UxGT("Voltar");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Abortando...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
- PROGMEM Language_Str MSG_MEDIA_RELEASED = _UxGT("Cartão liberado");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Aguardando cartão");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Erro de leitura");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB removido");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB falhou");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Fins de curso");
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Fins curso");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Menu principal");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Config. Avançada");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configuração");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Início automático");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Desabilit. motores");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu Debug");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Testar Barra Progres");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Ir a origem XYZ");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Ir na origem X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Ir na origem Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Ir na origem Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto alinhar Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Clique para Iniciar");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo Ponto");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Fim nivelação!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Suavizar altura");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Compensar origem");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Alteração aplicada");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Ajustar Origem");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pronto.");
+ LSTR MSG_YES = _UxGT("SIM");
+ LSTR MSG_NO = _UxGT("NÃO");
+ LSTR MSG_BACK = _UxGT("Voltar");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Abortando...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Cartão inserido");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Cartão removido");
+ LSTR MSG_MEDIA_RELEASED = _UxGT("Cartão liberado");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Aguardando cartão");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Erro de leitura");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB removido");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB falhou");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Fins de curso");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Fins curso");
+ LSTR MSG_MAIN = _UxGT("Menu principal");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Config. Avançada");
+ LSTR MSG_CONFIGURATION = _UxGT("Configuração");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Início automático");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Desabilit. motores");
+ LSTR MSG_DEBUG_MENU = _UxGT("Menu Debug");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Testar Barra Progres");
+ LSTR MSG_AUTO_HOME = _UxGT("Ir a origem XYZ");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Ir na origem X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Ir na origem Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Ir na origem Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto alinhar Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Indo para origem");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Clique para Iniciar");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Próximo Ponto");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Fim nivelação!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Suavizar altura");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Compensar origem");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Alteração aplicada");
+ LSTR MSG_SET_ORIGIN = _UxGT("Ajustar Origem");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Extrusora ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Extrusora ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Pre-aq.Todo ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq.Mesa ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Ajustar ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1 = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Pre-aquecer ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Extrusora ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Extrusora ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Pre-aq.Todo ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Pre-aq.Mesa ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Ajustar ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Pre-aquecer $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Pre-aquecer $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Extrusora $");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Extrusora $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Pre-aq.Todo $");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Pre-aq.Mesa $");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Ajustar $");
+ LSTR MSG_PREHEAT_M = _UxGT("Pre-aquecer $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Pre-aquecer $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Extrusora $");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Extrusora $ ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Pre-aq.Todo $");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Pre-aq.Mesa $");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Ajustar $");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Customizar Pre-aq.");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Esfriar");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Ligar");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Desligar");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrusar");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retrair");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Mover eixo");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelação Mesa");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivelar Mesa");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Nivelar Cantos");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Próximo Canto");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor de Malha");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Editar Malha");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Fim da Edição");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Sondando ponto");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Índice X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Índice Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valor Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Comando customizado");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Teste de sonda");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Ponto");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Modo IDEX");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicação");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Cópia espelhada");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Controle Total");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2o bico X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2o bico Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2o bico Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Executando G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Nivel. Mesa Unif.");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Fazer malha manual");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Calçar e calibrar");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Medir");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Remover e calibrar");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Movendo para Próximo");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Ativar UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Desativar UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Mesa");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Mesa");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Extrusora");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Extrusora");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Editar Malha");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Editar Malha Custom");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste Fino da Malha");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Fim da Edição");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Montar Malha Custom");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Montar ");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Customizar Pre-aq.");
+ LSTR MSG_COOLDOWN = _UxGT("Esfriar");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Ligar");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Desligar");
+ LSTR MSG_EXTRUDE = _UxGT("Extrusar");
+ LSTR MSG_RETRACT = _UxGT("Retrair");
+ LSTR MSG_MOVE_AXIS = _UxGT("Mover eixo");
+ LSTR MSG_BED_LEVELING = _UxGT("Nivelação Mesa");
+ LSTR MSG_LEVEL_BED = _UxGT("Nivelar Mesa");
+ LSTR MSG_BED_TRAMMING = _UxGT("Nivelar Cantos");
+ LSTR MSG_NEXT_CORNER = _UxGT("Próximo Canto");
+ LSTR MSG_MESH_EDITOR = _UxGT("Editor de Malha");
+ LSTR MSG_EDIT_MESH = _UxGT("Editar Malha");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Fim da Edição");
+ LSTR MSG_PROBING_POINT = _UxGT("Sondando ponto");
+ LSTR MSG_MESH_X = _UxGT("Índice X");
+ LSTR MSG_MESH_Y = _UxGT("Índice Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Valor Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comando customizado");
+ LSTR MSG_M48_TEST = _UxGT("M48 Teste de sonda");
+ LSTR MSG_M48_POINT = _UxGT("M48 Ponto");
+ LSTR MSG_IDEX_MENU = _UxGT("Modo IDEX");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Estacionar");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicação");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Cópia espelhada");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Controle Total");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2o bico Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2o bico @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Executando G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("Ferramentas UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Nivel. Mesa Unif.");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Fazer malha manual");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Calçar e calibrar");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Medir");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Remover e calibrar");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Movendo para Próximo");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Ativar UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Desativar UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Temp. Mesa");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Temp. Mesa");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Temp. Extrusora");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Temp. Extrusora");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Editar Malha");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Editar Malha Custom");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Ajuste Fino da Malha");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Fim da Edição");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Montar Malha Custom");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Montar ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Montar $");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Checar $");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Montar $");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Checar $");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Montar Malha fria");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar Altura");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Quant. de Altura");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malha");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malha Custom");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Aquecendo Mesa");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Aquecendo Ext.");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Cancelado");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("G26 Saindo");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malha");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Nivelação da Malha");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelação 3 pontos");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelação Grid");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malha");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Cantos");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Salvar Mapa da Malha");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar Para Host");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salvar Malha CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Salvar Backup");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Informação do UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Qtd de Enchimento");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Enchimento Manual");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Enchimento Smart");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Preencher malha");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar tudo");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar próximo");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajuste Fino de Todos");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Mais Próximo");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Armazenamento Malha");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Slot de Memória");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Ler Malha");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Salvar Malha");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Malha %i carregada");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Malha %i salva");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Sem armazenamento");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Erro ao salvar UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Erro no restauro UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Compensação Z: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Compensação Z parou");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo a passo");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Montar Malha fria");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Enchimento Smart");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Validar Malha");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajuste Fino de Todos");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Validar Malha");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajuste Fino de Todos");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Salvar Malha");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Montar Malha fria");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Ajustar Altura");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Quant. de Altura");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validar Malha");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validar Malha Custom");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Aquecendo Mesa");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Aquecendo Ext.");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Cancelado");
+ LSTR MSG_G26_LEAVING = _UxGT("G26 Saindo");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continuar Malha");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nivelação da Malha");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Nivelação 3 pontos");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Nivelação Grid");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivelar Malha");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Cantos");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Tipo de Mapa");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Salvar Mapa da Malha");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Enviar Para Host");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Salvar Malha CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Salvar Backup");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Informação do UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Qtd de Enchimento");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Enchimento Manual");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Enchimento Smart");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Preencher malha");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidar tudo");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidar próximo");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Ajuste Fino de Todos");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Ajustar Mais Próximo");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Armazenamento Malha");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Slot de Memória");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Ler Malha");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Salvar Malha");
+ LSTR MSG_MESH_LOADED = _UxGT("Malha %i carregada");
+ LSTR MSG_MESH_SAVED = _UxGT("Malha %i salva");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Sem armazenamento");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Erro ao salvar UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Erro no restauro UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Compensação Z: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Compensação Z parou");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL passo a passo");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Montar Malha fria");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Enchimento Smart");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Validar Malha");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Ajuste Fino de Todos");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Validar Malha");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Ajuste Fino de Todos");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Salvar Malha");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Controle do LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Luz");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Configuração da Luz");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Luz Vermelha");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Luz Laranja");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Luz Amarela");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Luz Verde");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Luz Azul");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Luz Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Luz Violeta");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Luz Branca");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Luz Padrão");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Luz Customizada");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Intensidade Vermelho");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Intensidade Verde");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Intensidade Azul");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Intensidade Branco");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brilho");
+ LSTR MSG_LED_CONTROL = _UxGT("Controle do LED");
+ LSTR MSG_LEDS = _UxGT("Luz");
+ LSTR MSG_LED_PRESETS = _UxGT("Configuração da Luz");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Luz Vermelha");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Luz Laranja");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Luz Amarela");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Luz Verde");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Luz Azul");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Luz Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Luz Violeta");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Luz Branca");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Luz Padrão");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Luz Customizada");
+ LSTR MSG_INTENSITY_R = _UxGT("Intensidade Vermelho");
+ LSTR MSG_INTENSITY_G = _UxGT("Intensidade Verde");
+ LSTR MSG_INTENSITY_B = _UxGT("Intensidade Azul");
+ LSTR MSG_INTENSITY_W = _UxGT("Intensidade Branco");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Brilho");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Movendo...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Liberar XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Mover X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Mover Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Mover Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Mover Extrusor");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Mover Extrusor *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Extrus. mto fria");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Mover %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Mover 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Mover 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Mover 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Velocidade");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Base Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Bocal");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Bocal ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Mesa");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventoinha");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventoinha ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("+Vel. Ventoinha");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("+Vel. Ventoinha ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Vazão");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Vazão ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Controle");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Máx");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fator");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Temp. Automática");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Ligado");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Desligado");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Selecionar");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Selecionar *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Acel.");
- PROGMEM Language_Str MSG_JERK = _UxGT("Arrancada");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("arrancada V") LCD_STR_A;
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("arrancada V") LCD_STR_B;
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("arrancada V") LCD_STR_C;
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("arrancada V") LCD_STR_I;
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("arrancada V") LCD_STR_J;
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("arrancada V") LCD_STR_K;
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("arrancada VE");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Desv. Junção");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocidade");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VDeslocamento min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Aceleração");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Retrair A");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Movimento A");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Passo/mm");
- PROGMEM Language_Str MSG_A_STEPS = _UxGT("Passo ") LCD_STR_A _UxGT("/mm");
- PROGMEM Language_Str MSG_B_STEPS = _UxGT("Passo ") LCD_STR_B _UxGT("/mm");
- PROGMEM Language_Str MSG_C_STEPS = _UxGT("Passo ") LCD_STR_C _UxGT("/mm");
- PROGMEM Language_Str MSG_I_STEPS = _UxGT("Passo ") LCD_STR_I _UxGT("/mm");
- PROGMEM Language_Str MSG_J_STEPS = _UxGT("Passo ") LCD_STR_J _UxGT("/mm");
- PROGMEM Language_Str MSG_K_STEPS = _UxGT("Passo ") LCD_STR_K _UxGT("/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("*/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatura");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Movimento");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filamento");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Extrusão em mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Diâmetro Fil.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Diâmetro Fil. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Descarr. mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Carregar mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Avanço K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Avanço K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Contraste");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Salvar Configuração");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Ler Configuração");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restauro seguro");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Iniciar EEPROM");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Atualiz. SD");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Resetar Impressora");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Atualização");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Informações");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Preparar");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Ajustar");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Iniciar Impressão");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Prox.");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Iniciar");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Parar");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimir");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Resetar");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Cancelar");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Pronto");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Voltar");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Continuar");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Continuar impressão");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Parar impressão");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Imprimindo objeto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impressão");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Sem cartão SD");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Dormindo...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Clique para retomar");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Impressão Pausada");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Imprimindo...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Impressão Abortada");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Sem movimento");
- PROGMEM Language_Str MSG_KILLED = _UxGT("PARADA DE EMERGÊNCIA");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("PAROU. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retrair mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Retrair Troca mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retrair V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saltar mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Des-Retrair mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Des-RetTroca mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Des-Retrair V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Des-RetTroca V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Retração Automática");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Distancia Retração");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Distancia Purga");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Mudar Ferramenta");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Preparar Veloc.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Veloc. Retração");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Standby bico");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Trocar Filamento");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Trocar Filamento *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Carregar Filamento");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Carregar Filamento *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Descarreg. Filamento");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Descarreg. Filamento *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Descarregar Todos");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Iniciar SD");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Trocar SD");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Liberar SD");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda fora da mesa");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Fator de Cisalho");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Testar BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reiniciar BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Recolher BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Estender BLTouch");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda-Z");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Recolher Sonda-Z");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s Primeiro");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Compensar Sonda");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Compensar Sonda em X");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Compensar Sonda em Y");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Compensar Sonda em Z");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Passinho X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Passinho Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Passinho Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Abortar Fim de Curso");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ESCAPE TÉRMICO");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ESCAPE TÉRMICO MESA");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ESCAPE TÉRMICO CAMARA");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Erro:Temp Máxima");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Erro:Temp Mínima");
- PROGMEM Language_Str MSG_HALTED = _UxGT("IMPRESSORA PAROU");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Favor resetar");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Aquecendo...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Resfriando...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Aquecendo mesa...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Esfriando mesa...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Aquecendo Câmara...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Esfriando Câmara...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Calibrar Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Configuração Delta");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-Calibração");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Calibrar Altura");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Desloc. Sonda Z");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Haste Diagonal");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Altura");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Raio");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Sobre");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Impressora");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Nivelamento 3 pontos");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Nivelamento Linear");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Nivelamento Bilinear");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Nivelamento UBL");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nivelamento da Malha");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. da Placa");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrusoras");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Taxa de Transmissão");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocolo");
+ LSTR MSG_MOVING = _UxGT("Movendo...");
+ LSTR MSG_FREE_XY = _UxGT("Liberar XY");
+ LSTR MSG_MOVE_X = _UxGT("Mover X");
+ LSTR MSG_MOVE_Y = _UxGT("Mover Y");
+ LSTR MSG_MOVE_Z = _UxGT("Mover Z");
+ LSTR MSG_MOVE_E = _UxGT("Mover Extrusor");
+ LSTR MSG_MOVE_EN = _UxGT("Mover Extrusor *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Extrus. mto fria");
+ LSTR MSG_MOVE_N_MM = _UxGT("Mover %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Mover 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Mover 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Mover 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Mover 100mm");
+ LSTR MSG_SPEED = _UxGT("Velocidade");
+ LSTR MSG_BED_Z = _UxGT("Base Z");
+ LSTR MSG_NOZZLE = _UxGT("Bocal");
+ LSTR MSG_NOZZLE_N = _UxGT("Bocal ~");
+ LSTR MSG_BED = _UxGT("Mesa");
+ LSTR MSG_FAN_SPEED = _UxGT("Vel. Ventoinha");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Vel. Ventoinha ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("+Vel. Ventoinha");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("+Vel. Ventoinha ~");
+ LSTR MSG_FLOW = _UxGT("Vazão");
+ LSTR MSG_FLOW_N = _UxGT("Vazão ~");
+ LSTR MSG_CONTROL = _UxGT("Controle");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Máx");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fator");
+ LSTR MSG_AUTOTEMP = _UxGT("Temp. Automática");
+ LSTR MSG_LCD_ON = _UxGT("Ligado");
+ LSTR MSG_LCD_OFF = _UxGT("Desligado");
+ LSTR MSG_SELECT = _UxGT("Selecionar");
+ LSTR MSG_SELECT_E = _UxGT("Selecionar *");
+ LSTR MSG_ACC = _UxGT("Acel.");
+ LSTR MSG_JERK = _UxGT("Arrancada");
+ LSTR MSG_VA_JERK = _UxGT("arrancada V") LCD_STR_A;
+ LSTR MSG_VB_JERK = _UxGT("arrancada V") LCD_STR_B;
+ LSTR MSG_VC_JERK = _UxGT("arrancada V") LCD_STR_C;
+ LSTR MSG_VI_JERK = _UxGT("arrancada V") LCD_STR_I;
+ LSTR MSG_VJ_JERK = _UxGT("arrancada V") LCD_STR_J;
+ LSTR MSG_VK_JERK = _UxGT("arrancada V") LCD_STR_K;
+ LSTR MSG_VE_JERK = _UxGT("arrancada VE");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Desv. Junção");
+ LSTR MSG_VELOCITY = _UxGT("Velocidade");
+ LSTR MSG_VTRAV_MIN = _UxGT("VDeslocamento min");
+ LSTR MSG_ACCELERATION = _UxGT("Aceleração");
+ LSTR MSG_A_RETRACT = _UxGT("Retrair A");
+ LSTR MSG_A_TRAVEL = _UxGT("Movimento A");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Passo/mm");
+ LSTR MSG_A_STEPS = _UxGT("Passo ") LCD_STR_A _UxGT("/mm");
+ LSTR MSG_B_STEPS = _UxGT("Passo ") LCD_STR_B _UxGT("/mm");
+ LSTR MSG_C_STEPS = _UxGT("Passo ") LCD_STR_C _UxGT("/mm");
+ LSTR MSG_I_STEPS = _UxGT("Passo ") LCD_STR_I _UxGT("/mm");
+ LSTR MSG_J_STEPS = _UxGT("Passo ") LCD_STR_J _UxGT("/mm");
+ LSTR MSG_K_STEPS = _UxGT("Passo ") LCD_STR_K _UxGT("/mm");
+ LSTR MSG_E_STEPS = _UxGT("E/mm");
+ LSTR MSG_EN_STEPS = _UxGT("*/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatura");
+ LSTR MSG_MOTION = _UxGT("Movimento");
+ LSTR MSG_FILAMENT = _UxGT("Filamento");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Extrusão em mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Diâmetro Fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Diâmetro Fil. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Descarr. mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Carregar mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Avanço K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Avanço K *");
+ LSTR MSG_CONTRAST = _UxGT("Contraste");
+ LSTR MSG_STORE_EEPROM = _UxGT("Salvar Configuração");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Ler Configuração");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restauro seguro");
+ LSTR MSG_INIT_EEPROM = _UxGT("Iniciar EEPROM");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Atualiz. SD");
+ LSTR MSG_RESET_PRINTER = _UxGT("Resetar Impressora");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Atualização");
+ LSTR MSG_INFO_SCREEN = _UxGT("Informações");
+ LSTR MSG_PREPARE = _UxGT("Preparar");
+ LSTR MSG_TUNE = _UxGT("Ajustar");
+ LSTR MSG_START_PRINT = _UxGT("Iniciar Impressão");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Prox.");
+ LSTR MSG_BUTTON_INIT = _UxGT("Iniciar");
+ LSTR MSG_BUTTON_STOP = _UxGT("Parar");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Imprimir");
+ LSTR MSG_BUTTON_RESET = _UxGT("Resetar");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Cancelar");
+ LSTR MSG_BUTTON_DONE = _UxGT("Pronto");
+ LSTR MSG_BUTTON_BACK = _UxGT("Voltar");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Continuar");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausar impressão");
+ LSTR MSG_RESUME_PRINT = _UxGT("Continuar impressão");
+ LSTR MSG_STOP_PRINT = _UxGT("Parar impressão");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Imprimindo objeto");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Cancelar Objeto");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancelar Objeto =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Recuperar Impressão");
+ LSTR MSG_MEDIA_MENU = _UxGT("Imprimir do SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Sem cartão SD");
+ LSTR MSG_DWELL = _UxGT("Dormindo...");
+ LSTR MSG_USERWAIT = _UxGT("Clique para retomar");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Impressão Pausada");
+ LSTR MSG_PRINTING = _UxGT("Imprimindo...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Impressão Abortada");
+ LSTR MSG_NO_MOVE = _UxGT("Sem movimento");
+ LSTR MSG_KILLED = _UxGT("PARADA DE EMERGÊNCIA");
+ LSTR MSG_STOPPED = _UxGT("PAROU. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retrair mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Retrair Troca mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retrair V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Saltar mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Des-Retrair mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Des-RetTroca mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Des-Retrair V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Des-RetTroca V");
+ LSTR MSG_AUTORETRACT = _UxGT("Retração Automática");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Distancia Retração");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Distancia Purga");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Mudar Ferramenta");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Levantar Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Preparar Veloc.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Veloc. Retração");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Standby bico");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Trocar Filamento");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Trocar Filamento *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Carregar Filamento");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Carregar Filamento *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Descarreg. Filamento");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Descarreg. Filamento *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Descarregar Todos");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Iniciar SD");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Trocar SD");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Liberar SD");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda fora da mesa");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Fator de Cisalho");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Testar BLTouch");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reiniciar BLTouch");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Recolher BLTouch");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Estender BLTouch");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Estender Sonda-Z");
+ LSTR MSG_MANUAL_STOW = _UxGT("Recolher Sonda-Z");
+ LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s Primeiro");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Compensar Sonda");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Compensar Sonda em X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Compensar Sonda em Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Compensar Sonda em Z");
+ LSTR MSG_BABYSTEP_X = _UxGT("Passinho X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Passinho Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Passinho Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Abortar Fim de Curso");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Aquecimento falhou");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Erro:Temp Redundante");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("ESCAPE TÉRMICO");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ESCAPE TÉRMICO MESA");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ESCAPE TÉRMICO CAMARA");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Erro:Temp Máxima");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Erro:Temp Mínima");
+ LSTR MSG_HALTED = _UxGT("IMPRESSORA PAROU");
+ LSTR MSG_PLEASE_RESET = _UxGT("Favor resetar");
+ LSTR MSG_HEATING = _UxGT("Aquecendo...");
+ LSTR MSG_COOLING = _UxGT("Resfriando...");
+ LSTR MSG_BED_HEATING = _UxGT("Aquecendo mesa...");
+ LSTR MSG_BED_COOLING = _UxGT("Esfriando mesa...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Aquecendo Câmara...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Esfriando Câmara...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Calibrar Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrar X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrar Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrar Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrar Centro");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Configuração Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-Calibração");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Calibrar Altura");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Desloc. Sonda Z");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Haste Diagonal");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Altura");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Raio");
+ LSTR MSG_INFO_MENU = _UxGT("Sobre");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Impressora");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Nivelamento 3 pontos");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelamento Linear");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelamento Bilinear");
+ LSTR MSG_UBL_LEVELING = _UxGT("Nivelamento UBL");
+ LSTR MSG_MESH_LEVELING = _UxGT("Nivelamento da Malha");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Estatísticas");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. da Placa");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistores");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrusoras");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Taxa de Transmissão");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocolo");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Luz da Impressora");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Intensidade Brilho");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
+ LSTR MSG_CASE_LIGHT = _UxGT("Luz da Impressora");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Intensidade Brilho");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Impressora Incorreta");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total de Impressões");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Trabalho Mais longo");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total de Extrusão");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total de Impressões");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Trabalho Mais longo");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total de Extrusão");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Qtd de Impressões");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Maior trabalho");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("T. Extrusão");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Qtd de Impressões");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Realizadas");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tempo de Impressão");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Maior trabalho");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("T. Extrusão");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Força do Motor");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Escrever EEPROM DAC");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("TROCA DE FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESSÃO PAUSADA");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARREGAR FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARREG. FILAMENTO");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Config. de Retomada");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar mais");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar Impressão");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bocal: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Sensor filamento");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Falha ao ir à origem");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Falha ao sondar");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temp Mín");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temp Máx");
+ LSTR MSG_INFO_PSU = _UxGT("PSU");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Força do Motor");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Escrever EEPROM DAC");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("TROCA DE FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("IMPRESSÃO PAUSADA");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("CARREGAR FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("DESCARREG. FILAMENTO");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Config. de Retomada");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purgar mais");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continuar Impressão");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Bocal: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Sensor filamento");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Falha ao ir à origem");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Falha ao sondar");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ESCOLHER FILAMENTO");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ESCOLHER FILAMENTO");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Continuar Impressão");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Continuando...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Carregar Filamento");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Carregar Todos");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Carregar para bocal");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejetar Filamento");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Ejetar Filamento ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Liberar Filamento");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Carregando Fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejetando Fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Carregando Fil....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Todos");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Resetar MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Resetando MMU...");
+ LSTR MSG_MMU2_RESUME = _UxGT("Continuar Impressão");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Continuando...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Carregar Filamento");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Carregar Todos");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Carregar para bocal");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Ejetar Filamento");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Ejetar Filamento ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Liberar Filamento");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Carregando Fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejetando Fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Carregando Fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("Todos");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filamento ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Resetar MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Resetando MMU...");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Jogos");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Labirinto");
+ LSTR MSG_GAMES = _UxGT("Jogos");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Labirinto");
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Aperte o botão para", "continuar impressão"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando o", "inicio da", "troca de filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Coloque filamento", "pressione o botão", "para continuar..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pressione o botão", "p/ aquecer o bocal"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Aquecendo o bocal", "Aguarde..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperando", "remoção de filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperando", "filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere pela", "purga de filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Clique para finaliz.", "purga de filamento"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impressão", "continuar"));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Aperte o botão para", "continuar impressão"));
+ LSTR MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Esperando o", "inicio da", "troca de filamento"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Coloque filamento", "pressione o botão", "para continuar..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Pressione o botão", "p/ aquecer o bocal"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Aquecendo o bocal", "Aguarde..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Esperando", "remoção de filamento"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Esperando", "filamento"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Espere pela", "purga de filamento"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Clique para finaliz.", "purga de filamento"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Esperando impressão", "continuar"));
#else // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clique p. continuar"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Aguarde..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insira e Clique"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Clique para Aquecer"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Aquecendo..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejetando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Clique p. finalizar"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Continuando..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Clique p. continuar"));
+ LSTR MSG_PAUSE_PRINT_INIT = _UxGT(MSG_1_LINE("Estacionando..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Aguarde..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insira e Clique"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Clique para Aquecer"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Aquecendo..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejetando..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Carregando..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Purgando..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Clique p. finalizar"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Continuando..."));
#endif
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Superior Esquerdo");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Inferior Esquerdo");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Superior Direto");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Inferior Direto");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Calibração Completa");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Calibração Falhou");
+ LSTR MSG_TOP_LEFT = _UxGT("Superior Esquerdo");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Inferior Esquerdo");
+ LSTR MSG_TOP_RIGHT = _UxGT("Superior Direto");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Inferior Direto");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Calibração Completa");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Calibração Falhou");
}
diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h
index b1208eac25..2eb4c0b996 100644
--- a/Marlin/src/lcd/language/language_ro.h
+++ b/Marlin/src/lcd/language/language_ro.h
@@ -32,606 +32,595 @@
namespace Language_ro {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Romanian");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Romanian");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Pregatit.");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("DA");
- PROGMEM Language_Str MSG_NO = _UxGT("NU");
- PROGMEM Language_Str MSG_BACK = _UxGT("Inapoi");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Abandon...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Media Introdus");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Media Inlaturat");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Astept Media");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Eroare Citire Media");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("Dispozitiv USB Inlaturat");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Pornire USB Esuata");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Eroare:Subcall Overflow");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Principal");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Setari Avansate");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Configurare");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostart");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Dezactivare Motoare");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Meniu Debug");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test Bara Progres");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Acasa");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Acasa X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Acasa Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Acasa Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto Aliniere-Z");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Acasa XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Click pentru a incepe");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Urmatorul Punct");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivelare Terminata!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Fade Inaltime");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Seteaza Offseturile Acasa");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offseturi Aplicate");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Seteaza Originea");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Pregatit.");
+ LSTR MSG_YES = _UxGT("DA");
+ LSTR MSG_NO = _UxGT("NU");
+ LSTR MSG_BACK = _UxGT("Inapoi");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Abandon...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Media Introdus");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Media Inlaturat");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Astept Media");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Eroare Citire Media");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("Dispozitiv USB Inlaturat");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Pornire USB Esuata");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Eroare:Subcall Overflow");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstops"); // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft Endstops");
+ LSTR MSG_MAIN = _UxGT("Principal");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Setari Avansate");
+ LSTR MSG_CONFIGURATION = _UxGT("Configurare");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostart");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Dezactivare Motoare");
+ LSTR MSG_DEBUG_MENU = _UxGT("Meniu Debug");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test Bara Progres");
+ LSTR MSG_AUTO_HOME = _UxGT("Auto Acasa");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Acasa X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Acasa Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Acasa Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Aliniere-Z");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Acasa XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Click pentru a incepe");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Urmatorul Punct");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivelare Terminata!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Fade Inaltime");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Seteaza Offseturile Acasa");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offseturi Aplicate");
+ LSTR MSG_SET_ORIGIN = _UxGT("Seteaza Originea");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Preincalzeste ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Preincalzeste ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Capatul");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Capatul ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Tot");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Patul");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Conf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Preincalzeste ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Preincalzeste ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Capatul");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Capatul ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Tot");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Patul");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preincalzeste ") PREHEAT_1_LABEL _UxGT(" Conf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Preincalzeste $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Preincalzeste $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Preincalzeste $ Capatul");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Preincalzeste $ Capatul ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Preincalzeste $ Tot");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Preincalzeste $ Patul");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Preincalzeste $ Conf");
+ LSTR MSG_PREHEAT_M = _UxGT("Preincalzeste $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Preincalzeste $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Preincalzeste $ Capatul");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Preincalzeste $ Capatul ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Preincalzeste $ Tot");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Preincalzeste $ Patul");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Preincalzeste $ Conf");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Preincalzeste Personalizat");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Racire");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frecventa");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Control Laser");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Puterea Laserului");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Controlul Spindle");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Puterea Spindle");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spindle Invers");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Porneste");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Opreste");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudeaza");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Retracteaza");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Muta Axa");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Nivelarea Patului");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Niveleaza Patul");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Niveleaza Colturile");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Urmatorul Colt");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor Mesh");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Editeaza Mesh");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Editarea Meshului Oprita");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Punctul de Probare");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Valoare Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Comenzi Personalizate");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Probe Test");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Point");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Deviation");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX Mode");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2nd Nozzle X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2nd Nozzle Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Doing G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Tools");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Tilting Point");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manually Build Mesh");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Place Shim & Measure");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Measure");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Remove & Measure Bed");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Moving to next");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Activate UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Deactivate UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Bed Temp");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend Temp");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Mesh Edit");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit Custom Mesh");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Fine Tuning Mesh");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Preincalzeste Personalizat");
+ LSTR MSG_COOLDOWN = _UxGT("Racire");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frecventa");
+ LSTR MSG_LASER_MENU = _UxGT("Control Laser");
+ LSTR MSG_LASER_POWER = _UxGT("Puterea Laserului");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Controlul Spindle");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Puterea Spindle");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Invers");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Porneste");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Opreste");
+ LSTR MSG_EXTRUDE = _UxGT("Extrudeaza");
+ LSTR MSG_RETRACT = _UxGT("Retracteaza");
+ LSTR MSG_MOVE_AXIS = _UxGT("Muta Axa");
+ LSTR MSG_BED_LEVELING = _UxGT("Nivelarea Patului");
+ LSTR MSG_LEVEL_BED = _UxGT("Niveleaza Patul");
+ LSTR MSG_BED_TRAMMING = _UxGT("Niveleaza Colturile");
+ LSTR MSG_NEXT_CORNER = _UxGT("Urmatorul Colt");
+ LSTR MSG_MESH_EDITOR = _UxGT("Editor Mesh");
+ LSTR MSG_EDIT_MESH = _UxGT("Editeaza Mesh");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Editarea Meshului Oprita");
+ LSTR MSG_PROBING_POINT = _UxGT("Punctul de Probare");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Valoare Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Comenzi Personalizate");
+ LSTR MSG_M48_TEST = _UxGT("M48 Probe Test");
+ LSTR MSG_M48_POINT = _UxGT("M48 Point");
+ LSTR MSG_M48_DEVIATION = _UxGT("Deviation");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX Mode");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2nd Nozzle @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Doing G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL Tools");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Unified Bed Leveling");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Tilting Point");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manually Build Mesh");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Place Shim & Measure");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Measure");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Remove & Measure Bed");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Moving to next");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Activate UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deactivate UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Bed Temp");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hotend Temp");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Mesh Edit");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Edit Custom Mesh");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Fine Tuning Mesh");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Done Editing Mesh");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Build Custom Mesh");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Build Mesh");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Build Mesh ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Validate Mesh ($)");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Build Mesh ($)");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validate Mesh ($)");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Build Cold Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Adjust Mesh Height");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Height Amount");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validate Mesh");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validate Custom Mesh");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Heating Bed");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Manual priming...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Fixed Length Prime");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Done Priming");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Canceled");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Leaving G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Continue Bed Mesh");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Mesh Leveling");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Point Leveling");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Grid Mesh Leveling");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Level Mesh");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Side Points");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Map Type");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Output Mesh Map");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Output for Host");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Output for CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Imprimanta Backup");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Output UBL Info");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Fill-in Amount");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manual Fill-in");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Smart Fill-in");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Fill-in Mesh");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidate All");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidate Closest");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Fine Tune All");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Fine Tune Closest");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Storage");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Memory Slot");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Load Bed Mesh");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Save Bed Mesh");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Mesh %i Loaded");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Mesh %i Saved");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("No Storage");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Err: UBL Save");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Err: UBL Restore");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stopped");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Step-By-Step UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Build Cold Mesh");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Fill-in");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validate Mesh");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Fine Tune All");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validate Mesh");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Fine Tune All");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Save Bed Mesh");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Build Cold Mesh");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Adjust Mesh Height");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Height Amount");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validate Mesh");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validate Custom Mesh");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Heating Bed");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Heating Nozzle");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manual priming...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fixed Length Prime");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Done Priming");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Canceled");
+ LSTR MSG_G26_LEAVING = _UxGT("Leaving G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Continue Bed Mesh");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Leveling");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Point Leveling");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Grid Mesh Leveling");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Level Mesh");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Side Points");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Map Type");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Output Mesh Map");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Output for Host");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Output for CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Off Imprimanta Backup");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Output UBL Info");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Fill-in Amount");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manual Fill-in");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Smart Fill-in");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Fill-in Mesh");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Invalidate All");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Invalidate Closest");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Fine Tune All");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Fine Tune Closest");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Storage");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Memory Slot");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Load Bed Mesh");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Save Bed Mesh");
+ LSTR MSG_MESH_LOADED = _UxGT("Mesh %i Loaded");
+ LSTR MSG_MESH_SAVED = _UxGT("Mesh %i Saved");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("No Storage");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Err: UBL Save");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Err: UBL Restore");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stopped");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Step-By-Step UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Build Cold Mesh");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Fill-in");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validate Mesh");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Fine Tune All");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validate Mesh");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Fine Tune All");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Save Bed Mesh");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED Control");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Lights");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Light Presets");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Red");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Yellow");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Green");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blue");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violet");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("White");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Default");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Custom Lights");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Red Intensity");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Green Intensity");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Blue Intensity");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("White Intensity");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brightness");
+ LSTR MSG_LED_CONTROL = _UxGT("LED Control");
+ LSTR MSG_LEDS = _UxGT("Lights");
+ LSTR MSG_LED_PRESETS = _UxGT("Light Presets");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Red");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Yellow");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Green");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Blue");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("White");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Default");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Custom Lights");
+ LSTR MSG_INTENSITY_R = _UxGT("Red Intensity");
+ LSTR MSG_INTENSITY_G = _UxGT("Green Intensity");
+ LSTR MSG_INTENSITY_B = _UxGT("Blue Intensity");
+ LSTR MSG_INTENSITY_W = _UxGT("White Intensity");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Brightness");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Moving...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Free XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Move X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Move Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Move Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extruder *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Capat Prea Rece");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Move %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Move 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Move 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Move 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Move 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Speed");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Bed Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozzle");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozzle ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
- PROGMEM Language_Str MSG_BED = _UxGT("Bed");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Enclosure");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Speed");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan Speed ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Controller Fan");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flow");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flow ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("On");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Off");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed. Bad extruder.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed. Temperature too high.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Select");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Select *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
- PROGMEM Language_Str MSG_JERK = _UxGT("Jerk");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Jerk");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Jerk");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Jerk");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Jerk");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Jerk");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-Jerk");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-Jerk");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Velocity");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VTrav Min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Acceleration");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Amax *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-Retract");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-Travel");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequency max");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Steps/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" steps/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" steps/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" steps/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" steps/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" steps/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" steps/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("Esteps/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("*steps/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperature");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Motion");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Unload mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Load mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Contrast");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Store Settings");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Load Settings");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Settings Stored");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Media Update");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reset Imprimanta");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info Screen");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Prepare");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Tune");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Power monitor");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Intensitate");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Voltaj");
- PROGMEM Language_Str MSG_POWER = _UxGT("Putere");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Start Imprimare");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Urmatorul");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Initiere");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stop");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Imprimeaza");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Reseteaza");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignora");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Anuleaza");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("OK");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Inapoi");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Proceed");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Pausing...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pause Print");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Resume Print");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stop Print");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Printing Object");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Outage Recovery");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Print from Media");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("No Media");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Sleep...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Click to Resume...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Print Paused");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Printing...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Print Aborted");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Print Done");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("No Move.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("KILLED. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPED. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retract mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retract");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Swap Length");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Tool Inlocuire");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto Pornit");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto Oprit");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migrare");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Inlocuire Filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Inlocuire Filament *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Incarcare Filament");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Incarcare Filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Scoatere Filament");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Scoatere Filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Scoate Tot");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Atasare Media");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Inlocuire Media");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Eliberare Media");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Skew Factor");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Stow");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Save");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Home %s%s%s First");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
- PROGMEM Language_Str MSG_HALTED = _UxGT("PRINTER HALTED");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Please Reset");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Heating...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Cooling...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bed Heating...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Bed Cooling...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Chamber Heating...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Chamber Cooling...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Calibration");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Calibrate X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrate Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrate Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrate Center");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Settings");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibration");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Set Delta Height");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Probe Z-offset");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Inaltime");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radius");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Despre Imprimanta");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info Imprimanta");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Nivelare in 3 puncte");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Nivelare Lineara");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Nivelare Bilineara");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Nivelarea Patului Unificata");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nivelare Mesh");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Status Imprimanta");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Informatii Placa");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistoare");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrudere");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protocol");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
+ LSTR MSG_MOVING = _UxGT("Moving...");
+ LSTR MSG_FREE_XY = _UxGT("Free XY");
+ LSTR MSG_MOVE_X = _UxGT("Move X");
+ LSTR MSG_MOVE_Y = _UxGT("Move Y");
+ LSTR MSG_MOVE_Z = _UxGT("Move Z");
+ LSTR MSG_MOVE_E = _UxGT("Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Extruder *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Capat Prea Rece");
+ LSTR MSG_MOVE_N_MM = _UxGT("Move %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Move 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Move 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Move 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Move 100mm");
+ LSTR MSG_SPEED = _UxGT("Speed");
+ LSTR MSG_BED_Z = _UxGT("Bed Z");
+ LSTR MSG_NOZZLE = _UxGT("Nozzle");
+ LSTR MSG_NOZZLE_N = _UxGT("Nozzle ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Nozzle Parked");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozzle Standby");
+ LSTR MSG_BED = _UxGT("Bed");
+ LSTR MSG_CHAMBER = _UxGT("Enclosure");
+ LSTR MSG_FAN_SPEED = _UxGT("Fan Speed");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Fan Speed ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Controller Fan");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Idle Speed");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period");
+ LSTR MSG_FLOW = _UxGT("Flow");
+ LSTR MSG_FLOW_N = _UxGT("Flow ~");
+ LSTR MSG_CONTROL = _UxGT("Control");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fact");
+ LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
+ LSTR MSG_LCD_ON = _UxGT("On");
+ LSTR MSG_LCD_OFF = _UxGT("Off");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autotune failed. Bad extruder.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autotune failed. Temperature too high.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Autotune failed! Timeout.");
+ LSTR MSG_SELECT = _UxGT("Select");
+ LSTR MSG_SELECT_E = _UxGT("Select *");
+ LSTR MSG_ACC = _UxGT("Accel");
+ LSTR MSG_JERK = _UxGT("Jerk");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Jerk");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Jerk");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Jerk");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Jerk");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Jerk");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-Jerk");
+ LSTR MSG_VE_JERK = _UxGT("Ve-Jerk");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ LSTR MSG_VELOCITY = _UxGT("Velocity");
+ LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Vmax *");
+ LSTR MSG_VMIN = _UxGT("Vmin");
+ LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min");
+ LSTR MSG_ACCELERATION = _UxGT("Acceleration");
+ LSTR MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Amax *");
+ LSTR MSG_A_RETRACT = _UxGT("A-Retract");
+ LSTR MSG_A_TRAVEL = _UxGT("A-Travel");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frequency max");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Feed min");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Steps/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" steps/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" steps/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" steps/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" steps/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" steps/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" steps/mm");
+ LSTR MSG_E_STEPS = _UxGT("Esteps/mm");
+ LSTR MSG_EN_STEPS = _UxGT("*steps/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperature");
+ LSTR MSG_MOTION = _UxGT("Motion");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Fil. Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Fil. Dia. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Unload mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Load mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Advance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
+ LSTR MSG_CONTRAST = _UxGT("LCD Contrast");
+ LSTR MSG_STORE_EEPROM = _UxGT("Store Settings");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Load Settings");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Restore Defaults");
+ LSTR MSG_INIT_EEPROM = _UxGT("Initialize EEPROM");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Error");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Error");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Error");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Settings Stored");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Media Update");
+ LSTR MSG_RESET_PRINTER = _UxGT("Reset Imprimanta");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Refresh");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info Screen");
+ LSTR MSG_PREPARE = _UxGT("Prepare");
+ LSTR MSG_TUNE = _UxGT("Tune");
+ LSTR MSG_POWER_MONITOR = _UxGT("Power monitor");
+ LSTR MSG_CURRENT = _UxGT("Intensitate");
+ LSTR MSG_VOLTAGE = _UxGT("Voltaj");
+ LSTR MSG_POWER = _UxGT("Putere");
+ LSTR MSG_START_PRINT = _UxGT("Start Imprimare");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Urmatorul");
+ LSTR MSG_BUTTON_INIT = _UxGT("Initiere");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stop");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Imprimeaza");
+ LSTR MSG_BUTTON_RESET = _UxGT("Reseteaza");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignora");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Anuleaza");
+ LSTR MSG_BUTTON_DONE = _UxGT("OK");
+ LSTR MSG_BUTTON_BACK = _UxGT("Inapoi");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Proceed");
+ LSTR MSG_PAUSING = _UxGT("Pausing...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pause Print");
+ LSTR MSG_RESUME_PRINT = _UxGT("Resume Print");
+ LSTR MSG_STOP_PRINT = _UxGT("Stop Print");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Printing Object");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Cancel Object");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Cancel Object =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Outage Recovery");
+ LSTR MSG_MEDIA_MENU = _UxGT("Print from Media");
+ LSTR MSG_NO_MEDIA = _UxGT("No Media");
+ LSTR MSG_DWELL = _UxGT("Sleep...");
+ LSTR MSG_USERWAIT = _UxGT("Click to Resume...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Print Paused");
+ LSTR MSG_PRINTING = _UxGT("Printing...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Print Aborted");
+ LSTR MSG_PRINT_DONE = _UxGT("Print Done");
+ LSTR MSG_NO_MOVE = _UxGT("No Move.");
+ LSTR MSG_KILLED = _UxGT("KILLED. ");
+ LSTR MSG_STOPPED = _UxGT("STOPPED. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retract mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retract V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Swap Length");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Tool Inlocuire");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Retract Speed");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Park Head");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Recover Speed");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fan Speed");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fan Time");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto Pornit");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto Oprit");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Tool Migration");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migrare");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Last Extruder");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrate to *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Inlocuire Filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Inlocuire Filament *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Incarcare Filament");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Incarcare Filament *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Scoatere Filament");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Scoatere Filament *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Scoate Tot");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Atasare Media");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Inlocuire Media");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Eliberare Media");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z Probe Past Bed");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Skew Factor");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Stow");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Deploy");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Mode");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Mode");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Mode");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Set BLTouch to 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Set BLTouch to OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Report Drain");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("DANGER: Bad settings can cause damage! Proceed anyway?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Save");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Deploy TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Deploy Z-Probe");
+ LSTR MSG_MANUAL_STOW = _UxGT("Stow Z-Probe");
+ LSTR MSG_HOME_FIRST = _UxGT("Home %s%s%s First");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Probe Offsets");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Probe X Offset");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop Abort");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Heating Failed");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Err: REDUNDANT TEMP");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("THERMAL RUNAWAY");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BED THERMAL RUNAWAY");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("CHAMBER T. RUNAWAY");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Err: MAXTEMP");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Err: MINTEMP");
+ LSTR MSG_HALTED = _UxGT("PRINTER HALTED");
+ LSTR MSG_PLEASE_RESET = _UxGT("Please Reset");
+ LSTR MSG_HEATING = _UxGT("Heating...");
+ LSTR MSG_COOLING = _UxGT("Cooling...");
+ LSTR MSG_BED_HEATING = _UxGT("Bed Heating...");
+ LSTR MSG_BED_COOLING = _UxGT("Bed Cooling...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Chamber Heating...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Chamber Cooling...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Calibration");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Calibrate X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Calibrate Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Calibrate Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Calibrate Center");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Settings");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Calibration");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Set Delta Height");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Probe Z-offset");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Inaltime");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
+ LSTR MSG_INFO_MENU = _UxGT("Despre Imprimanta");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info Imprimanta");
+ LSTR MSG_3POINT_LEVELING = _UxGT("Nivelare in 3 puncte");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Nivelare Lineara");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Nivelare Bilineara");
+ LSTR MSG_UBL_LEVELING = _UxGT("Nivelarea Patului Unificata");
+ LSTR MSG_MESH_LEVELING = _UxGT("Nivelare Mesh");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Status Imprimanta");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Informatii Placa");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistoare");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudere");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protocol");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Case Light");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER");
+ LSTR MSG_CASE_LIGHT = _UxGT("Case Light");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Light Brightness");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INCORRECT PRINTER");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Total Printuri");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completat");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Timp Imprimare Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extrudat");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Total Printuri");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completat");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Timp Imprimare Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest Job Time");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Total Extrudat");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Prints");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Longest");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Prints");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Completed");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Longest");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruded");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Temperatura Minima");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Temperatura Maxima");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Drive Strength");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT CHANGE");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PRINT PAUSED");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LOAD FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("UNLOAD FILAMENT");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("RESUME OPTIONS:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purge more");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continue");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Homing Failed");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Temperatura Minima");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Temperatura Maxima");
+ LSTR MSG_INFO_PSU = _UxGT("PSU");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Drive Strength");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC CONNECTION ERROR");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Write");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMENT CHANGE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PRINT PAUSED");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LOAD FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("UNLOAD FILAMENT");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("RESUME OPTIONS:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Purge more");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Continue");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Homing Failed");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Failed");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOOSE FILAMENT");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Needs Attention.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("MMU Resume");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("MMU Resuming...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Load");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("MMU Load All");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Load to Nozzle");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Eject");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Eject ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Unload");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Loading Fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejecting Fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Unloading Fil....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("All");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reset MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU Resetting...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("CHOOSE FILAMENT");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Update MMU Firmware!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Needs Attention.");
+ LSTR MSG_MMU2_RESUME = _UxGT("MMU Resume");
+ LSTR MSG_MMU2_RESUMING = _UxGT("MMU Resuming...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Load");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Load All");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Load to Nozzle");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Eject");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Eject ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Unload");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Loading Fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Ejecting Fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Unloading Fil....");
+ LSTR MSG_MMU2_ALL = _UxGT("All");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Reset MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU Resetting...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Remove, click");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Component =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mixer");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Full Gradient");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Toggle Mix");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cycle Mix");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Reverse Gradient");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Start V-tool");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" End V-tool");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Start Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" End Z:");
+ LSTR MSG_MIX = _UxGT("Mix");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Component =");
+ LSTR MSG_MIXER = _UxGT("Mixer");
+ LSTR MSG_GRADIENT = _UxGT("Gradient");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Toggle Mix");
+ LSTR MSG_CYCLE_MIX = _UxGT("Cycle Mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Reverse Gradient");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Active V-tool");
+ LSTR MSG_START_VTOOL = _UxGT("Start V-tool");
+ LSTR MSG_END_VTOOL = _UxGT(" End V-tool");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Commit V-tool Mix");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools Were Reset");
+ LSTR MSG_START_Z = _UxGT("Start Z:");
+ LSTR MSG_END_Z = _UxGT(" End Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Jocuri");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_GAMES = _UxGT("Jocuri");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Bad page index");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
+ LSTR MSG_BAD_PAGE = _UxGT("Bad page index");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Bad page speed");
//
// Filament Inlocuire screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Apasa Butonul", "pentru a reveni la print"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcare..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Astept ca", "inlocuirea filamentului", "sa inceapa"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wait for", "filament load"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Apasa Butonul", "pentru a reveni la print"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcare..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Astept ca", "inlocuirea filamentului", "sa inceapa"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Insert filament", "and press button", "to continue"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Press button", "to heat nozzle"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozzle heating", "Please wait..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Wait for", "filament unload"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Wait for", "filament load"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Wait for", "filament purge"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Click to finish", "filament purge"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Wait for print", "to resume..."));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Click to continue"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcare..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Va rog asteptati..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insert and Click"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Click pentru incalzire"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Incalzire..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejectare..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Incarcare..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Curatare..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Click pentru a termina"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Se Reia..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Click to continue"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parcare..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Va rog asteptati..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Insert and Click"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Click pentru incalzire"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Incalzire..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Ejectare..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Incarcare..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Curatare..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Click pentru a termina"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Se Reia..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Driver Current");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" in:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Corectare");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
+ LSTR MSG_TMC_CURRENT = _UxGT("Driver Current");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Threshold");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorless Homing");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stepping Mode");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Enabled");
+ LSTR MSG_SERVICE_RESET = _UxGT("Reset");
+ LSTR MSG_SERVICE_IN = _UxGT(" in:");
+ LSTR MSG_BACKLASH = _UxGT("Backlash");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Corectare");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Smoothing");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Nivelare Axa X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrare");
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Timeout Incalzitor");
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Reincalzire");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Reincalzire...");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivelare Axa X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Calibrare");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Timeout Incalzitor");
+ LSTR MSG_REHEAT = _UxGT("Reincalzire");
+ LSTR MSG_REHEATING = _UxGT("Reincalzire...");
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h
index 5f5afb049c..2de45e7d8d 100644
--- a/Marlin/src/lcd/language/language_ru.h
+++ b/Marlin/src/lcd/language/language_ru.h
@@ -32,880 +32,879 @@
namespace Language_ru {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Russian");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Russian");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Готов.");
- PROGMEM Language_Str MSG_YES = _UxGT("Да");
- PROGMEM Language_Str MSG_NO = _UxGT("Нет");
- PROGMEM Language_Str MSG_BACK = _UxGT("Назад");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Прерывание...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD-карта вставлена");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD-карта извлечена");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Вставьте SD-карту");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Готов.");
+ LSTR MSG_YES = _UxGT("Да");
+ LSTR MSG_NO = _UxGT("Нет");
+ LSTR MSG_BACK = _UxGT("Назад");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Прерывание...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("SD карта вставлена");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("SD карта извлечена");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Вставьте SD карту");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Сбой инициализации SD");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Сбой инициализации SD");
#else
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Сбой инициализ. SD");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Сбой инициализ. SD");
#endif
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Ошибка считывания");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB диск удалён");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Ошибка USB диска");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Ошибка считывания");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск удалён");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Ошибка USB диска");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполнение вызова");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполнение вызова");
#else
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполн. вызова");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполн. вызова");
#endif
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр. эндстопы");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Эндстопы"); // Max length 8 characters
- PROGMEM Language_Str MSG_MAIN = _UxGT("Основное меню");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Другие настройки");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Конфигурация");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Выключить двигатели");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню отладки");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест индикатора");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Парковка XYZ");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Парковка X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Парковка Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Парковка Z");
- PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Парковка ") LCD_STR_I;
- PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Парковка ") LCD_STR_J;
- PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Парковка ") LCD_STR_K;
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-выравнивание");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Итерация: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Уменьшение точности!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Точность достигнута");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Нулевое положение");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Нажмите чтобы начать");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Следующая точка");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Выравнивание готово!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Высота спада");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр. эндстопы");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Эндстопы"); // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("Основное меню");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Другие настройки");
+ LSTR MSG_CONFIGURATION = _UxGT("Конфигурация");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Выключить двигатели");
+ LSTR MSG_DEBUG_MENU = _UxGT("Меню отладки");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Тест индикатора");
+ LSTR MSG_AUTO_HOME = _UxGT("Парковка XYZ");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Парковка X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Парковка Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Парковка Z");
+ LSTR MSG_AUTO_HOME_I = _UxGT("Парковка ") LCD_STR_I;
+ LSTR MSG_AUTO_HOME_J = _UxGT("Парковка ") LCD_STR_J;
+ LSTR MSG_AUTO_HOME_K = _UxGT("Парковка ") LCD_STR_K;
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-выравнивание");
+ LSTR MSG_ITERATION = _UxGT("G34 Итерация: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Уменьшение точности!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Точность достигнута");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Нулевое положение");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Нажмите чтобы начать");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Следующая точка");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Выравнивание готово!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Высота спада");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Установ. смещения дома");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Смещение дома X");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Смещение дома Y");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Смещение дома Z");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Смещение дома ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Смещение дома ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Смещение дома ") LCD_STR_K;
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Установ. смещения дома");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Смещение дома X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Смещение дома Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Смещение дома Z");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Смещение дома ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Смещение дома ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Смещение дома ") LCD_STR_K;
#else
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Установ.смещ.дома");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Смещ. дома X");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Смещ. дома Y");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Смещ. дома Z");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Смещ. дома ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Смещ. дома ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Смещ. дома ") LCD_STR_K;
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Установ.смещ.дома");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Смещ. дома X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Смещ. дома Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Смещ. дома Z");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Смещ. дома ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Смещ. дома ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Смещ. дома ") LCD_STR_K;
#endif
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Смещения применены");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Установить ноль");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Выберите ноль");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Смещения применены");
+ LSTR MSG_SET_ORIGIN = _UxGT("Установить ноль");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Выберите ноль");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Последнее знач. ");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Последнее знач. ");
#else
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Послед. знач. ");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Послед. знач. ");
#endif
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Нагрев ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" всё");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" стол");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" правка");
+ LSTR MSG_PREHEAT_1 = _UxGT("Преднагрев ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Нагрев ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" сопло ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" всё");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" стол");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрев ") PREHEAT_1_LABEL _UxGT(" правка");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Преднагрев $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Нагрев $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Нагрев $ сопло");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Нагрев $ сопло ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Нагрев $ всё");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Нагрев $ стол");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Нагрев $ правка");
+ LSTR MSG_PREHEAT_M = _UxGT("Преднагрев $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Нагрев $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Нагрев $ сопло");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Нагрев $ сопло ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Нагрев $ всё");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Нагрев $ стол");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Нагрев $ правка");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Нагрев Свой");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Охлаждение");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Частота");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Управление лазером");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Нагрев Свой");
+ LSTR MSG_COOLDOWN = _UxGT("Охлаждение");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Частота");
+ LSTR MSG_LASER_MENU = _UxGT("Управление лазером");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Управление шпинделем");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Переключить лазер");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Переключ.шпиндель");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Мощность шпинделя");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Мощность лазера");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тестовый импульс мс");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Переключить обдув");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Переключить вакуум");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Управление шпинделем");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Переключить лазер");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Переключ.шпиндель");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Мощность шпинделя");
+ LSTR MSG_LASER_POWER = _UxGT("Мощность лазера");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Тестовый импульс мс");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Переключить обдув");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Переключить вакуум");
#else
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Управление шпинд.");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Переключ.лазер");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Переключ.шпинд");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Мощн.шпинделя");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Мощн. лазера");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тест. имп. мс");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Переключ. обдув");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Переключ. вакуум");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Управление шпинд.");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Переключ.лазер");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Переключ.шпинд");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Мощн.шпинделя");
+ LSTR MSG_LASER_POWER = _UxGT("Мощн. лазера");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Тест. имп. мс");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Переключ. обдув");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Переключ. вакуум");
#endif
- PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Управление обдувом");
- PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Ошибка обдува");
- PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Импульс лазера");
- PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Шпиндель вперёд");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Инверсия шпинделя");
+ LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Управление обдувом");
+ LSTR MSG_FLOWMETER_FAULT = _UxGT("Ошибка обдува");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Импульс лазера");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Шпиндель вперёд");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Инверсия шпинделя");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Включить питание");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Выключить питание");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Экструзия");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Втягивание");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Движение по осям");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Выравнивание стола");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Выровнять стол");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Выровнять углы");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Следующий угол");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Включить питание");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Выключить питание");
+ LSTR MSG_EXTRUDE = _UxGT("Экструзия");
+ LSTR MSG_RETRACT = _UxGT("Втягивание");
+ LSTR MSG_MOVE_AXIS = _UxGT("Движение по осям");
+ LSTR MSG_BED_LEVELING = _UxGT("Выравнивание стола");
+ LSTR MSG_LEVEL_BED = _UxGT("Выровнять стол");
+ LSTR MSG_BED_TRAMMING = _UxGT("Выровнять углы");
+ LSTR MSG_NEXT_CORNER = _UxGT("Следующий угол");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Вверх до срабатыв. зонда");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Углы в норме. Вырав.стола");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вверх до срабатыв. зонда");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Углы в норме. Вырав.стола");
#else
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Вверх до сраб. зонда");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Углы в норме. Вырав.");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вверх до сраб. зонда");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Углы в норме. Вырав.");
#endif
- PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хорошие точки: ");
- PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Последняя Z: ");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хорошие точки: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Последняя Z: ");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Смещение по Z");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Правка сетки окончена");
+ LSTR MSG_MESH_EDITOR = _UxGT("Смещение по Z");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Правка сетки окончена");
#else
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Смещение Z");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Правка окончена");
+ LSTR MSG_MESH_EDITOR = _UxGT("Смещение Z");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Правка окончена");
#endif
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Редактировать сетку");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Точка сетки");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Индекс X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Индекс Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Значение Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Свои команды");
+ LSTR MSG_EDIT_MESH = _UxGT("Редактировать сетку");
+ LSTR MSG_PROBING_POINT = _UxGT("Точка сетки");
+ LSTR MSG_MESH_X = _UxGT("Индекс X");
+ LSTR MSG_MESH_Y = _UxGT("Индекс Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Значение Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Свои команды");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 тест Z-зонда");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Отклонение");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 точка");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Зонд за пределами");
+ LSTR MSG_M48_TEST = _UxGT("M48 тест Z-зонда");
+ LSTR MSG_M48_DEVIATION = _UxGT("Отклонение");
+ LSTR MSG_M48_POINT = _UxGT("M48 точка");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Зонд за пределами");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Меню IDEX");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Размещение сопел");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Авто парковка");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Размножение");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Зеркальная копия");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Полный контроль");
- PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("Дублировать X-зазор");
+ LSTR MSG_IDEX_MENU = _UxGT("Меню IDEX");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Размещение сопел");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Авто парковка");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Размножение");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Зеркальная копия");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Полный контроль");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("Дублировать X-зазор");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2-е сопло X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2-е сопло Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2-е сопло Z");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2-е сопло Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2-е сопло @");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Выполняем G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Инструменты UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Настройка UBL");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Точка разворота");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ручной ввод сетки");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Выполняем G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("Инструменты UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Настройка UBL");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Точка разворота");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручной ввод сетки");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Разместить шайбу,измерить");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Убрать и замерить стол");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Разместить шайбу,измерить");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Убрать и замерить стол");
#else
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Разм.шайбу, измерить");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Убрать, измер. стол");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Разм.шайбу, измерить");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Убрать, измер. стол");
#endif
- PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("Мастер сеток UBL");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Измерение");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Двигаемся дальше");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Активировать UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивировать UBL");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Редактор сеток");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Править свою сетку");
+ LSTR MSG_UBL_MESH_WIZARD = _UxGT("Мастер сеток UBL");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Измерение");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Двигаемся дальше");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Активировать UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивировать UBL");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Редактор сеток");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Править свою сетку");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Температура стола");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Температура стола");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Температура сопла");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Температура сопла");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою сетку");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка сетки завершена");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Температура стола");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Температура стола");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Температура сопла");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Температура сопла");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою сетку");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка сетки завершена");
#else
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" стола, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" стола,") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка завершена");
+ LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" стола, ") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" стола,") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка завершена");
#endif
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точная правка сетки");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Построить сетку");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Построить сетку $");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точная правка сетки");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Построить сетку");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Построить сетку $");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить холодную сетку");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить холодную сетку");
#else
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Строить холод.сетку");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Строить холод.сетку");
#endif
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Правка высоты сетки");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Высота");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Проверить сетку");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Правка высоты сетки");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Высота");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Проверить сетку");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Проверить сетку $");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Проверить сетку $");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку");
#else
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Провер. сетку $");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Провер. свою сетку");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Провер. сетку $");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Провер. свою сетку");
#endif
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 нагрев стола");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрев сопла");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Ручная грунтовка");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Грунт фикс. длины");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Грунтовка сделана");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 завершена");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Выйти из G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Продолжить сетку");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Выравнивание сетки");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 нагрев стола");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрев сопла");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ручная грунтовка");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Грунт фикс. длины");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Грунтовка сделана");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 завершена");
+ LSTR MSG_G26_LEAVING = _UxGT("Выйти из G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Продолжить сетку");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Выравнивание сетки");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-х точечное выравнивание");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-х точечное выравнивание");
#else
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точечное выравн.");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точечное выравн.");
#endif
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Калибровка растера");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Выровнять сетку");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Крайние точки");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Тип карты");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Вывести карту сетки");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вывести на хост");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вывести в CSV");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Калибровка растера");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Выровнять сетку");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Крайние точки");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Тип карты");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Вывести карту сетки");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вывести на хост");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вывести в CSV");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить сетку снаружи");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Вывод информации UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить сетку снаружи");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Вывод информации UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя");
#else
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить снаружи");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Информация UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполн.");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить снаружи");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Информация UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполн.");
#endif
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ручное заполнение");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Умное заполнение");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Заполнить сетку");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Аннулировать всё");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Аннулир. ближайшую");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно править всё");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Настр. ближ. точку");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Хранилище сеток");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Слот памяти");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Загрузить сетку");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Сохранить сетку");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Сетка %i загружена");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Сетка %i сохранена");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Нет хранилища");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Ошибка: Сохран. UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Ошибка: Восстан.UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Смещение Z: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Смещение Z останов.");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL пошагово");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Строить холодную");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Умное заполнение");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Проверить сетку");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точно настр. всё");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Проверить сетку");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точно настр. всё");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Сохранить сетку");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ручное заполнение");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Умное заполнение");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Заполнить сетку");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Аннулировать всё");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Аннулир. ближайшую");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно править всё");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Настр. ближ. точку");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Хранилище сеток");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Слот памяти");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Загрузить сетку");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Сохранить сетку");
+ LSTR MSG_MESH_LOADED = _UxGT("Сетка %i загружена");
+ LSTR MSG_MESH_SAVED = _UxGT("Сетка %i сохранена");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Нет хранилища");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Ошибка: Сохран. UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Ошибка: Восстан.UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Смещение Z: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Смещение Z останов.");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL пошагово");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Строить холодную");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Умное заполнение");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Проверить сетку");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точно настр. всё");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Проверить сетку");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точно настр. всё");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Сохранить сетку");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Настройка подсветки");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Подсветка");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Предустановки света");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Красный");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Оранжевый");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Жёлтый");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Зелёный");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Синий");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Индиго");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Фиолетовый");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Белый");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Свет по умолчанию");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Канал =");
- PROGMEM Language_Str MSG_LEDS2 = _UxGT("Свет #2");
+ LSTR MSG_LED_CONTROL = _UxGT("Настройка подсветки");
+ LSTR MSG_LEDS = _UxGT("Подсветка");
+ LSTR MSG_LED_PRESETS = _UxGT("Предустановки света");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Красный");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Оранжевый");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Жёлтый");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Зелёный");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Синий");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Индиго");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Фиолетовый");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Белый");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Свет по умолчанию");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Канал =");
+ LSTR MSG_LEDS2 = _UxGT("Свет #2");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Свет #2 предустановки");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Свет #2 предустановки");
#else
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Свет #2 предустан.");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Свет #2 предустан.");
#endif
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Яркость");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Свой цвет подсветки");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Уровень красного");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Уровень зелёного");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Уровень синего");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Уровень белого");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Яркость");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Яркость");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Свой цвет подсветки");
+ LSTR MSG_INTENSITY_R = _UxGT("Уровень красного");
+ LSTR MSG_INTENSITY_G = _UxGT("Уровень зелёного");
+ LSTR MSG_INTENSITY_B = _UxGT("Уровень синего");
+ LSTR MSG_INTENSITY_W = _UxGT("Уровень белого");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Яркость");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Движемся...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Освободить XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Движение по X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Движение по Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Движение по Z");
- PROGMEM Language_Str MSG_MOVE_I = _UxGT("Движение по ") LCD_STR_I;
- PROGMEM Language_Str MSG_MOVE_J = _UxGT("Движение по ") LCD_STR_J;
- PROGMEM Language_Str MSG_MOVE_K = _UxGT("Движение по ") LCD_STR_K;
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Экструдер");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Экструдер *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Сопло не нагрето");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Движение %sмм");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Движение 0.1мм");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Движение 1мм");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Движение 10мм");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Движение 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Скорость");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Z стола");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Сопло ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Сопло запарковано");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Сопло ожидает");
- PROGMEM Language_Str MSG_BED = _UxGT("Стол, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
+ LSTR MSG_MOVING = _UxGT("Движемся...");
+ LSTR MSG_FREE_XY = _UxGT("Освободить XY");
+ LSTR MSG_MOVE_X = _UxGT("Движение по X");
+ LSTR MSG_MOVE_Y = _UxGT("Движение по Y");
+ LSTR MSG_MOVE_Z = _UxGT("Движение по Z");
+ LSTR MSG_MOVE_I = _UxGT("Движение по ") LCD_STR_I;
+ LSTR MSG_MOVE_J = _UxGT("Движение по ") LCD_STR_J;
+ LSTR MSG_MOVE_K = _UxGT("Движение по ") LCD_STR_K;
+ LSTR MSG_MOVE_E = _UxGT("Экструдер");
+ LSTR MSG_MOVE_EN = _UxGT("Экструдер *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Сопло не нагрето");
+ LSTR MSG_MOVE_N_MM = _UxGT("Движение %sмм");
+ LSTR MSG_MOVE_01MM = _UxGT("Движение 0.1мм");
+ LSTR MSG_MOVE_1MM = _UxGT("Движение 1мм");
+ LSTR MSG_MOVE_10MM = _UxGT("Движение 10мм");
+ LSTR MSG_MOVE_100MM = _UxGT("Движение 100mm");
+ LSTR MSG_SPEED = _UxGT("Скорость");
+ LSTR MSG_BED_Z = _UxGT("Z стола");
+ LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
+ LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковано");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло ожидает");
+ LSTR MSG_BED = _UxGT("Стол, ") LCD_STR_DEGREE "C";
+ LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_COOLER = _UxGT("Охлаждение лазера");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Переключ. охлажд.");
- PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Безопасн. потока");
+ LSTR MSG_COOLER = _UxGT("Охлаждение лазера");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Переключ. охлажд.");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Безопасн. потока");
#else
- PROGMEM Language_Str MSG_COOLER = _UxGT("Охлажд. лазера");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Переключ. охл.");
- PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Безопас.потока");
+ LSTR MSG_COOLER = _UxGT("Охлажд. лазера");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Переключ. охл.");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Безопас.потока");
#endif
- PROGMEM Language_Str MSG_LASER = _UxGT("Лазер");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Кулер");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Кулер ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Сохранённый кулер ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Дополн. кулер");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Дополн. кулер ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Контроллер кулера");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холостые обороты");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Автовключение");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Рабочие обороты");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Период простоя");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Поток");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Поток ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Настройки");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С мин");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С макс");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Автотемпер.");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Вкл");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Выкл");
+ LSTR MSG_LASER = _UxGT("Лазер");
+ LSTR MSG_FAN_SPEED = _UxGT("Кулер");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Кулер ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Сохранённый кулер ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Дополн. кулер");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Дополн. кулер ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Контроллер кулера");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холостые обороты");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Автовключение");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Рабочие обороты");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Период простоя");
+ LSTR MSG_FLOW = _UxGT("Поток");
+ LSTR MSG_FLOW_N = _UxGT("Поток ~");
+ LSTR MSG_CONTROL = _UxGT("Настройки");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С мин");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С макс");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
+ LSTR MSG_AUTOTEMP = _UxGT("Автотемпер.");
+ LSTR MSG_LCD_ON = _UxGT("Вкл");
+ LSTR MSG_LCD_OFF = _UxGT("Выкл");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("Автоподбор PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("Автоподбор PID *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Подбор PID выполнен");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Сбой автоподбора. Плохой экструдер.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Сбой автоподбора. Температура повышена.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Сбой автоподбора! Завершение времени.");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("Автоподбор PID");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автоподбор PID *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Подбор PID выполнен");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Сбой автоподбора. Плохой экструдер.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Сбой автоподбора. Температура повышена.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Сбой автоподбора! Завершение времени.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Выбор");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Выбор *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Ускорение");
- PROGMEM Language_Str MSG_JERK = _UxGT("Рывок");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-рывок");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-рывок");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-рывок");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-рывок");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-рывок");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-рывок");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-рывок");
+ LSTR MSG_SELECT = _UxGT("Выбор");
+ LSTR MSG_SELECT_E = _UxGT("Выбор *");
+ LSTR MSG_ACC = _UxGT("Ускорение");
+ LSTR MSG_JERK = _UxGT("Рывок");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-рывок");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-рывок");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-рывок");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-рывок");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-рывок");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-рывок");
+ LSTR MSG_VE_JERK = _UxGT("Ve-рывок");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла");
#else
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Отклон. узла");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Отклон. узла");
#endif
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Скорость, мм/с");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Скор.макс ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Скор.макс ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Скор.макс ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Скор.макс ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Скор.макс ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Скор.макс ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Скор.макс ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Скор.макс *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Скор.мин");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Перемещение мин");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Ускорение, мм/с2");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Ускор.макс ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Ускор.макс ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Ускор.макс ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Ускор.макс ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Ускор.макс ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Ускор.макс ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Ускор.макс ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Ускор.макс *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Ускор.втягив.");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Ускор.путеш.");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс.");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мин.");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Шагов/мм");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" шаг/мм");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" шаг/мм");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" шаг/мм");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" шаг/мм");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" шаг/мм");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" шаг/мм");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E шаг/мм");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* шаг/мм");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Движение");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Филамент");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E в мм") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E огран.,мм") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E огран. *");
+ LSTR MSG_VELOCITY = _UxGT("Скорость, мм/с");
+ LSTR MSG_VMAX_A = _UxGT("Скор.макс ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Скор.макс ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Скор.макс ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Скор.макс ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Скор.макс ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Скор.макс ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Скор.макс ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Скор.макс *");
+ LSTR MSG_VMIN = _UxGT("Скор.мин");
+ LSTR MSG_VTRAV_MIN = _UxGT("Перемещение мин");
+ LSTR MSG_ACCELERATION = _UxGT("Ускорение, мм/с2");
+ LSTR MSG_AMAX_A = _UxGT("Ускор.макс ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Ускор.макс ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Ускор.макс ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Ускор.макс ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Ускор.макс ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Ускор.макс ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Ускор.макс ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Ускор.макс *");
+ LSTR MSG_A_RETRACT = _UxGT("Ускор.втягив.");
+ LSTR MSG_A_TRAVEL = _UxGT("Ускор.путеш.");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс.");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мин.");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Шагов/мм");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" шаг/мм");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" шаг/мм");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" шаг/мм");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" шаг/мм");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" шаг/мм");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" шаг/мм");
+ LSTR MSG_E_STEPS = _UxGT("E шаг/мм");
+ LSTR MSG_EN_STEPS = _UxGT("* шаг/мм");
+ LSTR MSG_TEMPERATURE = _UxGT("Температура");
+ LSTR MSG_MOTION = _UxGT("Движение");
+ LSTR MSG_FILAMENT = _UxGT("Филамент");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E в мм") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E огран.,мм") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E огран. *");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Диам. филамента");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Диам. филамента *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Диам. филамента");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Диам. филамента *");
#else
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Диам. филам.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Диам. филам. *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Диам. филам.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Диам. филам. *");
#endif
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Загрузка, мм");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Выгрузка, мм");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Kоэф. продвиж.");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Kоэф. продвиж. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Контраст экрана");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Сохранить настройки");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Загрузить настройки");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Загрузка, мм");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Выгрузка, мм");
+ LSTR MSG_ADVANCE_K = _UxGT("Kоэф. продвиж.");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Kоэф. продвиж. *");
+ LSTR MSG_CONTRAST = _UxGT("Контраст экрана");
+ LSTR MSG_STORE_EEPROM = _UxGT("Сохранить настройки");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Загрузить настройки");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("На базовые параметры");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Инициализация EEPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базовые параметры");
+ LSTR MSG_INIT_EEPROM = _UxGT("Инициализация EEPROM");
#else
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("На базовые парам.");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Инициализ. EEPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базовые парам.");
+ LSTR MSG_INIT_EEPROM = _UxGT("Инициализ. EEPROM");
#endif
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Сбой EEPROM: CRC");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Сбой EEPROM: индекс");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Сбой EEPROM: версия");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Параметры сохранены");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Обновление прошивки");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Сброс принтера");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Обновить");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Главный экран");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Подготовить");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Настроить");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Монитор питания");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Ток");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Напряжение");
- PROGMEM Language_Str MSG_POWER = _UxGT("Мощность");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Начало печати");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Сбой EEPROM: CRC");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Сбой EEPROM: индекс");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Сбой EEPROM: версия");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Параметры сохранены");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Обновление прошивки");
+ LSTR MSG_RESET_PRINTER = _UxGT("Сброс принтера");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Обновить");
+ LSTR MSG_INFO_SCREEN = _UxGT("Главный экран");
+ LSTR MSG_PREPARE = _UxGT("Подготовить");
+ LSTR MSG_TUNE = _UxGT("Настроить");
+ LSTR MSG_POWER_MONITOR = _UxGT("Монитор питания");
+ LSTR MSG_CURRENT = _UxGT("Ток");
+ LSTR MSG_VOLTAGE = _UxGT("Напряжение");
+ LSTR MSG_POWER = _UxGT("Мощность");
+ LSTR MSG_START_PRINT = _UxGT("Начало печати");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Дальше"); //short text for buttons
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Иниц-я");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Стоп");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Печать");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Сброс");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Игнорир.");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Отмена");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Готово");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Назад");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Продолжить");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Пропустить");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Дальше"); //short text for buttons
+ LSTR MSG_BUTTON_INIT = _UxGT("Иниц-я");
+ LSTR MSG_BUTTON_STOP = _UxGT("Стоп");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Печать");
+ LSTR MSG_BUTTON_RESET = _UxGT("Сброс");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Игнорир.");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Отмена");
+ LSTR MSG_BUTTON_DONE = _UxGT("Готово");
+ LSTR MSG_BUTTON_BACK = _UxGT("Назад");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Продолжить");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Пропустить");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Пауза печати");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Продолжить печать");
- PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Старт с хоста");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Остановить печать");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Печать объекта");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Завершить объект");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Завершить объект =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Восстановение сбоя");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Печать с SD карты");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Нет SD карты");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Сон...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Продолжить...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Печать на паузе");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Печать...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Печать отменена");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Печать завершена");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Нет движения.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("УБИТО. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ОСТАНОВЛЕНО. ");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Пауза печати");
+ LSTR MSG_RESUME_PRINT = _UxGT("Продолжить печать");
+ LSTR MSG_HOST_START_PRINT = _UxGT("Старт с хоста");
+ LSTR MSG_STOP_PRINT = _UxGT("Остановить печать");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Печать объекта");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Завершить объект");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершить объект =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Восстановение сбоя");
+ LSTR MSG_MEDIA_MENU = _UxGT("Печать с SD карты");
+ LSTR MSG_NO_MEDIA = _UxGT("Нет SD карты");
+ LSTR MSG_DWELL = _UxGT("Сон...");
+ LSTR MSG_USERWAIT = _UxGT("Продолжить...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Печать на паузе");
+ LSTR MSG_PRINTING = _UxGT("Печать...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Печать отменена");
+ LSTR MSG_PRINT_DONE = _UxGT("Печать завершена");
+ LSTR MSG_NO_MOVE = _UxGT("Нет движения.");
+ LSTR MSG_KILLED = _UxGT("УБИТО. ");
+ LSTR MSG_STOPPED = _UxGT("ОСТАНОВЛЕНО. ");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Втягивание, мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втягив., мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возврат смены, мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возврат смены, V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автовтягивание");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Втягивание, мм");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втягив., мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возврат смены, мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возврат смены, V");
+ LSTR MSG_AUTORETRACT = _UxGT("Автовтягивание");
#else
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Втягив., мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втяг.,мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возвр.смены,мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возвр.смены V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автовтягив.");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Втягив., мм");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Смена втяг.,мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возвр.смены,мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возвр.смены V");
+ LSTR MSG_AUTORETRACT = _UxGT("Автовтягив.");
#endif
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Подскок, мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Втягивание V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Возврат, мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Возврат V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Подскок, мм");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Втягивание V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Возврат, мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Возврат V");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Поменять длины");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Поменять длины");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнительно");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнительно");
#else
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнит.");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнит.");
#endif
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистить длину");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистить длину");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Смена сопел");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Поднятие по Z");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Смена сопел");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Поднятие по Z");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Начальная скор.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скорость втягив.");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Начальная скор.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скорость втягив.");
#else
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Началь.скор.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скор.втягив.");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Началь.скор.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скор.втягив.");
#endif
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Парковать голову");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Вернуть скорость");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Обороти кулера");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Время кулера");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Авто Вкл.");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Авто Выкл.");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Замена инструмента");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто замена");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Последний экструдер");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Замена на *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Смена филамента");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Смена филамента *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Загрузить филамент");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Парковать голову");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Вернуть скорость");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Обороти кулера");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Время кулера");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Авто Вкл.");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Авто Выкл.");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Замена инструмента");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто замена");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Последний экструдер");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Замена на *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Смена филамента");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Смена филамента *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Загрузить филамент");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Загрузить филамент *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Выгрузить филамент *");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Загрузить филамент *");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Выгрузить филамент *");
#else
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Подать филамент *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Убрать филамент *");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Подать филамент *");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Убрать филамент *");
#endif
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Выгрузить всё");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Установить SD карту");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Сменить SD карту");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Освободить SD карту");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-зонд вне стола");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Фактор наклона");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("Z-зонд BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Тестирование BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Сброс BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Поднять BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Опустить BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Режим SW");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Режим 5V");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Режим OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Режим сохранения");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Установить на 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Установить на OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Слив отчёта");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("ОПАСНОСТЬ: Неправильные параметры приводят к повреждениям! Продолжить?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("Z-Зонд TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Инициализация");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Тест Z-смещения");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Сохранить");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Установить TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Установить зонд");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Загрузить зонд");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Сначала паркуй %s%s%s");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Смещения Z-зонда");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Смещение X");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Смещение Y");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Смещение Z");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Выгрузить всё");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Установить SD карту");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Сменить SD карту");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Освободить SD карту");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z-зонд вне стола");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Фактор наклона");
+ LSTR MSG_BLTOUCH = _UxGT("Z-зонд BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Тестирование BLTouch");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Сброс BLTouch");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Поднять BLTouch");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Опустить BLTouch");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Режим SW");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Режим 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Режим OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Режим сохранения");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Установить на 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Установить на OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Слив отчёта");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("ОПАСНОСТЬ: Неправильные параметры приводят к повреждениям! Продолжить?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("Z-Зонд TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Инициализация");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Тест Z-смещения");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Сохранить");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Установить TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Установить зонд");
+ LSTR MSG_MANUAL_STOW = _UxGT("Загрузить зонд");
+ LSTR MSG_HOME_FIRST = _UxGT("Сначала паркуй %s%s%s");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Смещения Z-зонда");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Смещение X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Смещение Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Смещение Z");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двигать сопло к столу");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двигать сопло к столу");
#else
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двиг. сопло к столу");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Двиг. сопло к столу");
#endif
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Микрошаг X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Микрошаг Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Микрошаг Z");
- PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Микрошаг ") LCD_STR_I;
- PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Микрошаг ") LCD_STR_J;
- PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Микрошаг ") LCD_STR_K;
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка:Избыточная Т");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("УТЕЧКА ТЕПЛА");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("УТЕЧКА ТЕПЛА СТОЛА");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("УТЕЧКА ТЕПЛА КАМЕРЫ");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("УТЕЧКА ОХЛАЖДЕНИЯ");
- PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("ОХЛАДИТЬ НЕ УДАЛОСЬ");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Ошибка: Т макс.");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Ошибка: Т мин.");
- PROGMEM Language_Str MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Сделайте сброс");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("д"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("ч"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("м"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Нагрев...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Охлаждение...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Нагрев стола...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охлаждение стола...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Нагрев зонда...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Охлаждение зонда...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Нагрев камеры...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охладжение камеры...");
- PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Охлаждение лазера...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калибровка Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калибровать X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровать Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровать Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровать центр");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Настройки Delta");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Авто калибровка");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Высота Delta");
+ LSTR MSG_BABYSTEP_X = _UxGT("Микрошаг X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Микрошаг Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Микрошаг Z");
+ LSTR MSG_BABYSTEP_I = _UxGT("Микрошаг ") LCD_STR_I;
+ LSTR MSG_BABYSTEP_J = _UxGT("Микрошаг ") LCD_STR_J;
+ LSTR MSG_BABYSTEP_K = _UxGT("Микрошаг ") LCD_STR_K;
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка:Избыточная Т");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("УТЕЧКА ТЕПЛА");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("УТЕЧКА ТЕПЛА СТОЛА");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("УТЕЧКА ТЕПЛА КАМЕРЫ");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("УТЕЧКА ОХЛАЖДЕНИЯ");
+ LSTR MSG_COOLING_FAILED = _UxGT("ОХЛАДИТЬ НЕ УДАЛОСЬ");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Ошибка: Т макс.");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Ошибка: Т мин.");
+ LSTR MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН");
+ LSTR MSG_PLEASE_RESET = _UxGT("Сделайте сброс");
+ LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("ч"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("м"); // One character only
+ LSTR MSG_HEATING = _UxGT("Нагрев...");
+ LSTR MSG_COOLING = _UxGT("Охлаждение...");
+ LSTR MSG_BED_HEATING = _UxGT("Нагрев стола...");
+ LSTR MSG_BED_COOLING = _UxGT("Охлаждение стола...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Нагрев зонда...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Охлаждение зонда...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Нагрев камеры...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Охладжение камеры...");
+ LSTR MSG_LASER_COOLING = _UxGT("Охлаждение лазера...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Калибровка Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Калибровать X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Калибровать Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Калибровать Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калибровать центр");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Настройки Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Авто калибровка");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Высота Delta");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондировать Z-смещения");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондировать Z-смещения");
#else
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондир. Z-смещения");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондир. Z-смещения");
#endif
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стержень диаг.");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Высота");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Радиус");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("О принтере");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Данные принтера");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Стержень диаг.");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Высота");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Радиус");
+ LSTR MSG_INFO_MENU = _UxGT("О принтере");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Данные принтера");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-точечное выравнивание");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Линейное выравнивание");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Билинейное выравнивание");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-точечное выравнивание");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Линейное выравнивание");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Билинейное выравнивание");
#else
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-точ. выравнив.");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Линейное выравн.");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Билин. выравнив.");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-точ. выравнив.");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Линейное выравн.");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Билин. выравнив.");
#endif
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Управление UBL");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Выравнивание сетки");
+ LSTR MSG_UBL_LEVELING = _UxGT("Управление UBL");
+ LSTR MSG_MESH_LEVELING = _UxGT("Выравнивание сетки");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондирование выполнено");
+ LSTR MSG_MESH_DONE = _UxGT("Зондирование выполнено");
#else
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондиров. выполнено");
+ LSTR MSG_MESH_DONE = _UxGT("Зондиров. выполнено");
#endif
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Данные платы");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Термисторы");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Экструдеры");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Скорость,БОД");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Протокол");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Данные платы");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Термисторы");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Экструдеры");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Скорость,БОД");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Протокол");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль утечки Т: Выкл");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Контроль утечки Т: Вкл");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Время простоя хотенда");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль утечки Т: Выкл");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контроль утечки Т: Вкл");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Время простоя хотенда");
#else
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Контр.утечки Т:Выкл");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Контр.утечки Т:Вкл");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Время прост.хот-а");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контр.утечки Т:Выкл");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контр.утечки Т:Вкл");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Время прост.хот-а");
#endif
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Подсветка корпуса");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Неверный принтер");
+ LSTR MSG_CASE_LIGHT = _UxGT("Подсветка корпуса");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Неверный принтер");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Общее время печати");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее задание");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Длина филамента");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Общее время печати");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее задание");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Длина филамента");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Напечатано");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Общее время");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Выдавлено");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Напечатано");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Общее время");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Наидольшее");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Выдавлено");
#endif
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Мин. ") LCD_STR_THERMOMETER;
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER;
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("БП");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Сила привода");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Привод, %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Привод, %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Привод, %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Привод, %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Привод, %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Привод, %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Привод, %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("СБОЙ СВЯЗИ С TMC");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запись DAC в EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("ЗАМЕНА ФИЛАМЕНТА");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ПЕЧАТЬ НА ПАУЗЕ");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАГРУЗКА ФИЛАМЕНТА");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВЫГРУЗКА ФИЛАМЕНТА");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ОПЦИИ ПРОДОЛЖЕНИЯ:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Выдавить ещё");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Возобновить печать");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопла: ");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Мин. ") LCD_STR_THERMOMETER;
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER;
+ LSTR MSG_INFO_PSU = _UxGT("БП");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Сила привода");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Привод, %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Привод, %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Привод, %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Привод, %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Привод, %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Привод, %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Привод, %");
+ LSTR MSG_ERROR_TMC = _UxGT("СБОЙ СВЯЗИ С TMC");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Запись DAC в EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("ЗАМЕНА ФИЛАМЕНТА");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ПЕЧАТЬ НА ПАУЗЕ");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАГРУЗКА ФИЛАМЕНТА");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВЫГРУЗКА ФИЛАМЕНТА");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ОПЦИИ ПРОДОЛЖЕНИЯ:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Выдавить ещё");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Возобновить печать");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопла: ");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч. филамента");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч. филамента");
#else
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч.филам.");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч.филам.");
#endif
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("До конца, мм");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Ошибка парковки");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Ошибка зондирования");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("До конца, мм");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Ошибка парковки");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Ошибка зондирования");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ВЫБИРЕТЕ ФИЛАМЕНТ");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("Настройки MMU");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ВЫБИРЕТЕ ФИЛАМЕНТ");
+ LSTR MSG_MMU2_MENU = _UxGT("Настройки MMU");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Обновить прошивку MMU!");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Обновить прошивку MMU!");
#else
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Обнови прошивку MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Обнови прошивку MMU");
#endif
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU требует внимания");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Продолжить печать");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Продолжение...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Загрузить филамент");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Загрузить всё");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Загрузить в сопло");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Извлечь филамент");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Извлечь филамент ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Выгрузить филамент");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Загрузка %i...");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU требует внимания");
+ LSTR MSG_MMU2_RESUME = _UxGT("Продолжить печать");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Продолжение...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Загрузить филамент");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Загрузить всё");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Загрузить в сопло");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Извлечь филамент");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Извлечь филамент ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Выгрузить филамент");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Загрузка %i...");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлечение филамента...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлечение филамента...");
#else
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлеч.филамента...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлеч.филамента...");
#endif
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Выгрузка....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Всё");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Филамент ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Перезапуск MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Перезапуск MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Удалите и нажмите");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Выгрузка....");
+ LSTR MSG_MMU2_ALL = _UxGT("Всё");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Филамент ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Перезапуск MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Перезапуск MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Удалите и нажмите");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MIX = _UxGT("Смешивание");
+ LSTR MSG_MIX = _UxGT("Смешивание");
#else
- PROGMEM Language_Str MSG_MIX = _UxGT("Смешив.");
+ LSTR MSG_MIX = _UxGT("Смешив.");
#endif
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Компонент =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Смеситель");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Градиент");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Полный градиент");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Цикличное смешивание");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Градиент смешивания");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Сменить градиент");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент =");
+ LSTR MSG_MIXER = _UxGT("Смеситель");
+ LSTR MSG_GRADIENT = _UxGT("Градиент");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Полный градиент");
+ LSTR MSG_CYCLE_MIX = _UxGT("Цикличное смешивание");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Градиент смешивания");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Сменить градиент");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Переключить смешивание");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Активация В-инструм.");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Начало В-инструмента");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Конец В-инструмента");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Псевдоним В-инструмента");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Сброс В-инструментов");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Смешать В-инструменты");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("В-инструменты сброшены");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Переключить смешивание");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Активация В-инструм.");
+ LSTR MSG_START_VTOOL = _UxGT("Начало В-инструмента");
+ LSTR MSG_END_VTOOL = _UxGT("Конец В-инструмента");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдоним В-инструмента");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Сброс В-инструментов");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Смешать В-инструменты");
+ LSTR MSG_VTOOLS_RESET = _UxGT("В-инструменты сброшены");
#else
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Перекл. смешивание");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Актив.В-инструм.");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("В-инструм.нач.");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("В-инструм.кон.");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Псевдоним В-инстр.");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Сброс В-инструм.");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Смешать В-инструм.");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("В-инструм. сброшены");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Перекл. смешивание");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Актив.В-инструм.");
+ LSTR MSG_START_VTOOL = _UxGT("В-инструм.нач.");
+ LSTR MSG_END_VTOOL = _UxGT("В-инструм.кон.");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдоним В-инстр.");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Сброс В-инструм.");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Смешать В-инструм.");
+ LSTR MSG_VTOOLS_RESET = _UxGT("В-инструм. сброшены");
#endif
- PROGMEM Language_Str MSG_START_Z = _UxGT("Начало Z");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Конец Z");
+ LSTR MSG_START_Z = _UxGT("Начало Z");
+ LSTR MSG_END_Z = _UxGT(" Конец Z");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Игры");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Кирпичи");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Вторжение");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Змейка");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Лабиринт");
+ LSTR MSG_GAMES = _UxGT("Игры");
+ LSTR MSG_BRICKOUT = _UxGT("Кирпичи");
+ LSTR MSG_INVADERS = _UxGT("Вторжение");
+ LSTR MSG_SNAKE = _UxGT("Змейка");
+ LSTR MSG_MAZE = _UxGT("Лабиринт");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Плохой индекс страницы");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Плохая скорость страницы");
+ LSTR MSG_BAD_PAGE = _UxGT("Плохой индекс страницы");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Плохая скорость страницы");
#else
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Плохая страница");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Плохая скор.стран.");
+ LSTR MSG_BAD_PAGE = _UxGT("Плохая страница");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Плохая скор.стран.");
#endif
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Редактировать пароль");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Нужен логин");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Настройки пароля");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Введите цифру");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Смените пароль");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Удалить пароль");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Пароль это ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Старт через");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Редактировать пароль");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Нужен логин");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Настройки пароля");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Введите цифру");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Смените пароль");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Удалить пароль");
+ LSTR MSG_PASSWORD_SET = _UxGT("Пароль это ");
+ LSTR MSG_START_OVER = _UxGT("Старт через");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни для сохранения!");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни для сохранения!");
#else
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни, сохрани!");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Запомни, сохрани!");
#endif
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Пароль удалён");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Пароль удалён");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Парковка..."));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Парковка..."));
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Нажмите кнопку", "для продолжения", "печати"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Ожидайте начала", "смены филамента"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставьте филамент", "и нажмите кнопку", "для продолжения"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_3_LINE("Нажмите кнопку", "для нагрева", "сопла..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Нагрев сопла", "Ждите..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Ожидайте", "выгрузки", "филамента"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Ожидайте", "загрузки", "филамента"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Ожидайте", "экструзии", "филамента"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Нажмите кнопку", "для завершения", "очистки филамента"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Ожидайте", "возобновления", "печати"));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Нажмите кнопку", "для продолжения", "печати"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_2_LINE("Ожидайте начала", "смены филамента"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставьте филамент", "и нажмите кнопку", "для продолжения"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_3_LINE("Нажмите кнопку", "для нагрева", "сопла..."));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Нагрев сопла", "Ждите..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Ожидайте", "выгрузки", "филамента"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Ожидайте", "загрузки", "филамента"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Ожидайте", "экструзии", "филамента"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Нажмите кнопку", "для завершения", "очистки филамента"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Ожидайте", "возобновления", "печати"));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Продолжить печать"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Ожидайте..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставь и нажми"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Нагреть сопло"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрев..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Выгрузка..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Загрузка..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Выдавливание..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершить очистку"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Возобновление..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Продолжить печать"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Ожидайте..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставь и нажми"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Нагреть сопло"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрев..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Выгрузка..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Загрузка..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Выдавливание..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершить очистку"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Возобновление..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Драйвера TMC");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Ток двигателей");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Гибридный режим");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Режим без эндстопов");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Режим драйвера");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим вкл");
+ LSTR MSG_TMC_DRIVERS = _UxGT("Драйвера TMC");
+ LSTR MSG_TMC_CURRENT = _UxGT("Ток двигателей");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Гибридный режим");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Режим без эндстопов");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Режим драйвера");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим вкл");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Сброс");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" в:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Люфт");
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Исправление");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Сглаживание");
+ LSTR MSG_SERVICE_RESET = _UxGT("Сброс");
+ LSTR MSG_SERVICE_IN = _UxGT(" в:");
+ LSTR MSG_BACKLASH = _UxGT("Люфт");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Исправление");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Сглаживание");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Уровень оси X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Авто калибровка");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Уровень оси X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Авто калибровка");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Время нагревателя вышло");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагревателя вышло");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Время нагрев. вышло");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Время нагрев. вышло");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Возобновить нагрев");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Нагрев...");
+ LSTR MSG_REHEAT = _UxGT("Возобновить нагрев");
+ LSTR MSG_REHEATING = _UxGT("Нагрев...");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Мастер Z-зонда");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Мастер Z-зонда");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Зондиров. контр. точки Z");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Движение к точке зондиров.");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондиров. контр. точки Z");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Движение к точке зондиров.");
#else
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Зондир.контр.точки Z");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Движ. к точке зондир.");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондир.контр.точки Z");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Движ. к точке зондир.");
#endif
- PROGMEM Language_Str MSG_SOUND = _UxGT("Звук");
+ LSTR MSG_SOUND = _UxGT("Звук");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Верхний левый");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Нижний левый");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Верхний правый");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Нижний правый");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Калибровка успешна");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Ошибка калибровки");
+ LSTR MSG_TOP_LEFT = _UxGT("Верхний левый");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Нижний левый");
+ LSTR MSG_TOP_RIGHT = _UxGT("Верхний правый");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Нижний правый");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Калибровка успешна");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Ошибка калибровки");
- PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
- PROGMEM Language_Str MSG_SD_CARD = _UxGT("SD Карта");
- PROGMEM Language_Str MSG_USB_DISK = _UxGT("USB Диск");
+ LSTR MSG_SD_CARD = _UxGT("SD Карта");
+ LSTR MSG_USB_DISK = _UxGT("USB Диск");
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_sk.h b/Marlin/src/lcd/language/language_sk.h
index 284fb9554a..81fb9a3d01 100644
--- a/Marlin/src/lcd/language/language_sk.h
+++ b/Marlin/src/lcd/language/language_sk.h
@@ -34,722 +34,715 @@
* Substitutions are applied for the following characters when used
* in menu items that call lcd_put_u8str_ind_P with an index:
*
+ * $ displays an inserted C-string
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
+ * @ displays an axis name such as XYZUVW, or E for an extruder
*/
#define DISPLAY_CHARSET_ISO10646_SK
namespace Language_sk {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Slovenčina");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Slovenčina");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" pripravená.");
- PROGMEM Language_Str MSG_YES = _UxGT("ÁNO");
- PROGMEM Language_Str MSG_NO = _UxGT("NIE");
- PROGMEM Language_Str MSG_BACK = _UxGT("Naspäť");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Ruším...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Karta vložená");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Karta vybraná");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Čakám na kartu");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Inicial. SD zlyhala");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Chyba čítania karty");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB zaria. odstrán.");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Chyba spúšťania USB");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Preteč. podprogramu");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znakov
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft. endstopy");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Hlavná ponuka");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Pokročilé nastav.");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfigurácia");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Auto-štart");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Uvolniť motory");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Ponuka ladenia");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. priebehu");
- PROGMEM Language_Str MSG_HOMING = _UxGT("Parkovanie");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Domovská pozícia");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Domov os X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Domov os Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Domov os Z");
- PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Domov os ") LCD_STR_I;
- PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Domov os ") LCD_STR_J;
- PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Domov os ") LCD_STR_K;
- PROGMEM Language_Str MSG_FILAMENT_SET = _UxGT("Nastav. filamentu");
- PROGMEM Language_Str MSG_FILAMENT_MAN = _UxGT("Správa filamentu");
- PROGMEM Language_Str MSG_LEVBED_FL = _UxGT("Ľavý predný");
- PROGMEM Language_Str MSG_LEVBED_FR = _UxGT("Pravý predný");
- PROGMEM Language_Str MSG_LEVBED_C = _UxGT("Stred");
- PROGMEM Language_Str MSG_LEVBED_BL = _UxGT("Ľavý zadný");
- PROGMEM Language_Str MSG_LEVBED_BR = _UxGT("Pravý zadný");
- PROGMEM Language_Str MSG_MANUAL_MESH = _UxGT("Ručná mriežka");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto-zarovn. Z");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("Iterácia G34: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Klesajúca presnosť!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Dosiahnutá presnosť");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Parkovanie XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím začnete");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Ďalší bod");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Vyrovnanie hotové!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Výška rovnania");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Nastav. dom. ofsety");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("X Ofset");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Y Ofset");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Z Ofset");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = LCD_STR_I _UxGT(" Ofset");
- PROGMEM Language_Str MSG_HOME_OFFSET_J = LCD_STR_J _UxGT(" Ofset");
- PROGMEM Language_Str MSG_HOME_OFFSET_K = LCD_STR_K _UxGT(" Ofset");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastavené");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Nastaviť začiatok");
- PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Spriev. vyrovn.");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Vyberte začiatok");
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Posl. hodnota ");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" pripravená.");
+ LSTR MSG_YES = _UxGT("ÁNO");
+ LSTR MSG_NO = _UxGT("NIE");
+ LSTR MSG_BACK = _UxGT("Naspäť");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Ruším...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Karta vložená");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Karta vybraná");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Čakám na kartu");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Inicial. SD zlyhala");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Chyba čítania karty");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB zaria. odstrán.");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Chyba spúšťania USB");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Preteč. podprogramu");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Endstopy"); // max 8 znakov
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Soft. endstopy");
+ LSTR MSG_MAIN = _UxGT("Hlavná ponuka");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Pokročilé nastav.");
+ LSTR MSG_CONFIGURATION = _UxGT("Konfigurácia");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Auto-štart");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Uvolniť motory");
+ LSTR MSG_DEBUG_MENU = _UxGT("Ponuka ladenia");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Test uk. priebehu");
+ LSTR MSG_HOMING = _UxGT("Parkovanie");
+ LSTR MSG_AUTO_HOME = _UxGT("Domovská pozícia");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Domov os X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Domov os Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Domov os Z");
+ LSTR MSG_AUTO_HOME_I = _UxGT("Domov os ") LCD_STR_I;
+ LSTR MSG_AUTO_HOME_J = _UxGT("Domov os ") LCD_STR_J;
+ LSTR MSG_AUTO_HOME_K = _UxGT("Domov os ") LCD_STR_K;
+ LSTR MSG_FILAMENT_SET = _UxGT("Nastav. filamentu");
+ LSTR MSG_FILAMENT_MAN = _UxGT("Správa filamentu");
+ LSTR MSG_LEVBED_FL = _UxGT("Ľavý predný");
+ LSTR MSG_LEVBED_FR = _UxGT("Pravý predný");
+ LSTR MSG_LEVBED_C = _UxGT("Stred");
+ LSTR MSG_LEVBED_BL = _UxGT("Ľavý zadný");
+ LSTR MSG_LEVBED_BR = _UxGT("Pravý zadný");
+ LSTR MSG_MANUAL_MESH = _UxGT("Ručná mriežka");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto-zarovn. Z");
+ LSTR MSG_ITERATION = _UxGT("Iterácia G34: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Klesajúca presnosť!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Dosiahnutá presnosť");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Parkovanie XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Kliknutím začnete");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Ďalší bod");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Vyrovnanie hotové!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Výška rovnania");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Nastav. dom. ofsety");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("X Ofset");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Y Ofset");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Z Ofset");
+ LSTR MSG_HOME_OFFSET_I = LCD_STR_I _UxGT(" Ofset");
+ LSTR MSG_HOME_OFFSET_J = LCD_STR_J _UxGT(" Ofset");
+ LSTR MSG_HOME_OFFSET_K = LCD_STR_K _UxGT(" Ofset");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofsety nastavené");
+ LSTR MSG_SET_ORIGIN = _UxGT("Nastaviť začiatok");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Spriev. vyrovn.");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Vyberte začiatok");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Posl. hodnota ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Zahriať ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Zahriať ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" všetko");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" podlož");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" nast.");
+ LSTR MSG_PREHEAT_1 = _UxGT("Zahriať ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Zahriať ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" hotend ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" všetko");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" podlož");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Zahriať ") PREHEAT_1_LABEL _UxGT(" nast.");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Zahriať $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Zahriať $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Zahriať $ hotend");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Zahriať $ hotend ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Zahriať $ všetko");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Zahriať $ podlož");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Zahriať $ nast.");
+ LSTR MSG_PREHEAT_M = _UxGT("Zahriať $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Zahriať $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Zahriať $ hotend");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Zahriať $ hotend ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Zahriať $ všetko");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Zahriať $ podlož");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Zahriať $ nast.");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Vlastná teplota");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Schladiť");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Vlastná teplota");
+ LSTR MSG_COOLDOWN = _UxGT("Schladiť");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frekvencia");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Nastavenie lasera");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Nastavenie vretena");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Výkon lasera");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Výkon vretena");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Prepnúť laser");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Prepnúť odsávanie");
- PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Prepnúť ofuk");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Test. impulz ms");
- PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Vystreliť impulz");
- PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Chyba chladenia");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Prepnúť vreteno");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Prepnúť odsávanie");
- PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Dopredný chod");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spätný chod");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Zapnúť napájanie");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Vypnúť napájanie");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Vytlačiť (extr.)");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Vytiahnuť (retr.)");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Posunúť osy");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Vyrovnanie podložky");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Vyrovnať podložku");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Vyrovnať rohy");
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Zdvyhnite podl., kým sa nezopne sonda");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Rohy sú vrámci odchyl. Vyrovnajte podl.");
- PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Dobré body: ");
- PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Posl. Z: ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Ďalší roh");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Editor sieťe bodov");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Upraviť sieť bodov");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Koniec úprav siete");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Skúšam bod");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Vlastné príkazy");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Test sondy");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Bod");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Sonda mimo hraníc");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Odchýlka");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX režim");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Ofset nástrojov");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-parkovanie");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikácia");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrkadlená kópia");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
- PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("Duplik. medz.-X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2. tryska X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2. tryska Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2. tryska Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Vykonávam G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Nástroje UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("UBL rovnanie");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Vyrovnávam bod");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manuálna sieť bodov");
- PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("Spriev. UBL rovnan.");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Položte a zmerajte");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Zmerajte");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Odstráňte a zmerajte");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Presun na ďalší");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovať UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovať UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Úprava siete bodov");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upraviť vlastnú sieť");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladiť sieť bodov");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec úprav siete");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastná sieť");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvoriť sieť");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Sieť bodov ($)");
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená sieť bodov");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upraviť výšku siete");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Skontrolovať sieť");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Kontrola siete ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast.siete");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 ohrev podlž.");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 ohrev trysky");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Ručné čistenie...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Čistenie pevn. dĺž.");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Čistenie dokončené");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 zrušený");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Opúšťam G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovať v sieti");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Sieťové rovnanie");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnanie");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Vyrovnať podložku");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Postranné body");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Typ siete bodov");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Exportovať sieť");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Export do hosta");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Export do CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Externá záloha");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Info. o výst. UBL");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mriežky");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ručné vyplnenie");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Chytré vyplnenie");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Vyplniť mriežku");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušiť všetko");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušiť najbližší");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Upraviť všetky");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upraviť najbližší");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Úložisko sietí");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Pamäťový slot");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Načítať sieť bodov");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Uložiť sieť bodov");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Sieť %i načítaná");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Sieť %i uložená");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Nedostatok miesta");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Chyba: Ukladanie UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Chyba: Obnovenie UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Ofset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Koniec kompenz. Z");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Postupné UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Studená sieť bodov");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Chytré vyplnenie");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Skontrolovať sieť");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Upraviť všetky");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Skontrolovať sieť");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Upraviť všetky");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Uložiť sieť bodov");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frekvencia");
+ LSTR MSG_LASER_MENU = _UxGT("Nastavenie lasera");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Nastavenie vretena");
+ LSTR MSG_LASER_POWER = _UxGT("Výkon lasera");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Výkon vretena");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Prepnúť laser");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Prepnúť odsávanie");
+ LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Prepnúť ofuk");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Test. impulz ms");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Vystreliť impulz");
+ LSTR MSG_FLOWMETER_FAULT = _UxGT("Chyba chladenia");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Prepnúť vreteno");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Prepnúť odsávanie");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Dopredný chod");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Spätný chod");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Zapnúť napájanie");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Vypnúť napájanie");
+ LSTR MSG_EXTRUDE = _UxGT("Vytlačiť (extr.)");
+ LSTR MSG_RETRACT = _UxGT("Vytiahnuť (retr.)");
+ LSTR MSG_MOVE_AXIS = _UxGT("Posunúť osy");
+ LSTR MSG_BED_LEVELING = _UxGT("Vyrovnanie podložky");
+ LSTR MSG_LEVEL_BED = _UxGT("Vyrovnať podložku");
+ LSTR MSG_BED_TRAMMING = _UxGT("Vyrovnať rohy");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Zdvyhnite podl., kým sa nezopne sonda");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Rohy sú vrámci odchyl. Vyrovnajte podl.");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Dobré body: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Posl. Z: ");
+ LSTR MSG_NEXT_CORNER = _UxGT("Ďalší roh");
+ LSTR MSG_MESH_EDITOR = _UxGT("Editor sieťe bodov");
+ LSTR MSG_EDIT_MESH = _UxGT("Upraviť sieť bodov");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Koniec úprav siete");
+ LSTR MSG_PROBING_POINT = _UxGT("Skúšam bod");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Hodnota Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Vlastné príkazy");
+ LSTR MSG_M48_TEST = _UxGT("M48 Test sondy");
+ LSTR MSG_M48_POINT = _UxGT("M48 Bod");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Sonda mimo hraníc");
+ LSTR MSG_M48_DEVIATION = _UxGT("Odchýlka");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX režim");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Ofset nástrojov");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-parkovanie");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplikácia");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Zrkadlená kópia");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Plná kontrola");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("Duplik. medz.-X");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. tryska Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. tryska @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Vykonávam G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("Nástroje UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("UBL rovnanie");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Vyrovnávam bod");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manuálna sieť bodov");
+ LSTR MSG_UBL_MESH_WIZARD = _UxGT("Spriev. UBL rovnan.");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Položte a zmerajte");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Zmerajte");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Odstráňte a zmerajte");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Presun na ďalší");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivovať UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Deaktivovať UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Teplota podložky");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Teplota podložky");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Teplota hotendu");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Teplota hotendu");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Úprava siete bodov");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Upraviť vlastnú sieť");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Doladiť sieť bodov");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Koniec úprav siete");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Vlastná sieť");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Vytvoriť sieť");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Sieť bodov ($)");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Studená sieť bodov");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Upraviť výšku siete");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Výška");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Skontrolovať sieť");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Kontrola siete ($)");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Kontrola vlast.siete");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 ohrev podlž.");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 ohrev trysky");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ručné čistenie...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Čistenie pevn. dĺž.");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Čistenie dokončené");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 zrušený");
+ LSTR MSG_G26_LEAVING = _UxGT("Opúšťam G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Pokračovať v sieti");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Sieťové rovnanie");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-bodové rovnanie");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Vyrovnať podložku");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Postranné body");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Typ siete bodov");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Exportovať sieť");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Export do hosta");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Export do CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Externá záloha");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Info. o výst. UBL");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Hustota mriežky");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ručné vyplnenie");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Chytré vyplnenie");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Vyplniť mriežku");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Zrušiť všetko");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Zrušiť najbližší");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Upraviť všetky");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Upraviť najbližší");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Úložisko sietí");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Pamäťový slot");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Načítať sieť bodov");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Uložiť sieť bodov");
+ LSTR MSG_MESH_LOADED = _UxGT("Sieť %i načítaná");
+ LSTR MSG_MESH_SAVED = _UxGT("Sieť %i uložená");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Nedostatok miesta");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Chyba: Ukladanie UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Chyba: Obnovenie UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Ofset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Koniec kompenz. Z");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Postupné UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Studená sieť bodov");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Chytré vyplnenie");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Skontrolovať sieť");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Upraviť všetky");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Skontrolovať sieť");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Upraviť všetky");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Uložiť sieť bodov");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Nastavenie LED");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Svetlo");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Predvolby svetla");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Červená");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Žltá");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Zelená");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Modrá");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Biela");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Obnoviť nastavenie");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Kanál =");
- PROGMEM Language_Str MSG_LEDS2 = _UxGT("Svetlo #2");
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Predvolby svetla #2");
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Jas");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Vlastná farba");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Inten. červenej");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Inten. zelenej");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Inten. modrej");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Inten. bielej");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Jas");
+ LSTR MSG_LED_CONTROL = _UxGT("Nastavenie LED");
+ LSTR MSG_LEDS = _UxGT("Svetlo");
+ LSTR MSG_LED_PRESETS = _UxGT("Predvolby svetla");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Červená");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Oranžová");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Žltá");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Zelená");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Modrá");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Fialová");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Biela");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Obnoviť nastavenie");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Kanál =");
+ LSTR MSG_LEDS2 = _UxGT("Svetlo #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Predvolby svetla #2");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Jas");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Vlastná farba");
+ LSTR MSG_INTENSITY_R = _UxGT("Inten. červenej");
+ LSTR MSG_INTENSITY_G = _UxGT("Inten. zelenej");
+ LSTR MSG_INTENSITY_B = _UxGT("Inten. modrej");
+ LSTR MSG_INTENSITY_W = _UxGT("Inten. bielej");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Jas");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Posúvam...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Uvolniť XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Posunúť X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Posunúť Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Posunúť Z");
- PROGMEM Language_Str MSG_MOVE_I = _UxGT("Posunúť ") LCD_STR_I;
- PROGMEM Language_Str MSG_MOVE_J = _UxGT("Posunúť ") LCD_STR_J;
- PROGMEM Language_Str MSG_MOVE_K = _UxGT("Posunúť ") LCD_STR_K;
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extrudér");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extrudér *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Posunúť o %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Posunúť o 0,1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Posunúť o 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Posunúť o 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Posunúť o 100mm");
- PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Posunúť o 0,001in");
- PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Posunúť o 0,01in");
- PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Posunúť o 0,1in");
- PROGMEM Language_Str MSG_MOVE_1IN = _UxGT("Posunúť o 1,0in");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Rýchlosť");
- PROGMEM Language_Str MSG_MAXSPEED = _UxGT("Max rýchl. (mm/s)");
- PROGMEM Language_Str MSG_MAXSPEED_X = _UxGT("Max rýchl. ") LCD_STR_A;
- PROGMEM Language_Str MSG_MAXSPEED_Y = _UxGT("Max rýchl. ") LCD_STR_B;
- PROGMEM Language_Str MSG_MAXSPEED_Z = _UxGT("Max rýchl. ") LCD_STR_C;
- PROGMEM Language_Str MSG_MAXSPEED_E = _UxGT("Max rýchl. ") LCD_STR_E;
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Výška podl.");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Tryska");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Tryska ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Tryska zaparkovaná");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Záložná tryska");
- PROGMEM Language_Str MSG_BED = _UxGT("Podložka");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Komora");
- PROGMEM Language_Str MSG_COOLER = _UxGT("Chladen. lasera");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Prepnúť chladenie");
- PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Bezpeč. prietok");
- PROGMEM Language_Str MSG_LASER = _UxGT("Laser");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Rýchlosť vent.");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Rýchlosť vent. ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Rýchlosť ex. vent.");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Rýchlosť ex. vent. ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Vent. riad. jedn.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Voľno. rýchl.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto-režim");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktív. rýchl.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Doba nečinnosti");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Prietok");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Prietok ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Ovládanie");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto-teplota");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Zap");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Vyp");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("Kalibrácia PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("Kalibrácia PID *");
- PROGMEM Language_Str MSG_PID_CYCLE = _UxGT("Cykly PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Kal. PID dokončená");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-kal. zlyhala. Zlý extrúder.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-kal. zlyhala. Príliš vysoká tepl.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Auto-kal. zlyhala! Čas vypršal.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Vybrať");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Vybrať *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Zrýchlenie");
- PROGMEM Language_Str MSG_JERK = _UxGT("Skok");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-skok");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-skok");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-skok");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-skok");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-skok");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-skok");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-skok");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Rýchlosť");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VPrej Min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Akcelerácia");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Amax *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-retrakt");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-prejazd");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Max. frekvencia");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min. posun");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Kroky/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" krokov/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" krokov/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" krokov/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" krokov/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" krokov/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" krokov/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("Ekrokov/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("*krokov/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Teplota");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Pohyb");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filament");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E v mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit v mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Priem. fil.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Priem. fil. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Vysunúť mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Zaviesť mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K pre posun");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("K pre posun *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Kontrast LCD");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Uložiť nastavenie");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Načítať nastavenie");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Obnoviť nastavenie");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Inicializ. EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Chyba: EEPROM CRC");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Chyba: EEPROM Index");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Chyba: Verzia EEPROM");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Nastavenie uložené");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Aktualizovať z SD");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Reštart. tlačiar.");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnoviť");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info. obrazovka");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Príprava tlače");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Doladenie tlače");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Monitor napájania");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Prúd");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Napätie");
- PROGMEM Language_Str MSG_POWER = _UxGT("Výkon");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Spustiť tlač");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Ďalší");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Inicial.");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Zastaviť");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Tlačiť");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Vynulovať");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignorovať");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Zrušiť");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Hotovo");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Naspäť");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Pokračovať");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Preskočiť");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Pozastavujem...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pozastaviť tlač");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Obnoviť tlač");
- PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Spustiť z hosta");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Zastaviť tlač");
- PROGMEM Language_Str MSG_END_LOOPS = _UxGT("Koniec opak. sluč.");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Tlačím objekt");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Zrušiť objekt");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť objekt =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Obnova po výp. nap.");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Tlačiť z SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Žiadna SD karta");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Spím...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Pokrač. kliknutím...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Tlač pozastavená");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Tlačím...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Tlač zrušená");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Tlač dokončená");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Žiadny pohyb.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("PRERUŠENÉ. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ZASTAVENÉ. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Výmena Re.mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Retraktovať V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zdvih Z mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Retract");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Dĺžka výmeny");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Vymeniť naviac");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Dĺžka vytlačenia");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Výmena nástroja");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvihnúť Z");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Primárna rýchl.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Rýchl. retrakcie");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Parkovať hlavu");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Rýchl. obnovenia");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Rýchlosť vent.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Doba fúkania");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto-Zap");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto-Vyp");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Výmena nástroja");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-výmena");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Posl. extruder");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Vymeniť za *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Vymeniť filament");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Vymeniť filament *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Zaviesť filament");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Zaviesť filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Vysunúť filament");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Vysunúť filament *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunúť všetko");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Načítať SD kartu");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Vymeniť SD kartu");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Odpojiť SD kartu");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl.");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Faktor skosenia");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Zasunúť");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Vysunúť");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Režim SW");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Režim 5V");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Režim OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Ulož. režim");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Prepnúť do 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Prepnúť do OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Zobraziť režim");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Inicializ. TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test Z ofsetu");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Uložiť");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Zasunúť TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Zasunúť sondu Z");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Vysunúť sondu Z");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Najskôr os %s%s%s domov");
- PROGMEM Language_Str MSG_ZPROBE_SETTINGS = _UxGT("Nastav. sondy");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Ofsety sondy Z");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("X ofset");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Y ofset");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Pos. trysku k podl.");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
- PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
- PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
- PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Celkom");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Zastavenie Endstop");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Chyba ohrevu");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Chyba: REDUND. TEP.");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÝ SKOK");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPLOTNÝ SKOK PODL.");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPLOTNÝ SKOK KOMO.");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("TEPLOTNÝ SKOK CHLAD.");
- PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("Ochladz. zlyhalo");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Chyba: MAXTEMP");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Chyba: MINTEMP");
- PROGMEM Language_Str MSG_HALTED = _UxGT("TLAČIAREŇ ZASTAVENÁ");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Reštartuje ju");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d");
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("h");
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m");
- PROGMEM Language_Str MSG_HEATING = _UxGT("Ohrev...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Ochladzovanie...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Ohrev podložky...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Ochladz. podložky...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Ohrev sondy...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Ochladz. sondy...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Ohrev komory...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Ochladz. komory...");
- PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Ochladz. lasera...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrácia");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovať X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovať Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovať Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovať stred");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta nastavenia");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-kalibrácia");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Nast. výšku delty");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Ofset sondy Z");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag. rameno");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Výška");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Polomer");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("O tlačiarni");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Info. o tlačiarni");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-bodové rovnanie");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Lineárne rovnanie");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilineárne rovnanie");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("UBL rovnanie");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Mriežka dokončená");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Štatistika");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Info. o doske");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Rýchlosť");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Tepl. ochrana: VYP");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Tepl. ochrana: ZAP");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Vypr.čas nečinnosti");
+ LSTR MSG_MOVING = _UxGT("Posúvam...");
+ LSTR MSG_FREE_XY = _UxGT("Uvolniť XY");
+ LSTR MSG_MOVE_X = _UxGT("Posunúť X");
+ LSTR MSG_MOVE_Y = _UxGT("Posunúť Y");
+ LSTR MSG_MOVE_Z = _UxGT("Posunúť Z");
+ LSTR MSG_MOVE_I = _UxGT("Posunúť ") LCD_STR_I;
+ LSTR MSG_MOVE_J = _UxGT("Posunúť ") LCD_STR_J;
+ LSTR MSG_MOVE_K = _UxGT("Posunúť ") LCD_STR_K;
+ LSTR MSG_MOVE_E = _UxGT("Extrudér");
+ LSTR MSG_MOVE_EN = _UxGT("Extrudér *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hotend je studený");
+ LSTR MSG_MOVE_N_MM = _UxGT("Posunúť o %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Posunúť o 0,1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Posunúť o 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Posunúť o 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Posunúť o 100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Posunúť o 0,001in");
+ LSTR MSG_MOVE_001IN = _UxGT("Posunúť o 0,01in");
+ LSTR MSG_MOVE_01IN = _UxGT("Posunúť o 0,1in");
+ LSTR MSG_MOVE_1IN = _UxGT("Posunúť o 1,0in");
+ LSTR MSG_SPEED = _UxGT("Rýchlosť");
+ LSTR MSG_MAXSPEED = _UxGT("Max rýchl. (mm/s)");
+ LSTR MSG_MAXSPEED_X = _UxGT("Max rýchl. ") LCD_STR_A;
+ LSTR MSG_MAXSPEED_Y = _UxGT("Max rýchl. ") LCD_STR_B;
+ LSTR MSG_MAXSPEED_Z = _UxGT("Max rýchl. ") LCD_STR_C;
+ LSTR MSG_MAXSPEED_E = _UxGT("Max rýchl. ") LCD_STR_E;
+ LSTR MSG_MAXSPEED_A = _UxGT("Max rýchl. @");
+ LSTR MSG_BED_Z = _UxGT("Výška podl.");
+ LSTR MSG_NOZZLE = _UxGT("Tryska");
+ LSTR MSG_NOZZLE_N = _UxGT("Tryska ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Tryska zaparkovaná");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Záložná tryska");
+ LSTR MSG_BED = _UxGT("Podložka");
+ LSTR MSG_CHAMBER = _UxGT("Komora");
+ LSTR MSG_COOLER = _UxGT("Chladen. lasera");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Prepnúť chladenie");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Bezpeč. prietok");
+ LSTR MSG_LASER = _UxGT("Laser");
+ LSTR MSG_FAN_SPEED = _UxGT("Rýchlosť vent.");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Rýchlosť vent. ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Rýchlosť ex. vent.");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Rýchlosť ex. vent. ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Vent. riad. jedn.");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Voľno. rýchl.");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto-režim");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktív. rýchl.");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Doba nečinnosti");
+ LSTR MSG_FLOW = _UxGT("Prietok");
+ LSTR MSG_FLOW_N = _UxGT("Prietok ~");
+ LSTR MSG_CONTROL = _UxGT("Ovládanie");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+ LSTR MSG_AUTOTEMP = _UxGT("Auto-teplota");
+ LSTR MSG_LCD_ON = _UxGT("Zap");
+ LSTR MSG_LCD_OFF = _UxGT("Vyp");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("Kalibrácia PID");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("Kalibrácia PID *");
+ LSTR MSG_PID_CYCLE = _UxGT("Cykly PID");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Kal. PID dokončená");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Auto-kal. zlyhala. Zlý extrúder.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Auto-kal. zlyhala. Príliš vysoká tepl.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Auto-kal. zlyhala! Čas vypršal.");
+ LSTR MSG_SELECT = _UxGT("Vybrať");
+ LSTR MSG_SELECT_E = _UxGT("Vybrať *");
+ LSTR MSG_ACC = _UxGT("Zrýchlenie");
+ LSTR MSG_JERK = _UxGT("Skok");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-skok");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-skok");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-skok");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-skok");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-skok");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-skok");
+ LSTR MSG_VE_JERK = _UxGT("Ve-skok");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Junction Dev");
+ LSTR MSG_VELOCITY = _UxGT("Rýchlosť");
+ LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Vmax *");
+ LSTR MSG_VMIN = _UxGT("Vmin");
+ LSTR MSG_VTRAV_MIN = _UxGT("VPrej Min");
+ LSTR MSG_ACCELERATION = _UxGT("Akcelerácia");
+ LSTR MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Amax *");
+ LSTR MSG_A_RETRACT = _UxGT("A-retrakt");
+ LSTR MSG_A_TRAVEL = _UxGT("A-prejazd");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Max. frekvencia");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Min. posun");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Kroky/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" krokov/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" krokov/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" krokov/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" krokov/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" krokov/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" krokov/mm");
+ LSTR MSG_E_STEPS = _UxGT("Ekrokov/mm");
+ LSTR MSG_EN_STEPS = _UxGT("*krokov/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Teplota");
+ LSTR MSG_MOTION = _UxGT("Pohyb");
+ LSTR MSG_FILAMENT = _UxGT("Filament");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E v mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit v mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Limit *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Priem. fil.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Priem. fil. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Vysunúť mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Zaviesť mm");
+ LSTR MSG_ADVANCE_K = _UxGT("K pre posun");
+ LSTR MSG_ADVANCE_K_E = _UxGT("K pre posun *");
+ LSTR MSG_CONTRAST = _UxGT("Kontrast LCD");
+ LSTR MSG_STORE_EEPROM = _UxGT("Uložiť nastavenie");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Načítať nastavenie");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Obnoviť nastavenie");
+ LSTR MSG_INIT_EEPROM = _UxGT("Inicializ. EEPROM");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Chyba: EEPROM CRC");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Chyba: EEPROM Index");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Chyba: Verzia EEPROM");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Nastavenie uložené");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Aktualizovať z SD");
+ LSTR MSG_RESET_PRINTER = _UxGT("Reštart. tlačiar.");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Obnoviť");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info. obrazovka");
+ LSTR MSG_PREPARE = _UxGT("Príprava tlače");
+ LSTR MSG_TUNE = _UxGT("Doladenie tlače");
+ LSTR MSG_POWER_MONITOR = _UxGT("Monitor napájania");
+ LSTR MSG_CURRENT = _UxGT("Prúd");
+ LSTR MSG_VOLTAGE = _UxGT("Napätie");
+ LSTR MSG_POWER = _UxGT("Výkon");
+ LSTR MSG_START_PRINT = _UxGT("Spustiť tlač");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Ďalší");
+ LSTR MSG_BUTTON_INIT = _UxGT("Inicial.");
+ LSTR MSG_BUTTON_STOP = _UxGT("Zastaviť");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Tlačiť");
+ LSTR MSG_BUTTON_RESET = _UxGT("Vynulovať");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorovať");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Zrušiť");
+ LSTR MSG_BUTTON_DONE = _UxGT("Hotovo");
+ LSTR MSG_BUTTON_BACK = _UxGT("Naspäť");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Pokračovať");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Preskočiť");
+ LSTR MSG_PAUSING = _UxGT("Pozastavujem...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pozastaviť tlač");
+ LSTR MSG_RESUME_PRINT = _UxGT("Obnoviť tlač");
+ LSTR MSG_HOST_START_PRINT = _UxGT("Spustiť z hosta");
+ LSTR MSG_STOP_PRINT = _UxGT("Zastaviť tlač");
+ LSTR MSG_END_LOOPS = _UxGT("Koniec opak. sluč.");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Tlačím objekt");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Zrušiť objekt");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Zrušiť objekt =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Obnova po výp. nap.");
+ LSTR MSG_MEDIA_MENU = _UxGT("Tlačiť z SD");
+ LSTR MSG_NO_MEDIA = _UxGT("Žiadna SD karta");
+ LSTR MSG_DWELL = _UxGT("Spím...");
+ LSTR MSG_USERWAIT = _UxGT("Pokrač. kliknutím...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Tlač pozastavená");
+ LSTR MSG_PRINTING = _UxGT("Tlačím...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Tlač zrušená");
+ LSTR MSG_PRINT_DONE = _UxGT("Tlač dokončená");
+ LSTR MSG_NO_MOVE = _UxGT("Žiadny pohyb.");
+ LSTR MSG_KILLED = _UxGT("PRERUŠENÉ. ");
+ LSTR MSG_STOPPED = _UxGT("ZASTAVENÉ. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Retrakt mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Výmena Re.mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Retraktovať V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Zdvih Z mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Retract");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Dĺžka výmeny");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Vymeniť naviac");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Dĺžka vytlačenia");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Výmena nástroja");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Zdvihnúť Z");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Primárna rýchl.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Rýchl. retrakcie");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Parkovať hlavu");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Rýchl. obnovenia");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Rýchlosť vent.");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Doba fúkania");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto-Zap");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto-Vyp");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Výmena nástroja");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-výmena");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Posl. extruder");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Vymeniť za *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Vymeniť filament");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Vymeniť filament *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Zaviesť filament");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Zaviesť filament *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Vysunúť filament");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Vysunúť filament *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Vysunúť všetko");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Načítať SD kartu");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Vymeniť SD kartu");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Odpojiť SD kartu");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Sonda Z mimo podl.");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Faktor skosenia");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Self-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Zasunúť");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Vysunúť");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Režim SW");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Režim 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Režim OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Ulož. režim");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Prepnúť do 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Prepnúť do OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Zobraziť režim");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Inicializ. TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Test Z ofsetu");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Uložiť");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Zasunúť TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Zasunúť sondu Z");
+ LSTR MSG_MANUAL_STOW = _UxGT("Vysunúť sondu Z");
+ LSTR MSG_HOME_FIRST = _UxGT("Najskôr os %s%s%s domov");
+ LSTR MSG_ZPROBE_SETTINGS = _UxGT("Nastav. sondy");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Ofsety sondy Z");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("X ofset");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Y ofset");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Pos. trysku k podl.");
+ LSTR MSG_BABYSTEP_X = _UxGT("Babystep X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Babystep Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Babystep Z");
+ LSTR MSG_BABYSTEP_I = _UxGT("Babystep ") LCD_STR_I;
+ LSTR MSG_BABYSTEP_J = _UxGT("Babystep ") LCD_STR_J;
+ LSTR MSG_BABYSTEP_K = _UxGT("Babystep ") LCD_STR_K;
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Celkom");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Zastavenie Endstop");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Chyba ohrevu");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Chyba: REDUND. TEP.");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("TEPLOTNÝ SKOK");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TEPLOTNÝ SKOK PODL.");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("TEPLOTNÝ SKOK KOMO.");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("TEPLOTNÝ SKOK CHLAD.");
+ LSTR MSG_COOLING_FAILED = _UxGT("Ochladz. zlyhalo");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Chyba: MAXTEMP");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Chyba: MINTEMP");
+ LSTR MSG_HALTED = _UxGT("TLAČIAREŇ ZASTAVENÁ");
+ LSTR MSG_PLEASE_RESET = _UxGT("Reštartuje ju");
+ LSTR MSG_HEATING = _UxGT("Ohrev...");
+ LSTR MSG_COOLING = _UxGT("Ochladzovanie...");
+ LSTR MSG_BED_HEATING = _UxGT("Ohrev podložky...");
+ LSTR MSG_BED_COOLING = _UxGT("Ochladz. podložky...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Ohrev sondy...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Ochladz. sondy...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Ohrev komory...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Ochladz. komory...");
+ LSTR MSG_LASER_COOLING = _UxGT("Ochladz. lasera...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta kalibrácia");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrovať X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrovať Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrovať Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrovať stred");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta nastavenia");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto-kalibrácia");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Nast. výšku delty");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Ofset sondy Z");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag. rameno");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Výška");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Polomer");
+ LSTR MSG_INFO_MENU = _UxGT("O tlačiarni");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Info. o tlačiarni");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-bodové rovnanie");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Lineárne rovnanie");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilineárne rovnanie");
+ LSTR MSG_UBL_LEVELING = _UxGT("UBL rovnanie");
+ LSTR MSG_MESH_LEVELING = _UxGT("Mriežkové rovnanie");
+ LSTR MSG_MESH_DONE = _UxGT("Mriežka dokončená");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Štatistika");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Info. o doske");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistory");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extrudéry");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Rýchlosť");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Tepl. ochrana: VYP");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Tepl. ochrana: ZAP");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Vypr.čas nečinnosti");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Osvetlenie");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas svetla");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Nesprávna tlačiareň");
+ LSTR MSG_CASE_LIGHT = _UxGT("Osvetlenie");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Jas svetla");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Nesprávna tlačiareň");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Počet tlačí");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončené");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia tlač");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Celkom vytlačené");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Počet tlačí");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Dokončené");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Celkový čas");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia tlač");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Celkom vytlačené");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Tlače");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Čas");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačené");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Tlače");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Hotovo");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Čas");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Najdlhšia");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Vytlačené");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Nap. zdroj");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Budenie motorov");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Motor %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Motor %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("CHYBA KOMUNIKÁ. TMC");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Uložiť do EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMENA FILAMENTU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PAUZA TLAČE");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENIE FILAMENTU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTIE FILAMENTU");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI POKRAČ.:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačiť viacej");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnoviť tlač");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Vzd. mm fil. senz.");
- PROGMEM Language_Str MSG_RUNOUT_ENABLE = _UxGT("Zapnúť senzor");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Parkovanie zlyhalo");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Kalibrácia zlyhala");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Teplota min");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Teplota max");
+ LSTR MSG_INFO_PSU = _UxGT("Nap. zdroj");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Budenie motorov");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Motor %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Motor %");
+ LSTR MSG_ERROR_TMC = _UxGT("CHYBA KOMUNIKÁ. TMC");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Uložiť do EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("VÝMENA FILAMENTU");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("PAUZA TLAČE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ZAVEDENIE FILAMENTU");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("VYSUNUTIE FILAMENTU");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("MOŽNOSTI POKRAČ.:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Vytlačiť viacej");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Obnoviť tlač");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Tryska: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Senzor filamentu");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Vzd. mm fil. senz.");
+ LSTR MSG_RUNOUT_ENABLE = _UxGT("Zapnúť senzor");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Parkovanie zlyhalo");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Kalibrácia zlyhala");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU2");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Aktualizujte FW MMU!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potrebuje zásah.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Obnoviť tlač");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Obnovovanie...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Zaviesť filament");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Zaviesť všetky");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zaviesť po trysku");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunúť filament");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Vysunúť filament ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vyňať filament");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádzanie fil. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vysúvanie fil. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysúvanie fil. ...");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Všetky");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Reštartovať MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("Reštart MMU...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Odstráňte, kliknite");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VYBERTE FILAMENT");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU2");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Aktualizujte FW MMU!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU potrebuje zásah.");
+ LSTR MSG_MMU2_RESUME = _UxGT("Obnoviť tlač");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Obnovovanie...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Zaviesť filament");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Zaviesť všetky");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Zaviesť po trysku");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Vysunúť filament");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Vysunúť filament ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Vyňať filament");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Zavádzanie fil. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Vysúvanie fil. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Vysúvanie fil. ...");
+ LSTR MSG_MMU2_ALL = _UxGT("Všetky");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filament ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Reštartovať MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("Reštart MMU...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Odstráňte, kliknite");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mix");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Zložka ~");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mixér");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Plný gradient");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Prepnúť mix");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Cyklický mix");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradientný mix");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Otočiť gradient");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktívny V-tool");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Počiat. V-tool");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Konečn. V-tool");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Vynulovať V-tools");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Uložiť V-tool Mix");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools vynulované");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Počiat.Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT("Konečn.Z:");
+ LSTR MSG_MIX = _UxGT("Mix");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Zložka ~");
+ LSTR MSG_MIXER = _UxGT("Mixér");
+ LSTR MSG_GRADIENT = _UxGT("Gradient");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Plný gradient");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Prepnúť mix");
+ LSTR MSG_CYCLE_MIX = _UxGT("Cyklický mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Gradientný mix");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Otočiť gradient");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktívny V-tool");
+ LSTR MSG_START_VTOOL = _UxGT("Počiat. V-tool");
+ LSTR MSG_END_VTOOL = _UxGT("Konečn. V-tool");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Vynulovať V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Uložiť V-tool Mix");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools vynulované");
+ LSTR MSG_START_Z = _UxGT("Počiat.Z:");
+ LSTR MSG_END_Z = _UxGT("Konečn.Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Hry");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Nájazdníci");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Had");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Bludisko");
+ LSTR MSG_GAMES = _UxGT("Hry");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Nájazdníci");
+ LSTR MSG_SNAKE = _UxGT("Had");
+ LSTR MSG_MAZE = _UxGT("Bludisko");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Chyb. index stránky");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Chyb. rých. stránky");
+ LSTR MSG_BAD_PAGE = _UxGT("Chyb. index stránky");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Chyb. rých. stránky");
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Zmeniť heslo");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Vyžad. sa prihl.");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Nastavenie hesla");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Zvoľte číslo");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Zmeniť heslo");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Odstrániť heslo");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Heslo je ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Začať odznova");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Nezabudnite uložiť!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Heslo odstránené");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Zmeniť heslo");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Vyžad. sa prihl.");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Nastavenie hesla");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Zvoľte číslo");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Zmeniť heslo");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Odstrániť heslo");
+ LSTR MSG_PASSWORD_SET = _UxGT("Heslo je ");
+ LSTR MSG_START_OVER = _UxGT("Začať odznova");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Nezabudnite uložiť!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Heslo odstránené");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre obnovu tlače"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkovanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čakajte prosím", "na spustenie", "výmeny filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stlačte tlačidlo", "pre pokračovanie"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre ohrev trysky"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Ohrev trysky", "Čakajte prosím..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na vysunutie", "filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na zavedenie", "filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Čakajte prosím", "na vytlačenie", "filamentu"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Stlačte tlačidlo", "pre dokončenie", "vytláčania filam."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Čakajte prosím na", "obnovenie tlače..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre obnovu tlače"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkovanie..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Čakajte prosím", "na spustenie", "výmeny filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Vložte filament", "a stlačte tlačidlo", "pre pokračovanie"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Stlačte tlačidlo", "pre ohrev trysky"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Ohrev trysky", "Čakajte prosím..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na vysunutie", "filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_3_LINE("Čakajte prosím", "na zavedenie", "filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_3_LINE("Čakajte prosím", "na vytlačenie", "filamentu"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Stlačte tlačidlo", "pre dokončenie", "vytláčania filam."));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Čakajte prosím na", "obnovenie tlače..."));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknite pre pokr."));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkovanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čakajte prosím..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte a kliknite"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknite pre ohrev"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Ohrev..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysúvanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádzanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačovanie..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Klik. pre dokonč."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračovanie..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Kliknite pre pokr."));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkovanie..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Čakajte prosím..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Vložte a kliknite"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Kliknite pre ohrev"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Ohrev..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Vysúvanie..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Zavádzanie..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Vytlačovanie..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Klik. pre dokonč."));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Pokračovanie..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Ovládače TMC");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Prúd ovládača");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybridný prah");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Bezsenzor. domov");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Režim krokovania");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop zapnutý");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Vynulovať");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT("za:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Kompenz. vôle");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korekcia");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Vyhladzovanie");
+ LSTR MSG_TMC_DRIVERS = _UxGT("Ovládače TMC");
+ LSTR MSG_TMC_CURRENT = _UxGT("Prúd ovládača");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybridný prah");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Bezsenzor. domov");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Režim krokovania");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop zapnutý");
+ LSTR MSG_SERVICE_RESET = _UxGT("Vynulovať");
+ LSTR MSG_SERVICE_IN = _UxGT("za:");
+ LSTR MSG_BACKLASH = _UxGT("Kompenz. vôle");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korekcia");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Vyhladzovanie");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Vyrovnať os X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto-kalibrovať");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Vyrovnať os X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto-kalibrovať");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Vypršal čas ohrevu, znížená teplota. Stlačte OK pre ohrev a ešte raz pre obnovu.");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Vypršal čas ohrevu, znížená teplota. Stlačte OK pre ohrev a ešte raz pre obnovu.");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Vypršal čas ohrevu");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Vypršal čas ohrevu");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Zohriať");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Zohrievanie...");
- PROGMEM Language_Str MSG_REHEATDONE = _UxGT("Zohrievanie dokonč.");
+ LSTR MSG_REHEAT = _UxGT("Zohriať");
+ LSTR MSG_REHEATING = _UxGT("Zohrievanie...");
+ LSTR MSG_REHEATDONE = _UxGT("Zohrievanie dokonč.");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Sprievodca sondy Z");
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Referencia Z");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Presúvam na pozíciu");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Sprievodca sondy Z");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Referencia Z");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Presúvam na pozíciu");
- PROGMEM Language_Str MSG_SOUND = _UxGT("Zvuk");
+ LSTR MSG_SOUND = _UxGT("Zvuk");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Ľavý horný");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Ľavý dolný");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Pravý horný");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Pravý dolný");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrácia dokončená");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Kalibrácia zlyhala");
+ LSTR MSG_TOP_LEFT = _UxGT("Ľavý horný");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Ľavý dolný");
+ LSTR MSG_TOP_RIGHT = _UxGT("Pravý horný");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Pravý dolný");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrácia dokončená");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrácia zlyhala");
- PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" spätný chod ovl.");
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" spätný chod ovl.");
- PROGMEM Language_Str MSG_SD_CARD = _UxGT("SD karta");
- PROGMEM Language_Str MSG_USB_DISK = _UxGT("USB disk");
+ LSTR MSG_SD_CARD = _UxGT("SD karta");
+ LSTR MSG_USB_DISK = _UxGT("USB disk");
}
diff --git a/Marlin/src/lcd/language/language_sv.h b/Marlin/src/lcd/language/language_sv.h
index af80c41a82..3b4d6c24c1 100644
--- a/Marlin/src/lcd/language/language_sv.h
+++ b/Marlin/src/lcd/language/language_sv.h
@@ -33,667 +33,657 @@
namespace Language_sv {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Swedish");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Swedish");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Redo.");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("JA");
- PROGMEM Language_Str MSG_NO = _UxGT("NEJ");
- PROGMEM Language_Str MSG_BACK = _UxGT("Bakåt");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Avbryter...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Media Instatt");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Media Borttaget");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Väntar på media");
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("SD init misslyckades");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Media läsningsfel");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB enhet borttagen");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB start misslyckad");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Underanrop överskriden");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Slutstop"); // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Mjuk slutstopp");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Huvud");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Advancerade inställningar");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Konfiguration");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Autostarta Filer");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Inaktivera Stegare");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Debug Meny");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Framstegsindikator Test");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Auto Hem");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Hem X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Hem Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Hem Z");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Justering");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Iteration: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Noggrannhet Minskar!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Noggrannhet uppnådd");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Hemning XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Klicka för att börja");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nästa Punkt");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Nivellering Färdig!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Falna Höjd");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Sätt Hem Offset");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset Tillämpad");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Sätt Origo");
- PROGMEM Language_Str MSG_TRAMMING_WIZARD = _UxGT("Justerings Wizard");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Välj Origo");
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Senaste värde ");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Redo.");
+ LSTR MSG_YES = _UxGT("JA");
+ LSTR MSG_NO = _UxGT("NEJ");
+ LSTR MSG_BACK = _UxGT("Bakåt");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Avbryter...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Media Instatt");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Media Borttaget");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Väntar på media");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("SD init misslyckades");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Media läsningsfel");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB enhet borttagen");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB start misslyckad");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Underanrop överskriden");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Slutstop"); // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Mjuk slutstopp");
+ LSTR MSG_MAIN = _UxGT("Huvud");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Advancerade inställningar");
+ LSTR MSG_CONFIGURATION = _UxGT("Konfiguration");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Autostarta Filer");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Inaktivera Stegare");
+ LSTR MSG_DEBUG_MENU = _UxGT("Debug Meny");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Framstegsindikator Test");
+ LSTR MSG_AUTO_HOME = _UxGT("Auto Hem");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Hem X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Hem Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Hem Z");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Auto Z-Justering");
+ LSTR MSG_ITERATION = _UxGT("G34 Iteration: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Noggrannhet Minskar!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Noggrannhet uppnådd");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Hemning XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Klicka för att börja");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Nästa Punkt");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Nivellering Färdig!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Falna Höjd");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Sätt Hem Offset");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Offset Tillämpad");
+ LSTR MSG_SET_ORIGIN = _UxGT("Sätt Origo");
+ LSTR MSG_TRAMMING_WIZARD = _UxGT("Justerings Wizard");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Välj Origo");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Senaste värde ");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Förvärmning ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Förvärmning ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Stoppa");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Stoppa ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Alla");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Bädd");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Konf");
+ LSTR MSG_PREHEAT_1 = _UxGT("Förvärmning ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Förvärmning ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Stoppa");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Stoppa ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Alla");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Bädd");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Förvärmning ") PREHEAT_1_LABEL _UxGT(" Konf");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Förvärmning $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Förvärmning $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Förvärmning $ Stoppa");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Förvärmning $ Stoppa ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Förvärmning $ Alla");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Förvärmning $ Bädd");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Förvärmning $ Donf");
+ LSTR MSG_PREHEAT_M = _UxGT("Förvärmning $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Förvärmning $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Förvärmning $ Stoppa");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Förvärmning $ Stoppa ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Förvärmning $ Alla");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Förvärmning $ Bädd");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Förvärmning $ Donf");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Förvärmning Anpassad");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Nedkylning");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Frekvens");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Laser kontroll");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Spindel Kontroll");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Laser Styrka");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Spindel Styrka");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Växla Laser");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Test Puls ms");
- PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Avfyra Puls");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Växla Spindel");
- PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Spindel Framåt");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spindel Bakåt");
- PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Laser Av");
- PROGMEM Language_Str MSG_LASER_ON = _UxGT("Laser På");
- PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Spindel Av");
- PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Spindel På");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Sätt på ström");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Stäng av ström");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Extrudera");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Dra tillbaka");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Flytta Axel");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Bädd Nivellering");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Nivellera Bädd");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Bädd Justering");
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Höj Bädd tills nästa Sond Triggad");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Alla Hörn inom Tolerans. Nivellering Bädd");
- PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Bra Punkter: ");
- PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Senaste Z: ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Nästa Hörn");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Nät Redigerare");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Redigera Nät");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Nätredigering Stoppad");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Sonderingspunkt");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Index X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Index Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z Värde");
- PROGMEM Language_Str MSG_USER_MENU = _UxGT("Anpassade Kommandon");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Sond Test");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Punkt");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Sond utan för gränser");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Avvikelse");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX Läge");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Verktygsoffset");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Parkera");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicering");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Speglad Kopia");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Kontroll");
- PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("Duplicera X-Avstånd");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2:a Munstycke X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2:a Munstycke Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2:a Munstycke Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Utför G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Verktyg");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Enad Bädd Nivellering (UBL)");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Lutningspunkt");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Manuellt skapa nät");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Placera Shim & Mät");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Mät");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Ta bort & Mät bädd");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Flyttar till nästa");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivera UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Avaktivera UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Bädd Temp");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bädd Temp");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hetände Temp");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hetände Temp");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Nät Redigera");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Redigera Anpassat Nät");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Finjustera Nät");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Färdig Redigera Nät");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Bygg Anpassat Nät");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Bygg Nät");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Bygg Nät ($)");
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Bygg Kallt Nät");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Justera Nät Höjd");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Höjd Antal");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validera Nät");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Validera Nät ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validera Anpassat Nät");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Värma Bädd");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Värma Munstycke");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Manuel grundning...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Fastlängd Grundning");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Färdig Grundning");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 Avbruten");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Nivellera G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Fortsätt Bädd Nät");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Nät Nivellering");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Punkts Nivellering");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Rutnät Nivellering");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Nivellera Nät");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Sidopunkter");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Kart Typ");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Utmatning Nät Map");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Utmatning för Värd");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Utmatning för CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Utanför skrivare Backup");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Utmatning UBL Info");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Ifyllnad Mängd");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manuell Ifyllnad");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Smart Ifyllnad");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Ifyllnad Nät");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Ogiltigförklara Alla");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Ogiltigförklara Närmast");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Finjustera Alla");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Finjustera Närmast");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Nät Lagra");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Minnesöppning");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Ladda Bädd Nät");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Spara Bädd Nät");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Nät %i Ladda");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Nät %i Sparad");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Ingen Lagring");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Fel: UBL Sparad");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Fel: UBL Återställd");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stoppad");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Steg-för-Steg UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Bygg Kallt Nät");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Ifyllnad");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validera Nät");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Finjustera Alla");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validera Nät");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Finjustera Alla");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. Spara Bädd Nät");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Förvärmning Anpassad");
+ LSTR MSG_COOLDOWN = _UxGT("Nedkylning");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frekvens");
+ LSTR MSG_LASER_MENU = _UxGT("Laser kontroll");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Spindel Kontroll");
+ LSTR MSG_LASER_POWER = _UxGT("Laser Styrka");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Spindel Styrka");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Växla Laser");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Test Puls ms");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Avfyra Puls");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Växla Spindel");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Spindel Framåt");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindel Bakåt");
+ LSTR MSG_LASER_OFF = _UxGT("Laser Av");
+ LSTR MSG_LASER_ON = _UxGT("Laser På");
+ LSTR MSG_SPINDLE_OFF = _UxGT("Spindel Av");
+ LSTR MSG_SPINDLE_ON = _UxGT("Spindel På");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Sätt på ström");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Stäng av ström");
+ LSTR MSG_EXTRUDE = _UxGT("Extrudera");
+ LSTR MSG_RETRACT = _UxGT("Dra tillbaka");
+ LSTR MSG_MOVE_AXIS = _UxGT("Flytta Axel");
+ LSTR MSG_BED_LEVELING = _UxGT("Bädd Nivellering");
+ LSTR MSG_LEVEL_BED = _UxGT("Nivellera Bädd");
+ LSTR MSG_BED_TRAMMING = _UxGT("Bädd Justering");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Höj Bädd tills nästa Sond Triggad");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Alla Hörn inom Tolerans. Nivellering Bädd");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Bra Punkter: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Senaste Z: ");
+ LSTR MSG_NEXT_CORNER = _UxGT("Nästa Hörn");
+ LSTR MSG_MESH_EDITOR = _UxGT("Nät Redigerare");
+ LSTR MSG_EDIT_MESH = _UxGT("Redigera Nät");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Nätredigering Stoppad");
+ LSTR MSG_PROBING_POINT = _UxGT("Sonderingspunkt");
+ LSTR MSG_MESH_X = _UxGT("Index X");
+ LSTR MSG_MESH_Y = _UxGT("Index Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Z Värde");
+ LSTR MSG_USER_MENU = _UxGT("Anpassade Kommandon");
+ LSTR MSG_M48_TEST = _UxGT("M48 Sond Test");
+ LSTR MSG_M48_POINT = _UxGT("M48 Punkt");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Sond utan för gränser");
+ LSTR MSG_M48_DEVIATION = _UxGT("Avvikelse");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX Läge");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Verktygsoffset");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Parkera");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplicering");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Speglad Kopia");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Kontroll");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("Duplicera X-Avstånd");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2:a Munstycke Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2:a Munstycke @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Utför G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL Verktyg");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Enad Bädd Nivellering (UBL)");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Lutningspunkt");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Manuellt skapa nät");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Placera Shim & Mät");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Mät");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Ta bort & Mät bädd");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Flyttar till nästa");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Aktivera UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Avaktivera UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Bädd Temp");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bädd Temp");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Hetände Temp");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hetände Temp");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Nät Redigera");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Redigera Anpassat Nät");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Finjustera Nät");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Färdig Redigera Nät");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Bygg Anpassat Nät");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Bygg Nät");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Bygg Nät ($)");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Bygg Kallt Nät");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Justera Nät Höjd");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Höjd Antal");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Validera Nät");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Validera Nät ($)");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Validera Anpassat Nät");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Värma Bädd");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Värma Munstycke");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manuel grundning...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Fastlängd Grundning");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Färdig Grundning");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 Avbruten");
+ LSTR MSG_G26_LEAVING = _UxGT("Nivellera G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Fortsätt Bädd Nät");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Nät Nivellering");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Punkts Nivellering");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Rutnät Nivellering");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Nivellera Nät");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Sidopunkter");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Kart Typ");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Utmatning Nät Map");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Utmatning för Värd");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Utmatning för CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Utanför skrivare Backup");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Utmatning UBL Info");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Ifyllnad Mängd");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manuell Ifyllnad");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Smart Ifyllnad");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Ifyllnad Nät");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Ogiltigförklara Alla");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Ogiltigförklara Närmast");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Finjustera Alla");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Finjustera Närmast");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Nät Lagra");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Minnesöppning");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Ladda Bädd Nät");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Spara Bädd Nät");
+ LSTR MSG_MESH_LOADED = _UxGT("Nät %i Ladda");
+ LSTR MSG_MESH_SAVED = _UxGT("Nät %i Sparad");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Ingen Lagring");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Fel: UBL Sparad");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Fel: UBL Återställd");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Offset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Offset Stoppad");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Steg-för-Steg UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. Bygg Kallt Nät");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. Smart Ifyllnad");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. Validera Nät");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. Finjustera Alla");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. Validera Nät");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. Finjustera Alla");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. Spara Bädd Nät");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED Kontroll");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Ljus");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Ljus Förinställd");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Röd");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Orange");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Gul");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Grön");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Blå");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Violet");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Vitt");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Standard");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Kanal =");
- PROGMEM Language_Str MSG_LEDS2 = _UxGT("Ljus #2");
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Ljus #2 Förinställd");
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Ljusstyrka");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Anpassat Ljus");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Rör Intensitet");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Grön Intensitet");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Blå Intensitet");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Vit Intensitet");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Brightness");
+ LSTR MSG_LED_CONTROL = _UxGT("LED Kontroll");
+ LSTR MSG_LEDS = _UxGT("Ljus");
+ LSTR MSG_LED_PRESETS = _UxGT("Ljus Förinställd");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Röd");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Orange");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Gul");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Grön");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Blå");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Indigo");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Violet");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Vitt");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Standard");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Kanal =");
+ LSTR MSG_LEDS2 = _UxGT("Ljus #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Ljus #2 Förinställd");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Ljusstyrka");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Anpassat Ljus");
+ LSTR MSG_INTENSITY_R = _UxGT("Rör Intensitet");
+ LSTR MSG_INTENSITY_G = _UxGT("Grön Intensitet");
+ LSTR MSG_INTENSITY_B = _UxGT("Blå Intensitet");
+ LSTR MSG_INTENSITY_W = _UxGT("Vit Intensitet");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Brightness");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Flyttar...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Fri XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Flytta X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Flytta Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Flytta Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Extruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Extruder *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Hetände för kall");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Flytta %smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Flytta 0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Flytta 1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Flytta 10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Flytta 100mm");
- PROGMEM Language_Str MSG_MOVE_0001IN = _UxGT("Flytta 0.001tum");
- PROGMEM Language_Str MSG_MOVE_001IN = _UxGT("Flytta 0.01tum");
- PROGMEM Language_Str MSG_MOVE_01IN = _UxGT("Flytta 0.1tum");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Hastighet");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Bädd Z");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Munstycke");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Munstycke ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Munstycke Parkerad");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Munstycke Standby");
- PROGMEM Language_Str MSG_BED = _UxGT("Bädd");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Inkapsling");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fläkt Hastighet");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fläkt Hastighet ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Lagrad Fläkt ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fläkt Hastighet");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fläkt Hastighet ~");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Kontroller Fläkt");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Overksam Hastighet");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto läga");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktive Hastighet");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Overksam Period");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Flöde");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flöde ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontroll");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Autotemp");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("På");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Av");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autojustera");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autojustera *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autojustera misslyckad. Dålig extruder.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Autojustera misslyckad. Temperatur för hög.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Autojustera misslyckad! Tidsgräns.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Välj");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Välj *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
- PROGMEM Language_Str MSG_JERK = _UxGT("Ryck");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Ryck");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Ryck");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Ryck");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Ryck");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Ryck");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-Ryck");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-Ryck");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Knutpunkt Avv");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Hastighet");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vmax *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vmin");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VTrav Min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Acceleration");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Amax *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-Dra tillbaka");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-Färdas");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Frekvens max");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Flöde min");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Steg/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" Steg/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" Steg/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" Steg/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" Steg/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" Steg/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" Steg/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E Steg/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* Steg/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Temperatur");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Rörelse");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Tråd");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E i mm³");
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Gräns i mm³");
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Gräns *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Tråd Dia.");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Tråd Dia. *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Lossa mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Ladda mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advancera K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advancera K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Kontrast");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Spara Inställningar");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Ladda Inställningar");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Återställ Standard");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Initiera EEPROM");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fel");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fel");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fel");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Inställningar Lagrad");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Media Uppdatera");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Återställ Skrivare");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Uppdatera");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Info Skärm");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Förbered");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Justera");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Ström övervakning");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Ström");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Spänning");
- PROGMEM Language_Str MSG_POWER = _UxGT("Ström");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Start Utskrift");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Nästa");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Initiera");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Stoppa");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Skriv");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Återställa");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ignorera");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Avbryt");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Färdig");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Bakåt");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Fortsätt");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Hoppa över");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Paus..");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Pausera Utskrift");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Återuppta Utskrift");
- PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Värd Start");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Stoppa Utskrift");
- PROGMEM Language_Str MSG_END_LOOPS = _UxGT("Slut Upprepningsloop");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Skriver Objekt");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Avbryt Objekt");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Avbryt Objekt =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Ström Avbrott");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Skriv fråm Media");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Inget Media");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Sov...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Klick för att återuppta...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Utskrift Pausad");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Skriver...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Utskrift Avbruten");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Utskrift Färdig");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Ingen Flytt.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("DÖDAD. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("STOPPAD. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Dra tillbaka mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Byt Dra.mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Dra tillbaka V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hoppa mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Åter dra tillbaka. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Byt åter dra t. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Återdrat. V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Byt åter dra. V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Auto-Dra-tillbka");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Byt Längd");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Byt Extra");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Rensa Längd");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Byt verktyg");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Höj");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Grund Hastighet");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Återgå Hastighet");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Parkera Huvud");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Återgår Hastighet");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fläkt Hastighet");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fläkt Tid");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Auto PÅ");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Auto AV");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Verktyg Migration");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Senast Extruder");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrera till *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Byt Tråd");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Byt Tråd *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Ladda Tråd");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Ladda *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Lossa Tråd");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Lossa *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Lossa All");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Bifoga Media");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Byt Media");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Släpp Media");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Sond Utanför Bädd");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Skev Faktor");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Själv-Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Återställ");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Stuva undan");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Fällut");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Läge");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Läge");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Läge");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Läge-Lägring");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Sätt BLTouch to 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Sätt BLTouch to OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Reportera Dränering");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("FARA: Dålig inställningar kan orsaka skada! Fortsätt ändå?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Initiera TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Spara");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Fällut TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Fällut Z-Sond");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Stuva undan Z-Sond");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Hem %s%s%s Först");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Sond Offsets");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Sond X Offset");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Sond Y Offset");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Sond Z Offset");
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Flytta Munstycke till Bädd");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Småsteg X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Småsteg Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Småsteg Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Total");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Slutstopp Avbrott");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Värma Misslyckad");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Fel: REDUNDANT TEMP");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TERMISK ÖVERDRIFT");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("BÄDD TERMISK ÖVERDRIFT");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("KAMMARE T. ÖVERDRIFT");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Fel: MAXTEMP");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Fel: MINTEMP");
- PROGMEM Language_Str MSG_HALTED = _UxGT("Utskrift stoppad");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Snälla Återställ");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("d"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("t"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("m"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Värmer...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Kyler...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Bädd Värmer...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Bädd Kyler...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Sond Värmer...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Sond Kyler...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Kammare Värmer...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Kammare Kyler...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrering");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrera X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrera Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrera Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrera Center");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Inställningar");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Kalibrering");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Sätt Delta Höjd");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Sond Z-offset");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Höjd");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Radius");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Om Skrivaren");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Skrivare Info");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Punkt Nivellering");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Linjär Nivellering");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Bilinjär Nivellering");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Enhetlig Bädd Nivellering (UBL)");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Nät Nivellering");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Skrivar Stats");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Kort Info");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistor");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Extruderare");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokoll");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Överdrift Övervakning: AV");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Överdrift Övervakning: PÅ");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hetände Overksam Tidsgräns");
+ LSTR MSG_MOVING = _UxGT("Flyttar...");
+ LSTR MSG_FREE_XY = _UxGT("Fri XY");
+ LSTR MSG_MOVE_X = _UxGT("Flytta X");
+ LSTR MSG_MOVE_Y = _UxGT("Flytta Y");
+ LSTR MSG_MOVE_Z = _UxGT("Flytta Z");
+ LSTR MSG_MOVE_E = _UxGT("Extruder");
+ LSTR MSG_MOVE_EN = _UxGT("Extruder *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Hetände för kall");
+ LSTR MSG_MOVE_N_MM = _UxGT("Flytta %smm");
+ LSTR MSG_MOVE_01MM = _UxGT("Flytta 0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("Flytta 1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("Flytta 10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("Flytta 100mm");
+ LSTR MSG_MOVE_0001IN = _UxGT("Flytta 0.001tum");
+ LSTR MSG_MOVE_001IN = _UxGT("Flytta 0.01tum");
+ LSTR MSG_MOVE_01IN = _UxGT("Flytta 0.1tum");
+ LSTR MSG_SPEED = _UxGT("Hastighet");
+ LSTR MSG_BED_Z = _UxGT("Bädd Z");
+ LSTR MSG_NOZZLE = _UxGT("Munstycke");
+ LSTR MSG_NOZZLE_N = _UxGT("Munstycke ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Munstycke Parkerad");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Munstycke Standby");
+ LSTR MSG_BED = _UxGT("Bädd");
+ LSTR MSG_CHAMBER = _UxGT("Inkapsling");
+ LSTR MSG_FAN_SPEED = _UxGT("Fläkt Hastighet");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Fläkt Hastighet ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Lagrad Fläkt ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fläkt Hastighet");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fläkt Hastighet ~");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Kontroller Fläkt");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Overksam Hastighet");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto läga");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Aktive Hastighet");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Overksam Period");
+ LSTR MSG_FLOW = _UxGT("Flöde");
+ LSTR MSG_FLOW_N = _UxGT("Flöde ~");
+ LSTR MSG_CONTROL = _UxGT("Kontroll");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Fakt");
+ LSTR MSG_AUTOTEMP = _UxGT("Autotemp");
+ LSTR MSG_LCD_ON = _UxGT("På");
+ LSTR MSG_LCD_OFF = _UxGT("Av");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Autojustera");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Autojustera *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID tuning done");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Autojustera misslyckad. Dålig extruder.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Autojustera misslyckad. Temperatur för hög.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Autojustera misslyckad! Tidsgräns.");
+ LSTR MSG_SELECT = _UxGT("Välj");
+ LSTR MSG_SELECT_E = _UxGT("Välj *");
+ LSTR MSG_ACC = _UxGT("Accel");
+ LSTR MSG_JERK = _UxGT("Ryck");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Ryck");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Ryck");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Ryck");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Ryck");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Ryck");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-Ryck");
+ LSTR MSG_VE_JERK = _UxGT("Ve-Ryck");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Knutpunkt Avv");
+ LSTR MSG_VELOCITY = _UxGT("Hastighet");
+ LSTR MSG_VMAX_A = _UxGT("Vmax ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Vmax ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vmax ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Vmax ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Vmax ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Vmax ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Vmax ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Vmax *");
+ LSTR MSG_VMIN = _UxGT("Vmin");
+ LSTR MSG_VTRAV_MIN = _UxGT("VTrav Min");
+ LSTR MSG_ACCELERATION = _UxGT("Acceleration");
+ LSTR MSG_AMAX_A = _UxGT("Amax ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Amax ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Amax ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Amax ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Amax ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Amax ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Amax ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Amax *");
+ LSTR MSG_A_RETRACT = _UxGT("A-Dra tillbaka");
+ LSTR MSG_A_TRAVEL = _UxGT("A-Färdas");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Frekvens max");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Flöde min");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Steg/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" Steg/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" Steg/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" Steg/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" Steg/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" Steg/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" Steg/mm");
+ LSTR MSG_E_STEPS = _UxGT("E Steg/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* Steg/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Temperatur");
+ LSTR MSG_MOTION = _UxGT("Rörelse");
+ LSTR MSG_FILAMENT = _UxGT("Tråd");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E i mm³");
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E Gräns i mm³");
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E Gräns *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Tråd Dia.");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Tråd Dia. *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Lossa mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Ladda mm");
+ LSTR MSG_ADVANCE_K = _UxGT("Advancera K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Advancera K *");
+ LSTR MSG_CONTRAST = _UxGT("LCD Kontrast");
+ LSTR MSG_STORE_EEPROM = _UxGT("Spara Inställningar");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Ladda Inställningar");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Återställ Standard");
+ LSTR MSG_INIT_EEPROM = _UxGT("Initiera EEPROM");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC Fel");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index Fel");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version Fel");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Inställningar Lagrad");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Media Uppdatera");
+ LSTR MSG_RESET_PRINTER = _UxGT("Återställ Skrivare");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Uppdatera");
+ LSTR MSG_INFO_SCREEN = _UxGT("Info Skärm");
+ LSTR MSG_PREPARE = _UxGT("Förbered");
+ LSTR MSG_TUNE = _UxGT("Justera");
+ LSTR MSG_POWER_MONITOR = _UxGT("Ström övervakning");
+ LSTR MSG_CURRENT = _UxGT("Ström");
+ LSTR MSG_VOLTAGE = _UxGT("Spänning");
+ LSTR MSG_POWER = _UxGT("Ström");
+ LSTR MSG_START_PRINT = _UxGT("Start Utskrift");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Nästa");
+ LSTR MSG_BUTTON_INIT = _UxGT("Initiera");
+ LSTR MSG_BUTTON_STOP = _UxGT("Stoppa");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Skriv");
+ LSTR MSG_BUTTON_RESET = _UxGT("Återställa");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ignorera");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Avbryt");
+ LSTR MSG_BUTTON_DONE = _UxGT("Färdig");
+ LSTR MSG_BUTTON_BACK = _UxGT("Bakåt");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Fortsätt");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Hoppa över");
+ LSTR MSG_PAUSING = _UxGT("Paus..");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Pausera Utskrift");
+ LSTR MSG_RESUME_PRINT = _UxGT("Återuppta Utskrift");
+ LSTR MSG_HOST_START_PRINT = _UxGT("Värd Start");
+ LSTR MSG_STOP_PRINT = _UxGT("Stoppa Utskrift");
+ LSTR MSG_END_LOOPS = _UxGT("Slut Upprepningsloop");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Skriver Objekt");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Avbryt Objekt");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Avbryt Objekt =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Ström Avbrott");
+ LSTR MSG_MEDIA_MENU = _UxGT("Skriv fråm Media");
+ LSTR MSG_NO_MEDIA = _UxGT("Inget Media");
+ LSTR MSG_DWELL = _UxGT("Sov...");
+ LSTR MSG_USERWAIT = _UxGT("Klick för att återuppta...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Utskrift Pausad");
+ LSTR MSG_PRINTING = _UxGT("Skriver...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Utskrift Avbruten");
+ LSTR MSG_PRINT_DONE = _UxGT("Utskrift Färdig");
+ LSTR MSG_NO_MOVE = _UxGT("Ingen Flytt.");
+ LSTR MSG_KILLED = _UxGT("DÖDAD. ");
+ LSTR MSG_STOPPED = _UxGT("STOPPAD. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Dra tillbaka mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Byt Dra.mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Dra tillbaka V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hoppa mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Åter dra tillbaka. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Byt åter dra t. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Återdrat. V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Byt åter dra. V");
+ LSTR MSG_AUTORETRACT = _UxGT("Auto-Dra-tillbka");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Byt Längd");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Byt Extra");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Rensa Längd");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Byt verktyg");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Höj");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Grund Hastighet");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Återgå Hastighet");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Parkera Huvud");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Återgår Hastighet");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Fläkt Hastighet");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Fläkt Tid");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Auto PÅ");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Auto AV");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Verktyg Migration");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Auto-migration");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Senast Extruder");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Migrera till *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Byt Tråd");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Byt Tråd *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Ladda Tråd");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Ladda *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Lossa Tråd");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Lossa *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Lossa All");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Bifoga Media");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Byt Media");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Släpp Media");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z Sond Utanför Bädd");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Skev Faktor");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Själv-Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Återställ");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Stuva undan");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Fällut");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Läge");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Läge");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Läge");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Läge-Lägring");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Sätt BLTouch to 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Sätt BLTouch to OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Reportera Dränering");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("FARA: Dålig inställningar kan orsaka skada! Fortsätt ändå?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Initiera TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Offset Test");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Spara");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Fällut TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Fällut Z-Sond");
+ LSTR MSG_MANUAL_STOW = _UxGT("Stuva undan Z-Sond");
+ LSTR MSG_HOME_FIRST = _UxGT("Hem %s%s%s Först");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Sond Offsets");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Sond X Offset");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Sond Y Offset");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Sond Z Offset");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Flytta Munstycke till Bädd");
+ LSTR MSG_BABYSTEP_X = _UxGT("Småsteg X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Småsteg Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Småsteg Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Total");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Slutstopp Avbrott");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Värma Misslyckad");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Fel: REDUNDANT TEMP");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("TERMISK ÖVERDRIFT");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("BÄDD TERMISK ÖVERDRIFT");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("KAMMARE T. ÖVERDRIFT");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Fel: MAXTEMP");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Fel: MINTEMP");
+ LSTR MSG_HALTED = _UxGT("Utskrift stoppad");
+ LSTR MSG_PLEASE_RESET = _UxGT("Snälla Återställ");
+ LSTR MSG_SHORT_HOUR = _UxGT("t"); // One character only
+ LSTR MSG_HEATING = _UxGT("Värmer...");
+ LSTR MSG_COOLING = _UxGT("Kyler...");
+ LSTR MSG_BED_HEATING = _UxGT("Bädd Värmer...");
+ LSTR MSG_BED_COOLING = _UxGT("Bädd Kyler...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Sond Värmer...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Sond Kyler...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Kammare Värmer...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Kammare Kyler...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrering");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Kalibrera X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Kalibrera Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Kalibrera Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Kalibrera Center");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Inställningar");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Auto Kalibrering");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Sätt Delta Höjd");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Sond Z-offset");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Diag Rod");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Höjd");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Radius");
+ LSTR MSG_INFO_MENU = _UxGT("Om Skrivaren");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Skrivare Info");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-Punkt Nivellering");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Linjär Nivellering");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Bilinjär Nivellering");
+ LSTR MSG_UBL_LEVELING = _UxGT("Enhetlig Bädd Nivellering (UBL)");
+ LSTR MSG_MESH_LEVELING = _UxGT("Nät Nivellering");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Skrivar Stats");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Kort Info");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistor");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Extruderare");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baud");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokoll");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Överdrift Övervakning: AV");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Överdrift Övervakning: PÅ");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hetände Overksam Tidsgräns");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Lådljus");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Ljus ljusstyrka");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("INKORREKT SKRIVARE");
+ LSTR MSG_CASE_LIGHT = _UxGT("Lådljus");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Ljus ljusstyrka");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("INKORREKT SKRIVARE");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Utskriftsantal");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Färdiga");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total Utskriftstid");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Längsta Jobbtid");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderade Totalt");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Utskriftsantal");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Färdiga");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total Utskriftstid");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längsta Jobbtid");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderade Totalt");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Utskrift");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Färdig");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Total");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Längsta");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderad");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Utskrift");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Färdig");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Total");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Längsta");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Extruderad");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("PSU");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Driv Styrka");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Driver %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC KOPPLNINGSFEL");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("TRÅDBYTE");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("UTSKRIFTSPAUSERAD");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LADDA TRÅD");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("LOSSA TRÅD");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ÅTERGÅ VAÖ:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Rensa mer");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Fortsätt");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Munstycke: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Utskjut Sensor");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Utskjut Dist mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Hemning Misslyckad");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Sondering Misslyckad");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Temp");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Temp");
+ LSTR MSG_INFO_PSU = _UxGT("PSU");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Driv Styrka");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Driver %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Driver %");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC KOPPLNINGSFEL");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Skriv");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("TRÅDBYTE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("UTSKRIFTSPAUSERAD");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("LADDA TRÅD");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("LOSSA TRÅD");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ÅTERGÅ VAÖ:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Rensa mer");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Fortsätt");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Munstycke: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Utskjut Sensor");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Utskjut Dist mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Hemning Misslyckad");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Sondering Misslyckad");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VÄLJ TRÅD");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Uppdatera MMU Firmware!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Behöver uppmärksamhet.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("MMU Återuppta");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("MMU Återupptas...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Ladda");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("MMU Ladda Alla");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Ladda till Munstycke");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Mata ut");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Mata ut ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Lossa");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Ladda Tråd %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Mata ut Tråd ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Lossa Tråd...");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Alla");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Tråd ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Återställ MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU Återställer...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Ta bort, Klicka");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("VÄLJ TRÅD");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Uppdatera MMU Firmware!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Behöver uppmärksamhet.");
+ LSTR MSG_MMU2_RESUME = _UxGT("MMU Återuppta");
+ LSTR MSG_MMU2_RESUMING = _UxGT("MMU Återupptas...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Ladda");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Ladda Alla");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Ladda till Munstycke");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Mata ut");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Mata ut ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Lossa");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Ladda Tråd %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Mata ut Tråd ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Lossa Tråd...");
+ LSTR MSG_MMU2_ALL = _UxGT("Alla");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Tråd ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Återställ MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU Återställer...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Ta bort, Klicka");
- PROGMEM Language_Str MSG_MIX = _UxGT("Mixa");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Komponent =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Mixer");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradient");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Full Gradient");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Växla Mix");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Totera Mix");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Omvänd Gradient");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktive V-verktyg");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Start V-verktyg");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Slut V-verktyg");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-verktyg");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Återställ V-verktyg");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Kommitta V-verktyg Mix");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-verktyg blev Återställda");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Start Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Slut Z:");
+ LSTR MSG_MIX = _UxGT("Mixa");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Komponent =");
+ LSTR MSG_MIXER = _UxGT("Mixer");
+ LSTR MSG_GRADIENT = _UxGT("Gradient");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Full Gradient");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Växla Mix");
+ LSTR MSG_CYCLE_MIX = _UxGT("Totera Mix");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Gradient Mix");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Omvänd Gradient");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktive V-verktyg");
+ LSTR MSG_START_VTOOL = _UxGT("Start V-verktyg");
+ LSTR MSG_END_VTOOL = _UxGT(" Slut V-verktyg");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-verktyg");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Återställ V-verktyg");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Kommitta V-verktyg Mix");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-verktyg blev Återställda");
+ LSTR MSG_START_Z = _UxGT("Start Z:");
+ LSTR MSG_END_Z = _UxGT(" Slut Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Spel");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Labyrint");
+ LSTR MSG_GAMES = _UxGT("Spel");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Labyrint");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Dålig sida index");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Dålig sida hastighet");
+ LSTR MSG_BAD_PAGE = _UxGT("Dålig sida index");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Dålig sida hastighet");
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Redigera Lösenord");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Login Krävs");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Lösenordsinställningar");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Ange Siffra");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Sätt/Redigera Lösenord");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Ta bort Lösenord");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Lösenord är ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Börja om");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Kom ihåg att Spara!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Lösenord Bort taget");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Redigera Lösenord");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Login Krävs");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Lösenordsinställningar");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Ange Siffra");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Sätt/Redigera Lösenord");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Ta bort Lösenord");
+ LSTR MSG_PASSWORD_SET = _UxGT("Lösenord är ");
+ LSTR MSG_START_OVER = _UxGT("Börja om");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Kom ihåg att Spara!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Lösenord Bort taget");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Tryck på knappen", "för att fortsätta utskrift"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkera..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Vänta på", "trådbyte", "att börja"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Sätt in tråd", "och tryck på knappen", "för att fortsätta"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Tryck på knappen", "för att värma munstycke"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Munstycke värms", "Var snäll och vänta..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Väntar på", "trådlossning"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Väntar på", "trådladdning"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Väntar på", "tråd utrensning"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klicka för att slutföra", "tråd utrensning"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Väntar på utskrift", "att återstarta..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Tryck på knappen", "för att fortsätta utskrift"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkera..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Vänta på", "trådbyte", "att börja"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Sätt in tråd", "och tryck på knappen", "för att fortsätta"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Tryck på knappen", "för att värma munstycke"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Munstycke värms", "Var snäll och vänta..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Väntar på", "trådlossning"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Väntar på", "trådladdning"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Väntar på", "tråd utrensning"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Klicka för att slutföra", "tråd utrensning"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Väntar på utskrift", "att återstarta..."));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Klick för att fortsätta"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkera..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Vänta..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Sätt in och klicka"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Klicka för att värma"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Värmer..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Lossar..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Laddar..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Rensar..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Klicka för att slutföra"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Återgår..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Klick för att fortsätta"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Parkera..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Vänta..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Sätt in och klicka"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Klicka för att värma"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Värmer..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Lossar..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Laddar..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Rensar..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Klicka för att slutföra"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Återgår..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Driver Ström");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Tröskelvärde");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensorlös Hemning");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Stegningsläge");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("Smyghack Aktiverad");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Återställ");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" in:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Backlash");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Korrigering");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Glättning");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC Drivers");
+ LSTR MSG_TMC_CURRENT = _UxGT("Driver Ström");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hybrid Tröskelvärde");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensorlös Hemning");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Stegningsläge");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Smyghack Aktiverad");
+ LSTR MSG_SERVICE_RESET = _UxGT("Återställ");
+ LSTR MSG_SERVICE_IN = _UxGT(" in:");
+ LSTR MSG_BACKLASH = _UxGT("Backlash");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Korrigering");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Glättning");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Nivå X Axel");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Auto Kalibrera");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Nivå X Axel");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Auto Kalibrera");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Overksam tidsgräns, temperatur minskning. Tryck ok för att återvärma och igen för att fortsätta.");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Overksam tidsgräns, temperatur minskning. Tryck ok för att återvärma och igen för att fortsätta.");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Värmare Tidsgräns");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Värmare Tidsgräns");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Återvärm");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Återvärmning...");
+ LSTR MSG_REHEAT = _UxGT("Återvärm");
+ LSTR MSG_REHEATING = _UxGT("Återvärmning...");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Z Sond Wizard");
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Sondering Z Referens");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Flyttar till Sonderings Pos");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Z Sond Wizard");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Sondering Z Referens");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Flyttar till Sonderings Pos");
- PROGMEM Language_Str MSG_SOUND = _UxGT("Ljud");
+ LSTR MSG_SOUND = _UxGT("Ljud");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Uppe Vänster");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Nere Vänster");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Uppe Höger");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Nere Höger");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrering Färdig");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Kalibrering Misslyckad");
+ LSTR MSG_TOP_LEFT = _UxGT("Uppe Vänster");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Nere Vänster");
+ LSTR MSG_TOP_RIGHT = _UxGT("Uppe Höger");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Nere Höger");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Kalibrering Färdig");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Kalibrering Misslyckad");
}
diff --git a/Marlin/src/lcd/language/language_test.h b/Marlin/src/lcd/language/language_test.h
index 16cafbebbe..20b5a7e686 100644
--- a/Marlin/src/lcd/language/language_test.h
+++ b/Marlin/src/lcd/language/language_test.h
@@ -116,121 +116,121 @@
namespace Language_test {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 1;
+ constexpr uint8_t CHARSIZE = 1;
#if ENABLED(DISPLAYTEST)
- PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+ LSTR WELCOME_MSG = _UxGT("Language TEST");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Display test");
- PROGMEM Language_Str MSG_PREPARE = STRG_OKTAL_b;
- PROGMEM Language_Str MSG_CONTROL = STRG_OKTAL_c;
+ LSTR MSG_INFO_SCREEN = _UxGT("Display test");
+ LSTR MSG_PREPARE = STRG_OKTAL_b;
+ LSTR MSG_CONTROL = STRG_OKTAL_c;
#endif
#if ENABLED(WEST)
- PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+ LSTR WELCOME_MSG = _UxGT("Language TEST");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("UTF8");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("ASCII");
+ LSTR MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
+ LSTR MSG_PREPARE = _UxGT("UTF8");
+ LSTR MSG_CONTROL = _UxGT("ASCII");
- PROGMEM Language_Str MSG_MAIN = _UxGT("..");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = STRG_C2_8;
- PROGMEM Language_Str MSG_AUTO_HOME = STRG_C2_9;
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = STRG_C2_a;
- PROGMEM Language_Str MSG_PREHEAT_1 = STRG_C2_b;
- PROGMEM Language_Str MSG_PREHEAT_2 = STRG_C3_8;
- PROGMEM Language_Str MSG_COOLDOWN = STRG_C3_9;
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = STRG_C3_a;
- PROGMEM Language_Str MSG_MOVE_AXIS = STRG_C3_b;
+ LSTR MSG_MAIN = _UxGT("..");
+ LSTR MSG_DISABLE_STEPPERS = STRG_C2_8;
+ LSTR MSG_AUTO_HOME = STRG_C2_9;
+ LSTR MSG_SET_HOME_OFFSETS = STRG_C2_a;
+ LSTR MSG_PREHEAT_1 = STRG_C2_b;
+ LSTR MSG_PREHEAT_2 = STRG_C3_8;
+ LSTR MSG_COOLDOWN = STRG_C3_9;
+ LSTR MSG_SWITCH_PS_OFF = STRG_C3_a;
+ LSTR MSG_MOVE_AXIS = STRG_C3_b;
- PROGMEM Language_Str MSG_MAIN = STRG_OKTAL_2;
- PROGMEM Language_Str MSG_TEMPERATURE = STRG_OKTAL_3;
- PROGMEM Language_Str MSG_MOTION = STRG_OKTAL_4;
- PROGMEM Language_Str MSG_FILAMENT = STRG_OKTAL_5;
- PROGMEM Language_Str MSG_CONTRAST = STRG_OKTAL_6;
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
+ LSTR MSG_MAIN = STRG_OKTAL_2;
+ LSTR MSG_TEMPERATURE = STRG_OKTAL_3;
+ LSTR MSG_MOTION = STRG_OKTAL_4;
+ LSTR MSG_FILAMENT = STRG_OKTAL_5;
+ LSTR MSG_CONTRAST = STRG_OKTAL_6;
+ LSTR MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
- PROGMEM Language_Str MSG_NOZZLE = STRG_OKTAL_8;
- PROGMEM Language_Str MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
- PROGMEM Language_Str MSG_FAN_SPEED = STRG_OKTAL_9;
- PROGMEM Language_Str MSG_FAN_SPEED_N = STRG_OKTAL_9;
- PROGMEM Language_Str MSG_AUTOTEMP = STRG_OKTAL_a;
- PROGMEM Language_Str MSG_MIN = STRG_OKTAL_b;
- PROGMEM Language_Str MSG_MAX = STRG_OKTAL_c;
- PROGMEM Language_Str MSG_FACTOR = STRG_OKTAL_d;
- PROGMEM Language_Str MSG_PID_P = STRG_OKTAL_e;
- PROGMEM Language_Str MSG_PID_I = STRG_OKTAL_f;
+ LSTR MSG_NOZZLE = STRG_OKTAL_8;
+ LSTR MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
+ LSTR MSG_FAN_SPEED = STRG_OKTAL_9;
+ LSTR MSG_FAN_SPEED_N = STRG_OKTAL_9;
+ LSTR MSG_AUTOTEMP = STRG_OKTAL_a;
+ LSTR MSG_MIN = STRG_OKTAL_b;
+ LSTR MSG_MAX = STRG_OKTAL_c;
+ LSTR MSG_FACTOR = STRG_OKTAL_d;
+ LSTR MSG_PID_P = STRG_OKTAL_e;
+ LSTR MSG_PID_I = STRG_OKTAL_f;
#endif
#if ENABLED(CYRIL)
- PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+ LSTR WELCOME_MSG = _UxGT("Language TEST");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("UTF8");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("ASCII");
+ LSTR MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
+ LSTR MSG_PREPARE = _UxGT("UTF8");
+ LSTR MSG_CONTROL = _UxGT("ASCII");
- PROGMEM Language_Str MSG_MAIN = _UxGT("..");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = STRG_D0_8;
- PROGMEM Language_Str MSG_AUTO_HOME = STRG_D0_9;
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = STRG_D0_a;
- PROGMEM Language_Str MSG_PREHEAT_1 = STRG_D0_b;
- PROGMEM Language_Str MSG_PREHEAT_2 = STRG_D1_8;
- PROGMEM Language_Str MSG_COOLDOWN = STRG_D1_9;
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = STRG_D1_a;
- PROGMEM Language_Str MSG_MOVE_AXIS = STRG_D1_b;
+ LSTR MSG_MAIN = _UxGT("..");
+ LSTR MSG_DISABLE_STEPPERS = STRG_D0_8;
+ LSTR MSG_AUTO_HOME = STRG_D0_9;
+ LSTR MSG_SET_HOME_OFFSETS = STRG_D0_a;
+ LSTR MSG_PREHEAT_1 = STRG_D0_b;
+ LSTR MSG_PREHEAT_2 = STRG_D1_8;
+ LSTR MSG_COOLDOWN = STRG_D1_9;
+ LSTR MSG_SWITCH_PS_OFF = STRG_D1_a;
+ LSTR MSG_MOVE_AXIS = STRG_D1_b;
- PROGMEM Language_Str MSG_MAIN = STRG_OKTAL_2;
- PROGMEM Language_Str MSG_TEMPERATURE = STRG_OKTAL_3;
- PROGMEM Language_Str MSG_MOTION = STRG_OKTAL_4;
- PROGMEM Language_Str MSG_FILAMENT = STRG_OKTAL_5;
- PROGMEM Language_Str MSG_CONTRAST = STRG_OKTAL_6;
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
+ LSTR MSG_MAIN = STRG_OKTAL_2;
+ LSTR MSG_TEMPERATURE = STRG_OKTAL_3;
+ LSTR MSG_MOTION = STRG_OKTAL_4;
+ LSTR MSG_FILAMENT = STRG_OKTAL_5;
+ LSTR MSG_CONTRAST = STRG_OKTAL_6;
+ LSTR MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
- PROGMEM Language_Str MSG_NOZZLE = STRG_OKTAL_8;
- PROGMEM Language_Str MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
- PROGMEM Language_Str MSG_FAN_SPEED_N = STRG_OKTAL_9;
- PROGMEM Language_Str MSG_AUTOTEMP = STRG_OKTAL_a;
- PROGMEM Language_Str MSG_MIN = STRG_OKTAL_b;
- PROGMEM Language_Str MSG_MAX = STRG_OKTAL_c;
- PROGMEM Language_Str MSG_FACTOR = STRG_OKTAL_d;
- PROGMEM Language_Str MSG_PID_P = STRG_OKTAL_e;
- PROGMEM Language_Str MSG_PID_I = STRG_OKTAL_f;
+ LSTR MSG_NOZZLE = STRG_OKTAL_8;
+ LSTR MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
+ LSTR MSG_FAN_SPEED_N = STRG_OKTAL_9;
+ LSTR MSG_AUTOTEMP = STRG_OKTAL_a;
+ LSTR MSG_MIN = STRG_OKTAL_b;
+ LSTR MSG_MAX = STRG_OKTAL_c;
+ LSTR MSG_FACTOR = STRG_OKTAL_d;
+ LSTR MSG_PID_P = STRG_OKTAL_e;
+ LSTR MSG_PID_I = STRG_OKTAL_f;
#endif
#if ENABLED(KANA)
- PROGMEM Language_Str WELCOME_MSG = _UxGT("Language TEST");
+ LSTR WELCOME_MSG = _UxGT("Language TEST");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("UTF8");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("ASCII");
+ LSTR MSG_INFO_SCREEN = _UxGT("\001\002\003\004\005\006\007\010\011");
+ LSTR MSG_PREPARE = _UxGT("UTF8");
+ LSTR MSG_CONTROL = _UxGT("ASCII");
- PROGMEM Language_Str MSG_MAIN = _UxGT("..");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = STRG_E382_8;
- PROGMEM Language_Str MSG_AUTO_HOME = STRG_E382_9;
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = STRG_E382_a;
- PROGMEM Language_Str MSG_PREHEAT_1 = STRG_E382_b;
- PROGMEM Language_Str MSG_PREHEAT_2 = STRG_E383_8;
- PROGMEM Language_Str MSG_COOLDOWN = STRG_E383_9;
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = STRG_E383_a;
- PROGMEM Language_Str MSG_MOVE_AXIS = STRG_E383_b;
+ LSTR MSG_MAIN = _UxGT("..");
+ LSTR MSG_DISABLE_STEPPERS = STRG_E382_8;
+ LSTR MSG_AUTO_HOME = STRG_E382_9;
+ LSTR MSG_SET_HOME_OFFSETS = STRG_E382_a;
+ LSTR MSG_PREHEAT_1 = STRG_E382_b;
+ LSTR MSG_PREHEAT_2 = STRG_E383_8;
+ LSTR MSG_COOLDOWN = STRG_E383_9;
+ LSTR MSG_SWITCH_PS_OFF = STRG_E383_a;
+ LSTR MSG_MOVE_AXIS = STRG_E383_b;
- PROGMEM Language_Str MSG_MAIN = STRG_OKTAL_2;
- PROGMEM Language_Str MSG_TEMPERATURE = STRG_OKTAL_3;
- PROGMEM Language_Str MSG_MOTION = STRG_OKTAL_4;
- PROGMEM Language_Str MSG_FILAMENT = STRG_OKTAL_5;
- PROGMEM Language_Str MSG_CONTRAST = STRG_OKTAL_6;
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
+ LSTR MSG_MAIN = STRG_OKTAL_2;
+ LSTR MSG_TEMPERATURE = STRG_OKTAL_3;
+ LSTR MSG_MOTION = STRG_OKTAL_4;
+ LSTR MSG_FILAMENT = STRG_OKTAL_5;
+ LSTR MSG_CONTRAST = STRG_OKTAL_6;
+ LSTR MSG_RESTORE_DEFAULTS = STRG_OKTAL_7;
- PROGMEM Language_Str MSG_NOZZLE = STRG_OKTAL_8;
- PROGMEM Language_Str MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
- PROGMEM Language_Str MSG_FAN_SPEED_N = STRG_OKTAL_9;
- PROGMEM Language_Str MSG_AUTOTEMP = STRG_OKTAL_a;
- PROGMEM Language_Str MSG_MIN = STRG_OKTAL_b;
- PROGMEM Language_Str MSG_MAX = STRG_OKTAL_c;
- PROGMEM Language_Str MSG_FACTOR = STRG_OKTAL_d;
- PROGMEM Language_Str MSG_PID_P = STRG_OKTAL_e;
- PROGMEM Language_Str MSG_PID_I = STRG_OKTAL_f;
+ LSTR MSG_NOZZLE = STRG_OKTAL_8;
+ LSTR MSG_NOZZLE_N = STRG_OKTAL_8 " ~";
+ LSTR MSG_FAN_SPEED_N = STRG_OKTAL_9;
+ LSTR MSG_AUTOTEMP = STRG_OKTAL_a;
+ LSTR MSG_MIN = STRG_OKTAL_b;
+ LSTR MSG_MAX = STRG_OKTAL_c;
+ LSTR MSG_FACTOR = STRG_OKTAL_d;
+ LSTR MSG_PID_P = STRG_OKTAL_e;
+ LSTR MSG_PID_I = STRG_OKTAL_f;
#endif
}
diff --git a/Marlin/src/lcd/language/language_tr.h b/Marlin/src/lcd/language/language_tr.h
index f31eb5b13f..d6f2f52a0c 100644
--- a/Marlin/src/lcd/language/language_tr.h
+++ b/Marlin/src/lcd/language/language_tr.h
@@ -37,512 +37,510 @@
namespace Language_tr {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Turkish");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Turkish");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" hazır.");
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("EVET");
- PROGMEM Language_Str MSG_NO = _UxGT("HAYIR");
- PROGMEM Language_Str MSG_BACK = _UxGT("Geri");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Durduruluyor...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD K. Yerleştirildi.");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD Kart Çıkarıldı.");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("SD Kart Bekleniyor");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Kart Okuma Hatası");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB Çıkarıldı");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB Başlat. Hatası");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Enstops"); // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Yazılımsal Endstops");
- PROGMEM Language_Str MSG_MAIN = _UxGT("Ana");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Gelişmiş Ayarlar");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Yapılandırma");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Oto. Başlat");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Motorları Durdur");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Hata Ayıklama");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Durum Çubuğu Testi");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Eksenleri Sıfırla");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("X Sıfırla");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Y Sıfırla");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Z Sıfırla");
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Oto. Z-Hizalama");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("XYZ Sıfırlanıyor");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Başlatmak için tıkla");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sonraki Nokta");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Hizalama Tamam!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Kaçınma Yüksekliği");
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Ofset Ayarla");
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofset Tamam");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Sıfır Belirle");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" hazır.");
+ LSTR MSG_YES = _UxGT("EVET");
+ LSTR MSG_NO = _UxGT("HAYIR");
+ LSTR MSG_BACK = _UxGT("Geri");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Durduruluyor...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("SD K. Yerleştirildi.");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("SD Kart Çıkarıldı.");
+ LSTR MSG_MEDIA_WAITING = _UxGT("SD Kart Bekleniyor");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Kart Okuma Hatası");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB Çıkarıldı");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB Başlat. Hatası");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Enstops"); // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Yazılımsal Endstops");
+ LSTR MSG_MAIN = _UxGT("Ana");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Gelişmiş Ayarlar");
+ LSTR MSG_CONFIGURATION = _UxGT("Yapılandırma");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Oto. Başlat");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Motorları Durdur");
+ LSTR MSG_DEBUG_MENU = _UxGT("Hata Ayıklama");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Durum Çubuğu Testi");
+ LSTR MSG_AUTO_HOME = _UxGT("Eksenleri Sıfırla");
+ LSTR MSG_AUTO_HOME_X = _UxGT("X Sıfırla");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Y Sıfırla");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Z Sıfırla");
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Oto. Z-Hizalama");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("XYZ Sıfırlanıyor");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Başlatmak için tıkla");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Sonraki Nokta");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Hizalama Tamam!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Kaçınma Yüksekliği");
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Ofset Ayarla");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Ofset Tamam");
+ LSTR MSG_SET_ORIGIN = _UxGT("Sıfır Belirle");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tüm");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tabla");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Ayarlar");
+ LSTR MSG_PREHEAT_1 = _UxGT("Ön Isınma ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Ön Isınma ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Nozul ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tüm");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Tabla");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Ön Isınma ") PREHEAT_1_LABEL _UxGT(" Ayarlar");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Ön Isınma $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Ön Isınma $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Ön Isınma $ Nozul");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Ön Isınma $ Nozul ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Ön Isınma $ Tüm");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Ön Isınma $ Tabla");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Ön Isınma $ Ayarlar");
+ LSTR MSG_PREHEAT_M = _UxGT("Ön Isınma $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Ön Isınma $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Ön Isınma $ Nozul");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Ön Isınma $ Nozul ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Ön Isınma $ Tüm");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Ön Isınma $ Tabla");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Ön Isınma $ Ayarlar");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Özel Ön Isınma");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Soğut/(Durdur)");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Lazer Kontrolü");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Lazer Gücü");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Spindle Kontrolü");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Spindle Gücü");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Spindle Ters Yön");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Gücü Aç");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Gücü Kapat");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Ekstrüzyon");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Geri Çek");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Eksen Hareketleri");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Tabla Hizalama");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Tabla Hizası");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Hizalama Köşeleri");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Sonraki Köşe");
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Mesh Editörü");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Mesh Düzenle");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Mesh Düzenleme Durdu");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Prop Noktası");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("İndeks X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("İndeks Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z Değeri");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Özel Komutlar");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 Prob Testi");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 Nokta");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Sapma");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX Modu");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Takım Ofsetleri");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Oto-Park");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Kopyala");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Yansıtılmış kopya");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Tam Kontrol");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2. nozul X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2. nozul Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2. nozul Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("G29 Çalışıyor");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL Araçları");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("UBL Yatak Hizalama");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Eğim Noktası");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Elle Mesh Oluştur");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Altlık & Ölçü Ver");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Ölçü");
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Yataktan Ölçü Kaldır");
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Sonrakine Git");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("UBL'yi Etkinleştir");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL'yi Etkisizleştir");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Yatak Sıcaklığı");
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Yatak Sıcaklığı");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nozul Sıcaklığı");
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Nozul Sıcaklığı");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Mesh Düzenleme");
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Özel Mesh Düzenleme");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("İnce Ayar Mesh");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Mesh Düzenleme Tamam");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Özel Mesh Oluştur");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Mesh Oluştur");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Özel Ön Isınma");
+ LSTR MSG_COOLDOWN = _UxGT("Soğut/(Durdur)");
+ LSTR MSG_LASER_MENU = _UxGT("Lazer Kontrolü");
+ LSTR MSG_LASER_POWER = _UxGT("Lazer Gücü");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Spindle Kontrolü");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Spindle Gücü");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Spindle Ters Yön");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Gücü Aç");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Gücü Kapat");
+ LSTR MSG_EXTRUDE = _UxGT("Ekstrüzyon");
+ LSTR MSG_RETRACT = _UxGT("Geri Çek");
+ LSTR MSG_MOVE_AXIS = _UxGT("Eksen Hareketleri");
+ LSTR MSG_BED_LEVELING = _UxGT("Tabla Hizalama");
+ LSTR MSG_LEVEL_BED = _UxGT("Tabla Hizası");
+ LSTR MSG_BED_TRAMMING = _UxGT("Hizalama Köşeleri");
+ LSTR MSG_NEXT_CORNER = _UxGT("Sonraki Köşe");
+ LSTR MSG_MESH_EDITOR = _UxGT("Mesh Editörü");
+ LSTR MSG_EDIT_MESH = _UxGT("Mesh Düzenle");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Mesh Düzenleme Durdu");
+ LSTR MSG_PROBING_POINT = _UxGT("Prop Noktası");
+ LSTR MSG_MESH_X = _UxGT("İndeks X");
+ LSTR MSG_MESH_Y = _UxGT("İndeks Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Z Değeri");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Özel Komutlar");
+ LSTR MSG_M48_TEST = _UxGT("M48 Prob Testi");
+ LSTR MSG_M48_POINT = _UxGT("M48 Nokta");
+ LSTR MSG_M48_DEVIATION = _UxGT("Sapma");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX Modu");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Takım Ofsetleri");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Oto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Kopyala");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Yansıtılmış kopya");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Tam Kontrol");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2. nozul Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2. nozul @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("G29 Çalışıyor");
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL Araçları");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("UBL Yatak Hizalama");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Eğim Noktası");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Elle Mesh Oluştur");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Altlık & Ölçü Ver");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Ölçü");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Yataktan Ölçü Kaldır");
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Sonrakine Git");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("UBL'yi Etkinleştir");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("UBL'yi Etkisizleştir");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Yatak Sıcaklığı");
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Yatak Sıcaklığı");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nozul Sıcaklığı");
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Nozul Sıcaklığı");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Mesh Düzenleme");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Özel Mesh Düzenleme");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("İnce Ayar Mesh");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Mesh Düzenleme Tamam");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Özel Mesh Oluştur");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Mesh Oluştur");
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Mesh Oluştur ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Doğrulama Mesh ($)");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Mesh Oluştur ($)");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Doğrulama Mesh ($)");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Soğuk Mesh Oluştur");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Mesh Yükseklik Ayarı");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Yükseklik miktarı");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Doğrulama Mesh");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Özel Mesh Doğrulama");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 Isıtma Tablası");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 Isıtma Memesi");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Manuel çalışma...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Birincil Sabit Uzunluk");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Çalışma Tamamlandı");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 İptal edildi");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Çıkış G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Tabla Mesh Devam et");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Mesh Hizalama");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Nokta Hizalama");
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Kafes Mesh Hizalama");
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Mesh Seviyesi");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Yan Noktalar");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Haritalama Türü");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Mesh Çıkış Haritası");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host için Çıktı");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV için Çıktı");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Yazıcıda Yedek Kpalı");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("UBL Çıkış Bilgisi");
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Dolgu Miktarı");
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Manuel Dolgu");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Akıllı Dogu");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Mesh Dolgu");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Tümünü Geçersiz Kıl");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Yakını Geçersiz Kıl");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Tümünü İnce Ayarla");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Yakını İnce Ayarla");
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Depolama");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Bellek Yuvası");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Yatak Mesh Yükle");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Yatak Mesh Kayıt Et");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Mesh %i yüklendi");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Mesh %i kayıtlandı");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Depolama Yok");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Hata: UBL Kayıt");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Hata: UBL Yenileme");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-Ofset: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Ofset Durduruldu");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Adım Adım UBL");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Soğuk Mesh Oluştur");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Akıllı Dogu");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Doğrulama Mesh");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Tümünü İnce Ayarla");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Doğrulama Mesh");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Tümünü İnce Ayarla");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Yatak Mesh Kayıt Et");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Soğuk Mesh Oluştur");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Mesh Yükseklik Ayarı");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Yükseklik miktarı");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Doğrulama Mesh");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Özel Mesh Doğrulama");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 Isıtma Tablası");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 Isıtma Memesi");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Manuel çalışma...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Birincil Sabit Uzunluk");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Çalışma Tamamlandı");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 İptal edildi");
+ LSTR MSG_G26_LEAVING = _UxGT("Çıkış G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Tabla Mesh Devam et");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Mesh Hizalama");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-Nokta Hizalama");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Kafes Mesh Hizalama");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Mesh Seviyesi");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Yan Noktalar");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Haritalama Türü");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Mesh Çıkış Haritası");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Host için Çıktı");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("CSV için Çıktı");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Yazıcıda Yedek Kpalı");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("UBL Çıkış Bilgisi");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Dolgu Miktarı");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Manuel Dolgu");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Akıllı Dogu");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Mesh Dolgu");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Tümünü Geçersiz Kıl");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Yakını Geçersiz Kıl");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Tümünü İnce Ayarla");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Yakını İnce Ayarla");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Mesh Depolama");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Bellek Yuvası");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Yatak Mesh Yükle");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Yatak Mesh Kayıt Et");
+ LSTR MSG_MESH_LOADED = _UxGT("Mesh %i yüklendi");
+ LSTR MSG_MESH_SAVED = _UxGT("Mesh %i kayıtlandı");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Depolama Yok");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Hata: UBL Kayıt");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Hata: UBL Yenileme");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-Ofset: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z-Ofset Durduruldu");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Adım Adım UBL");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Soğuk Mesh Oluştur");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Akıllı Dogu");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Doğrulama Mesh");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Tümünü İnce Ayarla");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Doğrulama Mesh");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Tümünü İnce Ayarla");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Yatak Mesh Kayıt Et");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED Kontrolü");
- PROGMEM Language_Str MSG_LEDS = _UxGT("LEDler");
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("LED Hazır Ayarları");
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Kırmızı");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Turuncu");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Sarı");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Yeşil");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Mavi");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Lacivert");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Menekşe");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Beyaz");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Varsayılan");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Özel Işıklar");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Kırmızı Şiddeti");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Yeşil Şiddeti");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Mavi Şiddeti");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Beyaz Şiddeti");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Parlaklık");
+ LSTR MSG_LED_CONTROL = _UxGT("LED Kontrolü");
+ LSTR MSG_LEDS = _UxGT("LEDler");
+ LSTR MSG_LED_PRESETS = _UxGT("LED Hazır Ayarları");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Kırmızı");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Turuncu");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Sarı");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Yeşil");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Mavi");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Lacivert");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Menekşe");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Beyaz");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Varsayılan");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Özel Işıklar");
+ LSTR MSG_INTENSITY_R = _UxGT("Kırmızı Şiddeti");
+ LSTR MSG_INTENSITY_G = _UxGT("Yeşil Şiddeti");
+ LSTR MSG_INTENSITY_B = _UxGT("Mavi Şiddeti");
+ LSTR MSG_INTENSITY_W = _UxGT("Beyaz Şiddeti");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Parlaklık");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Hareket Ediyor..");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Durdur XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("X Hareketi");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Y Hareketi");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Z Hareketi");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Ekstruder");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Ekstruder *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Nozul Çok Soğuk");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("%smm");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("0.1mm");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("1mm");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("10mm");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Hız");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Mesafesi");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Nozul");
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozul ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Tabla");
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Çevirme");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Hızı");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan Hızı ~");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Depolanan Fan ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Ekstra Fan Hızı");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Ekstra Fan Hızı ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Akış");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Akış ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrol");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Çarpan");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Oto. Sıcaklık");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Açık");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Kapalı");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Kalibrasyon");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Kalibrasyon *");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Seç");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Seç *");
- PROGMEM Language_Str MSG_ACC = _UxGT("İvme");
+ LSTR MSG_MOVING = _UxGT("Hareket Ediyor..");
+ LSTR MSG_FREE_XY = _UxGT("Durdur XY");
+ LSTR MSG_MOVE_X = _UxGT("X Hareketi");
+ LSTR MSG_MOVE_Y = _UxGT("Y Hareketi");
+ LSTR MSG_MOVE_Z = _UxGT("Z Hareketi");
+ LSTR MSG_MOVE_E = _UxGT("Ekstruder");
+ LSTR MSG_MOVE_EN = _UxGT("Ekstruder *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Nozul Çok Soğuk");
+ LSTR MSG_MOVE_N_MM = _UxGT("%smm");
+ LSTR MSG_MOVE_01MM = _UxGT("0.1mm");
+ LSTR MSG_MOVE_1MM = _UxGT("1mm");
+ LSTR MSG_MOVE_10MM = _UxGT("10mm");
+ LSTR MSG_MOVE_100MM = _UxGT("100mm");
+ LSTR MSG_SPEED = _UxGT("Hız");
+ LSTR MSG_BED_Z = _UxGT("Z Mesafesi");
+ LSTR MSG_NOZZLE = _UxGT("Nozul");
+ LSTR MSG_NOZZLE_N = _UxGT("Nozul ~");
+ LSTR MSG_BED = _UxGT("Tabla");
+ LSTR MSG_CHAMBER = _UxGT("Çevirme");
+ LSTR MSG_FAN_SPEED = _UxGT("Fan Hızı");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Fan Hızı ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Depolanan Fan ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Ekstra Fan Hızı");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Ekstra Fan Hızı ~");
+ LSTR MSG_FLOW = _UxGT("Akış");
+ LSTR MSG_FLOW_N = _UxGT("Akış ~");
+ LSTR MSG_CONTROL = _UxGT("Kontrol");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Min");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Max");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Çarpan");
+ LSTR MSG_AUTOTEMP = _UxGT("Oto. Sıcaklık");
+ LSTR MSG_LCD_ON = _UxGT("Açık");
+ LSTR MSG_LCD_OFF = _UxGT("Kapalı");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("PID Kalibrasyon");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("PID Kalibrasyon *");
+ LSTR MSG_SELECT = _UxGT("Seç");
+ LSTR MSG_SELECT_E = _UxGT("Seç *");
+ LSTR MSG_ACC = _UxGT("İvme");
- PROGMEM Language_Str MSG_JERK = _UxGT("Sarsım");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Sarsım");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Sarsım");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Sarsım");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Sarsım");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Sarsım");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-Sarsım");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-Sarsım");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Jonksiyon Sapması");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Hız Vektörü");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("HızVektör.max ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("HızVektör.max ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("HızVektör.max ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("HızVektör.max ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("HızVektör.max ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("HızVektör.max ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("HızVektör.max ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("HızVektör.max *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("HızVektör.min");
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("HV.gezinme min");
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Ivme");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Max. ivme ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Max. ivme ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Max. ivme ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Max. ivme ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Max. ivme ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Max. ivme ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Max. ivme ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Max. ivme *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Ivme-geri çekme");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Ivme-gezinme");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Adım/mm");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" adım/mm");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" adım/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" adım/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" adım/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" adım/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" adım/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E adım/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* adım/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Sıcaklık");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Hareket");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Filaman");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("Ekstrüzyon/mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Filaman Çapı");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Filaman Çapı *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Çıkart mm");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Yükle mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K İlerlet");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("K İlerlet *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD Kontrast");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Hafızaya Al");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Hafızadan Yükle");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Fabrika Ayarları");
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("EEPROM'u başlat");
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Hata: EEPROM CRC");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Hata: EEPROM Indeks");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Hata: EEPROM Versiyonu");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("SD Güncellemesi");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Yazıcıyı Resetle");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Yenile");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Bilgi Ekranı");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Hazırlık");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Ayar");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Yaz. Başlat");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("İleri");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("İçinde");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Durdur");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Yazdır");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Resetle");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("İptal");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Tamamlandı");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Geri");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Devam ediyor");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Duraklat");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Sürdür");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Durdur");
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Yazdırma Nesnesi");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Nesneyi İptal Et");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Nesneyi İptal Et =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Kesinti Kurtarma");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("SD Karttan Yazdır");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("SD Kart Yok!");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Uyku...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Operatör bekleniyor.");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Baskı Duraklatıldı");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Baskı Yapılıyor...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Baskı Durduruldu!");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("İşlem yok.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("Kilitlendi. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("Durdu. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Geri Çek mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Geri Çekme V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Atlama mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Oto. Geri Çekme");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("G.Çekme Boyu");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Tasfiye uzunluğu");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Takım Değişimi");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Yükselt");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Birincil Hız");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Geri Çekme Hızı");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Nozul Beklemede");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Filaman Değiştir");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Filaman Değiştir *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Filaman Yükle");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Filaman Yükle *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Filaman Çıkart");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Filaman Çıkart *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Tümünü Çıkart");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("SD Kart Başlatılıyor");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("SD Kart Değiştir");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("SD Kart Çıkart");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z Prob Açık. Tabla");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Çarpıklık Faktörü");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch K. Test");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Reset");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Kapat");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Aç");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modu");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modu");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modu");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch 5V Ayarla");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch OD Ayarla");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Drenaj Raporu");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("TEHLIKE: Kötü ayarlar hasara neden olabilir! Yine de devam edilsin mi?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z Ofset Testi");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Kaydet");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI Aç");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Z-Probe Aç");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Z-Probe Kapat");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Önce %s%s%s Sıfırla");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Prob Ofsetleri");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("X Prob Ofset");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Y Prob Ofset");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z Prob Ofset");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Miniadım X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Miniadım Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Miniadım Z");
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Toplam");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Endstop iptal");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Isınma başarısız");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Hata: Sıcaklık Aşımı");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("TERMAL PROBLEM");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("TABLA TERMAL PROBLEM");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ODA TERMAL PROBLEM");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Hata: MAX.SICAKLIK");
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Hata: MIN.SICAKLIK");
- PROGMEM Language_Str MSG_HALTED = _UxGT("YAZICI DURDURULDU");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Lütfen Resetleyin");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("G"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("S"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("D"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Isınıyor...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Soğuyor...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Tabla Isınıyor...");
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Tabla Soğuyor...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Oda Isınıyor...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Oda Soğuyor...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrasyonu");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Ayarla X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Ayarla Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Ayarla Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Ayarla Merkez");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Delta Ayarları");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Oto Kalibrasyon");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Yük. Ayarla");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z Prob Ofseti");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Çapral Mil");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Yükseklik");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Yarıçap");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Yazıcı Hakkında");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Yazıcı Bilgisi");
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-Nokta Hizalama");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Doğrusal Hizalama");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("İki Yönlü Doğ. Hiza.");
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Birleşik Tabla Hiza.");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Mesh Hizalama");
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("İstatistikler");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Kontrolcü Bilgisi");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Termistörler");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Ekstruderler");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("İletişim Hızı");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Protokol");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Aydınlatmayı Aç");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Aydınlatma Parlaklğı");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Yanlış Yazıcı");
+ LSTR MSG_JERK = _UxGT("Sarsım");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-Sarsım");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-Sarsım");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-Sarsım");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-Sarsım");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-Sarsım");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-Sarsım");
+ LSTR MSG_VE_JERK = _UxGT("Ve-Sarsım");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Jonksiyon Sapması");
+ LSTR MSG_VELOCITY = _UxGT("Hız Vektörü");
+ LSTR MSG_VMAX_A = _UxGT("HızVektör.max ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("HızVektör.max ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("HızVektör.max ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("HızVektör.max ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("HızVektör.max ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("HızVektör.max ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("HızVektör.max ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("HızVektör.max *");
+ LSTR MSG_VMIN = _UxGT("HızVektör.min");
+ LSTR MSG_VTRAV_MIN = _UxGT("HV.gezinme min");
+ LSTR MSG_ACCELERATION = _UxGT("Ivme");
+ LSTR MSG_AMAX_A = _UxGT("Max. ivme ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Max. ivme ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Max. ivme ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Max. ivme ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Max. ivme ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Max. ivme ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Max. ivme ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Max. ivme *");
+ LSTR MSG_A_RETRACT = _UxGT("Ivme-geri çekme");
+ LSTR MSG_A_TRAVEL = _UxGT("Ivme-gezinme");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Adım/mm");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" adım/mm");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" adım/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" adım/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" adım/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" adım/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" adım/mm");
+ LSTR MSG_E_STEPS = _UxGT("E adım/mm");
+ LSTR MSG_EN_STEPS = _UxGT("* adım/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Sıcaklık");
+ LSTR MSG_MOTION = _UxGT("Hareket");
+ LSTR MSG_FILAMENT = _UxGT("Filaman");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("Ekstrüzyon/mm") SUPERSCRIPT_THREE;
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Filaman Çapı");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Filaman Çapı *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Çıkart mm");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Yükle mm");
+ LSTR MSG_ADVANCE_K = _UxGT("K İlerlet");
+ LSTR MSG_ADVANCE_K_E = _UxGT("K İlerlet *");
+ LSTR MSG_CONTRAST = _UxGT("LCD Kontrast");
+ LSTR MSG_STORE_EEPROM = _UxGT("Hafızaya Al");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Hafızadan Yükle");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Fabrika Ayarları");
+ LSTR MSG_INIT_EEPROM = _UxGT("EEPROM'u başlat");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Hata: EEPROM CRC");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Hata: EEPROM Indeks");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Hata: EEPROM Versiyonu");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("SD Güncellemesi");
+ LSTR MSG_RESET_PRINTER = _UxGT("Yazıcıyı Resetle");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Yenile");
+ LSTR MSG_INFO_SCREEN = _UxGT("Bilgi Ekranı");
+ LSTR MSG_PREPARE = _UxGT("Hazırlık");
+ LSTR MSG_TUNE = _UxGT("Ayar");
+ LSTR MSG_START_PRINT = _UxGT("Yaz. Başlat");
+ LSTR MSG_BUTTON_NEXT = _UxGT("İleri");
+ LSTR MSG_BUTTON_INIT = _UxGT("İçinde");
+ LSTR MSG_BUTTON_STOP = _UxGT("Durdur");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Yazdır");
+ LSTR MSG_BUTTON_RESET = _UxGT("Resetle");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("İptal");
+ LSTR MSG_BUTTON_DONE = _UxGT("Tamamlandı");
+ LSTR MSG_BUTTON_BACK = _UxGT("Geri");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Devam ediyor");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Duraklat");
+ LSTR MSG_RESUME_PRINT = _UxGT("Sürdür");
+ LSTR MSG_STOP_PRINT = _UxGT("Durdur");
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Yazdırma Nesnesi");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Nesneyi İptal Et");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Nesneyi İptal Et =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Kesinti Kurtarma");
+ LSTR MSG_MEDIA_MENU = _UxGT("SD Karttan Yazdır");
+ LSTR MSG_NO_MEDIA = _UxGT("SD Kart Yok!");
+ LSTR MSG_DWELL = _UxGT("Uyku...");
+ LSTR MSG_USERWAIT = _UxGT("Operatör bekleniyor.");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Baskı Duraklatıldı");
+ LSTR MSG_PRINTING = _UxGT("Baskı Yapılıyor...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Baskı Durduruldu!");
+ LSTR MSG_NO_MOVE = _UxGT("İşlem yok.");
+ LSTR MSG_KILLED = _UxGT("Kilitlendi. ");
+ LSTR MSG_STOPPED = _UxGT("Durdu. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Geri Çek mm");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Swap Re.mm");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Geri Çekme V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Atlama mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S Unretr. mm");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Unretract V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V");
+ LSTR MSG_AUTORETRACT = _UxGT("Oto. Geri Çekme");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("G.Çekme Boyu");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Tasfiye uzunluğu");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Takım Değişimi");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Yükselt");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Birincil Hız");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Geri Çekme Hızı");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Nozul Beklemede");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Filaman Değiştir");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Filaman Değiştir *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Filaman Yükle");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Filaman Yükle *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Filaman Çıkart");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Filaman Çıkart *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Tümünü Çıkart");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("SD Kart Başlatılıyor");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("SD Kart Değiştir");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("SD Kart Çıkart");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z Prob Açık. Tabla");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Çarpıklık Faktörü");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch K. Test");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Reset");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Kapat");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Aç");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW-Modu");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V-Modu");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD-Modu");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Mode-Store");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("BLTouch 5V Ayarla");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("BLTouch OD Ayarla");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Drenaj Raporu");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("TEHLIKE: Kötü ayarlar hasara neden olabilir! Yine de devam edilsin mi?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Init TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z Ofset Testi");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Kaydet");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("TouchMI Aç");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Z-Probe Aç");
+ LSTR MSG_MANUAL_STOW = _UxGT("Z-Probe Kapat");
+ LSTR MSG_HOME_FIRST = _UxGT("Önce %s%s%s Sıfırla");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Prob Ofsetleri");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("X Prob Ofset");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Y Prob Ofset");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Z Prob Ofset");
+ LSTR MSG_BABYSTEP_X = _UxGT("Miniadım X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Miniadım Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Miniadım Z");
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Toplam");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Endstop iptal");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Isınma başarısız");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Hata: Sıcaklık Aşımı");
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("TERMAL PROBLEM");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("TABLA TERMAL PROBLEM");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ODA TERMAL PROBLEM");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Hata: MAX.SICAKLIK");
+ LSTR MSG_ERR_MINTEMP = _UxGT("Hata: MIN.SICAKLIK");
+ LSTR MSG_HALTED = _UxGT("YAZICI DURDURULDU");
+ LSTR MSG_PLEASE_RESET = _UxGT("Lütfen Resetleyin");
+ LSTR MSG_SHORT_DAY = _UxGT("G"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("S"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("D"); // One character only
+ LSTR MSG_HEATING = _UxGT("Isınıyor...");
+ LSTR MSG_COOLING = _UxGT("Soğuyor...");
+ LSTR MSG_BED_HEATING = _UxGT("Tabla Isınıyor...");
+ LSTR MSG_BED_COOLING = _UxGT("Tabla Soğuyor...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Oda Isınıyor...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Oda Soğuyor...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Delta Kalibrasyonu");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Ayarla X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Ayarla Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Ayarla Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Ayarla Merkez");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Delta Ayarları");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Oto Kalibrasyon");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Delta Yük. Ayarla");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z Prob Ofseti");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Çapral Mil");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Yükseklik");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Yarıçap");
+ LSTR MSG_INFO_MENU = _UxGT("Yazıcı Hakkında");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Yazıcı Bilgisi");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-Nokta Hizalama");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Doğrusal Hizalama");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("İki Yönlü Doğ. Hiza.");
+ LSTR MSG_UBL_LEVELING = _UxGT("Birleşik Tabla Hiza.");
+ LSTR MSG_MESH_LEVELING = _UxGT("Mesh Hizalama");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("İstatistikler");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Kontrolcü Bilgisi");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Termistörler");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Ekstruderler");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("İletişim Hızı");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Protokol");
+ LSTR MSG_CASE_LIGHT = _UxGT("Aydınlatmayı Aç");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Aydınlatma Parlaklğı");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("Yanlış Yazıcı");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Baskı Sayısı");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Toplam Baskı Süresi");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun Baskı Süresi");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Toplam Filaman");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Baskı Sayısı");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Toplam Baskı Süresi");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun Baskı Süresi");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Toplam Filaman");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Baskı");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Süre");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Filaman");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Baskı");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Tamamlanan");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Süre");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("En Uzun");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Filaman");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Min Sıc.");
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Max Sıc.");
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Güç Kaynağı");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Sürücü Gücü");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Sürücü %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Sürücü %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Sürücü %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Sürücü %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Sürücü %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Sürücü %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Sürücü %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC BAĞLANTI HATASI");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Yaz");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMAN DEGISTIR");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("BASKI DURAKLATILDI");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMAN YüKLE");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMAN ÇIKART");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Seçenekler:");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Daha Fazla Tasviye");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Baskıyı sürdür");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozul: ");
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Runout Sensörü");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Aşınma Farkı mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Sıfırlama Başarısız");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Probing Başarısız");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Min Sıc.");
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Max Sıc.");
+ LSTR MSG_INFO_PSU = _UxGT("Güç Kaynağı");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Sürücü Gücü");
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" Sürücü %");
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" Sürücü %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" Sürücü %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" Sürücü %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" Sürücü %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" Sürücü %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E Sürücü %");
+ LSTR MSG_ERROR_TMC = _UxGT("TMC BAĞLANTI HATASI");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("DAC EEPROM Yaz");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("FILAMAN DEGISTIR");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("BASKI DURAKLATILDI");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("FILAMAN YüKLE");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("FILAMAN ÇIKART");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Seçenekler:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Daha Fazla Tasviye");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Baskıyı sürdür");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozul: ");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensörü");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Aşınma Farkı mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Sıfırlama Başarısız");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Probing Başarısız");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("FILAMAN SEÇ");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("MMU Yaz. Güncelle!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Dikkat Gerektirir.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("Yaz. Devam Et");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("Sürdürülüyor...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("Filaman Yükle");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("Tümünü Yükle");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Nozula Yükle");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("Filaman Çıkart");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Filaman Çıkart ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Filamenti Boşalt");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Fil. Yükleniyor %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Fil Çıkartılıyor. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Fil. Boşaltılıyor....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Tümü");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Filaman ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("MMU Resetle");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU Resetleniyot...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Kaldır, tıkla");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("FILAMAN SEÇ");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("MMU Yaz. Güncelle!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU Dikkat Gerektirir.");
+ LSTR MSG_MMU2_RESUME = _UxGT("Yaz. Devam Et");
+ LSTR MSG_MMU2_RESUMING = _UxGT("Sürdürülüyor...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("Filaman Yükle");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("Tümünü Yükle");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("Nozula Yükle");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("Filaman Çıkart");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("Filaman Çıkart ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("Filamenti Boşalt");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Fil. Yükleniyor %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Fil Çıkartılıyor. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Fil. Boşaltılıyor....");
+ LSTR MSG_MMU2_ALL = _UxGT("Tümü");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Filaman ~");
+ LSTR MSG_MMU2_RESET = _UxGT("MMU Resetle");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU Resetleniyot...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Kaldır, tıkla");
- PROGMEM Language_Str MSG_MIX = _UxGT("Karışım");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Bileşen =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Karıştırıcı");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Gradyan");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Tam Gradyan");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Karışım Geçişi");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Döngü Karışımı");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Gradyan Karışımı");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Ters Gradyan");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Aktif V-tool");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Başlat V-tool");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" Bitir V-tool");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("V-tool Karışıö Yap");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools Resetlendi");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Başlat Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Bitir Z:");
+ LSTR MSG_MIX = _UxGT("Karışım");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Bileşen =");
+ LSTR MSG_MIXER = _UxGT("Karıştırıcı");
+ LSTR MSG_GRADIENT = _UxGT("Gradyan");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Tam Gradyan");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Karışım Geçişi");
+ LSTR MSG_CYCLE_MIX = _UxGT("Döngü Karışımı");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Gradyan Karışımı");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Ters Gradyan");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Aktif V-tool");
+ LSTR MSG_START_VTOOL = _UxGT("Başlat V-tool");
+ LSTR MSG_END_VTOOL = _UxGT(" Bitir V-tool");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Alias V-tool");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Reset V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("V-tool Karışıö Yap");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools Resetlendi");
+ LSTR MSG_START_Z = _UxGT("Başlat Z:");
+ LSTR MSG_END_Z = _UxGT(" Bitir Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Oyunlar");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Brickout");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Invaders");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Sn4k3");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Maze");
+ LSTR MSG_GAMES = _UxGT("Oyunlar");
+ LSTR MSG_BRICKOUT = _UxGT("Brickout");
+ LSTR MSG_INVADERS = _UxGT("Invaders");
+ LSTR MSG_SNAKE = _UxGT("Sn4k3");
+ LSTR MSG_MAZE = _UxGT("Maze");
//
// Filament Değişim ekranları 4 satırlı ekranda 3 satıra kadar gösterilir
@@ -550,47 +548,41 @@ namespace Language_tr {
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Baskıya devam etmek", "için Butona bas"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Park Ediliyor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Filaman değişimi", "için başlama", "bekleniyor"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filamanı yükle", "ve devam için", "tuşa bas..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nozulü Isıtmak için", "Butona Bas."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozul Isınıyor", "Lütfen Bekleyin..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Filamanın çıkması", "bekleniyor"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Filamanın yüklenmesi", "bekleniyor.."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "için bekle"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "bitirmek için tıkla"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Baskının devam ", "etmesi için bekle"));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Baskıya devam etmek", "için Butona bas"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Park Ediliyor..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Filaman değişimi", "için başlama", "bekleniyor"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Filamanı yükle", "ve devam için", "tuşa bas..."));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nozulü Isıtmak için", "Butona Bas."));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Nozul Isınıyor", "Lütfen Bekleyin..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Filamanın çıkması", "bekleniyor"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Filamanın yüklenmesi", "bekleniyor.."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "için bekle"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Filaman Temizlemesi", "bitirmek için tıkla"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Baskının devam ", "etmesi için bekle"));
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Sürdürmek İçin Tıkla"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Park Ediliyor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Lütfen bekleyiniz..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Yükle ve bas"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Isıtmak için Tıkla"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Isınıyor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Çıkartılıyor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Yüklüyor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Temizleniyor..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Bitirmek için Tıkla"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Sürdürülüyor..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Sürdürmek İçin Tıkla"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Park Ediliyor..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Lütfen bekleyiniz..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Yükle ve bas"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Isıtmak için Tıkla"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Isınıyor..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Çıkartılıyor..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Yüklüyor..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Temizleniyor..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Bitirmek için Tıkla"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Sürdürülüyor..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC Sürücüleri");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Sürücü Akımı");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Hibrit Eşiği");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Sensörsüz Sıfırlama");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Adım Modu");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Aktif");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Resetle");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" içinde:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Ters Tepki");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Düzeltme");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Yumuşatma");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC Sürücüleri");
+ LSTR MSG_TMC_CURRENT = _UxGT("Sürücü Akımı");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Hibrit Eşiği");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Sensörsüz Sıfırlama");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Adım Modu");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop Aktif");
+ LSTR MSG_SERVICE_RESET = _UxGT("Resetle");
+ LSTR MSG_SERVICE_IN = _UxGT(" içinde:");
+ LSTR MSG_BACKLASH = _UxGT("Ters Tepki");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Düzeltme");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Yumuşatma");
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h
index 1e6b49da76..581a501b49 100644
--- a/Marlin/src/lcd/language/language_uk.h
+++ b/Marlin/src/lcd/language/language_uk.h
@@ -33,883 +33,882 @@
namespace Language_uk {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Ukrainian");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Ukrainian");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Готовий.");
- PROGMEM Language_Str MSG_YES = _UxGT("ТАК");
- PROGMEM Language_Str MSG_NO = _UxGT("НІ");
- PROGMEM Language_Str MSG_BACK = _UxGT("Назад");
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Переривання...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("SD-картка вставлена");
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("SD-картка видалена");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Вставте SD-картку");
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Готовий.");
+ LSTR MSG_YES = _UxGT("ТАК");
+ LSTR MSG_NO = _UxGT("НІ");
+ LSTR MSG_BACK = _UxGT("Назад");
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Переривання...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("SD-картка вставлена");
+ LSTR MSG_MEDIA_REMOVED = _UxGT("SD-картка видалена");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Вставте SD-картку");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Збій ініціалізації SD");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Збій ініціалізації SD");
#else
- PROGMEM Language_Str MSG_SD_INIT_FAIL = _UxGT("Збій ініціаліз. SD");
+ LSTR MSG_SD_INIT_FAIL = _UxGT("Збій ініціаліз. SD");
#endif
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Помилка зчитування");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB диск видалений");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("Помилка USB диску");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Помилка зчитування");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB диск видалений");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("Помилка USB диску");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповнення виклику");
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Програмні кінцевики");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповнення виклику");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Програмні кінцевики");
#else
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповн. виклику");
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр.кінцевики");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповн. виклику");
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр.кінцевики");
#endif
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Кінцевик"); // Max length 8 characters
- PROGMEM Language_Str MSG_MAIN = _UxGT("Основне меню");
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Інші налаштування");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Конфігурація");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Вимкнути двигуни");
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню Debug");
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест лінії прогр.");
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Авто паркування");
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Паркування X");
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Паркування Y");
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Паркування Z");
- PROGMEM Language_Str MSG_AUTO_HOME_I = _UxGT("Паркування ") LCD_STR_I;
- PROGMEM Language_Str MSG_AUTO_HOME_J = _UxGT("Паркування ") LCD_STR_J;
- PROGMEM Language_Str MSG_AUTO_HOME_K = _UxGT("Паркування ") LCD_STR_K;
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-вирівнювання");
- PROGMEM Language_Str MSG_ITERATION = _UxGT("G34 Ітерація: %i");
- PROGMEM Language_Str MSG_DECREASING_ACCURACY = _UxGT("Зменьшення точності!");
- PROGMEM Language_Str MSG_ACCURACY_ACHIEVED = _UxGT("Точність досягнута");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Паркування XYZ");
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Почати");
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Наступна точка");
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("Завершено!");
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Висота спаду");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Кінцевик"); // Max length 8 characters
+ LSTR MSG_MAIN = _UxGT("Основне меню");
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Інші налаштування");
+ LSTR MSG_CONFIGURATION = _UxGT("Конфігурація");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Автостарт");
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Вимкнути двигуни");
+ LSTR MSG_DEBUG_MENU = _UxGT("Меню Debug");
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Тест лінії прогр.");
+ LSTR MSG_AUTO_HOME = _UxGT("Авто паркування");
+ LSTR MSG_AUTO_HOME_X = _UxGT("Паркування X");
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Паркування Y");
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Паркування Z");
+ LSTR MSG_AUTO_HOME_I = _UxGT("Паркування ") LCD_STR_I;
+ LSTR MSG_AUTO_HOME_J = _UxGT("Паркування ") LCD_STR_J;
+ LSTR MSG_AUTO_HOME_K = _UxGT("Паркування ") LCD_STR_K;
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Авто Z-вирівнювання");
+ LSTR MSG_ITERATION = _UxGT("G34 Ітерація: %i");
+ LSTR MSG_DECREASING_ACCURACY = _UxGT("Зменьшення точності!");
+ LSTR MSG_ACCURACY_ACHIEVED = _UxGT("Точність досягнута");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Паркування XYZ");
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Почати");
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Наступна точка");
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("Завершено!");
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Висота спаду");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Встанов. зміщення дому");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Зміщення дому X");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Зміщення дому Y");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Зміщення дому Z");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Зміщення дому ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Зміщення дому ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Зміщення дому ") LCD_STR_K;
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Встанов. зміщення дому");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Зміщення дому X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Зміщення дому Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Зміщення дому Z");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Зміщення дому ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Зміщення дому ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Зміщення дому ") LCD_STR_K;
#else
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Встан. зміщ. дому");
- PROGMEM Language_Str MSG_HOME_OFFSET_X = _UxGT("Зміщ. дому X");
- PROGMEM Language_Str MSG_HOME_OFFSET_Y = _UxGT("Зміщ. дому Y");
- PROGMEM Language_Str MSG_HOME_OFFSET_Z = _UxGT("Зміщ. дому Z");
- PROGMEM Language_Str MSG_HOME_OFFSET_I = _UxGT("Зміщ. дому ") LCD_STR_I;
- PROGMEM Language_Str MSG_HOME_OFFSET_J = _UxGT("Зміщ. дому ") LCD_STR_J;
- PROGMEM Language_Str MSG_HOME_OFFSET_K = _UxGT("Зміщ. дому ") LCD_STR_K;
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Встан. зміщ. дому");
+ LSTR MSG_HOME_OFFSET_X = _UxGT("Зміщ. дому X");
+ LSTR MSG_HOME_OFFSET_Y = _UxGT("Зміщ. дому Y");
+ LSTR MSG_HOME_OFFSET_Z = _UxGT("Зміщ. дому Z");
+ LSTR MSG_HOME_OFFSET_I = _UxGT("Зміщ. дому ") LCD_STR_I;
+ LSTR MSG_HOME_OFFSET_J = _UxGT("Зміщ. дому ") LCD_STR_J;
+ LSTR MSG_HOME_OFFSET_K = _UxGT("Зміщ. дому ") LCD_STR_K;
#endif
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення прийняті");
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Встановити нуль");
- PROGMEM Language_Str MSG_SELECT_ORIGIN = _UxGT("Оберіть нуль");
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення прийняті");
+ LSTR MSG_SET_ORIGIN = _UxGT("Встановити нуль");
+ LSTR MSG_SELECT_ORIGIN = _UxGT("Оберіть нуль");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Останнє значення ");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Останнє значення ");
#else
- PROGMEM Language_Str MSG_LAST_VALUE_SP = _UxGT("Останнє знач. ");
+ LSTR MSG_LAST_VALUE_SP = _UxGT("Останнє знач. ");
#endif
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Нагрів ") PREHEAT_1_LABEL;
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Нагрів ") PREHEAT_1_LABEL " ~";
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" сопло");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" сопло ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" все");
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" стіл");
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" налашт");
+ LSTR MSG_PREHEAT_1 = _UxGT("Нагрів ") PREHEAT_1_LABEL;
+ LSTR MSG_PREHEAT_1_H = _UxGT("Нагрів ") PREHEAT_1_LABEL " ~";
+ LSTR MSG_PREHEAT_1_END = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" сопло");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" сопло ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" все");
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" стіл");
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Нагрів ") PREHEAT_1_LABEL _UxGT(" налашт");
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Нагрів $");
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Нагрів $ ~");
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Нагрів $ сопло");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Нагрів $ сопло ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Нагрів $ все");
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Нагрів $ стіл");
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Нагрів $ налашт");
+ LSTR MSG_PREHEAT_M = _UxGT("Нагрів $");
+ LSTR MSG_PREHEAT_M_H = _UxGT("Нагрів $ ~");
+ LSTR MSG_PREHEAT_M_END = _UxGT("Нагрів $ сопло");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Нагрів $ сопло ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Нагрів $ все");
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Нагрів $ стіл");
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Нагрів $ налашт");
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Нагрів свого");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Вимкнути нагрів");
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Нагрів свого");
+ LSTR MSG_COOLDOWN = _UxGT("Вимкнути нагрів");
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("Частота");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("Керування лазером");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Керування шпінделем");
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("Частота");
+ LSTR MSG_LASER_MENU = _UxGT("Керування лазером");
+ LSTR MSG_SPINDLE_MENU = _UxGT("Керування шпінделем");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Потужність лазера");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Перемкн. шпіндель");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемкнути вакуум");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Перемкнути лазер");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Потужн. шпінделя");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тестовий імпульс мс");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Перемкнути обдув");
+ LSTR MSG_LASER_POWER = _UxGT("Потужність лазера");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Перемкн. шпіндель");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемкнути вакуум");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Перемкнути лазер");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Потужн. шпінделя");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Тестовий імпульс мс");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Перемкнути обдув");
#else
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Потужн. лазера");
- PROGMEM Language_Str MSG_SPINDLE_TOGGLE = _UxGT("Перемк. шпінд.");
- PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемк. вакуум");
- PROGMEM Language_Str MSG_LASER_TOGGLE = _UxGT("Перемкн. лазер");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Потужн. шпінд.");
- PROGMEM Language_Str MSG_LASER_PULSE_MS = _UxGT("Тест. імп., мс");
- PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE = _UxGT("Перемкн. обдув");
+ LSTR MSG_LASER_POWER = _UxGT("Потужн. лазера");
+ LSTR MSG_SPINDLE_TOGGLE = _UxGT("Перемк. шпінд.");
+ LSTR MSG_SPINDLE_EVAC_TOGGLE = _UxGT("Перемк. вакуум");
+ LSTR MSG_LASER_TOGGLE = _UxGT("Перемкн. лазер");
+ LSTR MSG_SPINDLE_POWER = _UxGT("Потужн. шпінд.");
+ LSTR MSG_LASER_PULSE_MS = _UxGT("Тест. імп., мс");
+ LSTR MSG_LASER_EVAC_TOGGLE = _UxGT("Перемкн. обдув");
#endif
- PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE = _UxGT("Керування обдувом");
- PROGMEM Language_Str MSG_FLOWMETER_FAULT = _UxGT("Помилка обдуву");
- PROGMEM Language_Str MSG_LASER_FIRE_PULSE = _UxGT("Імпульс лазеру");
- PROGMEM Language_Str MSG_SPINDLE_FORWARD = _UxGT("Шпіндель вперед");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("Шпіндель назад");
+ LSTR MSG_LASER_ASSIST_TOGGLE = _UxGT("Керування обдувом");
+ LSTR MSG_FLOWMETER_FAULT = _UxGT("Помилка обдуву");
+ LSTR MSG_LASER_FIRE_PULSE = _UxGT("Імпульс лазеру");
+ LSTR MSG_SPINDLE_FORWARD = _UxGT("Шпіндель вперед");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("Шпіндель назад");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Увімкнути живлення");
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Вимкнути живлення");
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Екструзія");
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Втягування");
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Рух по осям");
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("Вирівнювання столу");
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Вирівняти стіл");
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Вирівняти кути");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Увімкнути живлення");
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Вимкнути живлення");
+ LSTR MSG_EXTRUDE = _UxGT("Екструзія");
+ LSTR MSG_RETRACT = _UxGT("Втягування");
+ LSTR MSG_MOVE_AXIS = _UxGT("Рух по осям");
+ LSTR MSG_BED_LEVELING = _UxGT("Вирівнювання столу");
+ LSTR MSG_LEVEL_BED = _UxGT("Вирівняти стіл");
+ LSTR MSG_BED_TRAMMING = _UxGT("Вирівняти кути");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Вгору до спрацюв. зонду");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Кути в межах. Вирів.столу");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вгору до спрацюв. зонду");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Кути в межах. Вирів.столу");
#else
- PROGMEM Language_Str MSG_BED_TRAMMING_RAISE = _UxGT("Вгору до спрац.зонду");
- PROGMEM Language_Str MSG_BED_TRAMMING_IN_RANGE = _UxGT("Кути в межах. Вирівн");
+ LSTR MSG_BED_TRAMMING_RAISE = _UxGT("Вгору до спрац.зонду");
+ LSTR MSG_BED_TRAMMING_IN_RANGE = _UxGT("Кути в межах. Вирівн");
#endif
- PROGMEM Language_Str MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хороші точки: ");
- PROGMEM Language_Str MSG_BED_TRAMMING_LAST_Z = _UxGT("Остання Z: ");
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Наступний кут");
+ LSTR MSG_BED_TRAMMING_GOOD_POINTS = _UxGT("Хороші точки: ");
+ LSTR MSG_BED_TRAMMING_LAST_Z = _UxGT("Остання Z: ");
+ LSTR MSG_NEXT_CORNER = _UxGT("Наступний кут");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Зміщення по Z");
+ LSTR MSG_MESH_EDITOR = _UxGT("Зміщення по Z");
#else
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Зміщення Z");
+ LSTR MSG_MESH_EDITOR = _UxGT("Зміщення Z");
#endif
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Редагувати сітку");
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Редагув. зупинено");
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("Точка сітки");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Індекс X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Індекс Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Значення Z");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Власні команди");
+ LSTR MSG_EDIT_MESH = _UxGT("Редагувати сітку");
+ LSTR MSG_EDITING_STOPPED = _UxGT("Редагув. зупинено");
+ LSTR MSG_PROBING_POINT = _UxGT("Точка сітки");
+ LSTR MSG_MESH_X = _UxGT("Індекс X");
+ LSTR MSG_MESH_Y = _UxGT("Індекс Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Значення Z");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Власні команди");
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 тест зонду");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 точка");
- PROGMEM Language_Str MSG_M48_OUT_OF_BOUNDS = _UxGT("Зонд за межами");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Відхилення");
+ LSTR MSG_M48_TEST = _UxGT("M48 тест зонду");
+ LSTR MSG_M48_POINT = _UxGT("M48 точка");
+ LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Зонд за межами");
+ LSTR MSG_M48_DEVIATION = _UxGT("Відхилення");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Режим IDEX");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Зміщення сопел");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Авто паркування");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Дуплікація");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Дзеркальна копія");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Повний контроль");
- PROGMEM Language_Str MSG_IDEX_DUPE_GAP = _UxGT("Дублюв. X-проміжок");
+ LSTR MSG_IDEX_MENU = _UxGT("Режим IDEX");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Зміщення сопел");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Авто паркування");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Дуплікація");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Дзеркальна копія");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Повний контроль");
+ LSTR MSG_IDEX_DUPE_GAP = _UxGT("Дублюв. X-проміжок");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("Друге сопло X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("Друге сопло Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("Друге сопло Z");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("Друге сопло Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("Друге сопло @");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Виконується G29");
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Інструменти UBL");
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("Налаштування UBL");
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("Точка нахилу");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Виконується G29");
+ LSTR MSG_UBL_TOOLS = _UxGT("Інструменти UBL");
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("Налаштування UBL");
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("Точка нахилу");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ручне введення сітки");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Розмістити шайбу і вимір.");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручне введення сітки");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Розмістити шайбу і вимір.");
#else
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ручне введ. сітки");
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Розм. шайбу і вимір.");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Ручне введ. сітки");
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Розм. шайбу і вимір.");
#endif
- PROGMEM Language_Str MSG_UBL_MESH_WIZARD = _UxGT("Майстер сіток UBL");
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Вимірювання");
+ LSTR MSG_UBL_MESH_WIZARD = _UxGT("Майстер сіток UBL");
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Вимірювання");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Видалити і виміряти стіл");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Видалити і виміряти стіл");
#else
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Видали і вимір. стіл");
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Видали і вимір. стіл");
#endif
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Рух до наступної");
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Активувати UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивувати UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" столу,") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Рух до наступної");
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Активувати UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Деактивувати UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = LCD_STR_THERMOMETER _UxGT(" столу, ") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" столу,") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_SET_TEMP_HOTEND = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C";
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Своя ") LCD_STR_THERMOMETER _UxGT(" сопла,") LCD_STR_DEGREE "C";
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою сітку");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редагування сітки");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою сітку");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою сітку");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редагування сітки");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою сітку");
#else
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редаг. сітки");
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою");
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою");
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редаг. сітки");
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Будувати свою");
#endif
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Редагування сітки");
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Сітка побудована");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Будувати сітку");
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Будувати сітку ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Підтвердити ($)");
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Буд. холодну сітку");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Встан.висоту сітки");
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Висота");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Підтвердити сітку");
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Підтвердити свою");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Редагування сітки");
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Сітка побудована");
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Будувати сітку");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Будувати сітку ($)");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Підтвердити ($)");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Буд. холодну сітку");
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Встан.висоту сітки");
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Висота");
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Підтвердити сітку");
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Підтвердити свою");
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 нагрів столу");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрів сопла");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("Ручне грунтування");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("Фікс. довж. грунт.");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("Грунтув. виконане");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26 скасовано");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("Вийти з G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Продовжити сітку");
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Вирівнювання сітки");
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точкове вирівн.");
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 нагрів столу");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 нагрів сопла");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("Ручне грунтування");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("Фікс. довж. грунт.");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("Грунтув. виконане");
+ LSTR MSG_G26_CANCELED = _UxGT("G26 скасовано");
+ LSTR MSG_G26_LEAVING = _UxGT("Вийти з G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Продовжити сітку");
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Вирівнювання сітки");
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-точкове вирівн.");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнювання растру");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнювання растру");
#else
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнюв. растру");
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнюв. растру");
#endif
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Вирівняти сітку");
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Крайні точки");
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Тип мапи сітки");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Вивести мапу сітки");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вивести на хост");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вивести в CSV");
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Зберегти зовні");
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Інформація по UBL");
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Вирівняти сітку");
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Крайні точки");
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Тип мапи сітки");
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Вивести мапу сітки");
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Вивести на хост");
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Вивести в CSV");
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Зберегти зовні");
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Інформація по UBL");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповнюв.");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповнюв.");
#else
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповн.");
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповн.");
#endif
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Ручне заповнення");
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Розумне заповнення");
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Заповнити сітку");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Анулювати все");
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Анулювати найближчу");
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Ручне заповнення");
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Розумне заповнення");
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Заповнити сітку");
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Анулювати все");
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Анулювати найближчу");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налаштувати все");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно налашт.найближчу");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налаштувати все");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно налашт.найближчу");
#else
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налашт. все");
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно найближчу");
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Точно налашт. все");
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно найближчу");
#endif
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Збереження сітки");
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Слот пам'яті");
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Завантажити сітку");
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Зберегти сітку");
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("Сітка %i завантажена");
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("Сітка %i збережена");
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("Немає носія");
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Збій: збереж. UBL");
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Збій: відновл. UBL");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Зміщення Z: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Зміщення Z зупинено");
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL покроково");
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Збудувати холодну");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Розумне заповн-я");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Затвердити сітку");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точно налашт.все");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Затвердити сітку");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точно налашт.все");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Зберегти сітку");
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Збереження сітки");
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Слот пам'яті");
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Завантажити сітку");
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Зберегти сітку");
+ LSTR MSG_MESH_LOADED = _UxGT("Сітка %i завантажена");
+ LSTR MSG_MESH_SAVED = _UxGT("Сітка %i збережена");
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("Немає носія");
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Збій: збереж. UBL");
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Збій: відновл. UBL");
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Зміщення Z: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Зміщення Z зупинено");
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("UBL покроково");
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Збудувати холодну");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Розумне заповн-я");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Затвердити сітку");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Точно налашт.все");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Затвердити сітку");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точно налашт.все");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Зберегти сітку");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Керування світлом");
- PROGMEM Language_Str MSG_LEDS = _UxGT("Підсвітка");
+ LSTR MSG_LED_CONTROL = _UxGT("Керування світлом");
+ LSTR MSG_LEDS = _UxGT("Підсвітка");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Передустановки світла");
+ LSTR MSG_LED_PRESETS = _UxGT("Передустановки світла");
#else
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Передустан. світла");
+ LSTR MSG_LED_PRESETS = _UxGT("Передустан. світла");
#endif
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Червоний");
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Помаранчевий");
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Жовтий");
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Зелений");
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Синій");
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Індіго");
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Фіолетовий");
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Білий");
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("За умовчанням");
- PROGMEM Language_Str MSG_LED_CHANNEL_N = _UxGT("Канал =");
- PROGMEM Language_Str MSG_LEDS2 = _UxGT("Світло #2");
+ LSTR MSG_SET_LEDS_RED = _UxGT("Червоний");
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Помаранчевий");
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Жовтий");
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Зелений");
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Синій");
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Індіго");
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Фіолетовий");
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Білий");
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("За умовчанням");
+ LSTR MSG_LED_CHANNEL_N = _UxGT("Канал =");
+ LSTR MSG_LEDS2 = _UxGT("Світло #2");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Передустановка світла #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Передустановка світла #2");
#else
- PROGMEM Language_Str MSG_NEO2_PRESETS = _UxGT("Передуст. світла #2");
+ LSTR MSG_NEO2_PRESETS = _UxGT("Передуст. світла #2");
#endif
- PROGMEM Language_Str MSG_NEO2_BRIGHTNESS = _UxGT("Яскравість");
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Своє світло");
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Рівень червоного");
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Рівень зеленого");
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Рівень синього");
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Рівень білого");
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Яскравість");
+ LSTR MSG_NEO2_BRIGHTNESS = _UxGT("Яскравість");
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Своє світло");
+ LSTR MSG_INTENSITY_R = _UxGT("Рівень червоного");
+ LSTR MSG_INTENSITY_G = _UxGT("Рівень зеленого");
+ LSTR MSG_INTENSITY_B = _UxGT("Рівень синього");
+ LSTR MSG_INTENSITY_W = _UxGT("Рівень білого");
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("Яскравість");
- PROGMEM Language_Str MSG_MOVING = _UxGT("Рух...");
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Звільнити XY");
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Рух по X");
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Рух по Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Рух по Z");
- PROGMEM Language_Str MSG_MOVE_I = _UxGT("Рух по ") LCD_STR_I;
- PROGMEM Language_Str MSG_MOVE_J = _UxGT("Рух по ") LCD_STR_J;
- PROGMEM Language_Str MSG_MOVE_K = _UxGT("Рух по ") LCD_STR_K;
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Екструдер");
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Екструдер *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Сопло дуже холодне");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("Рух %sмм");
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Рух 0.1мм");
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Рух 1мм");
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Рух 10мм");
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Рух 100mm");
- PROGMEM Language_Str MSG_SPEED = _UxGT("Швидкість");
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Столу");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Сопло ~");
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("Сопло запарковане");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("Сопло очікує");
- PROGMEM Language_Str MSG_BED = _UxGT("Стіл, ") LCD_STR_DEGREE "C";
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
+ LSTR MSG_MOVING = _UxGT("Рух...");
+ LSTR MSG_FREE_XY = _UxGT("Звільнити XY");
+ LSTR MSG_MOVE_X = _UxGT("Рух по X");
+ LSTR MSG_MOVE_Y = _UxGT("Рух по Y");
+ LSTR MSG_MOVE_Z = _UxGT("Рух по Z");
+ LSTR MSG_MOVE_I = _UxGT("Рух по ") LCD_STR_I;
+ LSTR MSG_MOVE_J = _UxGT("Рух по ") LCD_STR_J;
+ LSTR MSG_MOVE_K = _UxGT("Рух по ") LCD_STR_K;
+ LSTR MSG_MOVE_E = _UxGT("Екструдер");
+ LSTR MSG_MOVE_EN = _UxGT("Екструдер *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Сопло дуже холодне");
+ LSTR MSG_MOVE_N_MM = _UxGT("Рух %sмм");
+ LSTR MSG_MOVE_01MM = _UxGT("Рух 0.1мм");
+ LSTR MSG_MOVE_1MM = _UxGT("Рух 1мм");
+ LSTR MSG_MOVE_10MM = _UxGT("Рух 10мм");
+ LSTR MSG_MOVE_100MM = _UxGT("Рух 100mm");
+ LSTR MSG_SPEED = _UxGT("Швидкість");
+ LSTR MSG_BED_Z = _UxGT("Z Столу");
+ LSTR MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C";
+ LSTR MSG_NOZZLE_N = _UxGT("Сопло ~");
+ LSTR MSG_NOZZLE_PARKED = _UxGT("Сопло запарковане");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("Сопло очікує");
+ LSTR MSG_BED = _UxGT("Стіл, ") LCD_STR_DEGREE "C";
+ LSTR MSG_CHAMBER = _UxGT("Камера,") LCD_STR_DEGREE "C";
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_COOLER = _UxGT("Охолодження лазеру");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Перемк. охолодж.");
+ LSTR MSG_COOLER = _UxGT("Охолодження лазеру");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Перемк. охолодж.");
#else
- PROGMEM Language_Str MSG_COOLER = _UxGT("Охолодж. лазеру");
- PROGMEM Language_Str MSG_COOLER_TOGGLE = _UxGT("Перемк.охолод");
+ LSTR MSG_COOLER = _UxGT("Охолодж. лазеру");
+ LSTR MSG_COOLER_TOGGLE = _UxGT("Перемк.охолод");
#endif
- PROGMEM Language_Str MSG_FLOWMETER_SAFETY = _UxGT("Безпека потоку");
- PROGMEM Language_Str MSG_LASER = _UxGT("Лазер");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Швидк. вент.");
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Швидк. вент. ~");
+ LSTR MSG_FLOWMETER_SAFETY = _UxGT("Безпека потоку");
+ LSTR MSG_LASER = _UxGT("Лазер");
+ LSTR MSG_FAN_SPEED = _UxGT("Швидк. вент.");
+ LSTR MSG_FAN_SPEED_N = _UxGT("Швидк. вент. ~");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Збереж.швидк.вент. ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Дод. швидк. вент. ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Збереж.швидк.вент. ~");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Дод. швидк. вент. ~");
#else
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Збереж. вент. ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Додат.вент. ~");
+ LSTR MSG_STORED_FAN_N = _UxGT("Збереж. вент. ~");
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Додат.вент. ~");
#endif
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Дод. швидк. вент.");
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("Вент. контролера");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холості оберти");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Авто-режим");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Робочі оберти");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("Період простою");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Потік");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Потік ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Налаштування");
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С мін");
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С макс");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Автотемпер.");
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Увім");
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Вимк");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Дод. швидк. вент.");
+ LSTR MSG_CONTROLLER_FAN = _UxGT("Вент. контролера");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холості оберти");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Авто-режим");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Робочі оберти");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Період простою");
+ LSTR MSG_FLOW = _UxGT("Потік");
+ LSTR MSG_FLOW_N = _UxGT("Потік ~");
+ LSTR MSG_CONTROL = _UxGT("Налаштування");
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С мін");
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER ", " LCD_STR_DEGREE _UxGT("С макс");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Фактор");
+ LSTR MSG_AUTOTEMP = _UxGT("Автотемпер.");
+ LSTR MSG_LCD_ON = _UxGT("Увім");
+ LSTR MSG_LCD_OFF = _UxGT("Вимк");
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("Автопідбір PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("Автопідбір PID *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("Підбір PID виконано");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Збій автопідбору. Поганий екструдер.");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("Збій автопідбору. Температура завищена.");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("Збій автопідбору! Вичерпан час.");
+ LSTR MSG_PID_AUTOTUNE = _UxGT("Автопідбір PID");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("Автопідбір PID *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("Підбір PID виконано");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("Збій автопідбору. Поганий екструдер.");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("Збій автопідбору. Температура завищена.");
+ LSTR MSG_PID_TIMEOUT = _UxGT("Збій автопідбору! Вичерпан час.");
- PROGMEM Language_Str MSG_SELECT = _UxGT("Вибрати");
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Вибрати *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Прискорорення");
- PROGMEM Language_Str MSG_JERK = _UxGT("Ривок");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-ривок");
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-ривок");
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-ривок");
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-ривок");
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-ривок");
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-ривок");
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Ve-ривок");
+ LSTR MSG_SELECT = _UxGT("Вибрати");
+ LSTR MSG_SELECT_E = _UxGT("Вибрати *");
+ LSTR MSG_ACC = _UxGT("Прискорорення");
+ LSTR MSG_JERK = _UxGT("Ривок");
+ LSTR MSG_VA_JERK = _UxGT("V") LCD_STR_A _UxGT("-ривок");
+ LSTR MSG_VB_JERK = _UxGT("V") LCD_STR_B _UxGT("-ривок");
+ LSTR MSG_VC_JERK = _UxGT("V") LCD_STR_C _UxGT("-ривок");
+ LSTR MSG_VI_JERK = _UxGT("V") LCD_STR_I _UxGT("-ривок");
+ LSTR MSG_VJ_JERK = _UxGT("V") LCD_STR_J _UxGT("-ривок");
+ LSTR MSG_VK_JERK = _UxGT("V") LCD_STR_K _UxGT("-ривок");
+ LSTR MSG_VE_JERK = _UxGT("Ve-ривок");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Відхилення вузла");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхилення вузла");
#else
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Відхил.вузла");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Відхил.вузла");
#endif
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Швидкість, мм/с");
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Швидк.макс ") LCD_STR_A;
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Швидк.макс ") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Швидк.макс ") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Швидк.макс ") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Швидк.макс ") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Швидк.макс ") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Швидк.макс ") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Швидк.макс *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Швидк. мін");
+ LSTR MSG_VELOCITY = _UxGT("Швидкість, мм/с");
+ LSTR MSG_VMAX_A = _UxGT("Швидк.макс ") LCD_STR_A;
+ LSTR MSG_VMAX_B = _UxGT("Швидк.макс ") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Швидк.макс ") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Швидк.макс ") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Швидк.макс ") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Швидк.макс ") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Швидк.макс ") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Швидк.макс *");
+ LSTR MSG_VMIN = _UxGT("Швидк. мін");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Переміщення мін");
+ LSTR MSG_VTRAV_MIN = _UxGT("Переміщення мін");
#else
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Переміщ. мін");
+ LSTR MSG_VTRAV_MIN = _UxGT("Переміщ. мін");
#endif
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Прискорення, мм/с2");
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Приск.макс ") LCD_STR_A;
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Приск.макс ") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Приск.макс ") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Приск.макс ") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Приск.макс ") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Приск.макс ") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Приск.макс ") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Приск.макс *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("Приск.втягув.");
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("Приск.переміщ.");
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс.");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мін.");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Кроків на мм");
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" кроків/мм");
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" кроків/мм");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" кроків/мм");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" кроків/мм");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" кроків/мм");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" кроків/мм");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E кроків/мм");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* кроків/мм");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Температура");
- PROGMEM Language_Str MSG_MOTION = _UxGT("Рух");
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Пруток");
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E, мм") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E обмеж.,мм") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E обмеж. *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Діам. прутка");
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Діам. прутка *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Вивантаж., мм");
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Завантаж., мм");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Kоеф. просув.");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Kоеф. просув. *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Контраст екрану");
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Зберегти в EEPROM");
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Зчитати з EEPROM");
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("На базові параметри");
+ LSTR MSG_ACCELERATION = _UxGT("Прискорення, мм/с2");
+ LSTR MSG_AMAX_A = _UxGT("Приск.макс ") LCD_STR_A;
+ LSTR MSG_AMAX_B = _UxGT("Приск.макс ") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Приск.макс ") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Приск.макс ") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("Приск.макс ") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Приск.макс ") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Приск.макс ") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Приск.макс *");
+ LSTR MSG_A_RETRACT = _UxGT("Приск.втягув.");
+ LSTR MSG_A_TRAVEL = _UxGT("Приск.переміщ.");
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("Частота макс.");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("Подача мін.");
+ LSTR MSG_STEPS_PER_MM = _UxGT("Кроків на мм");
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" кроків/мм");
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" кроків/мм");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" кроків/мм");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" кроків/мм");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" кроків/мм");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" кроків/мм");
+ LSTR MSG_E_STEPS = _UxGT("E кроків/мм");
+ LSTR MSG_EN_STEPS = _UxGT("* кроків/мм");
+ LSTR MSG_TEMPERATURE = _UxGT("Температура");
+ LSTR MSG_MOTION = _UxGT("Рух");
+ LSTR MSG_FILAMENT = _UxGT("Пруток");
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E, мм") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E обмеж.,мм") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E обмеж. *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Діам. прутка");
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Діам. прутка *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Вивантаж., мм");
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Завантаж., мм");
+ LSTR MSG_ADVANCE_K = _UxGT("Kоеф. просув.");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Kоеф. просув. *");
+ LSTR MSG_CONTRAST = _UxGT("Контраст екрану");
+ LSTR MSG_STORE_EEPROM = _UxGT("Зберегти в EEPROM");
+ LSTR MSG_LOAD_EEPROM = _UxGT("Зчитати з EEPROM");
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("На базові параметри");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Ініціалізація EEPROM");
+ LSTR MSG_INIT_EEPROM = _UxGT("Ініціалізація EEPROM");
#else
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Ініціаліз. EEPROM");
+ LSTR MSG_INIT_EEPROM = _UxGT("Ініціаліз. EEPROM");
#endif
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("Збій EEPROM: CRC");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("Збій EEPROM: індекс");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("Збій EEPROM: версія");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("Параметри збережені");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Оновити SD-картку");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Зкинути принтер");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Поновити");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Головний екран");
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Підготувати");
- PROGMEM Language_Str MSG_TUNE = _UxGT("Підлаштування");
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("Монітор живлення");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("Струм");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("Напруга");
- PROGMEM Language_Str MSG_POWER = _UxGT("Потужність");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("Почати друк");
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("Збій EEPROM: CRC");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("Збій EEPROM: індекс");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("Збій EEPROM: версія");
+ LSTR MSG_SETTINGS_STORED = _UxGT("Параметри збережені");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Оновити SD-картку");
+ LSTR MSG_RESET_PRINTER = _UxGT("Зкинути принтер");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT(" Поновити");
+ LSTR MSG_INFO_SCREEN = _UxGT("Головний екран");
+ LSTR MSG_PREPARE = _UxGT("Підготувати");
+ LSTR MSG_TUNE = _UxGT("Підлаштування");
+ LSTR MSG_POWER_MONITOR = _UxGT("Монітор живлення");
+ LSTR MSG_CURRENT = _UxGT("Струм");
+ LSTR MSG_VOLTAGE = _UxGT("Напруга");
+ LSTR MSG_POWER = _UxGT("Потужність");
+ LSTR MSG_START_PRINT = _UxGT("Почати друк");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("Далі"); //short text for buttons
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("Ініц-я");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("Зупинка");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("Друк");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("Зкинути");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("Ігнорув.");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("Відміна");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("Готово");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("Назад");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("Продовжити");
- PROGMEM Language_Str MSG_BUTTON_SKIP = _UxGT("Пропустити");
+ LSTR MSG_BUTTON_NEXT = _UxGT("Далі"); //short text for buttons
+ LSTR MSG_BUTTON_INIT = _UxGT("Ініц-я");
+ LSTR MSG_BUTTON_STOP = _UxGT("Зупинка");
+ LSTR MSG_BUTTON_PRINT = _UxGT("Друк");
+ LSTR MSG_BUTTON_RESET = _UxGT("Зкинути");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("Ігнорув.");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("Відміна");
+ LSTR MSG_BUTTON_DONE = _UxGT("Готово");
+ LSTR MSG_BUTTON_BACK = _UxGT("Назад");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("Продовжити");
+ LSTR MSG_BUTTON_SKIP = _UxGT("Пропустити");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("Призупинення...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Призупинити друк");
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Відновити друк");
- PROGMEM Language_Str MSG_HOST_START_PRINT = _UxGT("Старт з хосту");
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Скасувати друк");
- PROGMEM Language_Str MSG_END_LOOPS = _UxGT("End Repeat Loops"); // needs translation
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("Друк об'єкта");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("Завершити об'єкт");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("Завершити об'єкт =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Віднов. після збою");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("Друкувати з SD");
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("SD-картки немає");
- PROGMEM Language_Str MSG_DWELL = _UxGT("Сон...");
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Продовжити...");
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("Друк призупинено");
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Друк...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("Друк скасовано");
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("Друк завершено");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Немає руху.");
- PROGMEM Language_Str MSG_KILLED = _UxGT("ПЕРЕРВАНО. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ЗУПИНЕНО. ");
+ LSTR MSG_PAUSING = _UxGT("Призупинення...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("Призупинити друк");
+ LSTR MSG_RESUME_PRINT = _UxGT("Відновити друк");
+ LSTR MSG_HOST_START_PRINT = _UxGT("Старт з хосту");
+ LSTR MSG_STOP_PRINT = _UxGT("Скасувати друк");
+ LSTR MSG_END_LOOPS = _UxGT("End Repeat Loops"); // needs translation
+ LSTR MSG_PRINTING_OBJECT = _UxGT("Друк об'єкта");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("Завершити об'єкт");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("Завершити об'єкт =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Віднов. після збою");
+ LSTR MSG_MEDIA_MENU = _UxGT("Друкувати з SD");
+ LSTR MSG_NO_MEDIA = _UxGT("SD-картки немає");
+ LSTR MSG_DWELL = _UxGT("Сон...");
+ LSTR MSG_USERWAIT = _UxGT("Продовжити...");
+ LSTR MSG_PRINT_PAUSED = _UxGT("Друк призупинено");
+ LSTR MSG_PRINTING = _UxGT("Друк...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("Друк скасовано");
+ LSTR MSG_PRINT_DONE = _UxGT("Друк завершено");
+ LSTR MSG_NO_MOVE = _UxGT("Немає руху.");
+ LSTR MSG_KILLED = _UxGT("ПЕРЕРВАНО. ");
+ LSTR MSG_STOPPED = _UxGT("ЗУПИНЕНО. ");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Втягування, мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втягув.,мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Повернення, мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Поверн.зміни, мм");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автовтягування");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Втягування, мм");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втягув.,мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Повернення, мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Поверн.зміни, мм");
+ LSTR MSG_AUTORETRACT = _UxGT("Автовтягування");
#else
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Втягув., мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втяг.мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Поверн., мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Повер.зміни,мм");
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автовтягув.");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Втягув., мм");
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Зміна втяг.мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("Поверн., мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Повер.зміни,мм");
+ LSTR MSG_AUTORETRACT = _UxGT("Автовтягув.");
#endif
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Втягування V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Підскок, мм");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Повернення V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Поверн.зміни V");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Змінити довжини");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Змінити додатково");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистити довжину");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Зміна сопла");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Підняти по Z");
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Втягування V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Підскок, мм");
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Повернення V");
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Поверн.зміни V");
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Змінити довжини");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Змінити додатково");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистити довжину");
+ LSTR MSG_TOOL_CHANGE = _UxGT("Зміна сопла");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Підняти по Z");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидкість");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидкість втягув.");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидкість");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидкість втягув.");
#else
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидк.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидк.втягув.");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидк.");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидк.втягув.");
#endif
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Паркувати голову");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Відновити швидкість");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("Паркувати голову");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("Відновити швидкість");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти вентилятора");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Час вентилятора");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти вентилятора");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Час вентилятора");
#else
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти вент.");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Час вент.");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти вент.");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("Час вент.");
#endif
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("Авто Увімк.");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("Авто Вимкн.");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("Заміна інструменту");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто заміна");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("Останній екструдер");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("Заміна на *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Заміна прутка");
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Заміна прутка *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Подати пруток");
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Подати пруток *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Видалити пруток");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Видалити пруток *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Видалити все");
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Вставити SD-картку");
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Заміна SD-картки");
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Видаліть SD-картку");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z-Зонд поза столом");
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Фактор нахилу");
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Само-тест");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Зкинути зонд");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Підняти зонд");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Опустити зонд");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Режим SW");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Режим 5V");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Режим OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Режим збереження");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Встановити BLT на 5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Встановити BLT на OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("Звітувати злив");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("НЕБЕЗПЕКА: Неправильні параметри приводять до пошкоджень! Продовжити?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("Z-Зонд TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Ініц. TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Тест Z-зміщення");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Зберегти");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Установити TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Установити Z-зонд");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Завантажити Z-зонд");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Спочатку дім %s%s%s");
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Зміщення зонду");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("Зміщення по X");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Зміщення по Y");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Зміщення по Z");
- PROGMEM Language_Str MSG_MOVE_NOZZLE_TO_BED = _UxGT("Рухати сопло до столу");
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Мікрокрок X");
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Мікрокрок Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Мікрокрок Z");
- PROGMEM Language_Str MSG_BABYSTEP_I = _UxGT("Мікрокрок ") LCD_STR_I;
- PROGMEM Language_Str MSG_BABYSTEP_J = _UxGT("Мікрокрок ") LCD_STR_J;
- PROGMEM Language_Str MSG_BABYSTEP_K = _UxGT("Мікрокрок ") LCD_STR_K;
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Кінцевик спрацював");
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Збій нагріву");
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("ЗАВИЩЕНА Т") LCD_STR_DEGREE;
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ВИТІК ТЕПЛА");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("ВИТІК ТЕПЛА СТОЛУ");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ВИТІК ТЕПЛА КАМЕРИ");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_COOLER = _UxGT("ВИТІК ОХОЛОДЖЕННЯ");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("Авто Увімк.");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("Авто Вимкн.");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("Заміна інструменту");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("Авто заміна");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("Останній екструдер");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("Заміна на *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Заміна прутка");
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Заміна прутка *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("Подати пруток");
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Подати пруток *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Видалити пруток");
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Видалити пруток *");
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Видалити все");
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Вставити SD-картку");
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Заміна SD-картки");
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Видаліть SD-картку");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z-Зонд поза столом");
+ LSTR MSG_SKEW_FACTOR = _UxGT("Фактор нахилу");
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch");
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Само-тест");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Зкинути зонд");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Підняти зонд");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Опустити зонд");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("Режим SW");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("Режим 5V");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("Режим OD");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("Режим збереження");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("Встановити BLT на 5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("Встановити BLT на OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("Звітувати злив");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("НЕБЕЗПЕКА: Неправильні параметри приводять до пошкоджень! Продовжити?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("Z-Зонд TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("Ініц. TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Тест Z-зміщення");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("Зберегти");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Установити TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Установити Z-зонд");
+ LSTR MSG_MANUAL_STOW = _UxGT("Завантажити Z-зонд");
+ LSTR MSG_HOME_FIRST = _UxGT("Спочатку дім %s%s%s");
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("Зміщення зонду");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("Зміщення по X");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("Зміщення по Y");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Зміщення по Z");
+ LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Рухати сопло до столу");
+ LSTR MSG_BABYSTEP_X = _UxGT("Мікрокрок X");
+ LSTR MSG_BABYSTEP_Y = _UxGT("Мікрокрок Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Мікрокрок Z");
+ LSTR MSG_BABYSTEP_I = _UxGT("Мікрокрок ") LCD_STR_I;
+ LSTR MSG_BABYSTEP_J = _UxGT("Мікрокрок ") LCD_STR_J;
+ LSTR MSG_BABYSTEP_K = _UxGT("Мікрокрок ") LCD_STR_K;
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("Сумарно");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Кінцевик спрацював");
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Збій нагріву");
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("ЗАВИЩЕНА Т") LCD_STR_DEGREE;
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("ВИТІК ТЕПЛА");
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("ВИТІК ТЕПЛА СТОЛУ");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("ВИТІК ТЕПЛА КАМЕРИ");
+ LSTR MSG_THERMAL_RUNAWAY_COOLER = _UxGT("ВИТІК ОХОЛОДЖЕННЯ");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖЕННЯ НЕ ВДАЛОСЬ");
+ LSTR MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖЕННЯ НЕ ВДАЛОСЬ");
#else
- PROGMEM Language_Str MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖ. НЕ ВДАЛОСЬ");
+ LSTR MSG_COOLING_FAILED = _UxGT("ОХОЛОДЖ. НЕ ВДАЛОСЬ");
#endif
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("МАКСИМАЛЬНА Т") LCD_STR_DEGREE;
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE;
- PROGMEM Language_Str MSG_HALTED = _UxGT("ПРИНТЕР ЗУПИНЕНО");
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Перезавантажте");
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("д"); // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("г"); // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("х"); // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Нагрівання...");
- PROGMEM Language_Str MSG_COOLING = _UxGT("Охолодження...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Нагрів столу...");
- PROGMEM Language_Str MSG_PROBE_HEATING = _UxGT("Нагрів зонду...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Нагрів камери...");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("МАКСИМАЛЬНА Т") LCD_STR_DEGREE;
+ LSTR MSG_ERR_MINTEMP = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE;
+ LSTR MSG_HALTED = _UxGT("ПРИНТЕР ЗУПИНЕНО");
+ LSTR MSG_PLEASE_RESET = _UxGT("Перезавантажте");
+ LSTR MSG_SHORT_DAY = _UxGT("д"); // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("г"); // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("х"); // One character only
+ LSTR MSG_HEATING = _UxGT("Нагрівання...");
+ LSTR MSG_COOLING = _UxGT("Охолодження...");
+ LSTR MSG_BED_HEATING = _UxGT("Нагрів столу...");
+ LSTR MSG_PROBE_HEATING = _UxGT("Нагрів зонду...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("Нагрів камери...");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охолодження столу...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Охолодження зонду...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охолодження камери...");
- PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Охолодження лазеру...");
+ LSTR MSG_BED_COOLING = _UxGT("Охолодження столу...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Охолодження зонду...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Охолодження камери...");
+ LSTR MSG_LASER_COOLING = _UxGT("Охолодження лазеру...");
#else
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охолодж. столу...");
- PROGMEM Language_Str MSG_PROBE_COOLING = _UxGT("Охолодж. зонду...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охолодж. камери...");
- PROGMEM Language_Str MSG_LASER_COOLING = _UxGT("Охолодж. лазеру...");
+ LSTR MSG_BED_COOLING = _UxGT("Охолодж. столу...");
+ LSTR MSG_PROBE_COOLING = _UxGT("Охолодж. зонду...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("Охолодж. камери...");
+ LSTR MSG_LASER_COOLING = _UxGT("Охолодж. лазеру...");
#endif
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калібрування Delta");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Калібрувати X");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Калібрувати Y");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Калібрувати Z");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калібр. центр");
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Параметри Delta");
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Автокалібрування");
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Встан. Висоту Delta");
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z-зміщення зонду");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Діагональ стрижня");
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Висота");
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Радіус");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Калібрування Delta");
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Калібрувати X");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Калібрувати Y");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Калібрувати Z");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Калібр. центр");
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Параметри Delta");
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Автокалібрування");
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Встан. Висоту Delta");
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z-зміщення зонду");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Діагональ стрижня");
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Висота");
+ LSTR MSG_DELTA_RADIUS = _UxGT("Радіус");
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Про принтер");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Дані принтера");
+ LSTR MSG_INFO_MENU = _UxGT("Про принтер");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Дані принтера");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-точкове вирівнювання");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівнювання");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Білінійне вирівнювання");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-точкове вирівнювання");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівнювання");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Білінійне вирівнювання");
#else
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-точкове вирівн.");
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівн.");
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Білінійне вирівн.");
+ LSTR MSG_3POINT_LEVELING = _UxGT("3-точкове вирівн.");
+ LSTR MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівн.");
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("Білінійне вирівн.");
#endif
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("UBL");
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Вирівнювання сітки");
+ LSTR MSG_UBL_LEVELING = _UxGT("UBL");
+ LSTR MSG_MESH_LEVELING = _UxGT("Вирівнювання сітки");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондування сітки виконано");
+ LSTR MSG_MESH_DONE = _UxGT("Зондування сітки виконано");
#else
- PROGMEM Language_Str MSG_MESH_DONE = _UxGT("Зондування виконано");
+ LSTR MSG_MESH_DONE = _UxGT("Зондування виконано");
#endif
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Про плату");
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Термістори");
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Екструдери");
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Бод");
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Протокол");
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Статистика принтера");
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Про плату");
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Термістори");
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Екструдери");
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Бод");
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Протокол");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Вимк");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Увімк");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Час простою хотенду");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Вимк");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контроль витіку ") LCD_STR_THERMOMETER _UxGT(" Увімк");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Час простою хотенду");
#else
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Контр.витіку ") LCD_STR_THERMOMETER _UxGT(" Вимк");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("Контр.витіку ") LCD_STR_THERMOMETER _UxGT(" Увімк");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Час прост. хот-у");
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Контр.витіку ") LCD_STR_THERMOMETER _UxGT(" Вимк");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Контр.витіку ") LCD_STR_THERMOMETER _UxGT(" Увімк");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Час прост. хот-у");
#endif
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Підсвітка");
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яскравість світла");
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("НЕ ТОЙ ПРИНТЕР");
+ LSTR MSG_CASE_LIGHT = _UxGT("Підсвітка");
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яскравість світла");
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("НЕ ТОЙ ПРИНТЕР");
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Екструдовано");
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено");
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Екструдовано");
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Кількість друків");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Весь час друку");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Найдовший час");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Кількість друків");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Весь час друку");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Найдовший час");
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Друків");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Загалом");
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Найдовше");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Друків");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Загалом");
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Найдовше");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Мін. ") LCD_STR_THERMOMETER;
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER;
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Блок жив-ня");
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Сила мотору");
- PROGMEM Language_Str MSG_DAC_PERCENT_A = _UxGT("Драйвер ") LCD_STR_A _UxGT(", %");
- PROGMEM Language_Str MSG_DAC_PERCENT_B = _UxGT("Драйвер ") LCD_STR_B _UxGT(", %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = _UxGT("Драйвер ") LCD_STR_C _UxGT(", %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = _UxGT("Драйвер ") LCD_STR_I _UxGT(", %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = _UxGT("Драйвер ") LCD_STR_J _UxGT(", %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = _UxGT("Драйвер ") LCD_STR_K _UxGT(", %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("Драйвер E, %");
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("ЗБІЙ ЗВ'ЯЗКУ З TMC");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запис ЦАП у EEPROM");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("ЗАМІНА ПРУТКА");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ЗУПИНКА ДРУКУ");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАВАНТАЖИТИ ПРУТОК");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВИВАНТАЖИТИ ПРУТОК");
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Мін. ") LCD_STR_THERMOMETER;
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Макс. ") LCD_STR_THERMOMETER;
+ LSTR MSG_INFO_PSU = _UxGT("Блок жив-ня");
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Сила мотору");
+ LSTR MSG_DAC_PERCENT_A = _UxGT("Драйвер ") LCD_STR_A _UxGT(", %");
+ LSTR MSG_DAC_PERCENT_B = _UxGT("Драйвер ") LCD_STR_B _UxGT(", %");
+ LSTR MSG_DAC_PERCENT_C = _UxGT("Драйвер ") LCD_STR_C _UxGT(", %");
+ LSTR MSG_DAC_PERCENT_I = _UxGT("Драйвер ") LCD_STR_I _UxGT(", %");
+ LSTR MSG_DAC_PERCENT_J = _UxGT("Драйвер ") LCD_STR_J _UxGT(", %");
+ LSTR MSG_DAC_PERCENT_K = _UxGT("Драйвер ") LCD_STR_K _UxGT(", %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("Драйвер E, %");
+ LSTR MSG_ERROR_TMC = _UxGT("ЗБІЙ ЗВ'ЯЗКУ З TMC");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Запис ЦАП у EEPROM");
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("ЗАМІНА ПРУТКА");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("ЗУПИНКА ДРУКУ");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("ЗАВАНТАЖИТИ ПРУТОК");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("ВИВАНТАЖИТИ ПРУТОК");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМЕТРИ ПРОДОВЖЕННЯ:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМЕТРИ ПРОДОВЖЕННЯ:");
#else
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМ.ПРОДОВЖЕННЯ:");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМ.ПРОДОВЖЕННЯ:");
#endif
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Видавити ще");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Відновити друк");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопло: ");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Видавити ще");
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Відновити друк");
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Сопло: ");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Датчик закінчення прутка");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Відстань закінч.,мм");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик закінчення прутка");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Відстань закінч.,мм");
#else
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Датчик закінч.прутка");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("До закінч.,мм");
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("Датчик закінч.прутка");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("До закінч.,мм");
#endif
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Помилка паркування");
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Помилка зондування");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Помилка паркування");
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("Помилка зондування");
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ОБЕРІТЬ ПРУТОК");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Онови прошивку MMU!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU потребує уваги");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("MMU Продовжити");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("MMU Продовження...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Завантажити");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("MMU Завантажити все");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ОБЕРІТЬ ПРУТОК");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("Онови прошивку MMU!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU потребує уваги");
+ LSTR MSG_MMU2_RESUME = _UxGT("MMU Продовжити");
+ LSTR MSG_MMU2_RESUMING = _UxGT("MMU Продовження...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU Завантажити");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU Завантажити все");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завантажити в сопло");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завантажити в сопло");
#else
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завант. в сопло");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU Завант. в сопло");
#endif
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Звільнити");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Звільнити ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Вивантажити");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("Завантаж. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Викидання прутка...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Вивантаження...");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("Все");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("Пруток ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("Перезапуск MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU Перезапуск...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("Видаліть, натисніть");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU Звільнити");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU Звільнити ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU Вивантажити");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("Завантаж. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("Викидання прутка...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("Вивантаження...");
+ LSTR MSG_MMU2_ALL = _UxGT("Все");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("Пруток ~");
+ LSTR MSG_MMU2_RESET = _UxGT("Перезапуск MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU Перезапуск...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("Видаліть, натисніть");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_MIX = _UxGT("Змішування");
+ LSTR MSG_MIX = _UxGT("Змішування");
#else
- PROGMEM Language_Str MSG_MIX = _UxGT("Змішув.");
+ LSTR MSG_MIX = _UxGT("Змішув.");
#endif
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("Компонент =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("Змішувач");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("Градієнт");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("Повний градієнт");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("Компонент =");
+ LSTR MSG_MIXER = _UxGT("Змішувач");
+ LSTR MSG_GRADIENT = _UxGT("Градієнт");
+ LSTR MSG_FULL_GRADIENT = _UxGT("Повний градієнт");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Переключити змішування");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Переключити змішування");
#else
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("Переключ.змішування");
+ LSTR MSG_TOGGLE_MIX = _UxGT("Переключ.змішування");
#endif
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("Циклічне змішування");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("Градієнт змішування");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("Змінити градієнт");
+ LSTR MSG_CYCLE_MIX = _UxGT("Циклічне змішування");
+ LSTR MSG_GRADIENT_MIX = _UxGT("Градієнт змішування");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("Змінити градієнт");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Активація В-інструменту");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструменту");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструментів");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Активація В-інструменту");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструменту");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструментів");
#else
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("Актив. В-інструм.");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструм");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструм.");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("Актив. В-інструм.");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("Псевдонім В-інструм");
+ LSTR MSG_RESET_VTOOLS = _UxGT("Зкидання В-інструм.");
#endif
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("Початок В-інструменту");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT("Кінець В-інструменту");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Змішати В-інструменти");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("В-інструменти зкинуті");
- PROGMEM Language_Str MSG_START_Z = _UxGT("Початок Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" Кінець Z:");
+ LSTR MSG_START_VTOOL = _UxGT("Початок В-інструменту");
+ LSTR MSG_END_VTOOL = _UxGT("Кінець В-інструменту");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("Змішати В-інструменти");
+ LSTR MSG_VTOOLS_RESET = _UxGT("В-інструменти зкинуті");
+ LSTR MSG_START_Z = _UxGT("Початок Z:");
+ LSTR MSG_END_Z = _UxGT(" Кінець Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("Ігри");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Цеглини");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("Вторгнення");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("Zм!йк@");
- PROGMEM Language_Str MSG_MAZE = _UxGT("Лабіринт");
+ LSTR MSG_GAMES = _UxGT("Ігри");
+ LSTR MSG_BRICKOUT = _UxGT("Цеглини");
+ LSTR MSG_INVADERS = _UxGT("Вторгнення");
+ LSTR MSG_SNAKE = _UxGT("Zм!йк@");
+ LSTR MSG_MAZE = _UxGT("Лабіринт");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Погана сторінка");
+ LSTR MSG_BAD_PAGE = _UxGT("Погана сторінка");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Погана швидкість стор.");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Погана швидкість стор.");
#else
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Погана швидк. стор.");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("Погана швидк. стор.");
#endif
- PROGMEM Language_Str MSG_EDIT_PASSWORD = _UxGT("Редагувати пароль");
- PROGMEM Language_Str MSG_LOGIN_REQUIRED = _UxGT("Потрібен логін");
- PROGMEM Language_Str MSG_PASSWORD_SETTINGS = _UxGT("Параметри паролю");
- PROGMEM Language_Str MSG_ENTER_DIGIT = _UxGT("Введіть цифру");
- PROGMEM Language_Str MSG_CHANGE_PASSWORD = _UxGT("Змінити пароль");
- PROGMEM Language_Str MSG_REMOVE_PASSWORD = _UxGT("Видалити пароль");
- PROGMEM Language_Str MSG_PASSWORD_SET = _UxGT("Пароль: ");
- PROGMEM Language_Str MSG_START_OVER = _UxGT("Старт через");
- PROGMEM Language_Str MSG_REMINDER_SAVE_SETTINGS = _UxGT("Не забудь зберегти!");
- PROGMEM Language_Str MSG_PASSWORD_REMOVED = _UxGT("Пароль видалений");
+ LSTR MSG_EDIT_PASSWORD = _UxGT("Редагувати пароль");
+ LSTR MSG_LOGIN_REQUIRED = _UxGT("Потрібен логін");
+ LSTR MSG_PASSWORD_SETTINGS = _UxGT("Параметри паролю");
+ LSTR MSG_ENTER_DIGIT = _UxGT("Введіть цифру");
+ LSTR MSG_CHANGE_PASSWORD = _UxGT("Змінити пароль");
+ LSTR MSG_REMOVE_PASSWORD = _UxGT("Видалити пароль");
+ LSTR MSG_PASSWORD_SET = _UxGT("Пароль: ");
+ LSTR MSG_START_OVER = _UxGT("Старт через");
+ LSTR MSG_REMINDER_SAVE_SETTINGS = _UxGT("Не забудь зберегти!");
+ LSTR MSG_PASSWORD_REMOVED = _UxGT("Пароль видалений");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Паркування..."));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Паркування..."));
#if LCD_HEIGHT >= 4
// Up to 3 lines allowed
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Натисніть кнопку", "для продовження", "друку"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Зачекайте", "на початок", "заміни прутка"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставте пруток", "та натисніть", "для продовження"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Натисніть кнопку", "для нагріву сопла"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Сопло нагрівається", "зачекайте..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Зачекайте", "на вивід прутка"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Зачекайте", "на ввід прутка"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Дочекайтесь", "очищення прутка"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Натисніть кнопку", "для завершення", "очищення прутка"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Зачекайте", "на відновлення", "друку"));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_3_LINE("Натисніть кнопку", "для продовження", "друку"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Зачекайте", "на початок", "заміни прутка"));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставте пруток", "та натисніть", "для продовження"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Натисніть кнопку", "для нагріву сопла"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Сопло нагрівається", "зачекайте..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Зачекайте", "на вивід прутка"));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Зачекайте", "на ввід прутка"));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Дочекайтесь", "очищення прутка"));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_3_LINE("Натисніть кнопку", "для завершення", "очищення прутка"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Зачекайте", "на відновлення", "друку"));
#else
// Up to 2 lines allowed
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Продовжити друк"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Зачекайте..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставте і натисніть"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Нагріти сопло"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрів сопла..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Вивід прутка..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Ввід прутка..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Очищення прутка..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершити очищення"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Поновлення друку..."));
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Продовжити друк"));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Зачекайте..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставте і натисніть"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Нагріти сопло"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Нагрів сопла..."));
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Вивід прутка..."));
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Ввід прутка..."));
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Очищення прутка..."));
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Завершити очищення"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Поновлення друку..."));
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Драйвери TMC");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Струм драйвера");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Гібридний поріг");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Дім без кінцевиків");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Режим мікрокроку");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим увімк.");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("Зкидання");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" в:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("Люфт");
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("Виправлення");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("Зглажування");
+ LSTR MSG_TMC_DRIVERS = _UxGT("Драйвери TMC");
+ LSTR MSG_TMC_CURRENT = _UxGT("Струм драйвера");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Гібридний поріг");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Дім без кінцевиків");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Режим мікрокроку");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим увімк.");
+ LSTR MSG_SERVICE_RESET = _UxGT("Зкидання");
+ LSTR MSG_SERVICE_IN = _UxGT(" в:");
+ LSTR MSG_BACKLASH = _UxGT("Люфт");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("Виправлення");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("Зглажування");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Рівень вісі X");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Авто калібрування");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("Рівень вісі X");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("Авто калібрування");
#if ENABLED(TOUCH_UI_FTDI_EVE)
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Час простою збіг, температура впала. Натисніть ОК, щоби знову нагріти та продовжити");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Час простою збіг, температура впала. Натисніть ОК, щоби знову нагріти та продовжити");
#else
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Час нагрівача збіг");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("Час нагрівача збіг");
#endif
- PROGMEM Language_Str MSG_REHEAT = _UxGT("Поновити нагрів");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("Нагрівання...");
+ LSTR MSG_REHEAT = _UxGT("Поновити нагрів");
+ LSTR MSG_REHEATING = _UxGT("Нагрівання...");
- PROGMEM Language_Str MSG_PROBE_WIZARD = _UxGT("Майстер Z-зонда");
+ LSTR MSG_PROBE_WIZARD = _UxGT("Майстер Z-зонда");
#if LCD_WIDTH > 21
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Зондув. контрольної точки Z");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Рух до точки зондування");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондув. контрольної точки Z");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Рух до точки зондування");
#else
- PROGMEM Language_Str MSG_PROBE_WIZARD_PROBING = _UxGT("Зондув.контр.точки Z");
- PROGMEM Language_Str MSG_PROBE_WIZARD_MOVING = _UxGT("Рух до точки зондув.");
+ LSTR MSG_PROBE_WIZARD_PROBING = _UxGT("Зондув.контр.точки Z");
+ LSTR MSG_PROBE_WIZARD_MOVING = _UxGT("Рух до точки зондув.");
#endif
- PROGMEM Language_Str MSG_SOUND = _UxGT("Звук");
+ LSTR MSG_SOUND = _UxGT("Звук");
- PROGMEM Language_Str MSG_TOP_LEFT = _UxGT("Верхній лівий");
- PROGMEM Language_Str MSG_BOTTOM_LEFT = _UxGT("Нижній лівий");
- PROGMEM Language_Str MSG_TOP_RIGHT = _UxGT("Верхній правий");
- PROGMEM Language_Str MSG_BOTTOM_RIGHT = _UxGT("Нижній правий");
- PROGMEM Language_Str MSG_CALIBRATION_COMPLETED = _UxGT("Калібрування успішне");
- PROGMEM Language_Str MSG_CALIBRATION_FAILED = _UxGT("Збій калібрування");
+ LSTR MSG_TOP_LEFT = _UxGT("Верхній лівий");
+ LSTR MSG_BOTTOM_LEFT = _UxGT("Нижній лівий");
+ LSTR MSG_TOP_RIGHT = _UxGT("Верхній правий");
+ LSTR MSG_BOTTOM_RIGHT = _UxGT("Нижній правий");
+ LSTR MSG_CALIBRATION_COMPLETED = _UxGT("Калібрування успішне");
+ LSTR MSG_CALIBRATION_FAILED = _UxGT("Збій калібрування");
- PROGMEM Language_Str MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
+ LSTR MSG_DRIVER_BACKWARD = _UxGT(" драйвер назад");
- PROGMEM Language_Str MSG_SD_CARD = _UxGT("SD Картка");
- PROGMEM Language_Str MSG_USB_DISK = _UxGT("USB Диск");
+ LSTR MSG_SD_CARD = _UxGT("SD Картка");
+ LSTR MSG_USB_DISK = _UxGT("USB Диск");
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_vi.h b/Marlin/src/lcd/language/language_vi.h
index 9ee93a56bb..9a4ef464b5 100644
--- a/Marlin/src/lcd/language/language_vi.h
+++ b/Marlin/src/lcd/language/language_vi.h
@@ -30,427 +30,427 @@
namespace Language_vi {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 2;
- PROGMEM Language_Str LANGUAGE = _UxGT("Vietnamese");
+ constexpr uint8_t CHARSIZE = 2;
+ LSTR LANGUAGE = _UxGT("Vietnamese");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" Sẵn sàng."); // Ready
- PROGMEM Language_Str MSG_BACK = _UxGT("Trở lại"); // Back
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("Đang hủy bỏ...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("Phương tiện được cắm vào"); // Media inserted
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Phương tiện được rút ra");
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("Chờ đợi phương tiện");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("Lỗi đọc phương tiện");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB được rút ra");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB khởi thất bại");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Công tắc"); // Endstops - công tắc hành trình
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Công tắc mềm"); // soft Endstops
- PROGMEM Language_Str MSG_MAIN = _UxGT("Chính"); // Main
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Thiết lập cấp cao"); // Advanced Settings
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Cấu hình"); // Configuration
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("Khởi chạy tự động"); // Autostart
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Tắt động cơ bước"); // Disable steppers
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Menu gỡ lỗi"); // Debug Menu
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Kiểm tra tiến độ"); // Progress bar test
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("Về nhà tự động"); // Auto home
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("Về nhà X"); // home X
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("Về nhà Y"); // home Y
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("Về nhà Z"); // home Z
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("Chỉnh canh Z tự động");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("Đang về nhà XYZ"); // Homing XYZ
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("Nhấn để bắt đầu"); // Click to Begin
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("Điểm tiếp theo"); // Next Point
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("San lấp được hoàn thành"); // Leveling Done!
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Chiều cao mờ dần"); // Fade Height
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Đặt bù đắp nhà"); // Set home offsets
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Bù đắp được áp dụng"); // Offsets applied
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Đặt nguồn gốc"); // Set origin
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT(" Sẵn sàng."); // Ready
+ LSTR MSG_BACK = _UxGT("Trở lại"); // Back
+ LSTR MSG_MEDIA_ABORTING = _UxGT("Đang hủy bỏ...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("Phương tiện được cắm vào"); // Media inserted
+ LSTR MSG_MEDIA_REMOVED = _UxGT("Phương tiện được rút ra");
+ LSTR MSG_MEDIA_WAITING = _UxGT("Chờ đợi phương tiện");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("Lỗi đọc phương tiện");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB được rút ra");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB khởi thất bại");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("Công tắc"); // Endstops - công tắc hành trình
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("Công tắc mềm"); // soft Endstops
+ LSTR MSG_MAIN = _UxGT("Chính"); // Main
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("Thiết lập cấp cao"); // Advanced Settings
+ LSTR MSG_CONFIGURATION = _UxGT("Cấu hình"); // Configuration
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("Khởi chạy tự động"); // Autostart
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("Tắt động cơ bước"); // Disable steppers
+ LSTR MSG_DEBUG_MENU = _UxGT("Menu gỡ lỗi"); // Debug Menu
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("Kiểm tra tiến độ"); // Progress bar test
+ LSTR MSG_AUTO_HOME = _UxGT("Về nhà tự động"); // Auto home
+ LSTR MSG_AUTO_HOME_X = _UxGT("Về nhà X"); // home X
+ LSTR MSG_AUTO_HOME_Y = _UxGT("Về nhà Y"); // home Y
+ LSTR MSG_AUTO_HOME_Z = _UxGT("Về nhà Z"); // home Z
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("Chỉnh canh Z tự động");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("Đang về nhà XYZ"); // Homing XYZ
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("Nhấn để bắt đầu"); // Click to Begin
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("Điểm tiếp theo"); // Next Point
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("San lấp được hoàn thành"); // Leveling Done!
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("Chiều cao mờ dần"); // Fade Height
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("Đặt bù đắp nhà"); // Set home offsets
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("Bù đắp được áp dụng"); // Offsets applied
+ LSTR MSG_SET_ORIGIN = _UxGT("Đặt nguồn gốc"); // Set origin
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước"); // Preheat
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ~"); // Preheat
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu");
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ~");
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Tất cả"); // all
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Bàn"); // bed -- using vietnamese term for 'table' instead
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Cấu hình"); // conf
+ LSTR MSG_PREHEAT_1 = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước"); // Preheat
+ LSTR MSG_PREHEAT_1_H = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" trước ~"); // Preheat
+ LSTR MSG_PREHEAT_1_END = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu");
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Đầu ~");
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Tất cả"); // all
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Bàn"); // bed -- using vietnamese term for 'table' instead
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Làm nóng ") PREHEAT_1_LABEL _UxGT(" Cấu hình"); // conf
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("Làm nóng $ trước"); // Preheat
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("Làm nóng $ trước ~"); // Preheat
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("Làm nóng $ Đầu");
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("Làm nóng $ Đầu ~");
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("Làm nóng $ Tất cả"); // all
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("Làm nóng $ Bàn"); // bed -- using vietnamese term for 'table' instead
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("Làm nóng $ Cấu hình"); // conf
+ LSTR MSG_PREHEAT_M = _UxGT("Làm nóng $ trước"); // Preheat
+ LSTR MSG_PREHEAT_M_H = _UxGT("Làm nóng $ trước ~"); // Preheat
+ LSTR MSG_PREHEAT_M_END = _UxGT("Làm nóng $ Đầu");
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("Làm nóng $ Đầu ~");
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("Làm nóng $ Tất cả"); // all
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("Làm nóng $ Bàn"); // bed -- using vietnamese term for 'table' instead
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("Làm nóng $ Cấu hình"); // conf
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("Sự nóng trước tự chọn"); // Preheat Custom
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Nguội xuống"); // Cooldown
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("Bật nguồn"); // Switch power on
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("Tắt nguồn"); // Switch power off
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("Ép đùn"); // Extrude
- PROGMEM Language_Str MSG_RETRACT = _UxGT("Rút lại"); // Retract
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("Di chuyển trục"); // Move axis
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("San Lấp Bàn"); // Bed Leveling
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Làm bằng mặt bàn"); // Level bed
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("Làm bằng góc bàn"); // Level corners
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Góc tiếp theo"); // Next corner
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Chỉnh lưới đã dừng"); // Mesh Editing Stopped
- PROGMEM Language_Str MSG_MESH_X = _UxGT("Mục lục X"); // Index X
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("Mục lục Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Giá trị Z"); // Z Value
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("Các lệnh tự chọn"); // Custom Commands
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("Đang chạy G29"); // Doing G29
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("Công cụ UBL"); // UBL tools
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("San Lấp Bàn Thống Nhất (UBL)"); // Unified Bed Leveling
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("chế độ IDEX"); // IDEX Mode
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Đậu tự động"); // Auto-Park
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Sự gấp đôi"); // Duplication
- PROGMEM Language_Str MSG_IDEX_MODE_SCALED_COPY = _UxGT("Bản sao thu nhỏ");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Toàn quyền điều khiển"); // Full control
- PROGMEM Language_Str MSG_IDEX_X_OFFSET = _UxGT("Đầu phun X nhì"); // 2nd nozzle X
- PROGMEM Language_Str MSG_IDEX_Y_OFFSET = _UxGT("Đầu phun Y nhì");
- PROGMEM Language_Str MSG_IDEX_Z_OFFSET = _UxGT("Đầu phun Z nhì");
- PROGMEM Language_Str MSG_IDEX_SAVE_OFFSETS = _UxGT("Lưu bù đắp"); // Save offsets
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Tự xây dựng lưới"); // Manually Build Mesh
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Đặt chêm và đo"); // Place shim & measure
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Đo"); // Measure
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Tháo và đo bàn"); // Remove & measure bed
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("Chuyển sang tiếp theo"); // moving to next
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("Bật UBL");
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("Tắt UBL");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("Nhiệt độ bàn"); // Bed Temp
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nhiệt độ đầu phun"); // Hotend Temp
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("Chỉnh sửa lưới"); // Mesh Edit
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Chỉnh sửa lưới tự chọn"); // Edit Custom Mesh
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Chỉnh lưới chính xác"); // Fine tuning mesh
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Chỉnh sửa xong lưới"); // Done Editing Mesh
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Xây dựng lưới tự chọn"); // Build Custom Mesh
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Xây dựng lưới"); // Build Mesh
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("Sự nóng trước tự chọn"); // Preheat Custom
+ LSTR MSG_COOLDOWN = _UxGT("Nguội xuống"); // Cooldown
+ LSTR MSG_SWITCH_PS_ON = _UxGT("Bật nguồn"); // Switch power on
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("Tắt nguồn"); // Switch power off
+ LSTR MSG_EXTRUDE = _UxGT("Ép đùn"); // Extrude
+ LSTR MSG_RETRACT = _UxGT("Rút lại"); // Retract
+ LSTR MSG_MOVE_AXIS = _UxGT("Di chuyển trục"); // Move axis
+ LSTR MSG_BED_LEVELING = _UxGT("San Lấp Bàn"); // Bed Leveling
+ LSTR MSG_LEVEL_BED = _UxGT("Làm bằng mặt bàn"); // Level bed
+ LSTR MSG_BED_TRAMMING = _UxGT("Làm bằng góc bàn"); // Level corners
+ LSTR MSG_NEXT_CORNER = _UxGT("Góc tiếp theo"); // Next corner
+ LSTR MSG_EDITING_STOPPED = _UxGT("Chỉnh lưới đã dừng"); // Mesh Editing Stopped
+ LSTR MSG_MESH_X = _UxGT("Mục lục X"); // Index X
+ LSTR MSG_MESH_Y = _UxGT("Mục lục Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Giá trị Z"); // Z Value
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("Các lệnh tự chọn"); // Custom Commands
+ LSTR MSG_UBL_DOING_G29 = _UxGT("Đang chạy G29"); // Doing G29
+ LSTR MSG_UBL_TOOLS = _UxGT("Công cụ UBL"); // UBL tools
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("San Lấp Bàn Thống Nhất (UBL)"); // Unified Bed Leveling
+ LSTR MSG_IDEX_MENU = _UxGT("chế độ IDEX"); // IDEX Mode
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Đậu tự động"); // Auto-Park
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Sự gấp đôi"); // Duplication
+ LSTR MSG_IDEX_MODE_SCALED_COPY = _UxGT("Bản sao thu nhỏ");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Toàn quyền điều khiển"); // Full control
+ LSTR MSG_IDEX_X_OFFSET = _UxGT("Đầu phun X nhì"); // 2nd nozzle X
+ LSTR MSG_IDEX_Y_OFFSET = _UxGT("Đầu phun Y nhì");
+ LSTR MSG_IDEX_Z_OFFSET = _UxGT("Đầu phun Z nhì");
+ LSTR MSG_IDEX_SAVE_OFFSETS = _UxGT("Lưu bù đắp"); // Save offsets
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("Tự xây dựng lưới"); // Manually Build Mesh
+ LSTR MSG_UBL_BC_INSERT = _UxGT("Đặt chêm và đo"); // Place shim & measure
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("Đo"); // Measure
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("Tháo và đo bàn"); // Remove & measure bed
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("Chuyển sang tiếp theo"); // moving to next
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("Bật UBL");
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("Tắt UBL");
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("Nhiệt độ bàn"); // Bed Temp
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("Bed Temp");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("Nhiệt độ đầu phun"); // Hotend Temp
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("Hotend Temp");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("Chỉnh sửa lưới"); // Mesh Edit
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("Chỉnh sửa lưới tự chọn"); // Edit Custom Mesh
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("Chỉnh lưới chính xác"); // Fine tuning mesh
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("Chỉnh sửa xong lưới"); // Done Editing Mesh
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Xây dựng lưới tự chọn"); // Build Custom Mesh
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("Xây dựng lưới"); // Build Mesh
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("Xây dựng lưới ($)");
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("Thẩm tra lưới ($)");
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("Xây dựng lưới ($)");
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("Thẩm tra lưới ($)");
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Xây dựng lưới lạnh"); // Build cold mesh
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Điều chỉnh chiều cao lưới"); // Adjust Mesh Height
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Số lượng chiều cao"); // Height Amount
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Thẩm tra lưới"); // Validate Mesh
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Thẩm tra lưới tự chọn"); // validate custom mesh
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("Tiếp tục xây lưới bàn"); // Continue Bed Mesh
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Đang san lấp lưới"); // Mesh Leveling
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Đang san lấp 3-điểm"); // 3-Point Leveling
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Đang san lấp lưới phẳng"); // Grid (planar) Mesh Leveling
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("Làm bằng lưới"); // Level Mesh
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("Điểm bên cạnh"); // Side Points
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("Loại bản đồ"); // Map Type
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("Đầu ra bản đồ lưới"); // Output Mesh Map
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Đầu ra cho máy chủ"); // Output for Host
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Đầu ra cho CSV"); // Output for CSV
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Hỗ trợ lưới"); // Off Printer Backup | backup mesh
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Đầu ra thông tin UBL"); // Output UBL Info
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Chỉnh sửa lưới"); // Edit mesh
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Số lượng lấp đầy"); // Fill-in Amount
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("Tự lấp đầy"); // Manual Fill-in
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("Lấp đầy thông minh"); // Smart Fill-in
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("Lưới lấp đầy"); // Fill-in Mesh
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("Bác bỏ tất cả"); // Invalidate All
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Bác bỏ gần nhất"); // Invalidate Closest
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("Chỉnh chính xác tất cả"); // Fine Tune ALl
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Chỉnh chính xác gần nhất"); // Fine Tune Closest
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("Lưu trữ lưới"); // Mesh Storage
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("Khe nhớ"); // Memory Slot
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("Tải lưới bàn"); // Load Bed Mesh
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("Lưu lưới bàn"); // Save Bed Mesh
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("%i lưới được nạp"); // Mesh %i loaded
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("%i lưới đã lưu");
- PROGMEM Language_Str MSG_NO_STORAGE = _UxGT("Không lưu trữ"); // No Storage
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("Điều sai: Lưu UBL"); // Err: UBL Save
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("Điều Sai: Khôi Phục UBL"); // Err: UBL Restore
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Đầu Dò-Z Đã Ngừng"); // Z-Offset Stopped
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Bước-Từng-Bước UBL"); // Step-By-Step UBL
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Xây dựng lưới lạnh");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2.Lấp đầy thông minh");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Thẩm tra lưới");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Chỉnh chính xác tất cả");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Thẩm tra lưới");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Chỉnh chính xác tất cả");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Lưu lưới bàn");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("Xây dựng lưới lạnh"); // Build cold mesh
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("Điều chỉnh chiều cao lưới"); // Adjust Mesh Height
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("Số lượng chiều cao"); // Height Amount
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("Thẩm tra lưới"); // Validate Mesh
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Thẩm tra lưới tự chọn"); // validate custom mesh
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("Tiếp tục xây lưới bàn"); // Continue Bed Mesh
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("Đang san lấp lưới"); // Mesh Leveling
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Đang san lấp 3-điểm"); // 3-Point Leveling
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("Đang san lấp lưới phẳng"); // Grid (planar) Mesh Leveling
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("Làm bằng lưới"); // Level Mesh
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("Điểm bên cạnh"); // Side Points
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("Loại bản đồ"); // Map Type
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("Đầu ra bản đồ lưới"); // Output Mesh Map
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("Đầu ra cho máy chủ"); // Output for Host
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("Đầu ra cho CSV"); // Output for CSV
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Hỗ trợ lưới"); // Off Printer Backup | backup mesh
+ LSTR MSG_UBL_INFO_UBL = _UxGT("Đầu ra thông tin UBL"); // Output UBL Info
+ LSTR MSG_EDIT_MESH = _UxGT("Chỉnh sửa lưới"); // Edit mesh
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("Số lượng lấp đầy"); // Fill-in Amount
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("Tự lấp đầy"); // Manual Fill-in
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("Lấp đầy thông minh"); // Smart Fill-in
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("Lưới lấp đầy"); // Fill-in Mesh
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("Bác bỏ tất cả"); // Invalidate All
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("Bác bỏ gần nhất"); // Invalidate Closest
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("Chỉnh chính xác tất cả"); // Fine Tune ALl
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Chỉnh chính xác gần nhất"); // Fine Tune Closest
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("Lưu trữ lưới"); // Mesh Storage
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("Khe nhớ"); // Memory Slot
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("Tải lưới bàn"); // Load Bed Mesh
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("Lưu lưới bàn"); // Save Bed Mesh
+ LSTR MSG_MESH_LOADED = _UxGT("%i lưới được nạp"); // Mesh %i loaded
+ LSTR MSG_MESH_SAVED = _UxGT("%i lưới đã lưu");
+ LSTR MSG_NO_STORAGE = _UxGT("Không lưu trữ"); // No Storage
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("Điều sai: Lưu UBL"); // Err: UBL Save
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("Điều Sai: Khôi Phục UBL"); // Err: UBL Restore
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Đầu Dò-Z Đã Ngừng"); // Z-Offset Stopped
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("Bước-Từng-Bước UBL"); // Step-By-Step UBL
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1.Xây dựng lưới lạnh");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2.Lấp đầy thông minh");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3.Thẩm tra lưới");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4.Chỉnh chính xác tất cả");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5.Thẩm tra lưới");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Chỉnh chính xác tất cả");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7.Lưu lưới bàn");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Điều khiển LED"); // LED Control
- PROGMEM Language_Str MSG_LEDS = _UxGT("Đèn"); // Lights
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Đèn định sẵn"); // Light Presets
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("Đỏ"); // Red
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("Cam"); // Orange
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("Vàng"); // Yellow
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("Xanh Lá"); // Green
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("Xanh"); // Blue
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("Xanh Đậm"); // Indigo
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("Tím"); // Violet
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("Trắng"); // White
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("Mặc định"); // Default
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("Đèn Tự Chọn"); // Custom Lights
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("Cường Độ Đỏ"); // Red Intensity
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("Cường Độ Xanh Lá"); // Green Intensity
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("Cường Độ Xanh"); // Blue Intensity
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("Cường Độ Trắng"); // White Intensity
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("độ sáng"); // Brightness
+ LSTR MSG_LED_CONTROL = _UxGT("Điều khiển LED"); // LED Control
+ LSTR MSG_LEDS = _UxGT("Đèn"); // Lights
+ LSTR MSG_LED_PRESETS = _UxGT("Đèn định sẵn"); // Light Presets
+ LSTR MSG_SET_LEDS_RED = _UxGT("Đỏ"); // Red
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("Cam"); // Orange
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("Vàng"); // Yellow
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("Xanh Lá"); // Green
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("Xanh"); // Blue
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("Xanh Đậm"); // Indigo
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("Tím"); // Violet
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("Trắng"); // White
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("Mặc định"); // Default
+ LSTR MSG_CUSTOM_LEDS = _UxGT("Đèn Tự Chọn"); // Custom Lights
+ LSTR MSG_INTENSITY_R = _UxGT("Cường Độ Đỏ"); // Red Intensity
+ LSTR MSG_INTENSITY_G = _UxGT("Cường Độ Xanh Lá"); // Green Intensity
+ LSTR MSG_INTENSITY_B = _UxGT("Cường Độ Xanh"); // Blue Intensity
+ LSTR MSG_INTENSITY_W = _UxGT("Cường Độ Trắng"); // White Intensity
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("độ sáng"); // Brightness
- PROGMEM Language_Str MSG_MOVING = _UxGT("Di chuyển..."); // Moving
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("Giải phóng XY"); // Free XY
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("Di chuyển X"); // Move X
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("Di chuyển Y");
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("Di chuyển Z");
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("Máy đùn"); // Extruder
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Máy đùn *");
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("Đầu nóng quá lạnh"); // Hotend too cold
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("Di chuyển 0.1mm"); // Move 0.1mm
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("Di chuyển 1mm"); // Move 1mm
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Di chuyển 10mm"); // Move 10mm
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("Di chuyển 100mm"); // Move 100mm
- PROGMEM Language_Str MSG_SPEED = _UxGT("Tốc độ"); // Speed
- PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Bàn");
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("Đầu phun"); // Nozzle
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Đầu phun ~");
- PROGMEM Language_Str MSG_BED = _UxGT("Bàn"); // bed
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Tốc độ quạt"); // fan speed
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Tốc độ quạt ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Tốc độ quạt phụ"); // Extra fan speed
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Tốc độ quạt phụ ~");
- PROGMEM Language_Str MSG_FLOW = _UxGT("Lưu Lượng");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("Lưu Lượng ~");
- PROGMEM Language_Str MSG_CONTROL = _UxGT("Điều khiển"); // Control
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Đa"); // min
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Thiểu");
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Hệ Số"); // factor
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Nhiệt độ tự động"); // Autotemp
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("Bật"); // on
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Tắt"); // off
- PROGMEM Language_Str MSG_SELECT = _UxGT("Lựa"); // Select
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("Lựa *");
- PROGMEM Language_Str MSG_ACC = _UxGT("Tăng Tốc");
- PROGMEM Language_Str MSG_JERK = _UxGT("Giật");
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("Giật-V") LCD_STR_A;
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("Giật-V") LCD_STR_B;
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("Giật-V") LCD_STR_C;
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("Giật-V") LCD_STR_I;
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("Giật-V") LCD_STR_J;
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("Giật-V") LCD_STR_K;
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("Giật-Ve");
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Độ Lệch Chỗ Giao"); // Junction Dev
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("Vận tốc"); // velocity
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("Vđa") LCD_STR_A; // Vmax
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vđa") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vđa") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("Vđa") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("Vđa") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("Vđa") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vđa") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vđa *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("Vthiểu"); // Vmin
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vchuyển thiểu"); // VTrav min
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Sự tăng tốc"); // Acceleration
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("Tăng tốc ca") LCD_STR_A; // Amax
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("Tăng tốc ca") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("Tăng tốc ca") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("Tăng tốc ca") LCD_STR_I; // Amax
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("Tăng tốc ca") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("Tăng tốc ca") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("Tăng tốc ca") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Tăng tốc ca *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("TT-Rút"); // A-retract
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("TT-Chuyển"); // A-travel
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("Bước/mm"); // Steps
- PROGMEM Language_Str MSG_A_STEPS = _UxGT("Bước") LCD_STR_A _UxGT("/mm"); // Steps/mm
- PROGMEM Language_Str MSG_B_STEPS = _UxGT("Bước") LCD_STR_B _UxGT("/mm");
- PROGMEM Language_Str MSG_C_STEPS = _UxGT("Bước") LCD_STR_C _UxGT("/mm");
- PROGMEM Language_Str MSG_I_STEPS = _UxGT("Bước") LCD_STR_I _UxGT("/mm"); // Steps/mm
- PROGMEM Language_Str MSG_J_STEPS = _UxGT("Bước") LCD_STR_J _UxGT("/mm");
- PROGMEM Language_Str MSG_K_STEPS = _UxGT("Bước") LCD_STR_K _UxGT("/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("BướcE/mm");
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("Bước */mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("Nhiệt độ"); // Temperature
- PROGMEM Language_Str MSG_MOTION = _UxGT("Chuyển động"); // Motion
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("Vật liệu in"); // dây nhựa
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E bằng mm") SUPERSCRIPT_THREE; // E in mm
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Đường kính nhựa"); // Fil. Dai.
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("Đường kính nhựa *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("Dỡ mm"); // unload mm
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("Nạp mm");
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("K Cấp Cao"); // Advance K
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("K Cấp Cao *"); // Advance K
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("Độ tương phản LCD"); // LCD contrast
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("Lưu các thiết lập"); // Store settings
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("Tải các cài đặt"); // Load settings
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Khôi phục phòng hư"); // Restore Defaults
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Khởi Tạo EEPROM"); // Initialize EEPROM
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("Cập Nhật phương tiện"); // Update media
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("Bặt Lại Máy In");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("Cập Nhật"); // Refresh
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("Màn Hình Thông Tin"); // Info screen
- PROGMEM Language_Str MSG_PREPARE = _UxGT("Chuẩn bị"); // Prepare
- PROGMEM Language_Str MSG_TUNE = _UxGT("Điều Chỉnh"); // Tune
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("Tạm dừng in"); // Pause print
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("Tiếp tục in"); // Resume print
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("Ngừng in"); // Stop print
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("Phục Hồi Mất Điện"); // Outage Recovery
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("In từ phương tiện"); // Print from media
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("Không có phương tiện"); // No media
- PROGMEM Language_Str MSG_DWELL = _UxGT("Ngủ..."); // Sleep
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("Nhấn để tiếp tục..."); // Click to resume (same as 'continue')
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("In tạm dừng"); // print paused
- PROGMEM Language_Str MSG_PRINTING = _UxGT("Đang in..."); // printing
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("In đã hủy bỏ"); // Print aborted
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("Không di chuyển."); // No move.
- PROGMEM Language_Str MSG_KILLED = _UxGT("ĐÃ CHẾT. ");
- PROGMEM Language_Str MSG_STOPPED = _UxGT("ĐÃ NGỪNG. ");
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Rút mm"); // Retract mm
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("Rút Trao.mm"); // Swap Re.mm
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("Rút V");
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Nhảy mm"); // hop
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("BỏRút mm"); // Unretr. mm
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("BỏRút T mm"); // S Unretr. mm
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("BỏRút V"); // UnRet V
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("BỏRút T V"); // S UnRet V
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("RútTựĐộng"); // Auto-Retract
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Khoảng Cách Rút"); // Retract Distance
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Thay Đổi Công Cụ"); // Tool Change
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Đưa Lên Z"); // Z Raise
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Tốc Độ Tuôn Ra"); // Prime Speed
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Tốc Độ Rút Lại"); // Retract Speed
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("Thay dây nhựa"); // change filament
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("Thay dây nhựa *"); // change filament
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Nạp dây nhựa"); // load filament
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Nạp dây nhựa *"); // load filament
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("Dỡ dây nhựa"); // unload filament
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Dỡ dây nhựa *"); // unload filament
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Dỡ tất cả"); // Unload All
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Khởi tạo phương tiện"); // Attach media
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("Thay phương tiện"); // Change midea
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("Phát hành phương tiện");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Đầu Dò Z qua bàn"); // Z Probe past bed
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("Hệ số nghiêng"); // Skew Factor
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTOUCH"); // BLTouch
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Tự kiểm tra BLTOUCH "); // BLTouch Self-Test
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Bặt lại BLTouch"); // Reset BLTouch
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Đem BLTouch"); // Deploy BLTouch
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cất BLTouch"); // Stow BLTouch
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Đem Đầu Dò-Z"); // Deploy Z-Probe
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Cất Đầu Dò-Z"); // Stow Z-Probe
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Về nhà %s%s%s Trước");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Đầu Dò Bù Đắp Z"); // Probe Z Offset
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Nhít X"); // Babystep X
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Nhít Y");
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Nhít Z");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Hủy bỏ công tắc"); // Endstop abort
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Sưởi đầu phun không thành công"); // Heating failed
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Điều sai: nhiệt độ dư"); // Err: REDUNDANT TEMP
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("Vấn đề nhiệt"); // THERMAL RUNAWAY | problem
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("Vấn đề nhiệt bàn"); // BED THERMAL RUNAWAY
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("Điều sai: nhiệt độ tối đa"); // Err: MAXTEMP
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Điều sai: nhiệt độ tối thiểu"); // Err: MINTEMP
- PROGMEM Language_Str MSG_HALTED = _UxGT("MÁY IN ĐÃ DỪNG LẠI"); // PRINTER HALTED
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Xin bặt lại"); // Please reset
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("n"); // d - ngày - One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("g"); // h - giờ - One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("p"); // m - phút - One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("Đang sưởi nóng..."); // heating
- PROGMEM Language_Str MSG_COOLING = _UxGT("Đang làm nguội..."); // cooling
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Đang sưởi nong bàn..."); // bed heating
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Đang làm nguội bàn..."); // bed cooling
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Cân Chỉnh Delta"); // Delta calibration
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("Chỉnh X lại");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("Chỉnh Y lại");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("Chỉnh Z lại");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("Chỉnh Z Center"); // Calibrate Center
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("Cài Đặt Delta"); // Delta Settings
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("Cân Chỉnh Tự Động"); // Auto Calibration
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Đặt Chiều Cao Delta"); // Set Delta Height
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Đầu Dò Z-Bù Đắp"); // Probe Z-offset
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Gậy Chéo"); // Diag Rod
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("Chiều Cao"); // Height
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("Bán Kính"); // Radius
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("Về Máy In");
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("Thông Tin Máy In"); // Printer Info
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("San lấp 3-Điểm"); // 3-Point Leveling
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("San Lấp Tuyến Tính"); // Linear Leveling
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("San Lấp Song Tuyến"); // Bilinear Leveling
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("San Lấp Bàn Thống Nhất"); // Unified Bed Leveling
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Lưới San Lấp"); // Mesh Leveling
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Thống Kê Máy In"); // Printer Stats
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("Thông Tin Bo Mạch"); // Board Info
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("Điện Trở Nhiệt"); // Thermistors
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("Máy đùn"); // Extruders
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("Baud"); // Baud
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Giao Thức"); // Protocol
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Đèn Khuông"); // Case light
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Độ Sáng"); // Light Brightness
+ LSTR MSG_MOVING = _UxGT("Di chuyển..."); // Moving
+ LSTR MSG_FREE_XY = _UxGT("Giải phóng XY"); // Free XY
+ LSTR MSG_MOVE_X = _UxGT("Di chuyển X"); // Move X
+ LSTR MSG_MOVE_Y = _UxGT("Di chuyển Y");
+ LSTR MSG_MOVE_Z = _UxGT("Di chuyển Z");
+ LSTR MSG_MOVE_E = _UxGT("Máy đùn"); // Extruder
+ LSTR MSG_MOVE_EN = _UxGT("Máy đùn *");
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("Đầu nóng quá lạnh"); // Hotend too cold
+ LSTR MSG_MOVE_01MM = _UxGT("Di chuyển 0.1mm"); // Move 0.1mm
+ LSTR MSG_MOVE_1MM = _UxGT("Di chuyển 1mm"); // Move 1mm
+ LSTR MSG_MOVE_10MM = _UxGT("Di chuyển 10mm"); // Move 10mm
+ LSTR MSG_MOVE_100MM = _UxGT("Di chuyển 100mm"); // Move 100mm
+ LSTR MSG_SPEED = _UxGT("Tốc độ"); // Speed
+ LSTR MSG_BED_Z = _UxGT("Z Bàn");
+ LSTR MSG_NOZZLE = _UxGT("Đầu phun"); // Nozzle
+ LSTR MSG_NOZZLE_N = _UxGT("Đầu phun ~");
+ LSTR MSG_BED = _UxGT("Bàn"); // bed
+ LSTR MSG_FAN_SPEED = _UxGT("Tốc độ quạt"); // fan speed
+ LSTR MSG_FAN_SPEED_N = _UxGT("Tốc độ quạt ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("Tốc độ quạt phụ"); // Extra fan speed
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("Tốc độ quạt phụ ~");
+ LSTR MSG_FLOW = _UxGT("Lưu Lượng");
+ LSTR MSG_FLOW_N = _UxGT("Lưu Lượng ~");
+ LSTR MSG_CONTROL = _UxGT("Điều khiển"); // Control
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" Đa"); // min
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Thiểu");
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" Hệ Số"); // factor
+ LSTR MSG_AUTOTEMP = _UxGT("Nhiệt độ tự động"); // Autotemp
+ LSTR MSG_LCD_ON = _UxGT("Bật"); // on
+ LSTR MSG_LCD_OFF = _UxGT("Tắt"); // off
+ LSTR MSG_SELECT = _UxGT("Lựa"); // Select
+ LSTR MSG_SELECT_E = _UxGT("Lựa *");
+ LSTR MSG_ACC = _UxGT("Tăng Tốc");
+ LSTR MSG_JERK = _UxGT("Giật");
+ LSTR MSG_VA_JERK = _UxGT("Giật-V") LCD_STR_A;
+ LSTR MSG_VB_JERK = _UxGT("Giật-V") LCD_STR_B;
+ LSTR MSG_VC_JERK = _UxGT("Giật-V") LCD_STR_C;
+ LSTR MSG_VI_JERK = _UxGT("Giật-V") LCD_STR_I;
+ LSTR MSG_VJ_JERK = _UxGT("Giật-V") LCD_STR_J;
+ LSTR MSG_VK_JERK = _UxGT("Giật-V") LCD_STR_K;
+ LSTR MSG_VE_JERK = _UxGT("Giật-Ve");
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("Độ Lệch Chỗ Giao"); // Junction Dev
+ LSTR MSG_VELOCITY = _UxGT("Vận tốc"); // velocity
+ LSTR MSG_VMAX_A = _UxGT("Vđa") LCD_STR_A; // Vmax
+ LSTR MSG_VMAX_B = _UxGT("Vđa") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("Vđa") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("Vđa") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("Vđa") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("Vđa") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("Vđa") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("Vđa *");
+ LSTR MSG_VMIN = _UxGT("Vthiểu"); // Vmin
+ LSTR MSG_VTRAV_MIN = _UxGT("Vchuyển thiểu"); // VTrav min
+ LSTR MSG_ACCELERATION = _UxGT("Sự tăng tốc"); // Acceleration
+ LSTR MSG_AMAX_A = _UxGT("Tăng tốc ca") LCD_STR_A; // Amax
+ LSTR MSG_AMAX_B = _UxGT("Tăng tốc ca") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("Tăng tốc ca") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("Tăng tốc ca") LCD_STR_I; // Amax
+ LSTR MSG_AMAX_J = _UxGT("Tăng tốc ca") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("Tăng tốc ca") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("Tăng tốc ca") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("Tăng tốc ca *");
+ LSTR MSG_A_RETRACT = _UxGT("TT-Rút"); // A-retract
+ LSTR MSG_A_TRAVEL = _UxGT("TT-Chuyển"); // A-travel
+ LSTR MSG_STEPS_PER_MM = _UxGT("Bước/mm"); // Steps
+ LSTR MSG_A_STEPS = _UxGT("Bước") LCD_STR_A _UxGT("/mm"); // Steps/mm
+ LSTR MSG_B_STEPS = _UxGT("Bước") LCD_STR_B _UxGT("/mm");
+ LSTR MSG_C_STEPS = _UxGT("Bước") LCD_STR_C _UxGT("/mm");
+ LSTR MSG_I_STEPS = _UxGT("Bước") LCD_STR_I _UxGT("/mm"); // Steps/mm
+ LSTR MSG_J_STEPS = _UxGT("Bước") LCD_STR_J _UxGT("/mm");
+ LSTR MSG_K_STEPS = _UxGT("Bước") LCD_STR_K _UxGT("/mm");
+ LSTR MSG_E_STEPS = _UxGT("BướcE/mm");
+ LSTR MSG_EN_STEPS = _UxGT("Bước */mm");
+ LSTR MSG_TEMPERATURE = _UxGT("Nhiệt độ"); // Temperature
+ LSTR MSG_MOTION = _UxGT("Chuyển động"); // Motion
+ LSTR MSG_FILAMENT = _UxGT("Vật liệu in"); // dây nhựa
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E bằng mm") SUPERSCRIPT_THREE; // E in mm
+ LSTR MSG_FILAMENT_DIAM = _UxGT("Đường kính nhựa"); // Fil. Dai.
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("Đường kính nhựa *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("Dỡ mm"); // unload mm
+ LSTR MSG_FILAMENT_LOAD = _UxGT("Nạp mm");
+ LSTR MSG_ADVANCE_K = _UxGT("K Cấp Cao"); // Advance K
+ LSTR MSG_ADVANCE_K_E = _UxGT("K Cấp Cao *"); // Advance K
+ LSTR MSG_CONTRAST = _UxGT("Độ tương phản LCD"); // LCD contrast
+ LSTR MSG_STORE_EEPROM = _UxGT("Lưu các thiết lập"); // Store settings
+ LSTR MSG_LOAD_EEPROM = _UxGT("Tải các cài đặt"); // Load settings
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("Khôi phục phòng hư"); // Restore Defaults
+ LSTR MSG_INIT_EEPROM = _UxGT("Khởi Tạo EEPROM"); // Initialize EEPROM
+ LSTR MSG_MEDIA_UPDATE = _UxGT("Cập Nhật phương tiện"); // Update media
+ LSTR MSG_RESET_PRINTER = _UxGT("Bặt Lại Máy In");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("Cập Nhật"); // Refresh
+ LSTR MSG_INFO_SCREEN = _UxGT("Màn Hình Thông Tin"); // Info screen
+ LSTR MSG_PREPARE = _UxGT("Chuẩn bị"); // Prepare
+ LSTR MSG_TUNE = _UxGT("Điều Chỉnh"); // Tune
+ LSTR MSG_PAUSE_PRINT = _UxGT("Tạm dừng in"); // Pause print
+ LSTR MSG_RESUME_PRINT = _UxGT("Tiếp tục in"); // Resume print
+ LSTR MSG_STOP_PRINT = _UxGT("Ngừng in"); // Stop print
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("Phục Hồi Mất Điện"); // Outage Recovery
+ LSTR MSG_MEDIA_MENU = _UxGT("In từ phương tiện"); // Print from media
+ LSTR MSG_NO_MEDIA = _UxGT("Không có phương tiện"); // No media
+ LSTR MSG_DWELL = _UxGT("Ngủ..."); // Sleep
+ LSTR MSG_USERWAIT = _UxGT("Nhấn để tiếp tục..."); // Click to resume (same as 'continue')
+ LSTR MSG_PRINT_PAUSED = _UxGT("In tạm dừng"); // print paused
+ LSTR MSG_PRINTING = _UxGT("Đang in..."); // printing
+ LSTR MSG_PRINT_ABORTED = _UxGT("In đã hủy bỏ"); // Print aborted
+ LSTR MSG_NO_MOVE = _UxGT("Không di chuyển."); // No move.
+ LSTR MSG_KILLED = _UxGT("ĐÃ CHẾT. ");
+ LSTR MSG_STOPPED = _UxGT("ĐÃ NGỪNG. ");
+ LSTR MSG_CONTROL_RETRACT = _UxGT("Rút mm"); // Retract mm
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("Rút Trao.mm"); // Swap Re.mm
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("Rút V");
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Nhảy mm"); // hop
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("BỏRút mm"); // Unretr. mm
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("BỏRút T mm"); // S Unretr. mm
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("BỏRút V"); // UnRet V
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("BỏRút T V"); // S UnRet V
+ LSTR MSG_AUTORETRACT = _UxGT("RútTựĐộng"); // Auto-Retract
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("Khoảng Cách Rút"); // Retract Distance
+ LSTR MSG_TOOL_CHANGE = _UxGT("Thay Đổi Công Cụ"); // Tool Change
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Đưa Lên Z"); // Z Raise
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Tốc Độ Tuôn Ra"); // Prime Speed
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Tốc Độ Rút Lại"); // Retract Speed
+ LSTR MSG_FILAMENTCHANGE = _UxGT("Thay dây nhựa"); // change filament
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("Thay dây nhựa *"); // change filament
+ LSTR MSG_FILAMENTLOAD = _UxGT("Nạp dây nhựa"); // load filament
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("Nạp dây nhựa *"); // load filament
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("Dỡ dây nhựa"); // unload filament
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("Dỡ dây nhựa *"); // unload filament
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("Dỡ tất cả"); // Unload All
+ LSTR MSG_ATTACH_MEDIA = _UxGT("Khởi tạo phương tiện"); // Attach media
+ LSTR MSG_CHANGE_MEDIA = _UxGT("Thay phương tiện"); // Change midea
+ LSTR MSG_RELEASE_MEDIA = _UxGT("Phát hành phương tiện");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Đầu Dò Z qua bàn"); // Z Probe past bed
+ LSTR MSG_SKEW_FACTOR = _UxGT("Hệ số nghiêng"); // Skew Factor
+ LSTR MSG_BLTOUCH = _UxGT("BLTOUCH"); // BLTouch
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("Tự kiểm tra BLTOUCH "); // BLTouch Self-Test
+ LSTR MSG_BLTOUCH_RESET = _UxGT("Bặt lại BLTouch"); // Reset BLTouch
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("Đem BLTouch"); // Deploy BLTouch
+ LSTR MSG_BLTOUCH_STOW = _UxGT("Cất BLTouch"); // Stow BLTouch
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("Đem Đầu Dò-Z"); // Deploy Z-Probe
+ LSTR MSG_MANUAL_STOW = _UxGT("Cất Đầu Dò-Z"); // Stow Z-Probe
+ LSTR MSG_HOME_FIRST = _UxGT("Về nhà %s%s%s Trước");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Đầu Dò Bù Đắp Z"); // Probe Z Offset
+ LSTR MSG_BABYSTEP_X = _UxGT("Nhít X"); // Babystep X
+ LSTR MSG_BABYSTEP_Y = _UxGT("Nhít Y");
+ LSTR MSG_BABYSTEP_Z = _UxGT("Nhít Z");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("Hủy bỏ công tắc"); // Endstop abort
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("Sưởi đầu phun không thành công"); // Heating failed
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("Điều sai: nhiệt độ dư"); // Err: REDUNDANT TEMP
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("Vấn đề nhiệt"); // THERMAL RUNAWAY | problem
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("Vấn đề nhiệt bàn"); // BED THERMAL RUNAWAY
+ LSTR MSG_ERR_MAXTEMP = _UxGT("Điều sai: nhiệt độ tối đa"); // Err: MAXTEMP
+ LSTR MSG_ERR_MINTEMP = _UxGT("Điều sai: nhiệt độ tối thiểu"); // Err: MINTEMP
+ LSTR MSG_HALTED = _UxGT("MÁY IN ĐÃ DỪNG LẠI"); // PRINTER HALTED
+ LSTR MSG_PLEASE_RESET = _UxGT("Xin bặt lại"); // Please reset
+ LSTR MSG_SHORT_DAY = _UxGT("n"); // d - ngày - One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("g"); // h - giờ - One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("p"); // m - phút - One character only
+ LSTR MSG_HEATING = _UxGT("Đang sưởi nóng..."); // heating
+ LSTR MSG_COOLING = _UxGT("Đang làm nguội..."); // cooling
+ LSTR MSG_BED_HEATING = _UxGT("Đang sưởi nong bàn..."); // bed heating
+ LSTR MSG_BED_COOLING = _UxGT("Đang làm nguội bàn..."); // bed cooling
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("Cân Chỉnh Delta"); // Delta calibration
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("Chỉnh X lại");
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("Chỉnh Y lại");
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("Chỉnh Z lại");
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("Chỉnh Z Center"); // Calibrate Center
+ LSTR MSG_DELTA_SETTINGS = _UxGT("Cài Đặt Delta"); // Delta Settings
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("Cân Chỉnh Tự Động"); // Auto Calibration
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("Đặt Chiều Cao Delta"); // Set Delta Height
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Đầu Dò Z-Bù Đắp"); // Probe Z-offset
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("Gậy Chéo"); // Diag Rod
+ LSTR MSG_DELTA_HEIGHT = _UxGT("Chiều Cao"); // Height
+ LSTR MSG_DELTA_RADIUS = _UxGT("Bán Kính"); // Radius
+ LSTR MSG_INFO_MENU = _UxGT("Về Máy In");
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("Thông Tin Máy In"); // Printer Info
+ LSTR MSG_3POINT_LEVELING = _UxGT("San lấp 3-Điểm"); // 3-Point Leveling
+ LSTR MSG_LINEAR_LEVELING = _UxGT("San Lấp Tuyến Tính"); // Linear Leveling
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("San Lấp Song Tuyến"); // Bilinear Leveling
+ LSTR MSG_UBL_LEVELING = _UxGT("San Lấp Bàn Thống Nhất"); // Unified Bed Leveling
+ LSTR MSG_MESH_LEVELING = _UxGT("Lưới San Lấp"); // Mesh Leveling
+ LSTR MSG_INFO_STATS_MENU = _UxGT("Thống Kê Máy In"); // Printer Stats
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("Thông Tin Bo Mạch"); // Board Info
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Điện Trở Nhiệt"); // Thermistors
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("Máy đùn"); // Extruders
+ LSTR MSG_INFO_BAUDRATE = _UxGT("Baud"); // Baud
+ LSTR MSG_INFO_PROTOCOL = _UxGT("Giao Thức"); // Protocol
+ LSTR MSG_CASE_LIGHT = _UxGT("Đèn Khuông"); // Case light
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Độ Sáng"); // Light Brightness
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Số In"); // Print Count
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành");
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tổng số thời gian in"); // Total print time
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Thời gian việc lâu nhất"); // Longest job time
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Tổng số đùn"); // Extruded total
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("Số In"); // Print Count
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành");
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tổng số thời gian in"); // Total print time
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Thời gian việc lâu nhất"); // Longest job time
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Tổng số đùn"); // Extruded total
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("In"); // prints
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành"); // Completed
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("Tổng số"); // total
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Dài nhất"); // Longest
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Đã ép đùn");
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("In"); // prints
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("Đã hoàn thành"); // Completed
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("Tổng số"); // total
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("Dài nhất"); // Longest
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("Đã ép đùn");
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Nhiệt độ tối thiểu"); // Min Temp
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Nhiệt độ tối đa"); // Max temp
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("Bộ nguồn"); // PSU
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("Sức mạnh ổ đĩa"); // Drive Strength
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" % trình điều khiển"); // X Driver %
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" % trình điều khiển");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" % trình điều khiển");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" % trình điều khiển");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" % trình điều khiển");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" % trình điều khiển");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E % trình điều khiển");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Ghi DAC EEPROM"); // DAC EEPROM Write
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("In tạm dừng"); // PRINT PAUSED
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("Nạp dây nhựa");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("Dỡ dây nhựa"); // unload filament
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Tùy chọn hồi phục:"); // RESUME OPTIONS
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Xả thêm"); // Purge more
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Tiếp tục"); // continue
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Đầu Phun: "); // Nozzle
- PROGMEM Language_Str MSG_RUNOUT_SENSOR_ENABLE = _UxGT("Cảm Biến Hết"); // Runout Sensor
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Sự nhà không thành công"); // Homing failed
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT(" không thành công"); // Probing failed
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("Nhiệt độ tối thiểu"); // Min Temp
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("Nhiệt độ tối đa"); // Max temp
+ LSTR MSG_INFO_PSU = _UxGT("Bộ nguồn"); // PSU
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("Sức mạnh ổ đĩa"); // Drive Strength
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" % trình điều khiển"); // X Driver %
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" % trình điều khiển");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" % trình điều khiển");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" % trình điều khiển");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" % trình điều khiển");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" % trình điều khiển");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E % trình điều khiển");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("Ghi DAC EEPROM"); // DAC EEPROM Write
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("In tạm dừng"); // PRINT PAUSED
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("Nạp dây nhựa");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("Dỡ dây nhựa"); // unload filament
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("Tùy chọn hồi phục:"); // RESUME OPTIONS
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("Xả thêm"); // Purge more
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("Tiếp tục"); // continue
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Đầu Phun: "); // Nozzle
+ LSTR MSG_RUNOUT_SENSOR_ENABLE = _UxGT("Cảm Biến Hết"); // Runout Sensor
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("Sự nhà không thành công"); // Homing failed
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT(" không thành công"); // Probing failed
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nhấn nút", "để tiếp tục in")); // Press button to resume print
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Chờ cho sự", "thay đổi dây nhựa", "bắt đầu")); // wait for filament change to start
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Đút dây nhựa vào", "và nhấn nút", "để tiếp tục")); // insert filament and press button to continue //
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nhấn nút", "để làm nóng đầu phun")); // Press button to heat nozzle
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Đầu phun đang nóng lên", "Xin chờ...")); // Nozzle heating Please wait
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa ra")); // Wait for filament unload
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa vào")); // Wait for filament load
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Chờ tro", "xả dây nhựa")); // wait for filament purge
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Nhấn nút để kết thúc", "xả dây nhựa")); // Click to finish dây nhựa purge
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Chờ tro in", "tiếp tục...")); // Wait for print to resume
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("Nhấn nút", "để tiếp tục in")); // Press button to resume print
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Chờ cho sự", "thay đổi dây nhựa", "bắt đầu")); // wait for filament change to start
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Đút dây nhựa vào", "và nhấn nút", "để tiếp tục")); // insert filament and press button to continue //
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("Nhấn nút", "để làm nóng đầu phun")); // Press button to heat nozzle
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("Đầu phun đang nóng lên", "Xin chờ...")); // Nozzle heating Please wait
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa ra")); // Wait for filament unload
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Chờ tro", "dây nhựa vào")); // Wait for filament load
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("Chờ tro", "xả dây nhựa")); // wait for filament purge
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("Nhấn nút để kết thúc", "xả dây nhựa")); // Click to finish dây nhựa purge
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("Chờ tro in", "tiếp tục...")); // Wait for print to resume
#else // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Nhấn nút để tiếp tục")); // Click to continue
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Xin chờ..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Chèn và nhấn")); // Insert and Click
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Nhấn để sưởi")); // Click to heat
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Đang sưởi nóng")); // Heating
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Đang dỡ ra...")); // Ejecting
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Đang nạp...")); // Loading
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Đang xả...")); // Purging
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Nhấn nút để kết thúc")); // Click to finish
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Đang tiếp tục...")); // Resuming
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("Nhấn nút để tiếp tục")); // Click to continue
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("Xin chờ..."));
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Chèn và nhấn")); // Insert and Click
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("Nhấn để sưởi")); // Click to heat
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("Đang sưởi nóng")); // Heating
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("Đang dỡ ra...")); // Ejecting
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Đang nạp...")); // Loading
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("Đang xả...")); // Purging
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("Nhấn nút để kết thúc")); // Click to finish
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("Đang tiếp tục...")); // Resuming
#endif // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("Trình điều khiển TMC"); // TMC drivers
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("Dòng điện trình điều khiển"); // Driver current
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("Ngưỡng Hỗn Hợp"); // Hybrid threshold
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("Vô cảm biến"); // Sensorless homing
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Chế độ từng bước"); // Stepping mode
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("CắtTàngHình được kích hoạt"); // StealthChop enabled
+ LSTR MSG_TMC_DRIVERS = _UxGT("Trình điều khiển TMC"); // TMC drivers
+ LSTR MSG_TMC_CURRENT = _UxGT("Dòng điện trình điều khiển"); // Driver current
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("Ngưỡng Hỗn Hợp"); // Hybrid threshold
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("Vô cảm biến"); // Sensorless homing
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("Chế độ từng bước"); // Stepping mode
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("CắtTàngHình được kích hoạt"); // StealthChop enabled
}
diff --git a/Marlin/src/lcd/language/language_zh_CN.h b/Marlin/src/lcd/language/language_zh_CN.h
index 35642460fc..afa51689cf 100644
--- a/Marlin/src/lcd/language/language_zh_CN.h
+++ b/Marlin/src/lcd/language/language_zh_CN.h
@@ -30,607 +30,600 @@
namespace Language_zh_CN {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 3;
- PROGMEM Language_Str LANGUAGE = _UxGT("Simplified Chinese");
+ constexpr uint8_t CHARSIZE = 3;
+ LSTR LANGUAGE = _UxGT("Simplified Chinese");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT("已就绪."); // " ready."
- PROGMEM Language_Str MSG_MARLIN = _UxGT("马林");
- PROGMEM Language_Str MSG_YES = _UxGT("是");
- PROGMEM Language_Str MSG_NO = _UxGT("否");
- PROGMEM Language_Str MSG_BACK = _UxGT("返回"); // ”Back“
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("放弃中...");
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("存储卡已插入"); // "Card inserted"
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("存储卡被拔出"); // "Card removed"
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("等待存储器");
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("存储器读取错误");
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB设备已弹出");
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB启动错误");
- PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("子响应溢出");
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("挡块"); // "Endstops" // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("软挡块");
- PROGMEM Language_Str MSG_MAIN = _UxGT("主菜单"); // "Main"
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("高级设置");
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("配置");
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("自动开始"); // "Autostart"
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("关闭步进电机"); // "Disable steppers"
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("调试菜单"); // "Debug Menu"
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("进度条测试"); // "Progress Bar Test"
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("自动回原点"); // "Auto home"
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("回X原位"); // "Home X"
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("回Y原位"); // "Home Y"
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("回Z原位"); // "Home Z"
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("自动Z对齐");
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("平台调平XYZ归原位"); // "Homing XYZ"
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("单击开始热床调平"); // "Click to Begin"
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("下个热床调平点"); // "Next Point"
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("完成热床调平"); // "Leveling Done!"
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("设置原点偏移"); // "Set home offsets"
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已启用"); // "Offsets applied"
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("设置原点"); // "Set origin"
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT("已就绪."); // " ready."
+ LSTR MSG_MARLIN = _UxGT("马林");
+ LSTR MSG_YES = _UxGT("是");
+ LSTR MSG_NO = _UxGT("否");
+ LSTR MSG_BACK = _UxGT("返回"); // ”Back“
+ LSTR MSG_MEDIA_ABORTING = _UxGT("放弃中...");
+ LSTR MSG_MEDIA_INSERTED = _UxGT("存储卡已插入"); // "Card inserted"
+ LSTR MSG_MEDIA_REMOVED = _UxGT("存储卡被拔出"); // "Card removed"
+ LSTR MSG_MEDIA_WAITING = _UxGT("等待存储器");
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("存储器读取错误");
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB设备已弹出");
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB启动错误");
+ LSTR MSG_KILL_SUBCALL_OVERFLOW = _UxGT("子响应溢出");
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("挡块"); // "Endstops" // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("软挡块");
+ LSTR MSG_MAIN = _UxGT("主菜单"); // "Main"
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("高级设置");
+ LSTR MSG_CONFIGURATION = _UxGT("配置");
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("自动开始"); // "Autostart"
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("关闭步进电机"); // "Disable steppers"
+ LSTR MSG_DEBUG_MENU = _UxGT("调试菜单"); // "Debug Menu"
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("进度条测试"); // "Progress Bar Test"
+ LSTR MSG_AUTO_HOME = _UxGT("自动回原点"); // "Auto home"
+ LSTR MSG_AUTO_HOME_X = _UxGT("回X原位"); // "Home X"
+ LSTR MSG_AUTO_HOME_Y = _UxGT("回Y原位"); // "Home Y"
+ LSTR MSG_AUTO_HOME_Z = _UxGT("回Z原位"); // "Home Z"
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("自动Z对齐");
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("平台调平XYZ归原位"); // "Homing XYZ"
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("单击开始热床调平"); // "Click to Begin"
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("下个热床调平点"); // "Next Point"
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("完成热床调平"); // "Leveling Done!"
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("设置原点偏移"); // "Set home offsets"
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已启用"); // "Offsets applied"
+ LSTR MSG_SET_ORIGIN = _UxGT("设置原点"); // "Set origin"
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("预热 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_2_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("预热 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_2_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ~"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 热床"); //MSG_PREHEAT_1 " Bed"
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 设置"); //MSG_PREHEAT_1 " conf"
+ LSTR MSG_PREHEAT_1 = _UxGT("预热 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_2_LABEL"
+ LSTR MSG_PREHEAT_1_H = _UxGT("预热 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_2_LABEL"
+ LSTR MSG_PREHEAT_1_END = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 喷嘴 ~"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 热床"); //MSG_PREHEAT_1 " Bed"
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("预热 ") PREHEAT_1_LABEL _UxGT(" 设置"); //MSG_PREHEAT_1 " conf"
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("预热 $"); // "Preheat PREHEAT_2_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("预热 $ ~"); // "Preheat PREHEAT_2_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("预热 $ 喷嘴"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("预热 $ 喷嘴 ~"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("预热 $ 全部"); //MSG_PREHEAT_1 " All"
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("预热 $ 热床"); //MSG_PREHEAT_1 " Bed"
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("预热 $ 设置"); //MSG_PREHEAT_1 " conf"
+ LSTR MSG_PREHEAT_M = _UxGT("预热 $"); // "Preheat PREHEAT_2_LABEL"
+ LSTR MSG_PREHEAT_M_H = _UxGT("预热 $ ~"); // "Preheat PREHEAT_2_LABEL"
+ LSTR MSG_PREHEAT_M_END = _UxGT("预热 $ 喷嘴"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("预热 $ 喷嘴 ~"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("预热 $ 全部"); //MSG_PREHEAT_1 " All"
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("预热 $ 热床"); //MSG_PREHEAT_1 " Bed"
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("预热 $ 设置"); //MSG_PREHEAT_1 " conf"
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("预热自定义");
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("降温"); // "Cooldown"
- PROGMEM Language_Str MSG_CUTTER_FREQUENCY = _UxGT("切割频率");
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("激光控制");
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("激光电源");
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("主轴控制");
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("主轴电源");
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("主轴反转");
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("电源打开"); // "Switch power on"
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("电源关闭"); // "Switch power off"
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("挤出"); // "Extrude"
- PROGMEM Language_Str MSG_RETRACT = _UxGT("回抽"); // "Retract"
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("移动轴"); // "Move axis"
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("调平热床"); // "Bed leveling"
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("调平热床"); // "Level bed"
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("调平边角"); // "Bed Tramming"
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("下个边角"); // "Next corner"
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("网格编辑器");
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("编辑网格"); // "Edit Mesh"
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("网格编辑已停止"); // "Mesh Editing Stopped"
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("探测点");
- PROGMEM Language_Str MSG_MESH_X = _UxGT("索引X");
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("索引Y");
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z 值");
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("定制命令"); // "Custom Commands"
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48探测");
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48点");
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("M48偏差");
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX模式");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("工具偏移量");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("自动停靠");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("复制");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("镜像复制");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("完全控制");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("第二喷头是X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("第二喷头是Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("第二喷头是Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("执行G29"); // "Doing G29"
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("倾斜點");
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("手工创设网格"); // "Manually Build Mesh"
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("放置垫片并测量"); // "Place shim & measure"
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("测量"); // "Measure"
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("移除并测量热床"); // "Remove & measure bed"
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("移动到下一个"); // "Moving to next"
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("激活UBL"); // "Activate UBL"
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("关闭UBL"); // "Deactivate UBL"
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("热床温度"); // "Bed Temp"
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("热床温度");
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("热端温度"); // "Hotend Temp"
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("热端温度");
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("网格编辑"); // "Mesh Edit"
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("编辑客户网格"); // "Edit Custom Mesh"
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("细调网格"); // "Fine Tuning Mesh"
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("完成编辑网格"); // "Done Editing Mesh"
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("创设客户网格"); // "Build Custom Mesh"
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("创设网格"); // "Build Mesh"
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("预热自定义");
+ LSTR MSG_COOLDOWN = _UxGT("降温"); // "Cooldown"
+ LSTR MSG_CUTTER_FREQUENCY = _UxGT("切割频率");
+ LSTR MSG_LASER_MENU = _UxGT("激光控制");
+ LSTR MSG_LASER_POWER = _UxGT("激光电源");
+ LSTR MSG_SPINDLE_MENU = _UxGT("主轴控制");
+ LSTR MSG_SPINDLE_POWER = _UxGT("主轴电源");
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("主轴反转");
+ LSTR MSG_SWITCH_PS_ON = _UxGT("电源打开"); // "Switch power on"
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("电源关闭"); // "Switch power off"
+ LSTR MSG_EXTRUDE = _UxGT("挤出"); // "Extrude"
+ LSTR MSG_RETRACT = _UxGT("回抽"); // "Retract"
+ LSTR MSG_MOVE_AXIS = _UxGT("移动轴"); // "Move axis"
+ LSTR MSG_BED_LEVELING = _UxGT("调平热床"); // "Bed leveling"
+ LSTR MSG_LEVEL_BED = _UxGT("调平热床"); // "Level bed"
+ LSTR MSG_BED_TRAMMING = _UxGT("调平边角"); // "Bed Tramming"
+ LSTR MSG_NEXT_CORNER = _UxGT("下个边角"); // "Next corner"
+ LSTR MSG_MESH_EDITOR = _UxGT("网格编辑器");
+ LSTR MSG_EDIT_MESH = _UxGT("编辑网格"); // "Edit Mesh"
+ LSTR MSG_EDITING_STOPPED = _UxGT("网格编辑已停止"); // "Mesh Editing Stopped"
+ LSTR MSG_PROBING_POINT = _UxGT("探测点");
+ LSTR MSG_MESH_X = _UxGT("索引X");
+ LSTR MSG_MESH_Y = _UxGT("索引Y");
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Z 值");
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("定制命令"); // "Custom Commands"
+ LSTR MSG_M48_TEST = _UxGT("M48探测");
+ LSTR MSG_M48_POINT = _UxGT("M48点");
+ LSTR MSG_M48_DEVIATION = _UxGT("M48偏差");
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX模式");
+ LSTR MSG_OFFSETS_MENU = _UxGT("工具偏移量");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("自动停靠");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("复制");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("镜像复制");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("完全控制");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("第二喷头是Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("第二喷头是@");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("执行G29"); // "Doing G29"
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("倾斜點");
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("手工创设网格"); // "Manually Build Mesh"
+ LSTR MSG_UBL_BC_INSERT = _UxGT("放置垫片并测量"); // "Place shim & measure"
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("测量"); // "Measure"
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("移除并测量热床"); // "Remove & measure bed"
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("移动到下一个"); // "Moving to next"
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("激活UBL"); // "Activate UBL"
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("关闭UBL"); // "Deactivate UBL"
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("热床温度"); // "Bed Temp"
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("热床温度");
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("热端温度"); // "Hotend Temp"
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("热端温度");
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("网格编辑"); // "Mesh Edit"
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("编辑客户网格"); // "Edit Custom Mesh"
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("细调网格"); // "Fine Tuning Mesh"
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("完成编辑网格"); // "Done Editing Mesh"
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("创设客户网格"); // "Build Custom Mesh"
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("创设网格"); // "Build Mesh"
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("创设 $ 网格"); // "Build PREHEAT_1_LABEL Mesh"
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 网格"); // "Validate PREHEAT_1_LABEL Mesh"
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("创设 $ 网格"); // "Build PREHEAT_1_LABEL Mesh"
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 网格"); // "Validate PREHEAT_1_LABEL Mesh"
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("创设冷网格"); // "Build Cold Mesh"
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("调整网格高度"); // "Adjust Mesh Height"
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合计"); // "Height Amount"
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准网格"); // "Validate Mesh"
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客户网格"); // "Validate Custom Mesh"
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26加热热床");
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26加热喷嘴");
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("手动填装中...");
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("固定距离填装");
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("填装完成");
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26已取消");
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("离开G26");
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("继续热床网格"); // "Continue Bed Mesh"
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子网格调平"); // "Grid Mesh Leveling"
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("调平网格"); // "Level Mesh"
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("边点"); // "Side Points"
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("图类型"); // "Map Type"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("输出网格图"); // "Output Mesh Map"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("输出到主机"); // "Output for Host"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("输出到CSV"); // "Output for CSV"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("输出到备份"); // "Off Printer Backup"
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("输出UBL信息"); // "Output UBL Info"
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合计"); // "Fill-in Amount"
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("聪明填充"); // "Smart Fill-in"
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("填充网格"); // "Fill-in Mesh"
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("作废所有的"); // "Invalidate All"
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作废最近的"); // "Invalidate Closest"
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("细调所有的"); // "Fine Tune All"
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("细调最近的"); // "Fine Tune Closest"
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("网格存储"); // "Mesh Storage"
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("存储槽"); // "Memory Slot"
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("装载热床网格"); // "Load Bed Mesh"
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("保存热床网格"); // "Save Bed Mesh"
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("网格 %i 已装载"); // "Mesh %i loaded"
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("网格 %i 已保存"); // "Mesh %i saved"
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("没有存储"); // "No storage"
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("错误: UBL保存"); // "Err: UBL Save"
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("错误: UBL还原"); // "Err: UBL Restore"
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z偏移量: ");
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 创设冷网格");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聪明填充");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准网格");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 细调所有的");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准网格");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 细调所有的");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存热床网格");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("创设冷网格"); // "Build Cold Mesh"
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("调整网格高度"); // "Adjust Mesh Height"
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合计"); // "Height Amount"
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准网格"); // "Validate Mesh"
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客户网格"); // "Validate Custom Mesh"
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26加热热床");
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26加热喷嘴");
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("手动填装中...");
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("固定距离填装");
+ LSTR MSG_G26_PRIME_DONE = _UxGT("填装完成");
+ LSTR MSG_G26_CANCELED = _UxGT("G26已取消");
+ LSTR MSG_G26_LEAVING = _UxGT("离开G26");
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("继续热床网格"); // "Continue Bed Mesh"
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子网格调平"); // "Grid Mesh Leveling"
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("调平网格"); // "Level Mesh"
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("边点"); // "Side Points"
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("图类型"); // "Map Type"
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("输出网格图"); // "Output Mesh Map"
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("输出到主机"); // "Output for Host"
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("输出到CSV"); // "Output for CSV"
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("输出到备份"); // "Off Printer Backup"
+ LSTR MSG_UBL_INFO_UBL = _UxGT("输出UBL信息"); // "Output UBL Info"
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合计"); // "Fill-in Amount"
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("聪明填充"); // "Smart Fill-in"
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("填充网格"); // "Fill-in Mesh"
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("作废所有的"); // "Invalidate All"
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作废最近的"); // "Invalidate Closest"
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("细调所有的"); // "Fine Tune All"
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("细调最近的"); // "Fine Tune Closest"
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("网格存储"); // "Mesh Storage"
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("存储槽"); // "Memory Slot"
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("装载热床网格"); // "Load Bed Mesh"
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("保存热床网格"); // "Save Bed Mesh"
+ LSTR MSG_MESH_LOADED = _UxGT("网格 %i 已装载"); // "Mesh %i loaded"
+ LSTR MSG_MESH_SAVED = _UxGT("网格 %i 已保存"); // "Mesh %i saved"
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("没有存储"); // "No storage"
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("错误: UBL保存"); // "Err: UBL Save"
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("错误: UBL还原"); // "Err: UBL Restore"
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z偏移量: ");
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 创设冷网格");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聪明填充");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准网格");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 细调所有的");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准网格");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 细调所有的");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存热床网格");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("LED控制"); // "LED Control")
- PROGMEM Language_Str MSG_LEDS = _UxGT("灯"); // "Lights")
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("灯预置"); // "Light Presets")
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("红"); // "Red")
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange")
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("黄"); // "Yellow")
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("绿"); // "Green")
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("蓝"); // "Blue")
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo")
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet")
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("白"); // "White")
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("缺省"); // "Default")
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("定制灯"); // "Custom Lights")
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("红饱和度"); // "Red Intensity")
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("绿饱和度"); // "Green Intensity")
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("蓝饱和度"); // "Blue Intensity")
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("白饱和度"); // "White Intensity")
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
+ LSTR MSG_LED_CONTROL = _UxGT("LED控制"); // "LED Control")
+ LSTR MSG_LEDS = _UxGT("灯"); // "Lights")
+ LSTR MSG_LED_PRESETS = _UxGT("灯预置"); // "Light Presets")
+ LSTR MSG_SET_LEDS_RED = _UxGT("红"); // "Red")
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange")
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("黄"); // "Yellow")
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("绿"); // "Green")
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("蓝"); // "Blue")
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo")
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet")
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("白"); // "White")
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("缺省"); // "Default")
+ LSTR MSG_CUSTOM_LEDS = _UxGT("定制灯"); // "Custom Lights")
+ LSTR MSG_INTENSITY_R = _UxGT("红饱和度"); // "Red Intensity")
+ LSTR MSG_INTENSITY_G = _UxGT("绿饱和度"); // "Green Intensity")
+ LSTR MSG_INTENSITY_B = _UxGT("蓝饱和度"); // "Blue Intensity")
+ LSTR MSG_INTENSITY_W = _UxGT("白饱和度"); // "White Intensity")
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
- PROGMEM Language_Str MSG_MOVING = _UxGT("移动..."); // "Moving...")
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("释放 XY"); // "Free XY")
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("移动X"); // "Move X"
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("移动Y"); // "Move Y"
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("移动Z"); // "Move Z"
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("挤出机"); // "Extruder"
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("挤出机 *"); // "Extruder"
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("热端太冷");
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("移动 %s mm"); // "Move 0.025mm"
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("移动 0.1 mm"); // "Move 0.1mm"
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("移动 1 mm"); // "Move 1mm"
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("移动 10 mm"); // "Move 10mm"
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("移动 100 mm"); // "Move 100mm"
- PROGMEM Language_Str MSG_SPEED = _UxGT("速率"); // "Speed"
- PROGMEM Language_Str MSG_BED_Z = _UxGT("热床Z"); // "Bed Z"
- PROGMEM Language_Str MSG_NOZZLE = _UxGT("喷嘴"); // "Nozzle" 噴嘴
- PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("喷嘴 ~"); // "Nozzle" 噴嘴
- PROGMEM Language_Str MSG_NOZZLE_PARKED = _UxGT("喷嘴已停靠");
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("喷嘴待命中");
- PROGMEM Language_Str MSG_BED = _UxGT("热床"); // "Bed"
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("机箱壳");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("风扇速率"); // "Fan speed"
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("风扇速率 ~"); // "Fan speed"
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("存储的风扇 ~");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("额外风扇速率"); // "Extra fan speed"
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("额外风扇速率 ~"); // "Extra fan speed"
- PROGMEM Language_Str MSG_CONTROLLER_FAN = _UxGT("控制器风扇");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("空闲速度");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("自动模式");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("工作速度");
- PROGMEM Language_Str MSG_CONTROLLER_FAN_DURATION = _UxGT("空闲周期");
- PROGMEM Language_Str MSG_FLOW = _UxGT("挤出速率"); // "Flow"
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("挤出速率 ~"); // "Flow"
- PROGMEM Language_Str MSG_CONTROL = _UxGT("控制"); // "Control"
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); // " " LCD_STR_THERMOMETER " Min"
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); // " " LCD_STR_THERMOMETER " Max"
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 因数"); // " " LCD_STR_THERMOMETER " Fact"
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("自动控温"); // "Autotemp"
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("开"); // "On"
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("关"); // "Off"
- PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("自动PID");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("自动PID *");
- PROGMEM Language_Str MSG_PID_AUTOTUNE_DONE = _UxGT("PID调整完成");
- PROGMEM Language_Str MSG_PID_BAD_EXTRUDER_NUM = _UxGT("自动调失败. 坏的挤出机");
- PROGMEM Language_Str MSG_PID_TEMP_TOO_HIGH = _UxGT("自动调失败. 温度太高");
- PROGMEM Language_Str MSG_PID_TIMEOUT = _UxGT("自动调失败! 超时");
- PROGMEM Language_Str MSG_SELECT = _UxGT("选择"); // "Select"
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("选择 *");
- PROGMEM Language_Str MSG_ACC = _UxGT("加速度"); // "Accel" acceleration
- PROGMEM Language_Str MSG_JERK = _UxGT("抖动速率"); // "Jerk"
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("轴抖动速率") LCD_STR_A; // "Va-jerk"
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("轴抖动速率") LCD_STR_B; // "Vb-jerk"
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("轴抖动速率") LCD_STR_C; // "Vc-jerk"
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("轴抖动速率") LCD_STR_I; // "Vi-jerk"
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("轴抖动速率") LCD_STR_J; // "Vj-jerk"
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("轴抖动速率") LCD_STR_K; // "Vk-jerk"
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("挤出机抖动速率"); // "Ve-jerk"
- PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("接点差");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("速度"); // "Velocity"
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("最大进料速率") LCD_STR_A; // "Vmax " max_feedrate_mm_s
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("最大进料速率") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("最大进料速率") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("最大进料速率") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("最大进料速率") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("最大进料速率") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("最大进料速率") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("最大进料速率 *");
- PROGMEM Language_Str MSG_VMIN = _UxGT("最小进料速率"); // "Vmin" min_feedrate_mm_s
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("最小移动速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("最大打印加速度") LCD_STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("最大打印加速度") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("最大打印加速度") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("最大打印加速度") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("最大打印加速度") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("最大打印加速度") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("最大打印加速度") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("最大打印加速度 *");
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("收进加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("非打印移动加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
- PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT = _UxGT("频率最大");
- PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE = _UxGT("进给速度");
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("轴步数/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" 步数/mm"); // "Asteps/mm"
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" 步数/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" 步数/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" 步数/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" 步数/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" 步数/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("E 步数/mm"); // "Esteps/mm"
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("* 步数/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("温度"); // "Temperature"
- PROGMEM Language_Str MSG_MOTION = _UxGT("运动"); // "Motion"
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("料丝"); // "Filament" menu_advanced_filament
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E 在 mm") SUPERSCRIPT_THREE; // "E in mm3" volumetric_enabled
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E 限制 在 mm") SUPERSCRIPT_THREE;
- PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT_E = _UxGT("E 限制 *");
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("丝料直径"); // "Fil. Dia."
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("丝料直径 *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("卸载 mm"); // "Unload mm"
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("装载 mm"); // "Load mm"
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD对比度"); // "LCD contrast"
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("保存设置"); // "Store memory"
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("装载设置"); // "Load memory"
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("恢复安全值"); // "Restore Defaults"
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("初始化设置"); // "Initialize EEPROM"
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC 错误");
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index 错误");
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version 错误");
- PROGMEM Language_Str MSG_SETTINGS_STORED = _UxGT("设置已保存");
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("存储器更新");
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("复位打印机");
- PROGMEM Language_Str MSG_REFRESH = LCD_STR_REFRESH _UxGT("刷新");
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("信息屏"); // "Info screen"
- PROGMEM Language_Str MSG_PREPARE = _UxGT("准备"); // "Prepare"
- PROGMEM Language_Str MSG_TUNE = _UxGT("调整"); // "Tune"
- PROGMEM Language_Str MSG_POWER_MONITOR = _UxGT("电源监控");
- PROGMEM Language_Str MSG_CURRENT = _UxGT("电流");
- PROGMEM Language_Str MSG_VOLTAGE = _UxGT("电压");
- PROGMEM Language_Str MSG_POWER = _UxGT("功率");
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("开始打印");
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("下一个");
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("初始");
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("停止");
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("打印");
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("复位");
- PROGMEM Language_Str MSG_BUTTON_IGNORE = _UxGT("忽略");
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("取消");
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("完成");
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("返回");
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("继续");
- PROGMEM Language_Str MSG_PAUSING = _UxGT("暂停中...");
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("暂停打印"); // "Pause print"
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("恢复打印"); // "Resume print"
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("停止打印"); // "Stop print"
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("打印物体");
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("取消物体");
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("取消物体 =");
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("中断恢复");
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("从存储卡上打印"); // "Print from SD"
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("无存储卡"); // "No SD card"
- PROGMEM Language_Str MSG_DWELL = _UxGT("休眠中 ..."); // "Sleep..."
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("点击继续 ..."); // "Click to resume..."
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("暫停打印"); // "Print paused"
- PROGMEM Language_Str MSG_PRINTING = _UxGT("打印中...");
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("已取消打印"); // "Print aborted"
- PROGMEM Language_Str MSG_PRINT_DONE = _UxGT("打印已完成");
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("无移动"); // "No move."
- PROGMEM Language_Str MSG_KILLED = _UxGT("已杀掉"); // "KILLED. "
- PROGMEM Language_Str MSG_STOPPED = _UxGT("已停止"); // "STOPPED. "
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("回抽长度mm"); // "Retract mm" retract_length, retract length (positive mm)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("换手回抽长度mm"); // "Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("回抽速率mm/s"); // "Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); // "Hop mm" retract_zraise, retract Z-lift
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("回抽恢复长度mm"); // "UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("换手回抽恢复长度mm"); // "S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回抽恢复后进料速率mm/s"); // "Unretract V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("自动抽回"); // "Auto-Retract" autoretract_enabled,
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("交换长度");
- PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("额外的交换");
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("清洗长度");
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("换工具");
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z抬起");
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("进给速度");
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("回抽速度");
- PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("停靠头");
- PROGMEM Language_Str MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("恢复速度");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("风扇速度");
- PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_TIME = _UxGT("风扇时间");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_ON = _UxGT("自动开");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_OFF = _UxGT("自动关");
- PROGMEM Language_Str MSG_TOOL_MIGRATION = _UxGT("工具迁移");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_AUTO = _UxGT("自动迁移");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_END = _UxGT("上一个挤出机");
- PROGMEM Language_Str MSG_TOOL_MIGRATION_SWAP = _UxGT("迁移至 *");
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("更换丝料"); // "Change filament"
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("更换丝料 *"); // "Change filament"
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("装载丝料"); // "Load filament"
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("装载丝料 *"); // "Load filament"
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("卸载丝料"); // "Unload filament"
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("卸载丝料 *"); // "Unload filament"
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("卸载全部"); // "Unload All"
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("初始化存储卡"); // "Init. SD card"
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("更换存储卡"); // "Change SD card"
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("释放存储卡");
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z探针在热床之外"); // "Z probe out. bed" Z probe is not within the physical limits
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("偏斜因数"); // "Skew Factor"
- PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch"); // "BLTouch"
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("自检");
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("重置");
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("装载");
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("部署");
- PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("SW模式");
- PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("5V模式");
- PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("OD模式");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("模式保存");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_5V = _UxGT("设置BLTouch为5V");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE_OD = _UxGT("设置BLTouch为OD");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_ECHO = _UxGT("报告开漏");
- PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("危险: 错误的设置将引起损坏! 是否继续?");
- PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("初始化TouchMI");
- PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Z偏移量测试");
- PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("保存");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("部署TouchMI");
- PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("部署Z探针");
- PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("收好Z探针");
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("归位 %s%s%s 先"); // "Home ... first"
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("探针偏移量");
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("探针X偏移");
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("探针Y偏移");
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("探针Z偏移"); // "Z Offset"
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("微量调整X轴"); // "Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("微量调整Y轴"); // "Babystep Y"
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("微量调整Z轴"); // "Babystep Z"
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("总计");
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("挡块终止"); // "Endstop abort"
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("加热失败"); // "Heating failed"
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("错误:冗余温度"); // "Err: REDUNDANT TEMP"
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("温控失控"); // "THERMAL RUNAWAY"
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("热床热量失控");
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("机箱热量失控");
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("错误:最高温度"); // "Err: MAXTEMP"
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("错误:最低温度"); // "Err: MINTEMP"
- PROGMEM Language_Str MSG_HALTED = _UxGT("打印停机"); // "PRINTER HALTED"
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("请重置"); // "Please reset"
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("时"); // "h" // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("加热中 ..."); // "Heating..."
- PROGMEM Language_Str MSG_COOLING = _UxGT("冷却中 ...");
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("加热热床中 ..."); // "Bed Heating..."
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("热床冷却中 ...");
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("机箱加热中 ...");
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("机箱冷却中 ...");
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("⊿校准"); // "Delta Calibration"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("⊿校准X"); // "Calibrate X"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校准Y"); // "Calibrate Y"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校准Z"); // "Calibrate Z"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校准中心"); // "Calibrate Center"
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("⊿设置"); // "Delta Settings"
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自动校准"); // "Auto Calibration"
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("设置⊿高度"); // "Set Delta Height"
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("探针Z偏移量");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("⊿半径"); // "Radius"
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("关于打印机"); // "About Printer"
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("打印机信息"); // "Printer Info"
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("线性调平"); // "Linear Leveling"
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("双线性调平"); // "Bilinear Leveling"
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("打印机统计"); // "Printer Stats"
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("主板信息"); // "Board Info"
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("温度计"); // "Thermistors"
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT("挤出机"); // "Extruders"
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("波特率"); // "Baud"
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("协议"); // "Protocol"
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("监控温度失控:关");
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("监控温度失控:开");
- PROGMEM Language_Str MSG_HOTEND_IDLE_TIMEOUT = _UxGT("热端空闲超时");
+ LSTR MSG_MOVING = _UxGT("移动..."); // "Moving...")
+ LSTR MSG_FREE_XY = _UxGT("释放 XY"); // "Free XY")
+ LSTR MSG_MOVE_X = _UxGT("移动X"); // "Move X"
+ LSTR MSG_MOVE_Y = _UxGT("移动Y"); // "Move Y"
+ LSTR MSG_MOVE_Z = _UxGT("移动Z"); // "Move Z"
+ LSTR MSG_MOVE_E = _UxGT("挤出机"); // "Extruder"
+ LSTR MSG_MOVE_EN = _UxGT("挤出机 *"); // "Extruder"
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("热端太冷");
+ LSTR MSG_MOVE_N_MM = _UxGT("移动 %s mm"); // "Move 0.025mm"
+ LSTR MSG_MOVE_01MM = _UxGT("移动 0.1 mm"); // "Move 0.1mm"
+ LSTR MSG_MOVE_1MM = _UxGT("移动 1 mm"); // "Move 1mm"
+ LSTR MSG_MOVE_10MM = _UxGT("移动 10 mm"); // "Move 10mm"
+ LSTR MSG_MOVE_100MM = _UxGT("移动 100 mm"); // "Move 100mm"
+ LSTR MSG_SPEED = _UxGT("速率"); // "Speed"
+ LSTR MSG_BED_Z = _UxGT("热床Z"); // "Bed Z"
+ LSTR MSG_NOZZLE = _UxGT("喷嘴"); // "Nozzle" 噴嘴
+ LSTR MSG_NOZZLE_N = _UxGT("喷嘴 ~"); // "Nozzle" 噴嘴
+ LSTR MSG_NOZZLE_PARKED = _UxGT("喷嘴已停靠");
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("喷嘴待命中");
+ LSTR MSG_BED = _UxGT("热床"); // "Bed"
+ LSTR MSG_CHAMBER = _UxGT("机箱壳");
+ LSTR MSG_FAN_SPEED = _UxGT("风扇速率"); // "Fan speed"
+ LSTR MSG_FAN_SPEED_N = _UxGT("风扇速率 ~"); // "Fan speed"
+ LSTR MSG_STORED_FAN_N = _UxGT("存储的风扇 ~");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("额外风扇速率"); // "Extra fan speed"
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("额外风扇速率 ~"); // "Extra fan speed"
+ LSTR MSG_CONTROLLER_FAN = _UxGT("控制器风扇");
+ LSTR MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("空闲速度");
+ LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("自动模式");
+ LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("工作速度");
+ LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("空闲周期");
+ LSTR MSG_FLOW = _UxGT("挤出速率"); // "Flow"
+ LSTR MSG_FLOW_N = _UxGT("挤出速率 ~"); // "Flow"
+ LSTR MSG_CONTROL = _UxGT("控制"); // "Control"
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); // " " LCD_STR_THERMOMETER " Min"
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); // " " LCD_STR_THERMOMETER " Max"
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 因数"); // " " LCD_STR_THERMOMETER " Fact"
+ LSTR MSG_AUTOTEMP = _UxGT("自动控温"); // "Autotemp"
+ LSTR MSG_LCD_ON = _UxGT("开"); // "On"
+ LSTR MSG_LCD_OFF = _UxGT("关"); // "Off"
+ LSTR MSG_PID_AUTOTUNE = _UxGT("自动PID");
+ LSTR MSG_PID_AUTOTUNE_E = _UxGT("自动PID *");
+ LSTR MSG_PID_AUTOTUNE_DONE = _UxGT("PID调整完成");
+ LSTR MSG_PID_BAD_EXTRUDER_NUM = _UxGT("自动调失败. 坏的挤出机");
+ LSTR MSG_PID_TEMP_TOO_HIGH = _UxGT("自动调失败. 温度太高");
+ LSTR MSG_PID_TIMEOUT = _UxGT("自动调失败! 超时");
+ LSTR MSG_SELECT = _UxGT("选择"); // "Select"
+ LSTR MSG_SELECT_E = _UxGT("选择 *");
+ LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration
+ LSTR MSG_JERK = _UxGT("抖动速率"); // "Jerk"
+ LSTR MSG_VA_JERK = _UxGT("轴抖动速率") LCD_STR_A; // "Va-jerk"
+ LSTR MSG_VB_JERK = _UxGT("轴抖动速率") LCD_STR_B; // "Vb-jerk"
+ LSTR MSG_VC_JERK = _UxGT("轴抖动速率") LCD_STR_C; // "Vc-jerk"
+ LSTR MSG_VI_JERK = _UxGT("轴抖动速率") LCD_STR_I; // "Vi-jerk"
+ LSTR MSG_VJ_JERK = _UxGT("轴抖动速率") LCD_STR_J; // "Vj-jerk"
+ LSTR MSG_VK_JERK = _UxGT("轴抖动速率") LCD_STR_K; // "Vk-jerk"
+ LSTR MSG_VE_JERK = _UxGT("挤出机抖动速率"); // "Ve-jerk"
+ LSTR MSG_JUNCTION_DEVIATION = _UxGT("接点差");
+ LSTR MSG_VELOCITY = _UxGT("速度"); // "Velocity"
+ LSTR MSG_VMAX_A = _UxGT("最大进料速率") LCD_STR_A; // "Vmax " max_feedrate_mm_s
+ LSTR MSG_VMAX_B = _UxGT("最大进料速率") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("最大进料速率") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("最大进料速率") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("最大进料速率") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("最大进料速率") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("最大进料速率") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("最大进料速率 *");
+ LSTR MSG_VMIN = _UxGT("最小进料速率"); // "Vmin" min_feedrate_mm_s
+ LSTR MSG_VTRAV_MIN = _UxGT("最小移动速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
+ LSTR MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
+ LSTR MSG_AMAX_A = _UxGT("最大打印加速度") LCD_STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ LSTR MSG_AMAX_B = _UxGT("最大打印加速度") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("最大打印加速度") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("最大打印加速度") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("最大打印加速度") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("最大打印加速度") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("最大打印加速度") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("最大打印加速度 *");
+ LSTR MSG_A_RETRACT = _UxGT("收进加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
+ LSTR MSG_A_TRAVEL = _UxGT("非打印移动加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
+ LSTR MSG_XY_FREQUENCY_LIMIT = _UxGT("频率最大");
+ LSTR MSG_XY_FREQUENCY_FEEDRATE = _UxGT("进给速度");
+ LSTR MSG_STEPS_PER_MM = _UxGT("轴步数/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" 步数/mm"); // "Asteps/mm"
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" 步数/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" 步数/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" 步数/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" 步数/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" 步数/mm");
+ LSTR MSG_E_STEPS = _UxGT("E 步数/mm"); // "Esteps/mm"
+ LSTR MSG_EN_STEPS = _UxGT("* 步数/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("温度"); // "Temperature"
+ LSTR MSG_MOTION = _UxGT("运动"); // "Motion"
+ LSTR MSG_FILAMENT = _UxGT("料丝"); // "Filament" menu_advanced_filament
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("E 在 mm") SUPERSCRIPT_THREE; // "E in mm3" volumetric_enabled
+ LSTR MSG_VOLUMETRIC_LIMIT = _UxGT("E 限制 在 mm") SUPERSCRIPT_THREE;
+ LSTR MSG_VOLUMETRIC_LIMIT_E = _UxGT("E 限制 *");
+ LSTR MSG_FILAMENT_DIAM = _UxGT("丝料直径"); // "Fil. Dia."
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("丝料直径 *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("卸载 mm"); // "Unload mm"
+ LSTR MSG_FILAMENT_LOAD = _UxGT("装载 mm"); // "Load mm"
+ LSTR MSG_ADVANCE_K = _UxGT("Advance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
+ LSTR MSG_CONTRAST = _UxGT("LCD对比度"); // "LCD contrast"
+ LSTR MSG_STORE_EEPROM = _UxGT("保存设置"); // "Store memory"
+ LSTR MSG_LOAD_EEPROM = _UxGT("装载设置"); // "Load memory"
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢复安全值"); // "Restore Defaults"
+ LSTR MSG_INIT_EEPROM = _UxGT("初始化设置"); // "Initialize EEPROM"
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("EEPROM CRC 错误");
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("EEPROM Index 错误");
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("EEPROM Version 错误");
+ LSTR MSG_SETTINGS_STORED = _UxGT("设置已保存");
+ LSTR MSG_MEDIA_UPDATE = _UxGT("存储器更新");
+ LSTR MSG_RESET_PRINTER = _UxGT("复位打印机");
+ LSTR MSG_REFRESH = LCD_STR_REFRESH _UxGT("刷新");
+ LSTR MSG_INFO_SCREEN = _UxGT("信息屏"); // "Info screen"
+ LSTR MSG_PREPARE = _UxGT("准备"); // "Prepare"
+ LSTR MSG_TUNE = _UxGT("调整"); // "Tune"
+ LSTR MSG_POWER_MONITOR = _UxGT("电源监控");
+ LSTR MSG_CURRENT = _UxGT("电流");
+ LSTR MSG_VOLTAGE = _UxGT("电压");
+ LSTR MSG_POWER = _UxGT("功率");
+ LSTR MSG_START_PRINT = _UxGT("开始打印");
+ LSTR MSG_BUTTON_NEXT = _UxGT("下一个");
+ LSTR MSG_BUTTON_INIT = _UxGT("初始");
+ LSTR MSG_BUTTON_STOP = _UxGT("停止");
+ LSTR MSG_BUTTON_PRINT = _UxGT("打印");
+ LSTR MSG_BUTTON_RESET = _UxGT("复位");
+ LSTR MSG_BUTTON_IGNORE = _UxGT("忽略");
+ LSTR MSG_BUTTON_CANCEL = _UxGT("取消");
+ LSTR MSG_BUTTON_DONE = _UxGT("完成");
+ LSTR MSG_BUTTON_BACK = _UxGT("返回");
+ LSTR MSG_BUTTON_PROCEED = _UxGT("继续");
+ LSTR MSG_PAUSING = _UxGT("暂停中...");
+ LSTR MSG_PAUSE_PRINT = _UxGT("暂停打印"); // "Pause print"
+ LSTR MSG_RESUME_PRINT = _UxGT("恢复打印"); // "Resume print"
+ LSTR MSG_STOP_PRINT = _UxGT("停止打印"); // "Stop print"
+ LSTR MSG_PRINTING_OBJECT = _UxGT("打印物体");
+ LSTR MSG_CANCEL_OBJECT = _UxGT("取消物体");
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("取消物体 =");
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("中断恢复");
+ LSTR MSG_MEDIA_MENU = _UxGT("从存储卡上打印"); // "Print from SD"
+ LSTR MSG_NO_MEDIA = _UxGT("无存储卡"); // "No SD card"
+ LSTR MSG_DWELL = _UxGT("休眠中 ..."); // "Sleep..."
+ LSTR MSG_USERWAIT = _UxGT("点击继续 ..."); // "Click to resume..."
+ LSTR MSG_PRINT_PAUSED = _UxGT("暫停打印"); // "Print paused"
+ LSTR MSG_PRINTING = _UxGT("打印中...");
+ LSTR MSG_PRINT_ABORTED = _UxGT("已取消打印"); // "Print aborted"
+ LSTR MSG_PRINT_DONE = _UxGT("打印已完成");
+ LSTR MSG_NO_MOVE = _UxGT("无移动"); // "No move."
+ LSTR MSG_KILLED = _UxGT("已杀掉"); // "KILLED. "
+ LSTR MSG_STOPPED = _UxGT("已停止"); // "STOPPED. "
+ LSTR MSG_CONTROL_RETRACT = _UxGT("回抽长度mm"); // "Retract mm" retract_length, retract length (positive mm)
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("换手回抽长度mm"); // "Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("回抽速率mm/s"); // "Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); // "Hop mm" retract_zraise, retract Z-lift
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("回抽恢复长度mm"); // "UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("换手回抽恢复长度mm"); // "S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回抽恢复后进料速率mm/s"); // "Unretract V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
+ LSTR MSG_AUTORETRACT = _UxGT("自动抽回"); // "Auto-Retract" autoretract_enabled,
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("交换长度");
+ LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("额外的交换");
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("清洗长度");
+ LSTR MSG_TOOL_CHANGE = _UxGT("换工具");
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z抬起");
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("进给速度");
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("回抽速度");
+ LSTR MSG_FILAMENT_PARK_ENABLED = _UxGT("停靠头");
+ LSTR MSG_SINGLENOZZLE_UNRETRACT_SPEED = _UxGT("恢复速度");
+ LSTR MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("风扇速度");
+ LSTR MSG_SINGLENOZZLE_FAN_TIME = _UxGT("风扇时间");
+ LSTR MSG_TOOL_MIGRATION_ON = _UxGT("自动开");
+ LSTR MSG_TOOL_MIGRATION_OFF = _UxGT("自动关");
+ LSTR MSG_TOOL_MIGRATION = _UxGT("工具迁移");
+ LSTR MSG_TOOL_MIGRATION_AUTO = _UxGT("自动迁移");
+ LSTR MSG_TOOL_MIGRATION_END = _UxGT("上一个挤出机");
+ LSTR MSG_TOOL_MIGRATION_SWAP = _UxGT("迁移至 *");
+ LSTR MSG_FILAMENTCHANGE = _UxGT("更换丝料"); // "Change filament"
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("更换丝料 *"); // "Change filament"
+ LSTR MSG_FILAMENTLOAD = _UxGT("装载丝料"); // "Load filament"
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("装载丝料 *"); // "Load filament"
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("卸载丝料"); // "Unload filament"
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("卸载丝料 *"); // "Unload filament"
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("卸载全部"); // "Unload All"
+ LSTR MSG_ATTACH_MEDIA = _UxGT("初始化存储卡"); // "Init. SD card"
+ LSTR MSG_CHANGE_MEDIA = _UxGT("更换存储卡"); // "Change SD card"
+ LSTR MSG_RELEASE_MEDIA = _UxGT("释放存储卡");
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z探针在热床之外"); // "Z probe out. bed" Z probe is not within the physical limits
+ LSTR MSG_SKEW_FACTOR = _UxGT("偏斜因数"); // "Skew Factor"
+ LSTR MSG_BLTOUCH = _UxGT("BLTouch"); // "BLTouch"
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("自检");
+ LSTR MSG_BLTOUCH_RESET = _UxGT("重置");
+ LSTR MSG_BLTOUCH_STOW = _UxGT("装载");
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("部署");
+ LSTR MSG_BLTOUCH_SW_MODE = _UxGT("SW模式");
+ LSTR MSG_BLTOUCH_5V_MODE = _UxGT("5V模式");
+ LSTR MSG_BLTOUCH_OD_MODE = _UxGT("OD模式");
+ LSTR MSG_BLTOUCH_MODE_STORE = _UxGT("模式保存");
+ LSTR MSG_BLTOUCH_MODE_STORE_5V = _UxGT("设置BLTouch为5V");
+ LSTR MSG_BLTOUCH_MODE_STORE_OD = _UxGT("设置BLTouch为OD");
+ LSTR MSG_BLTOUCH_MODE_ECHO = _UxGT("报告开漏");
+ LSTR MSG_BLTOUCH_MODE_CHANGE = _UxGT("危险: 错误的设置将引起损坏! 是否继续?");
+ LSTR MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
+ LSTR MSG_TOUCHMI_INIT = _UxGT("初始化TouchMI");
+ LSTR MSG_TOUCHMI_ZTEST = _UxGT("Z偏移量测试");
+ LSTR MSG_TOUCHMI_SAVE = _UxGT("保存");
+ LSTR MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("部署TouchMI");
+ LSTR MSG_MANUAL_DEPLOY = _UxGT("部署Z探针");
+ LSTR MSG_MANUAL_STOW = _UxGT("收好Z探针");
+ LSTR MSG_HOME_FIRST = _UxGT("归位 %s%s%s 先"); // "Home ... first"
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("探针偏移量");
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("探针X偏移");
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("探针Y偏移");
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("探针Z偏移"); // "Z Offset"
+ LSTR MSG_BABYSTEP_X = _UxGT("微量调整X轴"); // "Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
+ LSTR MSG_BABYSTEP_Y = _UxGT("微量调整Y轴"); // "Babystep Y"
+ LSTR MSG_BABYSTEP_Z = _UxGT("微量调整Z轴"); // "Babystep Z"
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("总计");
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("挡块终止"); // "Endstop abort"
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("加热失败"); // "Heating failed"
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("错误:冗余温度"); // "Err: REDUNDANT TEMP"
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("温控失控"); // "THERMAL RUNAWAY"
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("热床热量失控");
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("机箱热量失控");
+ LSTR MSG_ERR_MAXTEMP = _UxGT("错误:最高温度"); // "Err: MAXTEMP"
+ LSTR MSG_ERR_MINTEMP = _UxGT("错误:最低温度"); // "Err: MINTEMP"
+ LSTR MSG_HALTED = _UxGT("打印停机"); // "PRINTER HALTED"
+ LSTR MSG_PLEASE_RESET = _UxGT("请重置"); // "Please reset"
+ LSTR MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("时"); // "h" // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
+ LSTR MSG_HEATING = _UxGT("加热中 ..."); // "Heating..."
+ LSTR MSG_COOLING = _UxGT("冷却中 ...");
+ LSTR MSG_BED_HEATING = _UxGT("加热热床中 ..."); // "Bed Heating..."
+ LSTR MSG_BED_COOLING = _UxGT("热床冷却中 ...");
+ LSTR MSG_CHAMBER_HEATING = _UxGT("机箱加热中 ...");
+ LSTR MSG_CHAMBER_COOLING = _UxGT("机箱冷却中 ...");
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("⊿校准"); // "Delta Calibration"
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("⊿校准X"); // "Calibrate X"
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校准Y"); // "Calibrate Y"
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校准Z"); // "Calibrate Z"
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校准中心"); // "Calibrate Center"
+ LSTR MSG_DELTA_SETTINGS = _UxGT("⊿设置"); // "Delta Settings"
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自动校准"); // "Auto Calibration"
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("设置⊿高度"); // "Set Delta Height"
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("探针Z偏移量");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
+ LSTR MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
+ LSTR MSG_DELTA_RADIUS = _UxGT("⊿半径"); // "Radius"
+ LSTR MSG_INFO_MENU = _UxGT("关于打印机"); // "About Printer"
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("打印机信息"); // "Printer Info"
+ LSTR MSG_3POINT_LEVELING = _UxGT("三点调平"); // "3-Point Leveling"
+ LSTR MSG_LINEAR_LEVELING = _UxGT("线性调平"); // "Linear Leveling"
+ LSTR MSG_BILINEAR_LEVELING = _UxGT("双线性调平"); // "Bilinear Leveling"
+ LSTR MSG_UBL_LEVELING = _UxGT("统一热床调平(UBL)"); // "Unified Bed Leveling"
+ LSTR MSG_MESH_LEVELING = _UxGT("网格调平"); // "Mesh Leveling"
+ LSTR MSG_INFO_STATS_MENU = _UxGT("打印机统计"); // "Printer Stats"
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("主板信息"); // "Board Info"
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("温度计"); // "Thermistors"
+ LSTR MSG_INFO_EXTRUDERS = _UxGT("挤出机"); // "Extruders"
+ LSTR MSG_INFO_BAUDRATE = _UxGT("波特率"); // "Baud"
+ LSTR MSG_INFO_PROTOCOL = _UxGT("协议"); // "Protocol"
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("监控温度失控:关");
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("监控温度失控:开");
+ LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("热端空闲超时");
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("外壳灯"); // "Case light"
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("灯亮度"); // "Light BRIGHTNESS"
+ LSTR MSG_CASE_LIGHT = _UxGT("外壳灯"); // "Case light"
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("灯亮度"); // "Light BRIGHTNESS"
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("打印机不正确"); // "The printer is incorrect"
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("打印机不正确"); // "The printer is incorrect"
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("打印计数"); // "Print Count"
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("完成了"); // "Completed"
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("总打印时间"); // "Total print time"
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最长工作时间"); // "Longest job time"
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("总计挤出"); // "Extruded total"
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("打印计数"); // "Print Count"
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("完成了"); // "Completed"
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("总打印时间"); // "Total print time"
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最长工作时间"); // "Longest job time"
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("总计挤出"); // "Extruded total"
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("打印数"); // "Prints"
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); // "Completed"
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("总共"); // "Total"
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最长"); // "Longest"
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("已挤出"); // "Extruded"
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("打印数"); // "Prints"
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); // "Completed"
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("总共"); // "Total"
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最长"); // "Longest"
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("已挤出"); // "Extruded"
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("最低温度"); // "Min Temp"
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("最高温度"); // "Max Temp"
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("电源供应"); // "Power Supply"
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("驱动力度"); // "Drive Strength"
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" 驱动 %"); // "X Driver %"
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" 驱动 %");
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" 驱动 %");
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" 驱动 %");
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" 驱动 %");
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" 驱动 %");
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E 驱动 %"); // "E Driver %"
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC 连接错误");
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("保存驱动设置"); // "DAC EEPROM Write"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("更换料");
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("打印已暂停"); // "PRINT PAUSED"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("装载丝料"); // "LOAD FILAMENT"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸载丝料"); // "UNLOAD FILAMENT"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢复选项:"); // "RESUME OPTIONS:"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢复打印"); // "Resume print"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 喷嘴: "); // " Nozzle: "
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("断料传感器");
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("断料距离mm");
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("归原位失败"); // "Homing failed"
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("探针探测失败"); // "Probing failed"
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("最低温度"); // "Min Temp"
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("最高温度"); // "Max Temp"
+ LSTR MSG_INFO_PSU = _UxGT("电源供应"); // "Power Supply"
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("驱动力度"); // "Drive Strength"
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" 驱动 %"); // "X Driver %"
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" 驱动 %");
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" 驱动 %");
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" 驱动 %");
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" 驱动 %");
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" 驱动 %");
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E 驱动 %"); // "E Driver %"
+ LSTR MSG_ERROR_TMC = _UxGT("TMC 连接错误");
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("保存驱动设置"); // "DAC EEPROM Write"
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("更换料");
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("打印已暂停"); // "PRINT PAUSED"
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("装载丝料"); // "LOAD FILAMENT"
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸载丝料"); // "UNLOAD FILAMENT"
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢复选项:"); // "RESUME OPTIONS:"
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢复打印"); // "Resume print"
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 喷嘴: "); // " Nozzle: "
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("断料传感器");
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("断料距离mm");
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("归原位失败"); // "Homing failed"
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("探针探测失败"); // "Probing failed"
- PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("选择料");
- PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("MMU");
- PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("升级MMU固件!");
- PROGMEM Language_Str MSG_MMU2_NOT_RESPONDING = _UxGT("MMU需要专注.");
- PROGMEM Language_Str MSG_MMU2_RESUME = _UxGT("MMU恢复");
- PROGMEM Language_Str MSG_MMU2_RESUMING = _UxGT("MMU恢复中...");
- PROGMEM Language_Str MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU加载");
- PROGMEM Language_Str MSG_MMU2_LOAD_ALL = _UxGT("MMU加载全部");
- PROGMEM Language_Str MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU加载到喷嘴");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU弹出");
- PROGMEM Language_Str MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU弹出 ~");
- PROGMEM Language_Str MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU卸载");
- PROGMEM Language_Str MSG_MMU2_LOADING_FILAMENT = _UxGT("加载填充. %i...");
- PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("弹出填充. ...");
- PROGMEM Language_Str MSG_MMU2_UNLOADING_FILAMENT = _UxGT("卸载填充....");
- PROGMEM Language_Str MSG_MMU2_ALL = _UxGT("全部");
- PROGMEM Language_Str MSG_MMU2_FILAMENT_N = _UxGT("料 ~");
- PROGMEM Language_Str MSG_MMU2_RESET = _UxGT("复位MMU");
- PROGMEM Language_Str MSG_MMU2_RESETTING = _UxGT("MMU复位中...");
- PROGMEM Language_Str MSG_MMU2_EJECT_RECOVER = _UxGT("移出, 按下");
+ LSTR MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("选择料");
+ LSTR MSG_MMU2_MENU = _UxGT("MMU");
+ LSTR MSG_KILL_MMU2_FIRMWARE = _UxGT("升级MMU固件!");
+ LSTR MSG_MMU2_NOT_RESPONDING = _UxGT("MMU需要专注.");
+ LSTR MSG_MMU2_RESUME = _UxGT("MMU恢复");
+ LSTR MSG_MMU2_RESUMING = _UxGT("MMU恢复中...");
+ LSTR MSG_MMU2_LOAD_FILAMENT = _UxGT("MMU加载");
+ LSTR MSG_MMU2_LOAD_ALL = _UxGT("MMU加载全部");
+ LSTR MSG_MMU2_LOAD_TO_NOZZLE = _UxGT("MMU加载到喷嘴");
+ LSTR MSG_MMU2_EJECT_FILAMENT = _UxGT("MMU弹出");
+ LSTR MSG_MMU2_EJECT_FILAMENT_N = _UxGT("MMU弹出 ~");
+ LSTR MSG_MMU2_UNLOAD_FILAMENT = _UxGT("MMU卸载");
+ LSTR MSG_MMU2_LOADING_FILAMENT = _UxGT("加载填充. %i...");
+ LSTR MSG_MMU2_EJECTING_FILAMENT = _UxGT("弹出填充. ...");
+ LSTR MSG_MMU2_UNLOADING_FILAMENT = _UxGT("卸载填充....");
+ LSTR MSG_MMU2_ALL = _UxGT("全部");
+ LSTR MSG_MMU2_FILAMENT_N = _UxGT("料 ~");
+ LSTR MSG_MMU2_RESET = _UxGT("复位MMU");
+ LSTR MSG_MMU2_RESETTING = _UxGT("MMU复位中...");
+ LSTR MSG_MMU2_EJECT_RECOVER = _UxGT("移出, 按下");
- PROGMEM Language_Str MSG_MIX = _UxGT("混合");
- PROGMEM Language_Str MSG_MIX_COMPONENT_N = _UxGT("器件 =");
- PROGMEM Language_Str MSG_MIXER = _UxGT("混合器");
- PROGMEM Language_Str MSG_GRADIENT = _UxGT("梯度");
- PROGMEM Language_Str MSG_FULL_GRADIENT = _UxGT("全梯度");
- PROGMEM Language_Str MSG_TOGGLE_MIX = _UxGT("开关混合");
- PROGMEM Language_Str MSG_CYCLE_MIX = _UxGT("循环混合");
- PROGMEM Language_Str MSG_GRADIENT_MIX = _UxGT("梯度混合");
- PROGMEM Language_Str MSG_REVERSE_GRADIENT = _UxGT("反向梯度");
- PROGMEM Language_Str MSG_ACTIVE_VTOOL = _UxGT("激活 V-tool");
- PROGMEM Language_Str MSG_START_VTOOL = _UxGT("开始 V-tool");
- PROGMEM Language_Str MSG_END_VTOOL = _UxGT(" 结束 V-tool");
- PROGMEM Language_Str MSG_GRADIENT_ALIAS = _UxGT("别名 V-tool");
- PROGMEM Language_Str MSG_RESET_VTOOLS = _UxGT("复位 V-tools");
- PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("提交 V-tool Mix");
- PROGMEM Language_Str MSG_VTOOLS_RESET = _UxGT("V-tools 已复位");
- PROGMEM Language_Str MSG_START_Z = _UxGT("开始 Z:");
- PROGMEM Language_Str MSG_END_Z = _UxGT(" 结束 Z:");
+ LSTR MSG_MIX = _UxGT("混合");
+ LSTR MSG_MIX_COMPONENT_N = _UxGT("器件 =");
+ LSTR MSG_MIXER = _UxGT("混合器");
+ LSTR MSG_GRADIENT = _UxGT("梯度");
+ LSTR MSG_FULL_GRADIENT = _UxGT("全梯度");
+ LSTR MSG_TOGGLE_MIX = _UxGT("开关混合");
+ LSTR MSG_CYCLE_MIX = _UxGT("循环混合");
+ LSTR MSG_GRADIENT_MIX = _UxGT("梯度混合");
+ LSTR MSG_REVERSE_GRADIENT = _UxGT("反向梯度");
+ LSTR MSG_ACTIVE_VTOOL = _UxGT("激活 V-tool");
+ LSTR MSG_START_VTOOL = _UxGT("开始 V-tool");
+ LSTR MSG_END_VTOOL = _UxGT(" 结束 V-tool");
+ LSTR MSG_GRADIENT_ALIAS = _UxGT("别名 V-tool");
+ LSTR MSG_RESET_VTOOLS = _UxGT("复位 V-tools");
+ LSTR MSG_COMMIT_VTOOL = _UxGT("提交 V-tool Mix");
+ LSTR MSG_VTOOLS_RESET = _UxGT("V-tools 已复位");
+ LSTR MSG_START_Z = _UxGT("开始 Z:");
+ LSTR MSG_END_Z = _UxGT(" 结束 Z:");
- PROGMEM Language_Str MSG_GAMES = _UxGT("游戏");
- PROGMEM Language_Str MSG_BRICKOUT = _UxGT("敲方块");
- PROGMEM Language_Str MSG_INVADERS = _UxGT("入侵者");
- PROGMEM Language_Str MSG_SNAKE = _UxGT("贪吃蛇");
- PROGMEM Language_Str MSG_MAZE = _UxGT("迷宫");
+ LSTR MSG_GAMES = _UxGT("游戏");
+ LSTR MSG_BRICKOUT = _UxGT("敲方块");
+ LSTR MSG_INVADERS = _UxGT("入侵者");
+ LSTR MSG_SNAKE = _UxGT("贪吃蛇");
+ LSTR MSG_MAZE = _UxGT("迷宫");
- PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("错误页面索引");
- PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("错误页面速度");
+ LSTR MSG_BAD_PAGE = _UxGT("错误页面索引");
+ LSTR MSG_BAD_PAGE_SPEED = _UxGT("错误页面速度");
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("按下按钮", "恢复打印"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停靠中..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待开始", "丝料", "变更")); // "Wait for start of the filament change"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入料", "并按下", "以继续"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按钮来", "加热喷嘴.")); // "Press button to heat nozzle."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加热喷嘴", "请等待 ...")); // "Heating nozzle Please wait..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下丝料")); // "Wait for filament unload"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "进料")); // "Wait for filament load"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "丝料清除")); // "Wait for filament purge"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("按下已完成", "料的清洗"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待打印", "恢复")); // "Wait for print to resume"
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("按下按钮", "恢复打印"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停靠中..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待开始", "丝料", "变更")); // "Wait for start of the filament change"
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入料", "并按下", "以继续"));
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按钮来", "加热喷嘴.")); // "Press button to heat nozzle."
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加热喷嘴", "请等待 ...")); // "Heating nozzle Please wait..."
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下丝料")); // "Wait for filament unload"
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "进料")); // "Wait for filament load"
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "丝料清除")); // "Wait for filament purge"
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("按下已完成", "料的清洗"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待打印", "恢复")); // "Wait for print to resume"
#else
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("按下继续"));
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停靠中..."));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("请等待 ...")); // "Please wait..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入并单击")); // "Insert and Click"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("按下加热"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加热中 ...")); // "Heating..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); // "Ejecting..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("装载中 ...")); // "Loading..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("按下完成"));
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢复中 ...")); // "Resuming..."
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("按下继续"));
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停靠中..."));
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("请等待 ...")); // "Please wait..."
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入并单击")); // "Insert and Click"
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("按下加热"));
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加热中 ...")); // "Heating..."
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); // "Ejecting..."
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("装载中 ...")); // "Loading..."
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("按下完成"));
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢复中 ...")); // "Resuming..."
#endif
- PROGMEM Language_Str MSG_TMC_DRIVERS = _UxGT("TMC驱动器");
- PROGMEM Language_Str MSG_TMC_CURRENT = _UxGT("驱动电流");
- PROGMEM Language_Str MSG_TMC_HYBRID_THRS = _UxGT("混合阈值");
- PROGMEM Language_Str MSG_TMC_HOMING_THRS = _UxGT("无感回零");
- PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("步进模式");
- PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop已使能");
- PROGMEM Language_Str MSG_SERVICE_RESET = _UxGT("复位");
- PROGMEM Language_Str MSG_SERVICE_IN = _UxGT(" 在:");
- PROGMEM Language_Str MSG_BACKLASH = _UxGT("回差");
- PROGMEM Language_Str MSG_BACKLASH_A = LCD_STR_A;
- PROGMEM Language_Str MSG_BACKLASH_B = LCD_STR_B;
- PROGMEM Language_Str MSG_BACKLASH_C = LCD_STR_C;
- PROGMEM Language_Str MSG_BACKLASH_I = LCD_STR_I;
- PROGMEM Language_Str MSG_BACKLASH_J = LCD_STR_J;
- PROGMEM Language_Str MSG_BACKLASH_K = LCD_STR_K;
- PROGMEM Language_Str MSG_BACKLASH_CORRECTION = _UxGT("校正");
- PROGMEM Language_Str MSG_BACKLASH_SMOOTHING = _UxGT("平滑的");
+ LSTR MSG_TMC_DRIVERS = _UxGT("TMC驱动器");
+ LSTR MSG_TMC_CURRENT = _UxGT("驱动电流");
+ LSTR MSG_TMC_HYBRID_THRS = _UxGT("混合阈值");
+ LSTR MSG_TMC_HOMING_THRS = _UxGT("无感回零");
+ LSTR MSG_TMC_STEPPING_MODE = _UxGT("步进模式");
+ LSTR MSG_TMC_STEALTH_ENABLED = _UxGT("StealthChop已使能");
+ LSTR MSG_SERVICE_RESET = _UxGT("复位");
+ LSTR MSG_SERVICE_IN = _UxGT(" 在:");
+ LSTR MSG_BACKLASH = _UxGT("回差");
+ LSTR MSG_BACKLASH_CORRECTION = _UxGT("校正");
+ LSTR MSG_BACKLASH_SMOOTHING = _UxGT("平滑的");
- PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("X轴调平");
- PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("自动校准");
- PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("加热器超时");
- PROGMEM Language_Str MSG_REHEAT = _UxGT("重新加热");
- PROGMEM Language_Str MSG_REHEATING = _UxGT("重新加热中...");
+ LSTR MSG_LEVEL_X_AXIS = _UxGT("X轴调平");
+ LSTR MSG_AUTO_CALIBRATE = _UxGT("自动校准");
+ LSTR MSG_HEATER_TIMEOUT = _UxGT("加热器超时");
+ LSTR MSG_REHEAT = _UxGT("重新加热");
+ LSTR MSG_REHEATING = _UxGT("重新加热中...");
}
#if FAN_COUNT == 1
diff --git a/Marlin/src/lcd/language/language_zh_TW.h b/Marlin/src/lcd/language/language_zh_TW.h
index 467a2467f5..01b11225e3 100644
--- a/Marlin/src/lcd/language/language_zh_TW.h
+++ b/Marlin/src/lcd/language/language_zh_TW.h
@@ -30,483 +30,481 @@
namespace Language_zh_TW {
using namespace Language_en; // Inherit undefined strings from English
- constexpr uint8_t CHARSIZE = 3;
- PROGMEM Language_Str LANGUAGE = _UxGT("Traditional Chinese");
+ constexpr uint8_t CHARSIZE = 3;
+ LSTR LANGUAGE = _UxGT("Traditional Chinese");
- PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT("已就緒."); // " ready."
- PROGMEM Language_Str MSG_MARLIN = _UxGT("Marlin");
- PROGMEM Language_Str MSG_YES = _UxGT("是"); // "YES"
- PROGMEM Language_Str MSG_NO = _UxGT("否"); // "NO"
- PROGMEM Language_Str MSG_BACK = _UxGT("返回"); // "Back"
- PROGMEM Language_Str MSG_MEDIA_ABORTING = _UxGT("正在中止..."); // "Aborting..."
- PROGMEM Language_Str MSG_MEDIA_INSERTED = _UxGT("記憶卡已插入"); // "Card inserted"
- PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("記憶卡被拔出"); // "Card removed"
- PROGMEM Language_Str MSG_MEDIA_WAITING = _UxGT("等待記憶卡"); // "Waiting for media"
- PROGMEM Language_Str MSG_MEDIA_READ_ERROR = _UxGT("記憶卡讀取錯誤"); //"Media read error"
- PROGMEM Language_Str MSG_MEDIA_USB_REMOVED = _UxGT("USB裝置已移除"); // "USB device removed"
- PROGMEM Language_Str MSG_MEDIA_USB_FAILED = _UxGT("USB啟動失敗"); // "USB start failed"
- PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("擋塊"); // "Endstops" // Max length 8 characters
- PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("軟體擋塊"); // "Soft Endstops"
- PROGMEM Language_Str MSG_MAIN = _UxGT("主選單"); // "Main"
- PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("進階設置"); // "Advanced Settings"
- PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("設置"); //Configuration
- PROGMEM Language_Str MSG_RUN_AUTO_FILES = _UxGT("自動開始"); // "Autostart"
- PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("關閉步進馬達"); // "Disable steppers"
- PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("除錯選單"); // "Debug Menu"
- PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("進度條測試"); // "Progress Bar Test"
- PROGMEM Language_Str MSG_AUTO_HOME = _UxGT("自動回原點"); // "Auto home"
- PROGMEM Language_Str MSG_AUTO_HOME_X = _UxGT("回X原點"); // "Home X"
- PROGMEM Language_Str MSG_AUTO_HOME_Y = _UxGT("回Y原點"); // "Home Y"
- PROGMEM Language_Str MSG_AUTO_HOME_Z = _UxGT("回Z原點"); // "Home Z"
- PROGMEM Language_Str MSG_AUTO_Z_ALIGN = _UxGT("自動Z對齊"); // "Auto Z-Align"
- PROGMEM Language_Str MSG_LEVEL_BED_HOMING = _UxGT("平台調平XYZ歸原點"); // "Homing XYZ"
- PROGMEM Language_Str MSG_LEVEL_BED_WAITING = _UxGT("單擊開始熱床調平"); // "Click to Begin"
- PROGMEM Language_Str MSG_LEVEL_BED_NEXT_POINT = _UxGT("下個熱床調平點"); // "Next Point"
- PROGMEM Language_Str MSG_LEVEL_BED_DONE = _UxGT("完成熱床調平"); // "Leveling Done!"
- PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
- PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("設置原點偏移"); // "Set home offsets"
- PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已啟用"); // "Offsets applied"
- PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("設置原點"); // "Set origin"
+ LSTR WELCOME_MSG = MACHINE_NAME _UxGT("已就緒."); // " ready."
+ LSTR MSG_YES = _UxGT("是"); // "YES"
+ LSTR MSG_NO = _UxGT("否"); // "NO"
+ LSTR MSG_BACK = _UxGT("返回"); // "Back"
+ LSTR MSG_MEDIA_ABORTING = _UxGT("正在中止..."); // "Aborting..."
+ LSTR MSG_MEDIA_INSERTED = _UxGT("記憶卡已插入"); // "Card inserted"
+ LSTR MSG_MEDIA_REMOVED = _UxGT("記憶卡被拔出"); // "Card removed"
+ LSTR MSG_MEDIA_WAITING = _UxGT("等待記憶卡"); // "Waiting for media"
+ LSTR MSG_MEDIA_READ_ERROR = _UxGT("記憶卡讀取錯誤"); //"Media read error"
+ LSTR MSG_MEDIA_USB_REMOVED = _UxGT("USB裝置已移除"); // "USB device removed"
+ LSTR MSG_MEDIA_USB_FAILED = _UxGT("USB啟動失敗"); // "USB start failed"
+ LSTR MSG_LCD_ENDSTOPS = _UxGT("擋塊"); // "Endstops" // Max length 8 characters
+ LSTR MSG_LCD_SOFT_ENDSTOPS = _UxGT("軟體擋塊"); // "Soft Endstops"
+ LSTR MSG_MAIN = _UxGT("主選單"); // "Main"
+ LSTR MSG_ADVANCED_SETTINGS = _UxGT("進階設置"); // "Advanced Settings"
+ LSTR MSG_CONFIGURATION = _UxGT("設置"); //Configuration
+ LSTR MSG_RUN_AUTO_FILES = _UxGT("自動開始"); // "Autostart"
+ LSTR MSG_DISABLE_STEPPERS = _UxGT("關閉步進馬達"); // "Disable steppers"
+ LSTR MSG_DEBUG_MENU = _UxGT("除錯選單"); // "Debug Menu"
+ LSTR MSG_PROGRESS_BAR_TEST = _UxGT("進度條測試"); // "Progress Bar Test"
+ LSTR MSG_AUTO_HOME = _UxGT("自動回原點"); // "Auto home"
+ LSTR MSG_AUTO_HOME_X = _UxGT("回X原點"); // "Home X"
+ LSTR MSG_AUTO_HOME_Y = _UxGT("回Y原點"); // "Home Y"
+ LSTR MSG_AUTO_HOME_Z = _UxGT("回Z原點"); // "Home Z"
+ LSTR MSG_AUTO_Z_ALIGN = _UxGT("自動Z對齊"); // "Auto Z-Align"
+ LSTR MSG_LEVEL_BED_HOMING = _UxGT("平台調平XYZ歸原點"); // "Homing XYZ"
+ LSTR MSG_LEVEL_BED_WAITING = _UxGT("單擊開始熱床調平"); // "Click to Begin"
+ LSTR MSG_LEVEL_BED_NEXT_POINT = _UxGT("下個熱床調平點"); // "Next Point"
+ LSTR MSG_LEVEL_BED_DONE = _UxGT("完成熱床調平"); // "Leveling Done!"
+ LSTR MSG_Z_FADE_HEIGHT = _UxGT("淡出高度"); // "Fade Height"
+ LSTR MSG_SET_HOME_OFFSETS = _UxGT("設置原點偏移"); // "Set home offsets"
+ LSTR MSG_HOME_OFFSETS_APPLIED = _UxGT("偏移已啟用"); // "Offsets applied"
+ LSTR MSG_SET_ORIGIN = _UxGT("設置原點"); // "Set origin"
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_PREHEAT_1 = _UxGT("預熱 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_1_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_1_H = _UxGT("預熱 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_1_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_1_END = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_1_END_E = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ~"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_1_ALL = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
- PROGMEM Language_Str MSG_PREHEAT_1_BEDONLY = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 熱床"); //MSG_PREHEAT_1 " Bed"
- PROGMEM Language_Str MSG_PREHEAT_1_SETTINGS = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 設置"); //MSG_PREHEAT_1 " conf"
+ LSTR MSG_PREHEAT_1 = _UxGT("預熱 ") PREHEAT_1_LABEL; // "Preheat PREHEAT_1_LABEL"
+ LSTR MSG_PREHEAT_1_H = _UxGT("預熱 ") PREHEAT_1_LABEL " ~"; // "Preheat PREHEAT_1_LABEL"
+ LSTR MSG_PREHEAT_1_END = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_1_END_E = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 噴嘴 ~"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_1_ALL = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 全部"); //MSG_PREHEAT_1 " All"
+ LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 熱床"); //MSG_PREHEAT_1 " Bed"
+ LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("預熱 ") PREHEAT_1_LABEL _UxGT(" 設置"); //MSG_PREHEAT_1 " conf"
- PROGMEM Language_Str MSG_PREHEAT_M = _UxGT("預熱 $"); // "Preheat PREHEAT_1_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_M_H = _UxGT("預熱 $ ~"); // "Preheat PREHEAT_1_LABEL"
- PROGMEM Language_Str MSG_PREHEAT_M_END = _UxGT("預熱 $ 噴嘴"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_M_END_E = _UxGT("預熱 $ 噴嘴 ~"); //MSG_PREHEAT_1 " "
- PROGMEM Language_Str MSG_PREHEAT_M_ALL = _UxGT("預熱 $ 全部"); //MSG_PREHEAT_1 " All"
- PROGMEM Language_Str MSG_PREHEAT_M_BEDONLY = _UxGT("預熱 $ 熱床"); //MSG_PREHEAT_1 " Bed"
- PROGMEM Language_Str MSG_PREHEAT_M_SETTINGS = _UxGT("預熱 $ 設置"); //MSG_PREHEAT_1 " conf"
+ LSTR MSG_PREHEAT_M = _UxGT("預熱 $"); // "Preheat PREHEAT_1_LABEL"
+ LSTR MSG_PREHEAT_M_H = _UxGT("預熱 $ ~"); // "Preheat PREHEAT_1_LABEL"
+ LSTR MSG_PREHEAT_M_END = _UxGT("預熱 $ 噴嘴"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_M_END_E = _UxGT("預熱 $ 噴嘴 ~"); //MSG_PREHEAT_1 " "
+ LSTR MSG_PREHEAT_M_ALL = _UxGT("預熱 $ 全部"); //MSG_PREHEAT_1 " All"
+ LSTR MSG_PREHEAT_M_BEDONLY = _UxGT("預熱 $ 熱床"); //MSG_PREHEAT_1 " Bed"
+ LSTR MSG_PREHEAT_M_SETTINGS = _UxGT("預熱 $ 設置"); //MSG_PREHEAT_1 " conf"
#endif
- PROGMEM Language_Str MSG_PREHEAT_CUSTOM = _UxGT("自定預熱"); // "Preheat Custom"
- PROGMEM Language_Str MSG_COOLDOWN = _UxGT("降溫"); // "Cooldown"
- PROGMEM Language_Str MSG_LASER_MENU = _UxGT("激光控制"); // "Laser Control"
- PROGMEM Language_Str MSG_LASER_POWER = _UxGT("激光電源"); // "Laser Power"
- PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("主軸控告制"); // "Spindle Control"
- PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("主軸電源"); // "Spindle Power"
- PROGMEM Language_Str MSG_SPINDLE_REVERSE = _UxGT("主軸反轉"); // "Spindle Reverse"
- PROGMEM Language_Str MSG_SWITCH_PS_ON = _UxGT("電源打開"); // "Switch power on"
- PROGMEM Language_Str MSG_SWITCH_PS_OFF = _UxGT("電源關閉"); // "Switch power off"
- PROGMEM Language_Str MSG_EXTRUDE = _UxGT("擠出"); // "Extrude"
- PROGMEM Language_Str MSG_RETRACT = _UxGT("回縮"); // "Retract"
- PROGMEM Language_Str MSG_MOVE_AXIS = _UxGT("移動軸"); // "Move axis"
- PROGMEM Language_Str MSG_BED_LEVELING = _UxGT("調平熱床"); // "Bed leveling"
- PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("調平熱床"); // "Level bed"
- PROGMEM Language_Str MSG_BED_TRAMMING = _UxGT("調平邊角"); // "Bed Tramming"
- PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("下個邊角"); // "Next corner"
- PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("網格編輯器"); // "Mesh Editor"
- PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("編輯網格"); // "Edit Mesh"
- PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("網格編輯已停止"); // "Mesh Editing Stopped"
- PROGMEM Language_Str MSG_PROBING_POINT = _UxGT("探測點"); // "Probing Point"
- PROGMEM Language_Str MSG_MESH_X = _UxGT("索引 X"); // "Index X"
- PROGMEM Language_Str MSG_MESH_Y = _UxGT("索引 Y"); // "Index Y"
- PROGMEM Language_Str MSG_MESH_EDIT_Z = _UxGT("Z 值"); // "Z Value"
- PROGMEM Language_Str MSG_CUSTOM_COMMANDS = _UxGT("自定命令"); // "Custom Commands"
- PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 探測測試"); // "M48 Probe Test"
- PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 探測點"); // "M48 Point"
- PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("偏差"); // "Deviation"
- PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("IDEX Mode");
- PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
- PROGMEM Language_Str MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
- PROGMEM Language_Str MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
- PROGMEM Language_Str MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
- PROGMEM Language_Str MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2nd Nozzle X");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Y = _UxGT("2nd Nozzle Y");
- PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
- PROGMEM Language_Str MSG_UBL_DOING_G29 = _UxGT("執行G29"); // "Doing G29"
- PROGMEM Language_Str MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
- PROGMEM Language_Str MSG_UBL_LEVEL_BED = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
- PROGMEM Language_Str MSG_LCD_TILTING_MESH = _UxGT("傾斜點"); // "Tilting Point"
- PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("手工建網"); // "Manually Build Mesh"
- PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("放置墊片並測量"); // "Place shim & measure"
- PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("測量"); // "Measure"
- PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("移除並測量熱床"); // "Remove & measure bed"
- PROGMEM Language_Str MSG_UBL_MOVING_TO_NEXT = _UxGT("移動到下一個"); // "Moving to next"
- PROGMEM Language_Str MSG_UBL_ACTIVATE_MESH = _UxGT("啟動UBL"); // "Activate UBL"
- PROGMEM Language_Str MSG_UBL_DEACTIVATE_MESH = _UxGT("關閉UBL"); // "Deactivate UBL"
- PROGMEM Language_Str MSG_UBL_SET_TEMP_BED = _UxGT("置設熱床溫度"); // "Bed Temp"
- PROGMEM Language_Str MSG_UBL_BED_TEMP_CUSTOM = _UxGT("置設熱床溫度"); // "Bed Temp")
- PROGMEM Language_Str MSG_UBL_SET_TEMP_HOTEND = _UxGT("置設噴嘴溫度"); // "Hotend Temp"
- PROGMEM Language_Str MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("熱端溫度"); // "Hotend Temp"
- PROGMEM Language_Str MSG_UBL_MESH_EDIT = _UxGT("網格編輯"); // "Mesh Edit"
- PROGMEM Language_Str MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("編輯客戶網格"); // "Edit Custom Mesh"
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("細調網格"); // "Fine Tuning Mesh"
- PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("完成編輯網格"); // "Done Editing Mesh"
- PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("創設客戶網格"); // "Build Custom Mesh"
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("創設網格"); // "Build Mesh"
+ LSTR MSG_PREHEAT_CUSTOM = _UxGT("自定預熱"); // "Preheat Custom"
+ LSTR MSG_COOLDOWN = _UxGT("降溫"); // "Cooldown"
+ LSTR MSG_LASER_MENU = _UxGT("激光控制"); // "Laser Control"
+ LSTR MSG_LASER_POWER = _UxGT("激光電源"); // "Laser Power"
+ LSTR MSG_SPINDLE_MENU = _UxGT("主軸控告制"); // "Spindle Control"
+ LSTR MSG_SPINDLE_POWER = _UxGT("主軸電源"); // "Spindle Power"
+ LSTR MSG_SPINDLE_REVERSE = _UxGT("主軸反轉"); // "Spindle Reverse"
+ LSTR MSG_SWITCH_PS_ON = _UxGT("電源打開"); // "Switch power on"
+ LSTR MSG_SWITCH_PS_OFF = _UxGT("電源關閉"); // "Switch power off"
+ LSTR MSG_EXTRUDE = _UxGT("擠出"); // "Extrude"
+ LSTR MSG_RETRACT = _UxGT("回縮"); // "Retract"
+ LSTR MSG_MOVE_AXIS = _UxGT("移動軸"); // "Move axis"
+ LSTR MSG_BED_LEVELING = _UxGT("調平熱床"); // "Bed leveling"
+ LSTR MSG_LEVEL_BED = _UxGT("調平熱床"); // "Level bed"
+ LSTR MSG_BED_TRAMMING = _UxGT("調平邊角"); // "Bed Tramming"
+ LSTR MSG_NEXT_CORNER = _UxGT("下個邊角"); // "Next corner"
+ LSTR MSG_MESH_EDITOR = _UxGT("網格編輯器"); // "Mesh Editor"
+ LSTR MSG_EDIT_MESH = _UxGT("編輯網格"); // "Edit Mesh"
+ LSTR MSG_EDITING_STOPPED = _UxGT("網格編輯已停止"); // "Mesh Editing Stopped"
+ LSTR MSG_PROBING_POINT = _UxGT("探測點"); // "Probing Point"
+ LSTR MSG_MESH_X = _UxGT("索引 X"); // "Index X"
+ LSTR MSG_MESH_Y = _UxGT("索引 Y"); // "Index Y"
+ LSTR MSG_MESH_EDIT_Z = _UxGT("Z 值"); // "Z Value"
+ LSTR MSG_CUSTOM_COMMANDS = _UxGT("自定命令"); // "Custom Commands"
+ LSTR MSG_M48_TEST = _UxGT("M48 探測測試"); // "M48 Probe Test"
+ LSTR MSG_M48_POINT = _UxGT("M48 探測點"); // "M48 Point"
+ LSTR MSG_M48_DEVIATION = _UxGT("偏差"); // "Deviation"
+ LSTR MSG_IDEX_MENU = _UxGT("IDEX Mode");
+ LSTR MSG_OFFSETS_MENU = _UxGT("Tool Offsets");
+ LSTR MSG_IDEX_MODE_AUTOPARK = _UxGT("Auto-Park");
+ LSTR MSG_IDEX_MODE_DUPLICATE = _UxGT("Duplication");
+ LSTR MSG_IDEX_MODE_MIRRORED_COPY = _UxGT("Mirrored Copy");
+ LSTR MSG_IDEX_MODE_FULL_CTRL = _UxGT("Full Control");
+ LSTR MSG_HOTEND_OFFSET_Z = _UxGT("2nd Nozzle Z");
+ LSTR MSG_HOTEND_OFFSET_A = _UxGT("2nd Nozzle @");
+ LSTR MSG_UBL_DOING_G29 = _UxGT("執行G29"); // "Doing G29"
+ LSTR MSG_UBL_TOOLS = _UxGT("UBL工具"); // "UBL Tools"
+ LSTR MSG_UBL_LEVEL_BED = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
+ LSTR MSG_LCD_TILTING_MESH = _UxGT("傾斜點"); // "Tilting Point"
+ LSTR MSG_UBL_MANUAL_MESH = _UxGT("手工建網"); // "Manually Build Mesh"
+ LSTR MSG_UBL_BC_INSERT = _UxGT("放置墊片並測量"); // "Place shim & measure"
+ LSTR MSG_UBL_BC_INSERT2 = _UxGT("測量"); // "Measure"
+ LSTR MSG_UBL_BC_REMOVE = _UxGT("移除並測量熱床"); // "Remove & measure bed"
+ LSTR MSG_UBL_MOVING_TO_NEXT = _UxGT("移動到下一個"); // "Moving to next"
+ LSTR MSG_UBL_ACTIVATE_MESH = _UxGT("啟動UBL"); // "Activate UBL"
+ LSTR MSG_UBL_DEACTIVATE_MESH = _UxGT("關閉UBL"); // "Deactivate UBL"
+ LSTR MSG_UBL_SET_TEMP_BED = _UxGT("置設熱床溫度"); // "Bed Temp"
+ LSTR MSG_UBL_BED_TEMP_CUSTOM = _UxGT("置設熱床溫度"); // "Bed Temp")
+ LSTR MSG_UBL_SET_TEMP_HOTEND = _UxGT("置設噴嘴溫度"); // "Hotend Temp"
+ LSTR MSG_UBL_HOTEND_TEMP_CUSTOM = _UxGT("熱端溫度"); // "Hotend Temp"
+ LSTR MSG_UBL_MESH_EDIT = _UxGT("網格編輯"); // "Mesh Edit"
+ LSTR MSG_UBL_EDIT_CUSTOM_MESH = _UxGT("編輯客戶網格"); // "Edit Custom Mesh"
+ LSTR MSG_UBL_FINE_TUNE_MESH = _UxGT("細調網格"); // "Fine Tuning Mesh"
+ LSTR MSG_UBL_DONE_EDITING_MESH = _UxGT("完成編輯網格"); // "Done Editing Mesh"
+ LSTR MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("創設客戶網格"); // "Build Custom Mesh"
+ LSTR MSG_UBL_BUILD_MESH_MENU = _UxGT("創設網格"); // "Build Mesh"
#if PREHEAT_COUNT
- PROGMEM Language_Str MSG_UBL_BUILD_MESH_M = _UxGT("創設 $ 網格"); // "Build PREHEAT_1_LABEL Mesh"
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 網格"); // "Validate PREHEAT_1_LABEL Mesh"
+ LSTR MSG_UBL_BUILD_MESH_M = _UxGT("創設 $ 網格"); // "Build PREHEAT_1_LABEL Mesh"
+ LSTR MSG_UBL_VALIDATE_MESH_M = _UxGT("批准 $ 網格"); // "Validate PREHEAT_1_LABEL Mesh"
#endif
- PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("創設冷網格"); // "Build Cold Mesh"
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("調整網格高度"); // "Adjust Mesh Height"
- PROGMEM Language_Str MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合計"); // "Height Amount"
- PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准網格"); // "Validate Mesh"
- PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客戶網格"); // "Validate Custom Mesh"
- PROGMEM Language_Str MSG_G26_HEATING_BED = _UxGT("G26 加熱熱床"); // "G26 Heating Bed"
- PROGMEM Language_Str MSG_G26_HEATING_NOZZLE = _UxGT("G26 加熱噴嘴"); //"G26 Heating Nozzle"
- PROGMEM Language_Str MSG_G26_MANUAL_PRIME = _UxGT("手動填裝"); // "Manual priming..."
- PROGMEM Language_Str MSG_G26_FIXED_LENGTH = _UxGT("固定距離填裝"); // "Fixed Length Prime"
- PROGMEM Language_Str MSG_G26_PRIME_DONE = _UxGT("完成填裝"); // "Done Priming"
- PROGMEM Language_Str MSG_G26_CANCELED = _UxGT("G26已取消"); // "G26 Canceled"
- PROGMEM Language_Str MSG_G26_LEAVING = _UxGT("離開 G26"); // "Leaving G26"
- PROGMEM Language_Str MSG_UBL_CONTINUE_MESH = _UxGT("繼續熱床網格"); // "Continue Bed Mesh"
- PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
- PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
- PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子網格調平"); // "Grid Mesh Leveling"
- PROGMEM Language_Str MSG_UBL_MESH_LEVEL = _UxGT("調平網格"); // "Level Mesh"
- PROGMEM Language_Str MSG_UBL_SIDE_POINTS = _UxGT("邊點"); // "Side Points"
- PROGMEM Language_Str MSG_UBL_MAP_TYPE = _UxGT("圖類型"); // "Map Type"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP = _UxGT("輸出網格圖"); // "Output Mesh Map"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_HOST = _UxGT("輸出到主機"); // "Output for Host"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_CSV = _UxGT("輸出到CSV"); // "Output for CSV"
- PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("輸出到備份"); // "Off Printer Backup"
- PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("輸出UBL信息"); // "Output UBL Info"
- PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合計"); // "Fill-in Amount"
- PROGMEM Language_Str MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
- PROGMEM Language_Str MSG_UBL_SMART_FILLIN = _UxGT("聰明填充"); // "Smart Fill-in"
- PROGMEM Language_Str MSG_UBL_FILLIN_MESH = _UxGT("填充網格"); // "Fill-in Mesh"
- PROGMEM Language_Str MSG_UBL_INVALIDATE_ALL = _UxGT("作廢所有的"); // "Invalidate All"
- PROGMEM Language_Str MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作廢最近的"); // "Invalidate Closest"
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_ALL = _UxGT("細調所有的"); // "Fine Tune All"
- PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("細調最近的"); // "Fine Tune Closest"
- PROGMEM Language_Str MSG_UBL_STORAGE_MESH_MENU = _UxGT("網格存儲"); // "Mesh Storage"
- PROGMEM Language_Str MSG_UBL_STORAGE_SLOT = _UxGT("存儲槽"); // "Memory Slot"
- PROGMEM Language_Str MSG_UBL_LOAD_MESH = _UxGT("裝載熱床網格"); // "Load Bed Mesh"
- PROGMEM Language_Str MSG_UBL_SAVE_MESH = _UxGT("保存熱床網格"); // "Save Bed Mesh"
- PROGMEM Language_Str MSG_MESH_LOADED = _UxGT("網格 %i 已裝載"); // "Mesh %i loaded"
- PROGMEM Language_Str MSG_MESH_SAVED = _UxGT("網格 %i 已保存"); // "Mesh %i saved"
- PROGMEM Language_Str MSG_UBL_NO_STORAGE = _UxGT("沒有存儲"); // "No storage"
- PROGMEM Language_Str MSG_UBL_SAVE_ERROR = _UxGT("錯誤: UBL保存"); // "Err: UBL Save"
- PROGMEM Language_Str MSG_UBL_RESTORE_ERROR = _UxGT("錯誤: UBL還原"); // "Err: UBL Restore"
- PROGMEM Language_Str MSG_UBL_Z_OFFSET = _UxGT("Z-偏移:"); // "Z-Offset: "
- PROGMEM Language_Str MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
- PROGMEM Language_Str MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
- PROGMEM Language_Str MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 創設冷網格");
- PROGMEM Language_Str MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聰明填充");
- PROGMEM Language_Str MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准網格");
- PROGMEM Language_Str MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 細調所有的");
- PROGMEM Language_Str MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准網格");
- PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 細調所有的");
- PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存熱床網格");
+ LSTR MSG_UBL_BUILD_COLD_MESH = _UxGT("創設冷網格"); // "Build Cold Mesh"
+ LSTR MSG_UBL_MESH_HEIGHT_ADJUST = _UxGT("調整網格高度"); // "Adjust Mesh Height"
+ LSTR MSG_UBL_MESH_HEIGHT_AMOUNT = _UxGT("高度合計"); // "Height Amount"
+ LSTR MSG_UBL_VALIDATE_MESH_MENU = _UxGT("批准網格"); // "Validate Mesh"
+ LSTR MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("批准客戶網格"); // "Validate Custom Mesh"
+ LSTR MSG_G26_HEATING_BED = _UxGT("G26 加熱熱床"); // "G26 Heating Bed"
+ LSTR MSG_G26_HEATING_NOZZLE = _UxGT("G26 加熱噴嘴"); //"G26 Heating Nozzle"
+ LSTR MSG_G26_MANUAL_PRIME = _UxGT("手動填裝"); // "Manual priming..."
+ LSTR MSG_G26_FIXED_LENGTH = _UxGT("固定距離填裝"); // "Fixed Length Prime"
+ LSTR MSG_G26_PRIME_DONE = _UxGT("完成填裝"); // "Done Priming"
+ LSTR MSG_G26_CANCELED = _UxGT("G26已取消"); // "G26 Canceled"
+ LSTR MSG_G26_LEAVING = _UxGT("離開 G26"); // "Leaving G26"
+ LSTR MSG_UBL_CONTINUE_MESH = _UxGT("繼續熱床網格"); // "Continue Bed Mesh"
+ LSTR MSG_UBL_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
+ LSTR MSG_UBL_3POINT_MESH_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
+ LSTR MSG_UBL_GRID_MESH_LEVELING = _UxGT("格子網格調平"); // "Grid Mesh Leveling"
+ LSTR MSG_UBL_MESH_LEVEL = _UxGT("調平網格"); // "Level Mesh"
+ LSTR MSG_UBL_SIDE_POINTS = _UxGT("邊點"); // "Side Points"
+ LSTR MSG_UBL_MAP_TYPE = _UxGT("圖類型"); // "Map Type"
+ LSTR MSG_UBL_OUTPUT_MAP = _UxGT("輸出網格圖"); // "Output Mesh Map"
+ LSTR MSG_UBL_OUTPUT_MAP_HOST = _UxGT("輸出到主機"); // "Output for Host"
+ LSTR MSG_UBL_OUTPUT_MAP_CSV = _UxGT("輸出到CSV"); // "Output for CSV"
+ LSTR MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("輸出到備份"); // "Off Printer Backup"
+ LSTR MSG_UBL_INFO_UBL = _UxGT("輸出UBL信息"); // "Output UBL Info"
+ LSTR MSG_UBL_FILLIN_AMOUNT = _UxGT("填充合計"); // "Fill-in Amount"
+ LSTR MSG_UBL_MANUAL_FILLIN = _UxGT("手工填充"); // "Manual Fill-in"
+ LSTR MSG_UBL_SMART_FILLIN = _UxGT("聰明填充"); // "Smart Fill-in"
+ LSTR MSG_UBL_FILLIN_MESH = _UxGT("填充網格"); // "Fill-in Mesh"
+ LSTR MSG_UBL_INVALIDATE_ALL = _UxGT("作廢所有的"); // "Invalidate All"
+ LSTR MSG_UBL_INVALIDATE_CLOSEST = _UxGT("作廢最近的"); // "Invalidate Closest"
+ LSTR MSG_UBL_FINE_TUNE_ALL = _UxGT("細調所有的"); // "Fine Tune All"
+ LSTR MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("細調最近的"); // "Fine Tune Closest"
+ LSTR MSG_UBL_STORAGE_MESH_MENU = _UxGT("網格存儲"); // "Mesh Storage"
+ LSTR MSG_UBL_STORAGE_SLOT = _UxGT("存儲槽"); // "Memory Slot"
+ LSTR MSG_UBL_LOAD_MESH = _UxGT("裝載熱床網格"); // "Load Bed Mesh"
+ LSTR MSG_UBL_SAVE_MESH = _UxGT("保存熱床網格"); // "Save Bed Mesh"
+ LSTR MSG_MESH_LOADED = _UxGT("網格 %i 已裝載"); // "Mesh %i loaded"
+ LSTR MSG_MESH_SAVED = _UxGT("網格 %i 已保存"); // "Mesh %i saved"
+ LSTR MSG_UBL_NO_STORAGE = _UxGT("沒有存儲"); // "No storage"
+ LSTR MSG_UBL_SAVE_ERROR = _UxGT("錯誤: UBL保存"); // "Err: UBL Save"
+ LSTR MSG_UBL_RESTORE_ERROR = _UxGT("錯誤: UBL還原"); // "Err: UBL Restore"
+ LSTR MSG_UBL_Z_OFFSET = _UxGT("Z-偏移:"); // "Z-Offset: "
+ LSTR MSG_UBL_Z_OFFSET_STOPPED = _UxGT("Z偏移已停止"); // "Z-Offset Stopped"
+ LSTR MSG_UBL_STEP_BY_STEP_MENU = _UxGT("一步步UBL"); // "Step-By-Step UBL"
+ LSTR MSG_UBL_1_BUILD_COLD_MESH = _UxGT("1. 創設冷網格");
+ LSTR MSG_UBL_2_SMART_FILLIN = _UxGT("2. 聰明填充");
+ LSTR MSG_UBL_3_VALIDATE_MESH_MENU = _UxGT("3. 批准網格");
+ LSTR MSG_UBL_4_FINE_TUNE_ALL = _UxGT("4. 細調所有的");
+ LSTR MSG_UBL_5_VALIDATE_MESH_MENU = _UxGT("5. 批准網格");
+ LSTR MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6. 細調所有的");
+ LSTR MSG_UBL_7_SAVE_MESH = _UxGT("7. 保存熱床網格");
- PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("燈管控制"); // "LED Control")
- PROGMEM Language_Str MSG_LEDS = _UxGT("燈"); // "Lights")
- PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("燈預置"); // "Light Presets")
- PROGMEM Language_Str MSG_SET_LEDS_RED = _UxGT("红"); // "Red")
- PROGMEM Language_Str MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange")
- PROGMEM Language_Str MSG_SET_LEDS_YELLOW = _UxGT("黃"); // "Yellow")
- PROGMEM Language_Str MSG_SET_LEDS_GREEN = _UxGT("綠"); // "Green")
- PROGMEM Language_Str MSG_SET_LEDS_BLUE = _UxGT("藍"); // "Blue")
- PROGMEM Language_Str MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo")
- PROGMEM Language_Str MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet")
- PROGMEM Language_Str MSG_SET_LEDS_WHITE = _UxGT("白"); // "White")
- PROGMEM Language_Str MSG_SET_LEDS_DEFAULT = _UxGT("復歸"); // "Default")
- PROGMEM Language_Str MSG_CUSTOM_LEDS = _UxGT("定制燈"); // "Custom Lights")
- PROGMEM Language_Str MSG_INTENSITY_R = _UxGT("紅飽和度"); // "Red Intensity")
- PROGMEM Language_Str MSG_INTENSITY_G = _UxGT("綠飽和度"); // "Green Intensity")
- PROGMEM Language_Str MSG_INTENSITY_B = _UxGT("藍飽和度"); // "Blue Intensity")
- PROGMEM Language_Str MSG_INTENSITY_W = _UxGT("白飽和度"); // "White Intensity")
- PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
+ LSTR MSG_LED_CONTROL = _UxGT("燈管控制"); // "LED Control")
+ LSTR MSG_LEDS = _UxGT("燈"); // "Lights")
+ LSTR MSG_LED_PRESETS = _UxGT("燈預置"); // "Light Presets")
+ LSTR MSG_SET_LEDS_RED = _UxGT("红"); // "Red")
+ LSTR MSG_SET_LEDS_ORANGE = _UxGT("橙"); // "Orange")
+ LSTR MSG_SET_LEDS_YELLOW = _UxGT("黃"); // "Yellow")
+ LSTR MSG_SET_LEDS_GREEN = _UxGT("綠"); // "Green")
+ LSTR MSG_SET_LEDS_BLUE = _UxGT("藍"); // "Blue")
+ LSTR MSG_SET_LEDS_INDIGO = _UxGT("青"); // "Indigo")
+ LSTR MSG_SET_LEDS_VIOLET = _UxGT("紫"); // "Violet")
+ LSTR MSG_SET_LEDS_WHITE = _UxGT("白"); // "White")
+ LSTR MSG_SET_LEDS_DEFAULT = _UxGT("復歸"); // "Default")
+ LSTR MSG_CUSTOM_LEDS = _UxGT("定制燈"); // "Custom Lights")
+ LSTR MSG_INTENSITY_R = _UxGT("紅飽和度"); // "Red Intensity")
+ LSTR MSG_INTENSITY_G = _UxGT("綠飽和度"); // "Green Intensity")
+ LSTR MSG_INTENSITY_B = _UxGT("藍飽和度"); // "Blue Intensity")
+ LSTR MSG_INTENSITY_W = _UxGT("白飽和度"); // "White Intensity")
+ LSTR MSG_LED_BRIGHTNESS = _UxGT("亮度"); // "Brightness")
- PROGMEM Language_Str MSG_MOVING = _UxGT("移動 ..."); // "Moving...")
- PROGMEM Language_Str MSG_FREE_XY = _UxGT("釋放 XY"); // "Free XY")
- PROGMEM Language_Str MSG_MOVE_X = _UxGT("移動X"); // "Move X"
- PROGMEM Language_Str MSG_MOVE_Y = _UxGT("移動Y"); // "Move Y"
- PROGMEM Language_Str MSG_MOVE_Z = _UxGT("移動Z"); // "Move Z"
- PROGMEM Language_Str MSG_MOVE_E = _UxGT("擠出機"); // "Extruder"
- PROGMEM Language_Str MSG_MOVE_EN = _UxGT("擠出機 *"); // "Extruder *"
- PROGMEM Language_Str MSG_HOTEND_TOO_COLD = _UxGT("噴嘴溫度不夠"); // "Hotend too cold"
- PROGMEM Language_Str MSG_MOVE_N_MM = _UxGT("移動 %s mm"); // "Move 0.025mm"
- PROGMEM Language_Str MSG_MOVE_01MM = _UxGT("移動 0.1 mm"); // "Move 0.1mm"
- PROGMEM Language_Str MSG_MOVE_1MM = _UxGT("移動 1 mm"); // "Move 1mm"
- PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("移動 10 mm"); // "Move 10mm"
- PROGMEM Language_Str MSG_MOVE_100MM = _UxGT("移動 100 mm"); // "Move 100mm"
- PROGMEM Language_Str MSG_SPEED = _UxGT("速率"); // "Speed"
- PROGMEM Language_Str MSG_BED_Z = _UxGT("熱床Z"); // "Bed Z"
- PROGMEM Language_Str MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴"); // "Nozzle" 噴嘴
- PROGMEM Language_Str MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ~");
- PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 熱床"); // "Bed"
- PROGMEM Language_Str MSG_CHAMBER = _UxGT("Enclosure");
- PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("風扇速率"); // "Fan speed"
- PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("風扇速率 =");
- PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Stored Fan =");
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("額外風扇速率"); // "Extra fan speed"
- PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("額外風扇速率 =");
- PROGMEM Language_Str MSG_FLOW = _UxGT("擠出速率");
- PROGMEM Language_Str MSG_FLOW_N = _UxGT("擠出速率 ~"); // "Flow"
- PROGMEM Language_Str MSG_CONTROL = _UxGT("控制"); // "Control"
- PROGMEM Language_Str MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); // " " LCD_STR_THERMOMETER " Min"
- PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); // " " LCD_STR_THERMOMETER " Max"
- PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 系數"); // " " LCD_STR_THERMOMETER " Fact"
- PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("自動控溫"); // "Autotemp"
- PROGMEM Language_Str MSG_LCD_ON = _UxGT("開 "); // "On"
- PROGMEM Language_Str MSG_LCD_OFF = _UxGT("關 "); // "Off"
+ LSTR MSG_MOVING = _UxGT("移動 ..."); // "Moving...")
+ LSTR MSG_FREE_XY = _UxGT("釋放 XY"); // "Free XY")
+ LSTR MSG_MOVE_X = _UxGT("移動X"); // "Move X"
+ LSTR MSG_MOVE_Y = _UxGT("移動Y"); // "Move Y"
+ LSTR MSG_MOVE_Z = _UxGT("移動Z"); // "Move Z"
+ LSTR MSG_MOVE_E = _UxGT("擠出機"); // "Extruder"
+ LSTR MSG_MOVE_EN = _UxGT("擠出機 *"); // "Extruder *"
+ LSTR MSG_HOTEND_TOO_COLD = _UxGT("噴嘴溫度不夠"); // "Hotend too cold"
+ LSTR MSG_MOVE_N_MM = _UxGT("移動 %s mm"); // "Move 0.025mm"
+ LSTR MSG_MOVE_01MM = _UxGT("移動 0.1 mm"); // "Move 0.1mm"
+ LSTR MSG_MOVE_1MM = _UxGT("移動 1 mm"); // "Move 1mm"
+ LSTR MSG_MOVE_10MM = _UxGT("移動 10 mm"); // "Move 10mm"
+ LSTR MSG_MOVE_100MM = _UxGT("移動 100 mm"); // "Move 100mm"
+ LSTR MSG_SPEED = _UxGT("速率"); // "Speed"
+ LSTR MSG_BED_Z = _UxGT("熱床Z"); // "Bed Z"
+ LSTR MSG_NOZZLE = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴"); // "Nozzle" 噴嘴
+ LSTR MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ~");
+ LSTR MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 熱床"); // "Bed"
+ LSTR MSG_CHAMBER = _UxGT("Enclosure");
+ LSTR MSG_FAN_SPEED = _UxGT("風扇速率"); // "Fan speed"
+ LSTR MSG_FAN_SPEED_N = _UxGT("風扇速率 =");
+ LSTR MSG_STORED_FAN_N = _UxGT("Stored Fan =");
+ LSTR MSG_EXTRA_FAN_SPEED = _UxGT("額外風扇速率"); // "Extra fan speed"
+ LSTR MSG_EXTRA_FAN_SPEED_N = _UxGT("額外風扇速率 =");
+ LSTR MSG_FLOW = _UxGT("擠出速率");
+ LSTR MSG_FLOW_N = _UxGT("擠出速率 ~"); // "Flow"
+ LSTR MSG_CONTROL = _UxGT("控制"); // "Control"
+ LSTR MSG_MIN = " " LCD_STR_THERMOMETER _UxGT(" 最小"); // " " LCD_STR_THERMOMETER " Min"
+ LSTR MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" 最大"); // " " LCD_STR_THERMOMETER " Max"
+ LSTR MSG_FACTOR = " " LCD_STR_THERMOMETER _UxGT(" 系數"); // " " LCD_STR_THERMOMETER " Fact"
+ LSTR MSG_AUTOTEMP = _UxGT("自動控溫"); // "Autotemp"
+ LSTR MSG_LCD_ON = _UxGT("開 "); // "On"
+ LSTR MSG_LCD_OFF = _UxGT("關 "); // "Off"
- PROGMEM Language_Str MSG_SELECT = _UxGT("選擇"); // "Select"
- PROGMEM Language_Str MSG_SELECT_E = _UxGT("選擇 *");
- PROGMEM Language_Str MSG_ACC = _UxGT("加速度"); // "Accel" acceleration
- PROGMEM Language_Str MSG_JERK = _UxGT("抖動速率"); // "Jerk"
- PROGMEM Language_Str MSG_VA_JERK = _UxGT("軸抖動速率") LCD_STR_A; // "Va-jerk"
- PROGMEM Language_Str MSG_VB_JERK = _UxGT("軸抖動速率") LCD_STR_B;
- PROGMEM Language_Str MSG_VC_JERK = _UxGT("軸抖動速率") LCD_STR_C;
- PROGMEM Language_Str MSG_VI_JERK = _UxGT("軸抖動速率") LCD_STR_I;
- PROGMEM Language_Str MSG_VJ_JERK = _UxGT("軸抖動速率") LCD_STR_J;
- PROGMEM Language_Str MSG_VK_JERK = _UxGT("軸抖動速率") LCD_STR_K;
- PROGMEM Language_Str MSG_VE_JERK = _UxGT("擠出機抖動速率");
+ LSTR MSG_SELECT = _UxGT("選擇"); // "Select"
+ LSTR MSG_SELECT_E = _UxGT("選擇 *");
+ LSTR MSG_ACC = _UxGT("加速度"); // "Accel" acceleration
+ LSTR MSG_JERK = _UxGT("抖動速率"); // "Jerk"
+ LSTR MSG_VA_JERK = _UxGT("軸抖動速率") LCD_STR_A; // "Va-jerk"
+ LSTR MSG_VB_JERK = _UxGT("軸抖動速率") LCD_STR_B;
+ LSTR MSG_VC_JERK = _UxGT("軸抖動速率") LCD_STR_C;
+ LSTR MSG_VI_JERK = _UxGT("軸抖動速率") LCD_STR_I;
+ LSTR MSG_VJ_JERK = _UxGT("軸抖動速率") LCD_STR_J;
+ LSTR MSG_VK_JERK = _UxGT("軸抖動速率") LCD_STR_K;
+ LSTR MSG_VE_JERK = _UxGT("擠出機抖動速率");
- PROGMEM Language_Str MSG_VELOCITY = _UxGT("速度"); // "Velocity"
- PROGMEM Language_Str MSG_VMAX_A = _UxGT("最大進料速率") LCD_STR_A; // "Vmax " max_feedrate_mm_s
- PROGMEM Language_Str MSG_VMAX_B = _UxGT("最大進料速率") LCD_STR_B;
- PROGMEM Language_Str MSG_VMAX_C = _UxGT("最大進料速率") LCD_STR_C;
- PROGMEM Language_Str MSG_VMAX_I = _UxGT("最大進料速率") LCD_STR_I;
- PROGMEM Language_Str MSG_VMAX_J = _UxGT("最大進料速率") LCD_STR_J;
- PROGMEM Language_Str MSG_VMAX_K = _UxGT("最大進料速率") LCD_STR_K;
- PROGMEM Language_Str MSG_VMAX_E = _UxGT("最大進料速率") LCD_STR_E;
- PROGMEM Language_Str MSG_VMAX_EN = _UxGT("最大進料速率 *"); // "Vmax " max_feedrate_mm_s
- PROGMEM Language_Str MSG_VMIN = _UxGT("最小進料速率"); // "Vmin" min_feedrate_mm_s
- PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("最小移動速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
- PROGMEM Language_Str MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
- PROGMEM Language_Str MSG_AMAX_A = _UxGT("最大列印加速度") LCD_STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
- PROGMEM Language_Str MSG_AMAX_B = _UxGT("最大列印加速度") LCD_STR_B;
- PROGMEM Language_Str MSG_AMAX_C = _UxGT("最大列印加速度") LCD_STR_C;
- PROGMEM Language_Str MSG_AMAX_I = _UxGT("最大列印加速度") LCD_STR_I;
- PROGMEM Language_Str MSG_AMAX_J = _UxGT("最大列印加速度") LCD_STR_J;
- PROGMEM Language_Str MSG_AMAX_K = _UxGT("最大列印加速度") LCD_STR_K;
- PROGMEM Language_Str MSG_AMAX_E = _UxGT("最大列印加速度") LCD_STR_E;
- PROGMEM Language_Str MSG_AMAX_EN = _UxGT("最大列印加速度 *"); // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
- PROGMEM Language_Str MSG_A_RETRACT = _UxGT("回縮加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
- PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("非列印移動加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
- PROGMEM Language_Str MSG_STEPS_PER_MM = _UxGT("軸步數/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
- PROGMEM Language_Str MSG_A_STEPS = LCD_STR_A _UxGT(" 軸步數/mm"); // "Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
- PROGMEM Language_Str MSG_B_STEPS = LCD_STR_B _UxGT(" 軸步數/mm");
- PROGMEM Language_Str MSG_C_STEPS = LCD_STR_C _UxGT(" 軸步數/mm");
- PROGMEM Language_Str MSG_I_STEPS = LCD_STR_I _UxGT(" 軸步數/mm");
- PROGMEM Language_Str MSG_J_STEPS = LCD_STR_J _UxGT(" 軸步數/mm");
- PROGMEM Language_Str MSG_K_STEPS = LCD_STR_K _UxGT(" 軸步數/mm");
- PROGMEM Language_Str MSG_E_STEPS = _UxGT("擠出機步數/mm"); // "Esteps/mm"
- PROGMEM Language_Str MSG_EN_STEPS = _UxGT("擠出機~步數/mm");
- PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("溫度"); // "Temperature"
- PROGMEM Language_Str MSG_MOTION = _UxGT("運作"); // "Motion"
- PROGMEM Language_Str MSG_FILAMENT = _UxGT("絲料測容"); // "Filament" menu_control_volumetric
- PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("測容積mm") SUPERSCRIPT_THREE; // "E in mm3" volumetric_enabled
- PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("絲料直徑"); // "Fil. Dia."
- PROGMEM Language_Str MSG_FILAMENT_DIAM_E = _UxGT("絲料直徑 *");
- PROGMEM Language_Str MSG_FILAMENT_UNLOAD = _UxGT("卸載 mm"); // "Unload mm"
- PROGMEM Language_Str MSG_FILAMENT_LOAD = _UxGT("装載 mm"); // "Load mm"
- PROGMEM Language_Str MSG_ADVANCE_K = _UxGT("Advance K");
- PROGMEM Language_Str MSG_ADVANCE_K_E = _UxGT("Advance K *");
- PROGMEM Language_Str MSG_CONTRAST = _UxGT("LCD對比度"); // "LCD contrast"
- PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("保存設置"); // "Store memory"
- PROGMEM Language_Str MSG_LOAD_EEPROM = _UxGT("載入設置"); // "Load memory"
- PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("恢復安全值"); // "Restore failsafe"
- PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("初始化設置"); // "Initialize EEPROM"
- PROGMEM Language_Str MSG_ERR_EEPROM_CRC = _UxGT("錯誤: EEPROM CRC"); // "Err: EEPROM CRC"
- PROGMEM Language_Str MSG_ERR_EEPROM_INDEX = _UxGT("錯誤: EEPROM Index"); // "Err: EEPROM Index"
- PROGMEM Language_Str MSG_ERR_EEPROM_VERSION = _UxGT("錯誤: EEPROM Version"); // "EEPROM Version"
- PROGMEM Language_Str MSG_MEDIA_UPDATE = _UxGT("媒體更新"); // "Media Update"
- PROGMEM Language_Str MSG_RESET_PRINTER = _UxGT("重置打印機"); // "Reset Printer
- PROGMEM Language_Str MSG_REFRESH = _UxGT("刷新"); // "Refresh"
- PROGMEM Language_Str MSG_INFO_SCREEN = _UxGT("資訊界面"); // "Info screen"
- PROGMEM Language_Str MSG_PREPARE = _UxGT("準備"); // "Prepare"
- PROGMEM Language_Str MSG_TUNE = _UxGT("調整"); // "Tune"
- PROGMEM Language_Str MSG_START_PRINT = _UxGT("開始列印"); // "Start Print"
- PROGMEM Language_Str MSG_BUTTON_NEXT = _UxGT("下一個"); // "Next"
- PROGMEM Language_Str MSG_BUTTON_INIT = _UxGT("初始 "); // "Init"
- PROGMEM Language_Str MSG_BUTTON_STOP = _UxGT("停止 "); // "Stop"
- PROGMEM Language_Str MSG_BUTTON_PRINT = _UxGT("列印 "); // "Print"
- PROGMEM Language_Str MSG_BUTTON_RESET = _UxGT("復歸 "); // "Reset"
- PROGMEM Language_Str MSG_BUTTON_CANCEL = _UxGT("放棄 "); // "Cancel"
- PROGMEM Language_Str MSG_BUTTON_DONE = _UxGT("確認 "); // "Done"
- PROGMEM Language_Str MSG_BUTTON_BACK = _UxGT("返回 "); // "Back"
- PROGMEM Language_Str MSG_BUTTON_PROCEED = _UxGT("繼續 "); // "Proceed"
- PROGMEM Language_Str MSG_PAUSE_PRINT = _UxGT("暫停列印"); // "Pause print"
- PROGMEM Language_Str MSG_RESUME_PRINT = _UxGT("恢復列印"); // "Resume print"
- PROGMEM Language_Str MSG_STOP_PRINT = _UxGT("停止列印"); // "Stop print"
- PROGMEM Language_Str MSG_PRINTING_OBJECT = _UxGT("列印物件"); // "Printing Object"
- PROGMEM Language_Str MSG_CANCEL_OBJECT = _UxGT("中止物件"); // "Cancel Object"
- PROGMEM Language_Str MSG_CANCEL_OBJECT_N = _UxGT("中止物件 ="); // "Cancel Object ="
- PROGMEM Language_Str MSG_OUTAGE_RECOVERY = _UxGT("中斷恢復"); // "Outage Recovery"
- PROGMEM Language_Str MSG_MEDIA_MENU = _UxGT("從記憶卡上列印"); // "Print from SD"
- PROGMEM Language_Str MSG_NO_MEDIA = _UxGT("無記憶卡"); // "No SD card"
- PROGMEM Language_Str MSG_DWELL = _UxGT("休眠 ..."); // "Sleep..."
- PROGMEM Language_Str MSG_USERWAIT = _UxGT("點擊繼續 ..."); // "Click to resume..."
- PROGMEM Language_Str MSG_PRINT_PAUSED = _UxGT("列印已暫停"); // "Print paused"
- PROGMEM Language_Str MSG_PRINTING = _UxGT("列印中 ..."); // "Printing..."
- PROGMEM Language_Str MSG_PRINT_ABORTED = _UxGT("已取消列印"); // "Print aborted"
- PROGMEM Language_Str MSG_NO_MOVE = _UxGT("無移動"); // "No move."
- PROGMEM Language_Str MSG_KILLED = _UxGT("已砍掉"); // "KILLED. "
- PROGMEM Language_Str MSG_STOPPED = _UxGT("已停止"); // "STOPPED. "
- PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("回縮長度mm"); // "Retract mm" retract_length, retract length (positive mm)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _UxGT("換手回抽長度mm"); // "Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
- PROGMEM Language_Str MSG_CONTROL_RETRACTF = _UxGT("回縮速率mm/s"); // "Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); // "Hop mm" retract_zraise, retract Z-lift
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("回縮恢復長度mm"); // "UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("換手回縮恢復長度mm"); // "S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回縮恢復後進料速率mm/s"); // "Unretract V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
- PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
- PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("自動回縮"); // "Auto-Retract" autoretract_enabled,
- PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("交換長度"); // "Swap Length"
- PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("清除長度"); // "Purge Length"
- PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("交換工具"); //"Tool Change"
- PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z軸提昇"); // "Z Raise"
- PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("最高速度"); // "Prime Speed"
- PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("收回速度"); // "Retract Speed"
- PROGMEM Language_Str MSG_NOZZLE_STANDBY = _UxGT("噴嘴待機"); //"Nozzle Standby"
- PROGMEM Language_Str MSG_FILAMENTCHANGE = _UxGT("更換絲料"); // "Change filament"
- PROGMEM Language_Str MSG_FILAMENTCHANGE_E = _UxGT("更換絲料 *");
- PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("裝載絲料"); // "Load filament"
- PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("裝載絲料 *");
- PROGMEM Language_Str MSG_FILAMENTUNLOAD = _UxGT("卸載絲料"); // "Unload filament"
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("卸載絲料 *"); // "Unload filament"
- PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("卸載全部"); // "Unload All"
- PROGMEM Language_Str MSG_INIT_MEDIA = _UxGT("初始化記憶卡"); // "Init. SD card"
- PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("連接記憶卡"); // "Attach Media
- PROGMEM Language_Str MSG_CHANGE_MEDIA = _UxGT("更換記憶卡"); // "Change SD card"
- PROGMEM Language_Str MSG_RELEASE_MEDIA = _UxGT("釋放媒體"); // "Release Media"
- PROGMEM Language_Str MSG_ZPROBE_OUT = _UxGT("Z探針在熱床之外"); // "Z probe out. bed" Z probe is not within the physical limits
- PROGMEM Language_Str MSG_SKEW_FACTOR = _UxGT("偏斜因數"); // "Skew Factor"
+ LSTR MSG_VELOCITY = _UxGT("速度"); // "Velocity"
+ LSTR MSG_VMAX_A = _UxGT("最大進料速率") LCD_STR_A; // "Vmax " max_feedrate_mm_s
+ LSTR MSG_VMAX_B = _UxGT("最大進料速率") LCD_STR_B;
+ LSTR MSG_VMAX_C = _UxGT("最大進料速率") LCD_STR_C;
+ LSTR MSG_VMAX_I = _UxGT("最大進料速率") LCD_STR_I;
+ LSTR MSG_VMAX_J = _UxGT("最大進料速率") LCD_STR_J;
+ LSTR MSG_VMAX_K = _UxGT("最大進料速率") LCD_STR_K;
+ LSTR MSG_VMAX_E = _UxGT("最大進料速率") LCD_STR_E;
+ LSTR MSG_VMAX_EN = _UxGT("最大進料速率 *"); // "Vmax " max_feedrate_mm_s
+ LSTR MSG_VMIN = _UxGT("最小進料速率"); // "Vmin" min_feedrate_mm_s
+ LSTR MSG_VTRAV_MIN = _UxGT("最小移動速率"); // "VTrav min" min_travel_feedrate_mm_s, (target) speed of the move
+ LSTR MSG_ACCELERATION = _UxGT("加速度"); // "Acceleration"
+ LSTR MSG_AMAX_A = _UxGT("最大列印加速度") LCD_STR_A; // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ LSTR MSG_AMAX_B = _UxGT("最大列印加速度") LCD_STR_B;
+ LSTR MSG_AMAX_C = _UxGT("最大列印加速度") LCD_STR_C;
+ LSTR MSG_AMAX_I = _UxGT("最大列印加速度") LCD_STR_I;
+ LSTR MSG_AMAX_J = _UxGT("最大列印加速度") LCD_STR_J;
+ LSTR MSG_AMAX_K = _UxGT("最大列印加速度") LCD_STR_K;
+ LSTR MSG_AMAX_E = _UxGT("最大列印加速度") LCD_STR_E;
+ LSTR MSG_AMAX_EN = _UxGT("最大列印加速度 *"); // "Amax " max_acceleration_mm_per_s2, acceleration in units/s^2 for print moves
+ LSTR MSG_A_RETRACT = _UxGT("回縮加速度"); // "A-retract" retract_acceleration, E acceleration in mm/s^2 for retracts
+ LSTR MSG_A_TRAVEL = _UxGT("非列印移動加速度"); // "A-travel" travel_acceleration, X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
+ LSTR MSG_STEPS_PER_MM = _UxGT("軸步數/mm"); // "Steps/mm" axis_steps_per_mm, axis steps-per-unit G92
+ LSTR MSG_A_STEPS = LCD_STR_A _UxGT(" 軸步數/mm"); // "Asteps/mm" axis_steps_per_mm, axis steps-per-unit G92
+ LSTR MSG_B_STEPS = LCD_STR_B _UxGT(" 軸步數/mm");
+ LSTR MSG_C_STEPS = LCD_STR_C _UxGT(" 軸步數/mm");
+ LSTR MSG_I_STEPS = LCD_STR_I _UxGT(" 軸步數/mm");
+ LSTR MSG_J_STEPS = LCD_STR_J _UxGT(" 軸步數/mm");
+ LSTR MSG_K_STEPS = LCD_STR_K _UxGT(" 軸步數/mm");
+ LSTR MSG_E_STEPS = _UxGT("擠出機步數/mm"); // "Esteps/mm"
+ LSTR MSG_EN_STEPS = _UxGT("擠出機~步數/mm");
+ LSTR MSG_TEMPERATURE = _UxGT("溫度"); // "Temperature"
+ LSTR MSG_MOTION = _UxGT("運作"); // "Motion"
+ LSTR MSG_FILAMENT = _UxGT("絲料測容"); // "Filament" menu_control_volumetric
+ LSTR MSG_VOLUMETRIC_ENABLED = _UxGT("測容積mm") SUPERSCRIPT_THREE; // "E in mm3" volumetric_enabled
+ LSTR MSG_FILAMENT_DIAM = _UxGT("絲料直徑"); // "Fil. Dia."
+ LSTR MSG_FILAMENT_DIAM_E = _UxGT("絲料直徑 *");
+ LSTR MSG_FILAMENT_UNLOAD = _UxGT("卸載 mm"); // "Unload mm"
+ LSTR MSG_FILAMENT_LOAD = _UxGT("装載 mm"); // "Load mm"
+ LSTR MSG_ADVANCE_K = _UxGT("Advance K");
+ LSTR MSG_ADVANCE_K_E = _UxGT("Advance K *");
+ LSTR MSG_CONTRAST = _UxGT("LCD對比度"); // "LCD contrast"
+ LSTR MSG_STORE_EEPROM = _UxGT("保存設置"); // "Store memory"
+ LSTR MSG_LOAD_EEPROM = _UxGT("載入設置"); // "Load memory"
+ LSTR MSG_RESTORE_DEFAULTS = _UxGT("恢復安全值"); // "Restore failsafe"
+ LSTR MSG_INIT_EEPROM = _UxGT("初始化設置"); // "Initialize EEPROM"
+ LSTR MSG_ERR_EEPROM_CRC = _UxGT("錯誤: EEPROM CRC"); // "Err: EEPROM CRC"
+ LSTR MSG_ERR_EEPROM_INDEX = _UxGT("錯誤: EEPROM Index"); // "Err: EEPROM Index"
+ LSTR MSG_ERR_EEPROM_VERSION = _UxGT("錯誤: EEPROM Version"); // "EEPROM Version"
+ LSTR MSG_MEDIA_UPDATE = _UxGT("媒體更新"); // "Media Update"
+ LSTR MSG_RESET_PRINTER = _UxGT("重置打印機"); // "Reset Printer
+ LSTR MSG_REFRESH = _UxGT("刷新"); // "Refresh"
+ LSTR MSG_INFO_SCREEN = _UxGT("資訊界面"); // "Info screen"
+ LSTR MSG_PREPARE = _UxGT("準備"); // "Prepare"
+ LSTR MSG_TUNE = _UxGT("調整"); // "Tune"
+ LSTR MSG_START_PRINT = _UxGT("開始列印"); // "Start Print"
+ LSTR MSG_BUTTON_NEXT = _UxGT("下一個"); // "Next"
+ LSTR MSG_BUTTON_INIT = _UxGT("初始 "); // "Init"
+ LSTR MSG_BUTTON_STOP = _UxGT("停止 "); // "Stop"
+ LSTR MSG_BUTTON_PRINT = _UxGT("列印 "); // "Print"
+ LSTR MSG_BUTTON_RESET = _UxGT("復歸 "); // "Reset"
+ LSTR MSG_BUTTON_CANCEL = _UxGT("放棄 "); // "Cancel"
+ LSTR MSG_BUTTON_DONE = _UxGT("確認 "); // "Done"
+ LSTR MSG_BUTTON_BACK = _UxGT("返回 "); // "Back"
+ LSTR MSG_BUTTON_PROCEED = _UxGT("繼續 "); // "Proceed"
+ LSTR MSG_PAUSE_PRINT = _UxGT("暫停列印"); // "Pause print"
+ LSTR MSG_RESUME_PRINT = _UxGT("恢復列印"); // "Resume print"
+ LSTR MSG_STOP_PRINT = _UxGT("停止列印"); // "Stop print"
+ LSTR MSG_PRINTING_OBJECT = _UxGT("列印物件"); // "Printing Object"
+ LSTR MSG_CANCEL_OBJECT = _UxGT("中止物件"); // "Cancel Object"
+ LSTR MSG_CANCEL_OBJECT_N = _UxGT("中止物件 ="); // "Cancel Object ="
+ LSTR MSG_OUTAGE_RECOVERY = _UxGT("中斷恢復"); // "Outage Recovery"
+ LSTR MSG_MEDIA_MENU = _UxGT("從記憶卡上列印"); // "Print from SD"
+ LSTR MSG_NO_MEDIA = _UxGT("無記憶卡"); // "No SD card"
+ LSTR MSG_DWELL = _UxGT("休眠 ..."); // "Sleep..."
+ LSTR MSG_USERWAIT = _UxGT("點擊繼續 ..."); // "Click to resume..."
+ LSTR MSG_PRINT_PAUSED = _UxGT("列印已暫停"); // "Print paused"
+ LSTR MSG_PRINTING = _UxGT("列印中 ..."); // "Printing..."
+ LSTR MSG_PRINT_ABORTED = _UxGT("已取消列印"); // "Print aborted"
+ LSTR MSG_NO_MOVE = _UxGT("無移動"); // "No move."
+ LSTR MSG_KILLED = _UxGT("已砍掉"); // "KILLED. "
+ LSTR MSG_STOPPED = _UxGT("已停止"); // "STOPPED. "
+ LSTR MSG_CONTROL_RETRACT = _UxGT("回縮長度mm"); // "Retract mm" retract_length, retract length (positive mm)
+ LSTR MSG_CONTROL_RETRACT_SWAP = _UxGT("換手回抽長度mm"); // "Swap Re.mm" swap_retract_length, swap retract length (positive mm), for extruder change
+ LSTR MSG_CONTROL_RETRACTF = _UxGT("回縮速率mm/s"); // "Retract V" retract_feedrate_mm_s, feedrate for retracting (mm/s)
+ LSTR MSG_CONTROL_RETRACT_ZHOP = _UxGT("Hop mm"); // "Hop mm" retract_zraise, retract Z-lift
+ LSTR MSG_CONTROL_RETRACT_RECOVER = _UxGT("回縮恢復長度mm"); // "UnRet +mm" retract_recover_extra, additional recover length (mm, added to retract length when recovering)
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("換手回縮恢復長度mm"); // "S UnRet+mm" swap_retract_recover_extra, additional swap recover length (mm, added to retract length when recovering from extruder change)
+ LSTR MSG_CONTROL_RETRACT_RECOVERF = _UxGT("回縮恢復後進料速率mm/s"); // "Unretract V" retract_recover_feedrate_mm_s, feedrate for recovering from retraction (mm/s)
+ LSTR MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); // "S UnRet V"
+ LSTR MSG_AUTORETRACT = _UxGT("自動回縮"); // "Auto-Retract" autoretract_enabled,
+ LSTR MSG_FILAMENT_SWAP_LENGTH = _UxGT("交換長度"); // "Swap Length"
+ LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("清除長度"); // "Purge Length"
+ LSTR MSG_TOOL_CHANGE = _UxGT("交換工具"); //"Tool Change"
+ LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z軸提昇"); // "Z Raise"
+ LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("最高速度"); // "Prime Speed"
+ LSTR MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("收回速度"); // "Retract Speed"
+ LSTR MSG_NOZZLE_STANDBY = _UxGT("噴嘴待機"); //"Nozzle Standby"
+ LSTR MSG_FILAMENTCHANGE = _UxGT("更換絲料"); // "Change filament"
+ LSTR MSG_FILAMENTCHANGE_E = _UxGT("更換絲料 *");
+ LSTR MSG_FILAMENTLOAD = _UxGT("裝載絲料"); // "Load filament"
+ LSTR MSG_FILAMENTLOAD_E = _UxGT("裝載絲料 *");
+ LSTR MSG_FILAMENTUNLOAD = _UxGT("卸載絲料"); // "Unload filament"
+ LSTR MSG_FILAMENTUNLOAD_E = _UxGT("卸載絲料 *"); // "Unload filament"
+ LSTR MSG_FILAMENTUNLOAD_ALL = _UxGT("卸載全部"); // "Unload All"
+ LSTR MSG_INIT_MEDIA = _UxGT("初始化記憶卡"); // "Init. SD card"
+ LSTR MSG_ATTACH_MEDIA = _UxGT("連接記憶卡"); // "Attach Media
+ LSTR MSG_CHANGE_MEDIA = _UxGT("更換記憶卡"); // "Change SD card"
+ LSTR MSG_RELEASE_MEDIA = _UxGT("釋放媒體"); // "Release Media"
+ LSTR MSG_ZPROBE_OUT = _UxGT("Z探針在熱床之外"); // "Z probe out. bed" Z probe is not within the physical limits
+ LSTR MSG_SKEW_FACTOR = _UxGT("偏斜因數"); // "Skew Factor"
- PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch 自檢"); // "BLTouch Self-Test"
- PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("重置BLTouch"); // "Reset BLTouch"
- PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("裝載BLTouch"); // "Stow BLTouch"
- PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("部署BLTouch"); // "Deploy BLTouch"
+ LSTR MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch 自檢"); // "BLTouch Self-Test"
+ LSTR MSG_BLTOUCH_RESET = _UxGT("重置BLTouch"); // "Reset BLTouch"
+ LSTR MSG_BLTOUCH_STOW = _UxGT("裝載BLTouch"); // "Stow BLTouch"
+ LSTR MSG_BLTOUCH_DEPLOY = _UxGT("部署BLTouch"); // "Deploy BLTouch"
- PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("歸位 %s%s%s 先"); // "Home ... first"
- PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("探針偏移"); //Probe Offsets
- PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("探針X偏移量"); //Probe X Offset
- PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("探針Y偏移量"); //Probe Y Offset
- PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("探針Z偏移量"); //Probe Z Offset
- PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("微量調整X軸"); // "Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
- PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("微量調整Y軸"); // "Babystep Y"
- PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("微量調整Z軸"); // "Babystep Z"
- PROGMEM Language_Str MSG_BABYSTEP_TOTAL = _UxGT("總計"); // "Total"
- PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("擋塊終止"); // "Endstop abort"
- PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("加熱失敗"); // "Heating failed"
- PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("錯誤:冗餘溫度"); // "Err: REDUNDANT TEMP"
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("溫度失控"); // "THERMAL RUNAWAY"
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("熱床溫度失控"); // "BED THERMAL RUNAWAY"
- PROGMEM Language_Str MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("機箱溫度失控"); // "CHAMBER T. RUNAWAY"
- PROGMEM Language_Str MSG_ERR_MAXTEMP = _UxGT("錯誤:最高溫度"); // "Err: MAXTEMP"
- PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("錯誤:最低溫度"); // "Err: MINTEMP"
- PROGMEM Language_Str MSG_HALTED = _UxGT("印表機停機"); // "PRINTER HALTED"
- PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("請重置"); // "Please reset"
- PROGMEM Language_Str MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
- PROGMEM Language_Str MSG_SHORT_HOUR = _UxGT("時"); // "h" // One character only
- PROGMEM Language_Str MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
- PROGMEM Language_Str MSG_HEATING = _UxGT("加熱中 ..."); // "Heating..."
- PROGMEM Language_Str MSG_COOLING = _UxGT("冷卻中 ..."); // "Cooling..."
- PROGMEM Language_Str MSG_BED_HEATING = _UxGT("加熱熱床中 ..."); // "Bed Heating..."
- PROGMEM Language_Str MSG_BED_COOLING = _UxGT("熱床冷卻中 ..."); // "Bed Cooling..."
- PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("機箱加熱中 .."); // "Chamber Heating..."
- PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("機箱冷卻中 ..."); //Chamber Cooling...
- PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("⊿校準"); // "Delta Calibration"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_X = _UxGT("⊿校準X"); // "Calibrate X"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校準Y"); // "Calibrate Y"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校準Z"); // "Calibrate Z"
- PROGMEM Language_Str MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校準中心"); // "Calibrate Center"
- PROGMEM Language_Str MSG_DELTA_SETTINGS = _UxGT("⊿設置"); // "Delta Settings"
- PROGMEM Language_Str MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自動校準"); // "Auto Calibration"
- PROGMEM Language_Str MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("設置⊿高度"); // "Set Delta Height"
- PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z偏移");
- PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
- PROGMEM Language_Str MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
- PROGMEM Language_Str MSG_DELTA_RADIUS = _UxGT("⊿半徑"); // "Radius"
- PROGMEM Language_Str MSG_INFO_MENU = _UxGT("關於印表機"); // "About Printer"
- PROGMEM Language_Str MSG_INFO_PRINTER_MENU = _UxGT("印表機訊息"); // "Printer Info"
- PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
- PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("線性調平"); // "Linear Leveling"
- PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT(" 雙線性調平"); // "Bilinear Leveling"
- PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
- PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
- PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("印表機統計"); // "Printer Stats"
- PROGMEM Language_Str MSG_INFO_BOARD_MENU = _UxGT("主板訊息"); // "Board Info"
- PROGMEM Language_Str MSG_INFO_THERMISTOR_MENU = _UxGT("溫度計"); // "Thermistors"
- PROGMEM Language_Str MSG_INFO_EXTRUDERS = _UxGT(" 擠出機"); // "Extruders"
- PROGMEM Language_Str MSG_INFO_BAUDRATE = _UxGT("傳輸率"); // "Baud"
- PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("協議"); // "Protocol"
- PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("監測溫度失控:關"); // "Runaway Watch: OFF"
- PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _UxGT("監測溫度失控:開"); // "Runaway Watch: ON"
+ LSTR MSG_HOME_FIRST = _UxGT("歸位 %s%s%s 先"); // "Home ... first"
+ LSTR MSG_ZPROBE_OFFSETS = _UxGT("探針偏移"); //Probe Offsets
+ LSTR MSG_ZPROBE_XOFFSET = _UxGT("探針X偏移量"); //Probe X Offset
+ LSTR MSG_ZPROBE_YOFFSET = _UxGT("探針Y偏移量"); //Probe Y Offset
+ LSTR MSG_ZPROBE_ZOFFSET = _UxGT("探針Z偏移量"); //Probe Z Offset
+ LSTR MSG_BABYSTEP_X = _UxGT("微量調整X軸"); // "Babystep X" lcd_babystep_x, Babystepping enables the user to control the axis in tiny amounts
+ LSTR MSG_BABYSTEP_Y = _UxGT("微量調整Y軸"); // "Babystep Y"
+ LSTR MSG_BABYSTEP_Z = _UxGT("微量調整Z軸"); // "Babystep Z"
+ LSTR MSG_BABYSTEP_TOTAL = _UxGT("總計"); // "Total"
+ LSTR MSG_ENDSTOP_ABORT = _UxGT("擋塊終止"); // "Endstop abort"
+ LSTR MSG_HEATING_FAILED_LCD = _UxGT("加熱失敗"); // "Heating failed"
+ LSTR MSG_ERR_REDUNDANT_TEMP = _UxGT("錯誤:冗餘溫度"); // "Err: REDUNDANT TEMP"
+ LSTR MSG_THERMAL_RUNAWAY = _UxGT("溫度失控"); // "THERMAL RUNAWAY"
+ LSTR MSG_THERMAL_RUNAWAY_BED = _UxGT("熱床溫度失控"); // "BED THERMAL RUNAWAY"
+ LSTR MSG_THERMAL_RUNAWAY_CHAMBER = _UxGT("機箱溫度失控"); // "CHAMBER T. RUNAWAY"
+ LSTR MSG_ERR_MAXTEMP = _UxGT("錯誤:最高溫度"); // "Err: MAXTEMP"
+ LSTR MSG_ERR_MINTEMP = _UxGT("錯誤:最低溫度"); // "Err: MINTEMP"
+ LSTR MSG_HALTED = _UxGT("印表機停機"); // "PRINTER HALTED"
+ LSTR MSG_PLEASE_RESET = _UxGT("請重置"); // "Please reset"
+ LSTR MSG_SHORT_DAY = _UxGT("天"); // "d" // One character only
+ LSTR MSG_SHORT_HOUR = _UxGT("時"); // "h" // One character only
+ LSTR MSG_SHORT_MINUTE = _UxGT("分"); // "m" // One character only
+ LSTR MSG_HEATING = _UxGT("加熱中 ..."); // "Heating..."
+ LSTR MSG_COOLING = _UxGT("冷卻中 ..."); // "Cooling..."
+ LSTR MSG_BED_HEATING = _UxGT("加熱熱床中 ..."); // "Bed Heating..."
+ LSTR MSG_BED_COOLING = _UxGT("熱床冷卻中 ..."); // "Bed Cooling..."
+ LSTR MSG_CHAMBER_HEATING = _UxGT("機箱加熱中 .."); // "Chamber Heating..."
+ LSTR MSG_CHAMBER_COOLING = _UxGT("機箱冷卻中 ..."); //Chamber Cooling...
+ LSTR MSG_DELTA_CALIBRATE = _UxGT("⊿校準"); // "Delta Calibration"
+ LSTR MSG_DELTA_CALIBRATE_X = _UxGT("⊿校準X"); // "Calibrate X"
+ LSTR MSG_DELTA_CALIBRATE_Y = _UxGT("⊿校準Y"); // "Calibrate Y"
+ LSTR MSG_DELTA_CALIBRATE_Z = _UxGT("⊿校準Z"); // "Calibrate Z"
+ LSTR MSG_DELTA_CALIBRATE_CENTER = _UxGT("⊿校準中心"); // "Calibrate Center"
+ LSTR MSG_DELTA_SETTINGS = _UxGT("⊿設置"); // "Delta Settings"
+ LSTR MSG_DELTA_AUTO_CALIBRATE = _UxGT("⊿自動校準"); // "Auto Calibration"
+ LSTR MSG_DELTA_HEIGHT_CALIBRATE = _UxGT("設置⊿高度"); // "Set Delta Height"
+ LSTR MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Z偏移");
+ LSTR MSG_DELTA_DIAG_ROD = _UxGT("⊿斜柱"); // "Diag Rod"
+ LSTR MSG_DELTA_HEIGHT = _UxGT("⊿高度"); // "Height"
+ LSTR MSG_DELTA_RADIUS = _UxGT("⊿半徑"); // "Radius"
+ LSTR MSG_INFO_MENU = _UxGT("關於印表機"); // "About Printer"
+ LSTR MSG_INFO_PRINTER_MENU = _UxGT("印表機訊息"); // "Printer Info"
+ LSTR MSG_3POINT_LEVELING = _UxGT("三點調平"); // "3-Point Leveling"
+ LSTR MSG_LINEAR_LEVELING = _UxGT("線性調平"); // "Linear Leveling"
+ LSTR MSG_BILINEAR_LEVELING = _UxGT(" 雙線性調平"); // "Bilinear Leveling"
+ LSTR MSG_UBL_LEVELING = _UxGT("統一熱床調平(UBL)"); // "Unified Bed Leveling"
+ LSTR MSG_MESH_LEVELING = _UxGT("網格調平"); // "Mesh Leveling"
+ LSTR MSG_INFO_STATS_MENU = _UxGT("印表機統計"); // "Printer Stats"
+ LSTR MSG_INFO_BOARD_MENU = _UxGT("主板訊息"); // "Board Info"
+ LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("溫度計"); // "Thermistors"
+ LSTR MSG_INFO_EXTRUDERS = _UxGT(" 擠出機"); // "Extruders"
+ LSTR MSG_INFO_BAUDRATE = _UxGT("傳輸率"); // "Baud"
+ LSTR MSG_INFO_PROTOCOL = _UxGT("協議"); // "Protocol"
+ LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("監測溫度失控:關"); // "Runaway Watch: OFF"
+ LSTR MSG_INFO_RUNAWAY_ON = _UxGT("監測溫度失控:開"); // "Runaway Watch: ON"
- PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("外殼燈"); // "Case light"
- PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("燈亮度"); // "Light BRIGHTNESS"
- PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("打印機不正確"); // "The printer is incorrect"
+ LSTR MSG_CASE_LIGHT = _UxGT("外殼燈"); // "Case light"
+ LSTR MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("燈亮度"); // "Light BRIGHTNESS"
+ LSTR MSG_KILL_EXPECTED_PRINTER = _UxGT("打印機不正確"); // "The printer is incorrect"
#if LCD_WIDTH >= 20
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("列印計數"); // "Print Count"
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("已完成"); // "Completed"
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("總列印時間"); // "Total print time"
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最長工作時間"); // "Longest job time"
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("總計擠出"); // "Extruded total"
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("列印計數"); // "Print Count"
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("已完成"); // "Completed"
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("總列印時間"); // "Total print time"
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最長工作時間"); // "Longest job time"
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("總計擠出"); // "Extruded total"
#else
- PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("列印數"); // "Prints"
- PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); // "Completed"
- PROGMEM Language_Str MSG_INFO_PRINT_TIME = _UxGT("總共"); // "Total"
- PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("最長"); // "Longest"
- PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("已擠出"); // "Extruded"
+ LSTR MSG_INFO_PRINT_COUNT = _UxGT("列印數"); // "Prints"
+ LSTR MSG_INFO_COMPLETED_PRINTS = _UxGT("完成"); // "Completed"
+ LSTR MSG_INFO_PRINT_TIME = _UxGT("總共"); // "Total"
+ LSTR MSG_INFO_PRINT_LONGEST = _UxGT("最長"); // "Longest"
+ LSTR MSG_INFO_PRINT_FILAMENT = _UxGT("已擠出"); // "Extruded"
#endif
- PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("最低溫度"); // "Min Temp"
- PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("最高溫度"); // "Max Temp"
- PROGMEM Language_Str MSG_INFO_PSU = _UxGT("電源供應"); // "Power Supply"
- PROGMEM Language_Str MSG_DRIVE_STRENGTH = _UxGT("驅動力度"); // "Drive Strength"
- PROGMEM Language_Str MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" 驅動 %"); // X Driver %
- PROGMEM Language_Str MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" 驅動 %"); // Y Driver %
- PROGMEM Language_Str MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" 驅動 %"); // Z Driver %
- PROGMEM Language_Str MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" 驅動 %"); // I Driver %
- PROGMEM Language_Str MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" 驅動 %"); // J Driver %
- PROGMEM Language_Str MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" 驅動 %"); // K Driver %
- PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E 驅動 %"); //E Driver %
- PROGMEM Language_Str MSG_ERROR_TMC = _UxGT("TMC連接錯誤"); // "TMC CONNECTION ERROR"
- PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("保存驅動設置"); // "DAC EEPROM Write"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER = _UxGT("更換絲料"); // "FILAMENT CHANGE"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("列印已暫停"); // "PRINT PAUSED"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("裝載絲料"); // "LOAD FILAMENT"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸載絲料"); // "UNLOAD FILAMENT"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢複選項:"); // "RESUME OPTIONS:"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢復列印"); // "Resume print"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 噴嘴: "); // " Nozzle: "
- PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("斷絲偵測"); // "Runout Sensor"
- PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("絲距離mm"); // "Runout Dist mm"
- PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("歸原位失敗"); // "Homing failed"
- PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("探針探測失敗"); // "Probing failed"
+ LSTR MSG_INFO_MIN_TEMP = _UxGT("最低溫度"); // "Min Temp"
+ LSTR MSG_INFO_MAX_TEMP = _UxGT("最高溫度"); // "Max Temp"
+ LSTR MSG_INFO_PSU = _UxGT("電源供應"); // "Power Supply"
+ LSTR MSG_DRIVE_STRENGTH = _UxGT("驅動力度"); // "Drive Strength"
+ LSTR MSG_DAC_PERCENT_A = LCD_STR_A _UxGT(" 驅動 %"); // X Driver %
+ LSTR MSG_DAC_PERCENT_B = LCD_STR_B _UxGT(" 驅動 %"); // Y Driver %
+ LSTR MSG_DAC_PERCENT_C = LCD_STR_C _UxGT(" 驅動 %"); // Z Driver %
+ LSTR MSG_DAC_PERCENT_I = LCD_STR_I _UxGT(" 驅動 %"); // I Driver %
+ LSTR MSG_DAC_PERCENT_J = LCD_STR_J _UxGT(" 驅動 %"); // J Driver %
+ LSTR MSG_DAC_PERCENT_K = LCD_STR_K _UxGT(" 驅動 %"); // K Driver %
+ LSTR MSG_DAC_PERCENT_E = _UxGT("E 驅動 %"); //E Driver %
+ LSTR MSG_ERROR_TMC = _UxGT("TMC連接錯誤"); // "TMC CONNECTION ERROR"
+ LSTR MSG_DAC_EEPROM_WRITE = _UxGT("保存驅動設置"); // "DAC EEPROM Write"
+ LSTR MSG_FILAMENT_CHANGE_HEADER = _UxGT("更換絲料"); // "FILAMENT CHANGE"
+ LSTR MSG_FILAMENT_CHANGE_HEADER_PAUSE = _UxGT("列印已暫停"); // "PRINT PAUSED"
+ LSTR MSG_FILAMENT_CHANGE_HEADER_LOAD = _UxGT("裝載絲料"); // "LOAD FILAMENT"
+ LSTR MSG_FILAMENT_CHANGE_HEADER_UNLOAD = _UxGT("卸載絲料"); // "UNLOAD FILAMENT"
+ LSTR MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("恢複選項:"); // "RESUME OPTIONS:"
+ LSTR MSG_FILAMENT_CHANGE_OPTION_PURGE = _UxGT("清除更多"); // "Purge more"
+ LSTR MSG_FILAMENT_CHANGE_OPTION_RESUME = _UxGT("恢復列印"); // "Resume print"
+ LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" 噴嘴: "); // " Nozzle: "
+ LSTR MSG_RUNOUT_SENSOR = _UxGT("斷絲偵測"); // "Runout Sensor"
+ LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("絲距離mm"); // "Runout Dist mm"
+ LSTR MSG_KILL_HOMING_FAILED = _UxGT("歸原位失敗"); // "Homing failed"
+ LSTR MSG_LCD_PROBING_FAILED = _UxGT("探針探測失敗"); // "Probing failed"
//
// Filament Change screens show up to 3 lines on a 4-line display
// ...or up to 2 lines on a 3-line display
//
#if LCD_HEIGHT >= 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("按下按鈕", "恢復列印")); //"Press Button to resume print"
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停車中 ...")); // "Parking..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待開始", "絲料", "變更")); // "Wait for start of the filament change"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下絲料")); // "Wait for filament unload"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入絲料", "並按鍵", "繼續 ...")); // "Insert filament and press button to continue..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按鈕", "加熱噴嘴.")); // "Press button to heat nozzle."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加熱噴嘴", "請等待 ...")); // "Heating nozzle Please wait..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "進料")); // "Wait for filament load"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "絲料清除")); // "Wait for filament purge"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("按下完成","絲料清除")); //"Press button to filament purge"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待列印", "恢復")); // "Wait for print to resume"
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_2_LINE("按下按鈕", "恢復列印")); //"Press Button to resume print"
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停車中 ...")); // "Parking..."
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("等待開始", "絲料", "變更")); // "Wait for start of the filament change"
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("等待", "卸下絲料")); // "Wait for filament unload"
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("插入絲料", "並按鍵", "繼續 ...")); // "Insert filament and press button to continue..."
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_2_LINE("按下按鈕", "加熱噴嘴.")); // "Press button to heat nozzle."
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_2_LINE("加熱噴嘴", "請等待 ...")); // "Heating nozzle Please wait..."
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("等待", "進料")); // "Wait for filament load"
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_2_LINE("等待", "絲料清除")); // "Wait for filament purge"
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_2_LINE("按下完成","絲料清除")); //"Press button to filament purge"
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_2_LINE("等待列印", "恢復")); // "Wait for print to resume"
#else // LCD_HEIGHT < 4
- PROGMEM Language_Str MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("按下繼續..")); // "Click to continue"
- PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停車中 ...")); // "Parking..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("請等待 ...")); // "Please wait..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入並點擊")); // "Insert and Click"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("按下加熱..")); // "Click to heat"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加熱中 ...")); // "Heating..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); // "Ejecting..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("載入中 ...")); // "Loading..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("按下完成..")); // "Click to finish"
- PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢復中 ...")); // "Resuming..."
+ LSTR MSG_ADVANCED_PAUSE_WAITING = _UxGT(MSG_1_LINE("按下繼續..")); // "Click to continue"
+ LSTR MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("停車中 ...")); // "Parking..."
+ LSTR MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_1_LINE("請等待 ...")); // "Please wait..."
+ LSTR MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("插入並點擊")); // "Insert and Click"
+ LSTR MSG_FILAMENT_CHANGE_HEAT = _UxGT(MSG_1_LINE("按下加熱..")); // "Click to heat"
+ LSTR MSG_FILAMENT_CHANGE_HEATING = _UxGT(MSG_1_LINE("加熱中 ...")); // "Heating..."
+ LSTR MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_1_LINE("退出中 ...")); // "Ejecting..."
+ LSTR MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("載入中 ...")); // "Loading..."
+ LSTR MSG_FILAMENT_CHANGE_PURGE = _UxGT(MSG_1_LINE("清除中 ...")); // "Purging..."
+ LSTR MSG_FILAMENT_CHANGE_CONT_PURGE = _UxGT(MSG_1_LINE("按下完成..")); // "Click to finish"
+ LSTR MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_1_LINE("恢復中 ...")); // "Resuming..."
#endif // LCD_HEIGHT < 4
}
diff --git a/Marlin/src/lcd/lcdprint.cpp b/Marlin/src/lcd/lcdprint.cpp
index b2c939557d..498b478b12 100644
--- a/Marlin/src/lcd/lcdprint.cpp
+++ b/Marlin/src/lcd/lcdprint.cpp
@@ -36,9 +36,11 @@
*
* Print a string with an index substituted within it:
*
+ * $ displays the clipped C-string given by the inStr argument
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
+ * @ displays an axis name such as XYZUVW, or E for an extruder
*/
lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
const uint8_t prop = USE_WIDE_GLYPH ? 2 : 1;
@@ -72,6 +74,10 @@ lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const i
else if (ch == '$' && inStr) {
n -= lcd_put_u8str_max_P(inStr, n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH);
}
+ else if (ch == '@') {
+ lcd_put_wchar(axis_codes[ind]);
+ n--;
+ }
else {
lcd_put_wchar(ch);
n -= ch > 255 ? prop : 1;
diff --git a/Marlin/src/lcd/lcdprint.h b/Marlin/src/lcd/lcdprint.h
index f6ac818ae5..c701a59568 100644
--- a/Marlin/src/lcd/lcdprint.h
+++ b/Marlin/src/lcd/lcdprint.h
@@ -152,17 +152,20 @@ void lcd_moveto(const lcd_uint_t col, const lcd_uint_t row);
/**
* @brief Draw a ROM UTF-8 string
*
- * @param utf8_str_P : the ROM UTF-8 string
+ * @param utf8_pstr : the ROM UTF-8 string
* @param max_length : the pixel length of the string allowed (or number of slots in HD44780)
*
* @return the pixel width
*
* Draw a ROM UTF-8 string
*/
-int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length);
-inline int lcd_put_u8str_max_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P utf8_str_P, pixel_len_t max_length) {
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length);
+inline int lcd_put_u8str_max_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P utf8_pstr, pixel_len_t max_length) {
lcd_moveto(col, row);
- return lcd_put_u8str_max_P(utf8_str_P, max_length);
+ return lcd_put_u8str_max_P(utf8_pstr, max_length);
+}
+inline int lcd_put_u8str_max(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const utf8_fstr, pixel_len_t max_length) {
+ return lcd_put_u8str_max_P(col, row, FTOP(utf8_fstr), max_length);
}
void lcd_put_int(const int i);
@@ -177,14 +180,22 @@ inline int lcd_put_u8str_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P con
return lcd_put_u8str_P(pstr);
}
+inline int lcd_put_u8str(FSTR_P const fstr) { return lcd_put_u8str_P(FTOP(fstr)); }
+inline int lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const fstr) {
+ return lcd_put_u8str_P(col, row, FTOP(fstr));
+}
+
lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH);
inline lcd_uint_t lcd_put_u8str_ind_P(const lcd_uint_t col, const lcd_uint_t row, PGM_P const pstr, const int8_t ind, PGM_P const inStr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
lcd_moveto(col, row);
return lcd_put_u8str_ind_P(pstr, ind, inStr, maxlen);
}
+inline lcd_uint_t lcd_put_u8str_ind(const lcd_uint_t col, const lcd_uint_t row, FSTR_P const fstr, const int8_t ind, FSTR_P const inFstr=nullptr, const lcd_uint_t maxlen=LCD_WIDTH) {
+ return lcd_put_u8str_ind_P(col, row, FTOP(fstr), ind, FTOP(inFstr), maxlen);
+}
-inline int lcd_put_u8str(const char *str) { return lcd_put_u8str_max(str, PIXEL_LEN_NOLIMIT); }
-inline int lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, PGM_P const str) {
+inline int lcd_put_u8str(const char * const str) { return lcd_put_u8str_max(str, PIXEL_LEN_NOLIMIT); }
+inline int lcd_put_u8str(const lcd_uint_t col, const lcd_uint_t row, const char * const str) {
lcd_moveto(col, row);
return lcd_put_u8str(str);
}
diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp
index 605b0835fa..50479d6257 100644
--- a/Marlin/src/lcd/marlinui.cpp
+++ b/Marlin/src/lcd/marlinui.cpp
@@ -95,16 +95,23 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
}
#endif
+#if HAS_LCD_CONTRAST
+ uint8_t MarlinUI::contrast; // Initialized by settings.load()
+
+ void MarlinUI::set_contrast(const uint8_t value) {
+ contrast = constrain(value, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX);
+ _set_contrast();
+ }
+#endif
+
#if HAS_LCD_BRIGHTNESS
uint8_t MarlinUI::brightness = DEFAULT_LCD_BRIGHTNESS;
bool MarlinUI::backlight = true;
void MarlinUI::set_brightness(const uint8_t value) {
backlight = !!value;
- if (backlight) brightness = constrain(value, MIN_LCD_BRIGHTNESS, MAX_LCD_BRIGHTNESS);
- // Set brightness on enabled LCD here
- TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_LCD_Brightness(brightness));
- TERN_(DWIN_CREALITY_LCD_JYERSUI, DWIN_Backlight_SetLuminance(backlight ? brightness : 0));
+ if (backlight) brightness = constrain(value, LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX);
+ _set_brightness();
}
#endif
@@ -656,9 +663,9 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
draw_status_screen();
}
- void MarlinUI::kill_screen(PGM_P lcd_error, PGM_P lcd_component) {
+ void MarlinUI::kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component) {
init();
- status_printf_P(1, PSTR(S_FMT ": " S_FMT), lcd_error, lcd_component);
+ status_printf(1, F(S_FMT ": " S_FMT), FTOP(lcd_error), FTOP(lcd_component));
TERN_(HAS_LCD_MENU, return_to_status());
// RED ALERT. RED ALERT.
@@ -1345,28 +1352,28 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
bool MarlinUI::has_status() { return (status_message[0] != '\0'); }
- void MarlinUI::set_status(const char * const message, const bool persist) {
+ void MarlinUI::set_status(const char * const cstr, const bool persist) {
if (alert_level) return;
- TERN_(HOST_PROMPT_SUPPORT, host_action_notify(message));
+ TERN_(HOST_PROMPT_SUPPORT, host_action_notify(cstr));
// Here we have a problem. The message is encoded in UTF8, so
// arbitrarily cutting it will be a problem. We MUST be sure
// that there is no cutting in the middle of a multibyte character!
// Get a pointer to the null terminator
- const char* pend = message + strlen(message);
+ const char* pend = cstr + strlen(cstr);
// If length of supplied UTF8 string is greater than
// our buffer size, start cutting whole UTF8 chars
- while ((pend - message) > MAX_MESSAGE_LENGTH) {
+ while ((pend - cstr) > MAX_MESSAGE_LENGTH) {
--pend;
while (!START_OF_UTF8_CHAR(*pend)) --pend;
};
// At this point, we have the proper cut point. Use it
- uint8_t maxLen = pend - message;
- strncpy(status_message, message, maxLen);
+ uint8_t maxLen = pend - cstr;
+ strncpy(status_message, cstr, maxLen);
status_message[maxLen] = '\0';
finish_status(persist);
@@ -1386,75 +1393,77 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
#if SERVICE_INTERVAL_3 > 0
static PGMSTR(service3, "> " SERVICE_NAME_3 "!");
#endif
- PGM_P msg;
+ FSTR_P msg;
if (printingIsPaused())
- msg = GET_TEXT(MSG_PRINT_PAUSED);
+ msg = GET_TEXT_F(MSG_PRINT_PAUSED);
#if ENABLED(SDSUPPORT)
else if (IS_SD_PRINTING())
return set_status(card.longest_filename(), true);
#endif
else if (print_job_timer.isRunning())
- msg = GET_TEXT(MSG_PRINTING);
+ msg = GET_TEXT_F(MSG_PRINTING);
#if SERVICE_INTERVAL_1 > 0
- else if (print_job_timer.needsService(1)) msg = service1;
+ else if (print_job_timer.needsService(1)) msg = FPSTR(service1);
#endif
#if SERVICE_INTERVAL_2 > 0
- else if (print_job_timer.needsService(2)) msg = service2;
+ else if (print_job_timer.needsService(2)) msg = FPSTR(service2);
#endif
#if SERVICE_INTERVAL_3 > 0
- else if (print_job_timer.needsService(3)) msg = service3;
+ else if (print_job_timer.needsService(3)) msg = FPSTR(service3);
#endif
else if (!no_welcome)
- msg = GET_TEXT(WELCOME_MSG);
+ msg = GET_TEXT_F(WELCOME_MSG);
else
return;
- set_status_P(msg, -1);
+ set_status(msg, -1);
}
- void MarlinUI::set_status_P(PGM_P const message, int8_t level) {
+ void MarlinUI::set_status(FSTR_P const fstr, int8_t level) {
+ PGM_P const pstr = FTOP(fstr);
if (level < 0) level = alert_level = 0;
if (level < alert_level) return;
alert_level = level;
- TERN_(HOST_PROMPT_SUPPORT, host_action_notify_P(message));
+ TERN_(HOST_PROMPT_SUPPORT, host_action_notify(fstr));
// Since the message is encoded in UTF8 it must
// only be cut on a character boundary.
// Get a pointer to the null terminator
- PGM_P pend = message + strlen_P(message);
+ PGM_P pend = pstr + strlen_P(pstr);
// If length of supplied UTF8 string is greater than
// the buffer size, start cutting whole UTF8 chars
- while ((pend - message) > MAX_MESSAGE_LENGTH) {
+ while ((pend - pstr) > MAX_MESSAGE_LENGTH) {
--pend;
while (!START_OF_UTF8_CHAR(pgm_read_byte(pend))) --pend;
};
// At this point, we have the proper cut point. Use it
- uint8_t maxLen = pend - message;
- strncpy_P(status_message, message, maxLen);
+ uint8_t maxLen = pend - pstr;
+ strncpy_P(status_message, pstr, maxLen);
status_message[maxLen] = '\0';
finish_status(level > 0);
}
- void MarlinUI::set_alert_status_P(PGM_P const message) {
- set_status_P(message, 1);
+ void MarlinUI::set_alert_status(FSTR_P const fstr) {
+ set_status(fstr, 1);
+ TERN_(HAS_TOUCH_SLEEP, wakeup_screen());
TERN_(HAS_LCD_MENU, return_to_status());
}
#include
- void MarlinUI::status_printf_P(const uint8_t level, PGM_P const fmt, ...) {
+ void MarlinUI::status_printf(const uint8_t level, FSTR_P const fmt, ...) {
if (level < alert_level) return;
alert_level = level;
va_list args;
- va_start(args, fmt);
- vsnprintf_P(status_message, MAX_MESSAGE_LENGTH, fmt, args);
+ va_start(args, FTOP(fmt));
+ vsnprintf_P(status_message, MAX_MESSAGE_LENGTH, FTOP(fmt), args);
va_end(args);
finish_status(level > 0);
}
@@ -1482,9 +1491,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
next_filament_display = ms + 5000UL; // Show status message for 5s
#endif
- #if ENABLED(STATUS_MESSAGE_SCROLLING)
- status_scroll_offset = 0;
- #endif
+ TERN_(STATUS_MESSAGE_SCROLLING, status_scroll_offset = 0);
#else // HAS_WIRED_LCD
UNUSED(persist);
#endif
@@ -1529,20 +1536,20 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
host_action_cancel();
#endif
IF_DISABLED(SDSUPPORT, print_job_timer.stop());
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, PSTR("UI Aborted"), DISMISS_STR));
- LCD_MESSAGEPGM(MSG_PRINT_ABORTED);
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_INFO, F("UI Aborted"), FPSTR(DISMISS_STR)));
+ LCD_MESSAGE(MSG_PRINT_ABORTED);
TERN_(HAS_LCD_MENU, return_to_status());
}
#if BOTH(PSU_CONTROL, PS_OFF_CONFIRM)
void MarlinUI::poweroff() {
- queue.inject_P(PSTR("M81"));
+ queue.inject(F("M81"));
goto_previous_screen();
}
#endif
void MarlinUI::flow_fault() {
- LCD_ALERTMESSAGEPGM(MSG_FLOWMETER_FAULT);
+ LCD_ALERTMESSAGE(MSG_FLOWMETER_FAULT);
TERN_(HAS_BUZZER, buzz(1000, 440));
TERN_(HAS_LCD_MENU, return_to_status());
}
@@ -1557,15 +1564,16 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
defer_status_screen();
#endif
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_PAUSE_RESUME, PSTR("UI Pause"), PSTR("Resume")));
+ TERN_(HAS_TOUCH_SLEEP, wakeup_screen());
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_open(PROMPT_PAUSE_RESUME, F("UI Pause"), F("Resume")));
- LCD_MESSAGEPGM(MSG_PRINT_PAUSED);
+ LCD_MESSAGE(MSG_PRINT_PAUSED);
#if ENABLED(PARK_HEAD_ON_PAUSE)
pause_show_message(PAUSE_MESSAGE_PARKING, PAUSE_MODE_PAUSE_PRINT); // Show message immediately to let user know about pause in progress
- queue.inject_P(PSTR("M25 P\nM24"));
+ queue.inject(F("M25 P\nM24"));
#elif ENABLED(SDSUPPORT)
- queue.inject_P(PSTR("M25"));
+ queue.inject(F("M25"));
#elif defined(ACTION_ON_PAUSE)
host_action_pause();
#endif
@@ -1630,14 +1638,14 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
//
// Send the status line as a host notification
//
- void MarlinUI::set_status(const char * const message, const bool) {
- TERN(HOST_PROMPT_SUPPORT, host_action_notify(message), UNUSED(message));
+ void MarlinUI::set_status(const char * const cstr, const bool) {
+ TERN(HOST_PROMPT_SUPPORT, host_action_notify(cstr), UNUSED(cstr));
}
- void MarlinUI::set_status_P(PGM_P message, const int8_t) {
- TERN(HOST_PROMPT_SUPPORT, host_action_notify_P(message), UNUSED(message));
+ void MarlinUI::set_status(FSTR_P const fstr, const int8_t) {
+ TERN(HOST_PROMPT_SUPPORT, host_action_notify(fstr), UNUSED(fstr));
}
- void MarlinUI::status_printf_P(const uint8_t, PGM_P const message, ...) {
- TERN(HOST_PROMPT_SUPPORT, host_action_notify_P(message), UNUSED(message));
+ void MarlinUI::status_printf(const uint8_t, FSTR_P const fstr, ...) {
+ TERN(HOST_PROMPT_SUPPORT, host_action_notify(fstr), UNUSED(fstr));
}
#endif // !HAS_DISPLAY && !HAS_STATUS_MESSAGE
@@ -1663,7 +1671,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
quick_feedback();
goto_screen(MEDIA_MENU_GATEWAY);
#else
- LCD_MESSAGEPGM(MSG_MEDIA_INSERTED);
+ LCD_MESSAGE(MSG_MEDIA_INSERTED);
#endif
}
}
@@ -1672,7 +1680,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
#if ENABLED(EXTENSIBLE_UI)
ExtUI::onMediaRemoved();
#elif PIN_EXISTS(SD_DETECT)
- LCD_MESSAGEPGM(MSG_MEDIA_REMOVED);
+ LCD_MESSAGE(MSG_MEDIA_REMOVED);
#if HAS_LCD_MENU
if (!defer_return_to_status) return_to_status();
#endif
@@ -1707,6 +1715,20 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
if (touch_calibration.need_calibration()) ui.goto_screen(touch_screen_calibration);
#endif
}
+
+ #if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ void MarlinUI::zoffset_overlay(const_float_t zvalue) {
+ // Determine whether the user is raising or lowering the nozzle.
+ static int8_t dir;
+ static float old_zvalue;
+ if (zvalue != old_zvalue) {
+ dir = zvalue ? zvalue < old_zvalue ? -1 : 1 : 0;
+ old_zvalue = zvalue;
+ }
+ zoffset_overlay(dir);
+ }
+ #endif
+
#endif
#if BOTH(EXTENSIBLE_UI, ADVANCED_PAUSE_FEATURE)
@@ -1715,29 +1737,24 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
const PauseMode mode/*=PAUSE_MODE_SAME*/,
const uint8_t extruder/*=active_extruder*/
) {
- //if (mode == PAUSE_MODE_SAME)
- //return;
SERIAL_ECHOLNPGM("PauseMsg=", message);
pause_mode = mode;
ExtUI::pauseModeStatus = message;
switch (message) {
- case PAUSE_MESSAGE_PARKING: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_PAUSE_PRINT_PARKING));
- case PAUSE_MESSAGE_CHANGING: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_INIT));
- case PAUSE_MESSAGE_UNLOAD: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_UNLOAD));
- case PAUSE_MESSAGE_WAITING: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_ADVANCED_PAUSE_WAITING));
- case PAUSE_MESSAGE_INSERT: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_INSERT));
- case PAUSE_MESSAGE_LOAD: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_LOAD));
+ case PAUSE_MESSAGE_PARKING: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_PAUSE_PRINT_PARKING)); break;
+ case PAUSE_MESSAGE_CHANGING: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_INIT)); break;
+ case PAUSE_MESSAGE_UNLOAD: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_UNLOAD)); break;
+ case PAUSE_MESSAGE_WAITING: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_ADVANCED_PAUSE_WAITING)); break;
+ case PAUSE_MESSAGE_INSERT: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_INSERT)); break;
+ case PAUSE_MESSAGE_LOAD: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_LOAD)); break;
case PAUSE_MESSAGE_PURGE:
- #if ENABLED(ADVANCED_PAUSE_CONTINUOUS_PURGE)
- ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_CONT_PURGE));
- #else
- ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_PURGE));
- #endif
- case PAUSE_MESSAGE_RESUME: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_RESUME));
- case PAUSE_MESSAGE_HEAT: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_HEAT));
- case PAUSE_MESSAGE_HEATING: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_HEATING));
- case PAUSE_MESSAGE_OPTION: ExtUI::onUserConfirmRequired_P(GET_TEXT(MSG_FILAMENT_CHANGE_OPTION_HEADER));
- case PAUSE_MESSAGE_STATUS:
+ ExtUI::onUserConfirmRequired(GET_TEXT_F(TERN(ADVANCED_PAUSE_CONTINUOUS_PURGE, MSG_FILAMENT_CHANGE_CONT_PURGE, MSG_FILAMENT_CHANGE_PURGE)));
+ break;
+ case PAUSE_MESSAGE_RESUME: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_RESUME)); break;
+ case PAUSE_MESSAGE_HEAT: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEAT)); break;
+ case PAUSE_MESSAGE_HEATING: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEATING)); break;
+ case PAUSE_MESSAGE_OPTION: ExtUI::onUserConfirmRequired(GET_TEXT_F(MSG_FILAMENT_CHANGE_OPTION_HEADER)); break;
+ case PAUSE_MESSAGE_STATUS: break;
default: break;
}
}
@@ -1787,7 +1804,7 @@ constexpr uint8_t epps = ENCODER_PULSES_PER_STEP;
);
});
#else
- set_status_P(eeprom_err(msgid));
+ set_status(FPSTR(eeprom_err(msgid)));
#endif
}
diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h
index be016f8683..883850d6e0 100644
--- a/Marlin/src/lcd/marlinui.h
+++ b/Marlin/src/lcd/marlinui.h
@@ -21,12 +21,11 @@
*/
#pragma once
-#include "../inc/MarlinConfig.h"
-
#include "../module/motion.h"
-
#include "buttons.h"
+#include "../inc/MarlinConfig.h"
+
#if HAS_BUZZER
#include "../libs/buzzer.h"
#endif
@@ -248,17 +247,18 @@ public:
#endif
#if HAS_LCD_BRIGHTNESS
- #ifndef MIN_LCD_BRIGHTNESS
- #define MIN_LCD_BRIGHTNESS 1
+ #ifndef LCD_BRIGHTNESS_MIN
+ #define LCD_BRIGHTNESS_MIN 1
#endif
- #ifndef MAX_LCD_BRIGHTNESS
- #define MAX_LCD_BRIGHTNESS 255
+ #ifndef LCD_BRIGHTNESS_MAX
+ #define LCD_BRIGHTNESS_MAX 255
#endif
#ifndef DEFAULT_LCD_BRIGHTNESS
- #define DEFAULT_LCD_BRIGHTNESS MAX_LCD_BRIGHTNESS
+ #define DEFAULT_LCD_BRIGHTNESS LCD_BRIGHTNESS_MAX
#endif
static uint8_t brightness;
static bool backlight;
+ static void _set_brightness(); // Implementation-specific
static void set_brightness(const uint8_t value);
FORCE_INLINE static void refresh_brightness() { set_brightness(brightness); }
#endif
@@ -342,25 +342,23 @@ public:
static bool has_status();
static void reset_status(const bool no_welcome=false);
- static void set_status(const char * const message, const bool persist=false);
- static void set_status_P(PGM_P const message, const int8_t level=0);
- static void status_printf_P(const uint8_t level, PGM_P const fmt, ...);
- static void set_alert_status_P(PGM_P const message);
+ static void set_alert_status(FSTR_P const fstr);
static inline void reset_alert_level() { alert_level = 0; }
#else
static constexpr bool has_status() { return false; }
static inline void reset_status(const bool=false) {}
- static void set_status(const char *message, const bool=false);
- static void set_status_P(PGM_P message, const int8_t=0);
- static void status_printf_P(const uint8_t, PGM_P message, ...);
- static inline void set_alert_status_P(PGM_P const) {}
+ static inline void set_alert_status(FSTR_P const) {}
static inline void reset_alert_level() {}
#endif
+ static void set_status(const char * const cstr, const bool persist=false);
+ static void set_status(FSTR_P const fstr, const int8_t level=0);
+ static void status_printf(const uint8_t level, FSTR_P const fmt, ...);
+
#if EITHER(HAS_DISPLAY, DWIN_CREALITY_LCD_ENHANCED)
- static void kill_screen(PGM_P const lcd_error, PGM_P const lcd_component);
+ static void kill_screen(FSTR_P const lcd_error, FSTR_P const lcd_component);
#else
- static inline void kill_screen(PGM_P const, PGM_P const) {}
+ static inline void kill_screen(FSTR_P const, FSTR_P const) {}
#endif
#if HAS_DISPLAY
@@ -426,8 +424,9 @@ public:
static uint8_t lcd_status_update_delay;
#if HAS_LCD_CONTRAST
- static int16_t contrast;
- static void set_contrast(const int16_t value);
+ static uint8_t contrast;
+ static void _set_contrast(); // Implementation-specific
+ static void set_contrast(const uint8_t value);
FORCE_INLINE static void refresh_contrast() { set_contrast(contrast); }
#endif
@@ -473,6 +472,11 @@ public:
static bool did_first_redraw;
#endif
+ #if EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
+ static void zoffset_overlay(const int8_t dir);
+ static void zoffset_overlay(const_float_t zvalue);
+ #endif
+
static void draw_kill_screen();
#else // No LCD
@@ -734,8 +738,7 @@ private:
extern MarlinUI ui;
-#define LCD_MESSAGEPGM_P(x) ui.set_status_P(x)
-#define LCD_ALERTMESSAGEPGM_P(x) ui.set_alert_status_P(x)
-
-#define LCD_MESSAGEPGM(x) LCD_MESSAGEPGM_P(GET_TEXT(x))
-#define LCD_ALERTMESSAGEPGM(x) LCD_ALERTMESSAGEPGM_P(GET_TEXT(x))
+#define LCD_MESSAGE_F(S) ui.set_status(F(S))
+#define LCD_MESSAGE(M) ui.set_status(GET_TEXT_F(M))
+#define LCD_ALERTMESSAGE_F(S) ui.set_alert_status(F(S))
+#define LCD_ALERTMESSAGE(M) ui.set_alert_status(GET_TEXT_F(M))
diff --git a/Marlin/src/lcd/menu/game/brickout.cpp b/Marlin/src/lcd/menu/game/brickout.cpp
index 4bdc924380..d738250b60 100644
--- a/Marlin/src/lcd/menu/game/brickout.cpp
+++ b/Marlin/src/lcd/menu/game/brickout.cpp
@@ -50,8 +50,8 @@ inline void reset_bricks(const uint16_t v) {
void reset_ball() {
constexpr uint8_t ball_dist = 24;
bdat.bally = BTOF(PADDLE_Y - ball_dist);
- bdat.ballv = FTOP(1.3f);
- bdat.ballh = -FTOP(1.25f);
+ bdat.ballv = FTOF(1.3f);
+ bdat.ballh = -FTOF(1.25f);
uint8_t bx = bdat.paddle_x + (PADDLE_W) / 2 + ball_dist;
if (bx >= LCD_PIXEL_WIDTH - 10) { bx -= ball_dist * 2; bdat.ballh = -bdat.ballh; }
bdat.ballx = BTOF(bx);
diff --git a/Marlin/src/lcd/menu/game/game.cpp b/Marlin/src/lcd/menu/game/game.cpp
index c14bd2a68d..d465b00388 100644
--- a/Marlin/src/lcd/menu/game/game.cpp
+++ b/Marlin/src/lcd/menu/game/game.cpp
@@ -48,7 +48,7 @@ void MarlinGame::draw_game_over() {
u8g.setColorIndex(0);
u8g.drawBox(lx - 1, ly - gohigh - 1, gowide + 2, gohigh + 2);
u8g.setColorIndex(1);
- if (ui.get_blink()) lcd_put_u8str_P(lx, ly, PSTR("GAME OVER"));
+ if (ui.get_blink()) lcd_put_u8str(lx, ly, F("GAME OVER"));
}
}
diff --git a/Marlin/src/lcd/menu/game/snake.cpp b/Marlin/src/lcd/menu/game/snake.cpp
index f8892a4e7a..c88893a6e6 100644
--- a/Marlin/src/lcd/menu/game/snake.cpp
+++ b/Marlin/src/lcd/menu/game/snake.cpp
@@ -63,7 +63,7 @@
#define SNAKE_SIZ SNAKE_BOX
#endif
-constexpr fixed_t snakev = FTOP(0.20);
+constexpr fixed_t snakev = FTOF(0.20);
snake_data_t &sdat = marlin_game_data.snake;
@@ -125,7 +125,7 @@ void snake_reset() {
// Init the head and velocity
sdat.snakex = BTOF(1);
sdat.snakey = BTOF(GAME_H / 2);
- //snakev = FTOP(0.25);
+ //snakev = FTOF(0.25);
// Init the tail with a cw turn
sdat.snake_dir = 0;
diff --git a/Marlin/src/lcd/menu/game/types.h b/Marlin/src/lcd/menu/game/types.h
index f6e6c78aa0..6e0a2051d7 100644
--- a/Marlin/src/lcd/menu/game/types.h
+++ b/Marlin/src/lcd/menu/game/types.h
@@ -27,7 +27,7 @@ typedef struct { int8_t x, y; } pos_t;
// Simple 8:8 fixed-point
typedef int16_t fixed_t;
-#define FTOP(F) fixed_t((F)*256.0f)
+#define FTOF(F) fixed_t((F)*256.0f)
#define PTOF(P) (float(P)*(1.0f/256.0f))
#define BTOF(X) (fixed_t(X)<<8)
#define FTOB(X) int8_t(fixed_t(X)>>8)
diff --git a/Marlin/src/lcd/menu/menu.cpp b/Marlin/src/lcd/menu/menu.cpp
index a177f32932..a24ad883f7 100644
--- a/Marlin/src/lcd/menu/menu.cpp
+++ b/Marlin/src/lcd/menu/menu.cpp
@@ -103,42 +103,28 @@ void MarlinUI::_goto_previous_screen(TERN_(TURBO_BACK_MENU_ITEM, const bool is_b
/////////// Menu Editing Actions ///////////
////////////////////////////////////////////
-/**
- * Functions for editing single values
- *
- * The "DEFINE_MENU_EDIT_ITEM" macro generates the classes needed to edit a numerical value.
- *
- * The prerequisite is that in the header the type was already declared:
- *
- * DEFINE_MENU_EDIT_ITEM_TYPE(int3, int16_t, i16tostr3rj, 1)
- *
- * For example, DEFINE_MENU_EDIT_ITEM(int3) expands into:
- *
- * template class TMenuEditItem
- *
- * You can then use one of the menu macros to present the edit interface:
- * EDIT_ITEM(int3, MSG_SPEED, &feedrate_percentage, 10, 999)
- *
- * This expands into a more primitive menu item:
- * _MENU_ITEM_P(int3, false, GET_TEXT(MSG_SPEED), &feedrate_percentage, 10, 999)
- *
- * ...which calls:
- * MenuItem_int3::action(plabel, &feedrate_percentage, 10, 999)
- * MenuItem_int3::draw(encoderLine == _thisItemNr, _lcdLineNr, plabel, &feedrate_percentage, 10, 999)
- */
+// All Edit Screens run the same way, but `draw_edit_screen` is implementation-specific
void MenuEditItemBase::edit_screen(strfunc_t strfunc, loadfunc_t loadfunc) {
+ // Reset repeat_delay for Touch Buttons
TERN_(HAS_TOUCH_BUTTONS, ui.repeat_delay = BUTTON_DELAY_EDIT);
+ // Constrain ui.encoderPosition to 0 ... maxEditValue (calculated in encoder steps)
if (int32_t(ui.encoderPosition) < 0) ui.encoderPosition = 0;
if (int32_t(ui.encoderPosition) > maxEditValue) ui.encoderPosition = maxEditValue;
+ // If drawing is flagged then redraw the (whole) edit screen
if (ui.should_draw())
draw_edit_screen(strfunc(ui.encoderPosition + minEditValue));
+ // If there was a click or "live editing" and encoder moved...
if (ui.lcd_clicked || (liveEdit && ui.should_draw())) {
+ // Pass the editValue pointer to the loadfunc along with the encoder plus min
if (editValue) loadfunc(editValue, ui.encoderPosition + minEditValue);
+ // If a callbackFunc was set, call it for click or always for "live editing"
if (callbackFunc && (liveEdit || ui.lcd_clicked)) (*callbackFunc)();
+ // Use up the click to finish editing and go to the previous screen
if (ui.use_click()) ui.goto_previous_screen();
}
}
+// Going to an edit screen sets up some persistent values first
void MenuEditItemBase::goto_edit_screen(
PGM_P const el, // Edit label
void * const ev, // Edit value pointer
@@ -257,9 +243,6 @@ void MarlinUI::synchronize(PGM_P const msg/*=nullptr*/) {
*
* encoderLine is the position based on the encoder
* encoderTopLine is the top menu line to display
- * _lcdLineNr is the index of the LCD line (e.g., 0-3)
- * _menuLineNr is the menu item to draw and process
- * _thisItemNr is the index of each MENU_ITEM or STATIC_ITEM
* screen_items is the total number of items in the menu (after one call)
*/
void scroll_screen(const uint8_t limit, const bool is_menu) {
@@ -315,7 +298,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
const int16_t babystep_increment = int16_t(ui.encoderPosition) * (BABYSTEP_SIZE_Z);
ui.encoderPosition = 0;
- const float diff = planner.steps_to_mm[Z_AXIS] * babystep_increment,
+ const float diff = planner.mm_per_step[Z_AXIS] * babystep_increment,
new_probe_offset = probe.offset.z + diff,
new_offs = TERN(BABYSTEP_HOTEND_Z_OFFSET
, do_probe ? new_probe_offset : hotend_offset[active_extruder].z - diff
@@ -336,7 +319,7 @@ void scroll_screen(const uint8_t limit, const bool is_menu) {
if (ui.should_draw()) {
if (do_probe) {
MenuEditItemBase::draw_edit_screen(GET_TEXT(MSG_ZPROBE_ZOFFSET), BABYSTEP_TO_STR(probe.offset.z));
- TERN_(BABYSTEP_ZPROBE_GFX_OVERLAY, _lcd_zoffset_overlay_gfx(probe.offset.z));
+ TERN_(BABYSTEP_ZPROBE_GFX_OVERLAY, ui.zoffset_overlay(probe.offset.z));
}
else {
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h
index 7b253ad0ee..44b0e89aca 100644
--- a/Marlin/src/lcd/menu/menu.h
+++ b/Marlin/src/lcd/menu/menu.h
@@ -39,10 +39,6 @@ typedef void (*selectFunc_t)();
#define SS_INVERT 0x02
#define SS_DEFAULT SS_CENTER
-#if EITHER(HAS_MARLINUI_U8GLIB, IS_DWIN_MARLINUI) && EITHER(BABYSTEP_ZPROBE_GFX_OVERLAY, MESH_EDIT_GFX_OVERLAY)
- void _lcd_zoffset_overlay_gfx(const_float_t zvalue);
-#endif
-
#if ENABLED(BABYSTEP_ZPROBE_OFFSET) && Z_PROBE_OFFSET_RANGE_MIN >= -9 && Z_PROBE_OFFSET_RANGE_MAX <= 9
#define BABYSTEP_TO_STR(N) ftostr43sign(N)
#elif ENABLED(BABYSTEPPING)
@@ -64,7 +60,9 @@ class MenuItemBase {
// Store the index of the item ahead of use by indexed items
FORCE_INLINE static void init(const int8_t ind=0, PGM_P const pstr=nullptr) { itemIndex = ind; itemString = pstr; }
+ // Implementation-specific:
// Draw an item either selected (pre_char) or not (space) with post_char
+ // Menus may set up itemIndex, itemString and pass them to string-building or string-emitting functions
static void _draw(const bool sel, const uint8_t row, PGM_P const pstr, const char pre_char, const char post_char);
// Draw an item either selected ('>') or not (space) with post_char
@@ -114,7 +112,7 @@ class MenuItem_confirm : public MenuItemBase {
static inline void select_screen(
PGM_P const yes, PGM_P const no,
selectFunc_t yesFunc, selectFunc_t noFunc,
- PGM_P const pref, const progmem_str string, PGM_P const suff=nullptr
+ PGM_P const pref, FSTR_P const string, PGM_P const suff=nullptr
) {
char str[strlen_P((PGM_P)string) + 1];
strcpy_P(str, (PGM_P)string);
@@ -171,11 +169,11 @@ class MenuEditItemBase : public MenuItemBase {
);
static void edit_screen(strfunc_t, loadfunc_t); // Edit value handler
public:
- // Implemented for HD44780 and DOGM
+ // Implementation-specific:
// Draw the current item at specified row with edit data
static void draw(const bool sel, const uint8_t row, PGM_P const pstr, const char * const inStr, const bool pgm=false);
- // Implemented for HD44780 and DOGM
+ // Implementation-specific:
// This low-level method is good to draw from anywhere
static void draw_edit_screen(PGM_P const pstr, const char * const value);
diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp
index 8834ee6eac..8b688ab2ab 100644
--- a/Marlin/src/lcd/menu/menu_advanced.cpp
+++ b/Marlin/src/lcd/menu/menu_advanced.cpp
@@ -466,9 +466,11 @@ void menu_backlash();
#ifdef MAX_JERK_EDIT_VALUES
MAX_JERK_EDIT_VALUES
#elif ENABLED(LIMITED_JERK_EDITING)
- { (DEFAULT_XJERK) * 2, (DEFAULT_YJERK) * 2, (DEFAULT_ZJERK) * 2, (DEFAULT_EJERK) * 2 }
+ { LOGICAL_AXIS_LIST((DEFAULT_EJERK) * 2,
+ (DEFAULT_XJERK) * 2, (DEFAULT_YJERK) * 2, (DEFAULT_ZJERK) * 2,
+ (DEFAULT_IJERK) * 2, (DEFAULT_JJERK) * 2, (DEFAULT_KJERK) * 2) }
#else
- { 990, 990, 990, 990 }
+ { LOGICAL_AXIS_LIST(990, 990, 990, 990, 990, 990, 990) }
#endif
;
#define EDIT_JERK(N) EDIT_ITEM_FAST(float3, MSG_V##N##_JERK, &planner.max_jerk[_AXIS(N)], 1, max_jerk_edit[_AXIS(N)])
@@ -530,7 +532,7 @@ void menu_advanced_steps_per_mm() {
if (e == active_extruder)
planner.refresh_positioning();
else
- planner.steps_to_mm[E_AXIS_N(e)] = 1.0f / planner.settings.axis_steps_per_mm[E_AXIS_N(e)];
+ planner.mm_per_step[E_AXIS_N(e)] = 1.0f / planner.settings.axis_steps_per_mm[E_AXIS_N(e)];
});
#elif E_STEPPERS
EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); });
@@ -555,7 +557,7 @@ void menu_advanced_settings() {
//
// Set Home Offsets
//
- ACTION_ITEM(MSG_SET_HOME_OFFSETS, []{ queue.inject_P(PSTR("M428")); ui.return_to_status(); });
+ ACTION_ITEM(MSG_SET_HOME_OFFSETS, []{ queue.inject(F("M428")); ui.return_to_status(); });
#endif
// M203 / M205 - Feedrate items
@@ -628,7 +630,7 @@ void menu_advanced_settings() {
didset = settings.set_sd_update_status(new_state);
ui.completion_feedback(didset);
ui.return_to_status();
- if (new_state) LCD_MESSAGEPGM(MSG_RESET_PRINTER); else ui.reset_status();
+ if (new_state) LCD_MESSAGE(MSG_RESET_PRINTER); else ui.reset_status();
});
#endif
diff --git a/Marlin/src/lcd/menu/menu_bed_corners.cpp b/Marlin/src/lcd/menu/menu_bed_corners.cpp
index ea9ef75aa1..178d466478 100644
--- a/Marlin/src/lcd/menu/menu_bed_corners.cpp
+++ b/Marlin/src/lcd/menu/menu_bed_corners.cpp
@@ -179,7 +179,7 @@ static void _lcd_level_bed_corners_get_next_position() {
// Display # of good points found vs total needed
if (PAGE_CONTAINS(y - (MENU_FONT_HEIGHT), y)) {
SETCURSOR(TERN(TFT_COLOR_UI, 2, 0), cy);
- lcd_put_u8str_P(GET_TEXT(MSG_BED_TRAMMING_GOOD_POINTS));
+ lcd_put_u8str_(GET_TEXT_F(MSG_BED_TRAMMING_GOOD_POINTS));
IF_ENABLED(TFT_COLOR_UI, lcd_moveto(12, cy));
lcd_put_u8str(GOOD_POINTS_TO_STR(good_points));
lcd_put_wchar('/');
@@ -192,7 +192,7 @@ static void _lcd_level_bed_corners_get_next_position() {
// Display the Last Z value
if (PAGE_CONTAINS(y - (MENU_FONT_HEIGHT), y)) {
SETCURSOR(TERN(TFT_COLOR_UI, 2, 0), cy);
- lcd_put_u8str_P(GET_TEXT(MSG_BED_TRAMMING_LAST_Z));
+ lcd_put_u8str(GET_TEXT_F(MSG_BED_TRAMMING_LAST_Z));
IF_ENABLED(TFT_COLOR_UI, lcd_moveto(12, 2));
lcd_put_u8str(LAST_Z_TO_STR(last_z));
}
@@ -212,7 +212,7 @@ static void _lcd_level_bed_corners_get_next_position() {
void _lcd_draw_level_prompt() {
if (!ui.should_draw()) return;
MenuItem_confirm::confirm_screen(
- []{ queue.inject_P(TERN(HAS_LEVELING, PSTR("G29N"), G28_STR)); ui.return_to_status(); }
+ []{ queue.inject(TERN(HAS_LEVELING, F("G29N"), FPSTR(G28_STR))); ui.return_to_status(); }
, []{ ui.goto_previous_screen_no_defer(); }
, GET_TEXT(MSG_BED_TRAMMING_IN_RANGE)
, (const char*)nullptr, PSTR("?")
diff --git a/Marlin/src/lcd/menu/menu_bed_leveling.cpp b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
index f01c7899fb..eb286f96b9 100644
--- a/Marlin/src/lcd/menu/menu_bed_leveling.cpp
+++ b/Marlin/src/lcd/menu/menu_bed_leveling.cpp
@@ -103,9 +103,9 @@
ui.wait_for_move = true;
ui.goto_screen(_lcd_level_bed_done);
#if ENABLED(MESH_BED_LEVELING)
- queue.inject_P(PSTR("G29S2"));
+ queue.inject(F("G29S2"));
#elif ENABLED(PROBE_MANUALLY)
- queue.inject_P(PSTR("G29V1"));
+ queue.inject(F("G29V1"));
#endif
}
else
@@ -155,9 +155,9 @@
// G29 Records Z, moves, and signals when it pauses
ui.wait_for_move = true;
#if ENABLED(MESH_BED_LEVELING)
- queue.inject_P(manual_probe_index ? PSTR("G29S2") : PSTR("G29S1"));
+ queue.inject(manual_probe_index ? F("G29S2") : F("G29S1"));
#elif ENABLED(PROBE_MANUALLY)
- queue.inject_P(PSTR("G29V1"));
+ queue.inject(F("G29V1"));
#endif
}
diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp
index 44c99dd0a9..0e11cd211a 100644
--- a/Marlin/src/lcd/menu/menu_configuration.cpp
+++ b/Marlin/src/lcd/menu/menu_configuration.cpp
@@ -174,12 +174,12 @@ void menu_advanced_settings();
START_MENU();
BACK_ITEM(MSG_CONFIGURATION);
#if ENABLED(DUAL_X_CARRIAGE)
- EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_X, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets);
+ EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].x, float(X2_HOME_POS - 25), float(X2_HOME_POS + 25), _recalc_offsets);
#else
- EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_X, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets);
+ EDIT_ITEM_FAST_N(float42_52, X_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].x, -99.0, 99.0, _recalc_offsets);
#endif
- EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_Y, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets);
- EDIT_ITEM_FAST(float42_52, MSG_HOTEND_OFFSET_Z, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets);
+ EDIT_ITEM_FAST_N(float42_52, Y_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].y, -99.0, 99.0, _recalc_offsets);
+ EDIT_ITEM_FAST_N(float42_52, Z_AXIS, MSG_HOTEND_OFFSET_A, &hotend_offset[1].z, Z_PROBE_LOW_POINT, 10.0, _recalc_offsets);
#if ENABLED(EEPROM_SETTINGS)
ACTION_ITEM(MSG_STORE_EEPROM, ui.store_settings);
#endif
@@ -341,8 +341,8 @@ void menu_advanced_settings();
#if ENABLED(CUSTOM_MENU_CONFIG)
- void _lcd_custom_menus_configuration_gcode(PGM_P const cmd) {
- queue.inject_P(cmd);
+ void _lcd_custom_menus_configuration_gcode(FSTR_P const fstr) {
+ queue.inject(fstr);
TERN_(CUSTOM_MENU_CONFIG_SCRIPT_AUDIBLE_FEEDBACK, ui.completion_feedback());
TERN_(CUSTOM_MENU_CONFIG_SCRIPT_RETURN, ui.return_to_status());
}
@@ -358,7 +358,7 @@ void menu_advanced_settings();
#else
#define _DONE_SCRIPT ""
#endif
- #define GCODE_LAMBDA_CONF(N) []{ _lcd_custom_menus_configuration_gcode(PSTR(CONFIG_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
+ #define GCODE_LAMBDA_CONF(N) []{ _lcd_custom_menus_configuration_gcode(F(CONFIG_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
#define _CUSTOM_ITEM_CONF(N) ACTION_ITEM_P(PSTR(CONFIG_MENU_ITEM_##N##_DESC), GCODE_LAMBDA_CONF(N));
#define _CUSTOM_ITEM_CONF_CONFIRM(N) \
SUBMENU_P(PSTR(CONFIG_MENU_ITEM_##N##_DESC), []{ \
@@ -528,8 +528,11 @@ void menu_configuration() {
#endif
#endif
+ #if HAS_LCD_BRIGHTNESS
+ EDIT_ITEM_FAST(uint8, MSG_BRIGHTNESS, &ui.brightness, LCD_BRIGHTNESS_MIN, LCD_BRIGHTNESS_MAX, ui.refresh_brightness, true);
+ #endif
#if HAS_LCD_CONTRAST
- EDIT_ITEM(int3, MSG_CONTRAST, &ui.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, ui.refresh_contrast, true);
+ EDIT_ITEM_FAST(uint8, MSG_CONTRAST, &ui.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX, ui.refresh_contrast, true);
#endif
#if ENABLED(FWRETRACT)
SUBMENU(MSG_RETRACT, menu_config_retract);
diff --git a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
index c9bcb895fc..95103e9bf6 100644
--- a/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
+++ b/Marlin/src/lcd/menu/menu_delta_calibrate.cpp
@@ -64,8 +64,8 @@ void _man_probe_pt(const xy_pos_t &xy) {
float lcd_probe_pt(const xy_pos_t &xy) {
_man_probe_pt(xy);
ui.defer_status_screen();
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Delta Calibration in progress"), CONTINUE_STR));
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(PSTR("Delta Calibration in progress")));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("Delta Calibration in progress"), FPSTR(CONTINUE_STR)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("Delta Calibration in progress")));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
ui.goto_previous_screen_no_defer();
return current_position.z;
diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp
index 53fd67dbb2..7d0d2dc72c 100644
--- a/Marlin/src/lcd/menu/menu_filament.cpp
+++ b/Marlin/src/lcd/menu/menu_filament.cpp
@@ -209,7 +209,7 @@ void menu_change_filament() {
#else
if (thermalManager.targetHotEnoughToExtrude(active_extruder))
- queue.inject_P(PSTR("M600B0"));
+ queue.inject(F("M600B0"));
else
ui.goto_screen([]{ _menu_temp_filament_op(PAUSE_MODE_CHANGE_FILAMENT, 0); });
diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h
index 0a4f4bb7d1..56138a15bd 100644
--- a/Marlin/src/lcd/menu/menu_item.h
+++ b/Marlin/src/lcd/menu/menu_item.h
@@ -23,7 +23,7 @@
#include "menu.h"
#include "../marlinui.h"
-#include "../../gcode/queue.h" // for inject_P
+#include "../../gcode/queue.h" // for inject
#include "../../inc/MarlinConfigPre.h"
@@ -64,8 +64,8 @@ class MenuItem_gcode : public MenuItem_button {
FORCE_INLINE static void draw(const bool sel, const uint8_t row, PGM_P const pstr, ...) {
_draw(sel, row, pstr, '>', ' ');
}
- static void action(PGM_P const, PGM_P const pgcode) { queue.inject_P(pgcode); }
- static inline void action(PGM_P const pstr, const uint8_t, const char * const pgcode) { action(pstr, pgcode); }
+ static void action(PGM_P const, PGM_P const pgcode) { queue.inject(FPSTR(pgcode)); }
+ static inline void action(PGM_P const pstr, const uint8_t, PGM_P const pgcode) { action(pstr, pgcode); }
};
////////////////////////////////////////////
@@ -106,9 +106,23 @@ class TMenuEditItem : MenuEditItemBase {
}
};
-// Provide a set of Edit Item Types which encompass a primitive
-// type, a string function, and a scale factor for edit and display.
-// These items call the Edit Item draw method passing the prepared string.
+/**
+ * DEFINE_MENU_EDIT_ITEM_TYPE(int3, int16_t, i16tostr3rj, 1)
+ *
+ * Define struct types for use by EDIT_ITEM(...) macros, which encompass
+ * a primitive storage type, a string function, and a scale factor for edit / display.
+ * The EDIT_ITEM macros take care of calling action and draw methods as needed.
+ *
+ * For example, DEFINE_MENU_EDIT_ITEM_TYPE(percent, uint8_t, ui8tostr4pctrj, 100.f/255.f, +0.5f) expands into:
+ *
+ * struct MenuEditItemInfo_percent {
+ * typedef uint8_t type_t;
+ * static inline float scale(const_float_t value) { return value * (100.f/255.f) +0.5f; }
+ * static inline float unscale(const_float_t value) { return value / (100.f/255.f) +0.5f; }
+ * static inline const char* strfunc(const_float_t value) { return ui8tostr4pctrj(_DOFIX(uint8_t,value)); }
+ * };
+ * typedef TMenuEditItem MenuItem_percent
+ */
#define __DOFIXfloat PROBE()
#define _DOFIX(TYPE,V) TYPE(TERN(IS_PROBE(__DOFIX##TYPE),FIXFLOAT(V),(V)))
#define DEFINE_MENU_EDIT_ITEM_TYPE(NAME, TYPE, STRFUNC, SCALE, ETC...) \
diff --git a/Marlin/src/lcd/menu/menu_job_recovery.cpp b/Marlin/src/lcd/menu/menu_job_recovery.cpp
index 7cd2949d62..963806b1d6 100644
--- a/Marlin/src/lcd/menu/menu_job_recovery.cpp
+++ b/Marlin/src/lcd/menu/menu_job_recovery.cpp
@@ -35,7 +35,7 @@
static void lcd_power_loss_recovery_resume() {
ui.return_to_status();
- queue.inject_P(PSTR("M1000"));
+ queue.inject(F("M1000"));
}
void lcd_power_loss_recovery_cancel() {
diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp
index 1bf6645e2e..f39e008cd7 100644
--- a/Marlin/src/lcd/menu/menu_main.cpp
+++ b/Marlin/src/lcd/menu/menu_main.cpp
@@ -106,8 +106,8 @@ void menu_configuration();
#if ENABLED(CUSTOM_MENU_MAIN)
- void _lcd_custom_menu_main_gcode(PGM_P const cmd) {
- queue.inject_P(cmd);
+ void _lcd_custom_menu_main_gcode(FSTR_P const fstr) {
+ queue.inject(fstr);
TERN_(CUSTOM_MENU_MAIN_SCRIPT_AUDIBLE_FEEDBACK, ui.completion_feedback());
TERN_(CUSTOM_MENU_MAIN_SCRIPT_RETURN, ui.return_to_status());
}
@@ -123,7 +123,7 @@ void menu_configuration();
#else
#define _DONE_SCRIPT ""
#endif
- #define GCODE_LAMBDA_MAIN(N) []{ _lcd_custom_menu_main_gcode(PSTR(MAIN_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
+ #define GCODE_LAMBDA_MAIN(N) []{ _lcd_custom_menu_main_gcode(F(MAIN_MENU_ITEM_##N##_GCODE _DONE_SCRIPT)); }
#define _CUSTOM_ITEM_MAIN(N) ACTION_ITEM_P(PSTR(MAIN_MENU_ITEM_##N##_DESC), GCODE_LAMBDA_MAIN(N));
#define _CUSTOM_ITEM_MAIN_CONFIRM(N) \
SUBMENU_P(PSTR(MAIN_MENU_ITEM_##N##_DESC), []{ \
diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp
index 1866426a65..213ad257b8 100644
--- a/Marlin/src/lcd/menu/menu_media.cpp
+++ b/Marlin/src/lcd/menu/menu_media.cpp
@@ -48,6 +48,7 @@ void lcd_sd_updir() {
goto_screen(menu_media, sd_encoder_position, sd_top_line, sd_items);
sd_encoder_position = 0xFFFF;
defer_status_screen();
+ TERN_(HAS_TOUCH_SLEEP, ui.wakeup_screen());
}
#endif
diff --git a/Marlin/src/lcd/menu/menu_mixer.cpp b/Marlin/src/lcd/menu/menu_mixer.cpp
index d07b89c7c0..be4363574b 100644
--- a/Marlin/src/lcd/menu/menu_mixer.cpp
+++ b/Marlin/src/lcd/menu/menu_mixer.cpp
@@ -57,7 +57,7 @@
if (ui.should_draw()) {
char tmp[16];
SETCURSOR(1, (LCD_HEIGHT - 1) / 2);
- lcd_put_u8str_P(isend ? GET_TEXT(MSG_END_Z) : GET_TEXT(MSG_START_Z));
+ lcd_put_u8str(isend ? GET_TEXT_F(MSG_END_Z) : GET_TEXT_F(MSG_START_Z));
sprintf_P(tmp, PSTR("%4d.%d mm"), int(zvar), int(zvar * 10) % 10);
SETCURSOR_RJ(9, (LCD_HEIGHT - 1) / 2);
lcd_put_u8str(tmp);
@@ -114,7 +114,7 @@ static uint8_t v_index;
void _lcd_draw_mix(const uint8_t y) {
char tmp[20]; // "100%_100%"
sprintf_P(tmp, PSTR("%3d%% %3d%%"), int(mixer.mix[0]), int(mixer.mix[1]));
- SETCURSOR(2, y); lcd_put_u8str_P(GET_TEXT(MSG_MIX));
+ SETCURSOR(2, y); lcd_put_u8str(GET_TEXT_F(MSG_MIX));
SETCURSOR_RJ(10, y); lcd_put_u8str(tmp);
}
#endif
@@ -253,7 +253,7 @@ void menu_mixer() {
MSG_BUTTON_RESET, MSG_BUTTON_CANCEL,
[]{
mixer.reset_vtools();
- LCD_MESSAGEPGM(MSG_VTOOLS_RESET);
+ LCD_MESSAGE(MSG_VTOOLS_RESET);
ui.return_to_status();
},
nullptr,
diff --git a/Marlin/src/lcd/menu/menu_mmu2.cpp b/Marlin/src/lcd/menu/menu_mmu2.cpp
index 425a8ca751..99e5c06245 100644
--- a/Marlin/src/lcd/menu/menu_mmu2.cpp
+++ b/Marlin/src/lcd/menu/menu_mmu2.cpp
@@ -36,14 +36,14 @@
inline void action_mmu2_load_filament_to_nozzle(const uint8_t tool) {
ui.reset_status();
ui.return_to_status();
- ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(tool + 1));
+ ui.status_printf(0, GET_TEXT_F(MSG_MMU2_LOADING_FILAMENT), int(tool + 1));
if (mmu2.load_filament_to_nozzle(tool)) ui.reset_status();
ui.return_to_status();
}
void _mmu2_load_filament(uint8_t index) {
ui.return_to_status();
- ui.status_printf_P(0, GET_TEXT(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
+ ui.status_printf(0, GET_TEXT_F(MSG_MMU2_LOADING_FILAMENT), int(index + 1));
mmu2.load_filament(index);
ui.reset_status();
}
@@ -74,14 +74,14 @@ void menu_mmu2_load_to_nozzle() {
void _mmu2_eject_filament(uint8_t index) {
ui.reset_status();
ui.return_to_status();
- ui.status_printf_P(0, GET_TEXT(MSG_MMU2_EJECTING_FILAMENT), int(index + 1));
+ ui.status_printf(0, GET_TEXT_F(MSG_MMU2_EJECTING_FILAMENT), int(index + 1));
if (mmu2.eject_filament(index, true)) ui.reset_status();
}
void action_mmu2_unload_filament() {
ui.reset_status();
ui.return_to_status();
- LCD_MESSAGEPGM(MSG_MMU2_UNLOADING_FILAMENT);
+ LCD_MESSAGE(MSG_MMU2_UNLOADING_FILAMENT);
idle();
if (mmu2.unload()) ui.reset_status();
}
diff --git a/Marlin/src/lcd/menu/menu_motion.cpp b/Marlin/src/lcd/menu/menu_motion.cpp
index 948c8807b2..7191e637d1 100644
--- a/Marlin/src/lcd/menu/menu_motion.cpp
+++ b/Marlin/src/lcd/menu/menu_motion.cpp
@@ -329,21 +329,21 @@ void menu_move() {
BACK_ITEM(MSG_MOTION);
GCODES_ITEM(MSG_AUTO_HOME, G28_STR);
- GCODES_ITEM(MSG_AUTO_HOME_X, PSTR("G28X"));
+ GCODES_ITEM_N(X_AXIS, MSG_AUTO_HOME_A, PSTR("G28X"));
#if HAS_Y_AXIS
- GCODES_ITEM(MSG_AUTO_HOME_Y, PSTR("G28Y"));
+ GCODES_ITEM_N(Y_AXIS, MSG_AUTO_HOME_A, PSTR("G28Y"));
#endif
#if HAS_Z_AXIS
- GCODES_ITEM(MSG_AUTO_HOME_Z, PSTR("G28Z"));
+ GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z"));
#endif
#if LINEAR_AXES >= 4
- GCODES_ITEM(MSG_AUTO_HOME_I, PSTR("G28" AXIS4_STR));
+ GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR));
#endif
#if LINEAR_AXES >= 5
- GCODES_ITEM(MSG_AUTO_HOME_J, PSTR("G28" AXIS5_STR));
+ GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR));
#endif
#if LINEAR_AXES >= 6
- GCODES_ITEM(MSG_AUTO_HOME_K, PSTR("G28" AXIS6_STR));
+ GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR));
#endif
END_MENU();
@@ -382,21 +382,21 @@ void menu_motion() {
#else
GCODES_ITEM(MSG_AUTO_HOME, G28_STR);
#if ENABLED(INDIVIDUAL_AXIS_HOMING_MENU)
- GCODES_ITEM(MSG_AUTO_HOME_X, PSTR("G28X"));
+ GCODES_ITEM_N(X_AXIS, MSG_AUTO_HOME_A, PSTR("G28X"));
#if HAS_Y_AXIS
- GCODES_ITEM(MSG_AUTO_HOME_Y, PSTR("G28Y"));
+ GCODES_ITEM_N(Y_AXIS, MSG_AUTO_HOME_A, PSTR("G28Y"));
#endif
#if HAS_Z_AXIS
- GCODES_ITEM(MSG_AUTO_HOME_Z, PSTR("G28Z"));
+ GCODES_ITEM_N(Z_AXIS, MSG_AUTO_HOME_A, PSTR("G28Z"));
#endif
#if LINEAR_AXES >= 4
- GCODES_ITEM(MSG_AUTO_HOME_I, PSTR("G28" AXIS4_STR));
+ GCODES_ITEM_N(I_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS4_STR));
#endif
#if LINEAR_AXES >= 5
- GCODES_ITEM(MSG_AUTO_HOME_J, PSTR("G28" AXIS5_STR));
+ GCODES_ITEM_N(J_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS5_STR));
#endif
#if LINEAR_AXES >= 6
- GCODES_ITEM(MSG_AUTO_HOME_K, PSTR("G28" AXIS6_STR));
+ GCODES_ITEM_N(K_AXIS, MSG_AUTO_HOME_A, PSTR("G28" AXIS6_STR));
#endif
#endif
#endif
diff --git a/Marlin/src/lcd/menu/menu_probe_offset.cpp b/Marlin/src/lcd/menu/menu_probe_offset.cpp
index 5ed217131a..12b55969a3 100644
--- a/Marlin/src/lcd/menu/menu_probe_offset.cpp
+++ b/Marlin/src/lcd/menu/menu_probe_offset.cpp
@@ -111,7 +111,7 @@ void probe_offset_wizard_menu() {
// If wizard-homing was done by probe with PROBE_OFFSET_WIZARD_START_Z
#if HOMING_Z_WITH_PROBE && defined(PROBE_OFFSET_WIZARD_START_Z)
set_axis_never_homed(Z_AXIS); // On cancel the Z position needs correction
- queue.inject_P(PSTR("G28Z"));
+ queue.inject(F("G28Z"));
#else // Otherwise do a Z clearance move like after Homing
z_clearance_move();
#endif
diff --git a/Marlin/src/lcd/menu/menu_tramming.cpp b/Marlin/src/lcd/menu/menu_tramming.cpp
index 9bc799129e..5cdcf75c1e 100644
--- a/Marlin/src/lcd/menu/menu_tramming.cpp
+++ b/Marlin/src/lcd/menu/menu_tramming.cpp
@@ -96,7 +96,7 @@ void goto_tramming_wizard() {
// Inject G28, wait for homing to complete,
set_all_unhomed();
- queue.inject_P(TERN(CAN_SET_LEVELING_AFTER_G28, PSTR("G28L0"), G28_STR));
+ queue.inject(TERN(CAN_SET_LEVELING_AFTER_G28, F("G28L0"), FPSTR(G28_STR)));
ui.goto_screen([]{
_lcd_draw_homing();
diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp
index 3a0d0c81ca..b3f078d7a0 100644
--- a/Marlin/src/lcd/menu/menu_tune.cpp
+++ b/Marlin/src/lcd/menu/menu_tune.cpp
@@ -65,23 +65,23 @@
babystep.add_steps(axis, steps);
}
if (ui.should_draw()) {
- const float spm = planner.steps_to_mm[axis];
- MenuEditItemBase::draw_edit_screen(msg, BABYSTEP_TO_STR(spm * babystep.accum));
+ const float mps = planner.mm_per_step[axis];
+ MenuEditItemBase::draw_edit_screen(msg, BABYSTEP_TO_STR(mps * babystep.accum));
#if ENABLED(BABYSTEP_DISPLAY_TOTAL)
const bool in_view = TERN1(HAS_MARLINUI_U8GLIB, PAGE_CONTAINS(LCD_PIXEL_HEIGHT - MENU_FONT_HEIGHT, LCD_PIXEL_HEIGHT - 1));
if (in_view) {
TERN_(HAS_MARLINUI_U8GLIB, ui.set_font(FONT_MENU));
#if ENABLED(TFT_COLOR_UI)
lcd_moveto(4, 3);
- lcd_put_u8str_P(GET_TEXT(MSG_BABYSTEP_TOTAL));
+ lcd_put_u8str(GET_TEXT_F(MSG_BABYSTEP_TOTAL));
lcd_put_wchar(':');
lcd_moveto(10, 3);
#else
lcd_moveto(0, TERN(HAS_MARLINUI_U8GLIB, LCD_PIXEL_HEIGHT - MENU_FONT_DESCENT, LCD_HEIGHT - 1));
- lcd_put_u8str_P(GET_TEXT(MSG_BABYSTEP_TOTAL));
+ lcd_put_u8str(GET_TEXT_F(MSG_BABYSTEP_TOTAL));
lcd_put_wchar(':');
#endif
- lcd_put_u8str(BABYSTEP_TO_STR(spm * babystep.axis_total[BS_TOTAL_IND(axis)]));
+ lcd_put_u8str(BABYSTEP_TO_STR(mps * babystep.axis_total[BS_TOTAL_IND(axis)]));
}
#endif
}
diff --git a/Marlin/src/lcd/menu/menu_ubl.cpp b/Marlin/src/lcd/menu/menu_ubl.cpp
index dae2c42047..8dea7d943d 100644
--- a/Marlin/src/lcd/menu/menu_ubl.cpp
+++ b/Marlin/src/lcd/menu/menu_ubl.cpp
@@ -83,7 +83,7 @@ void _lcd_mesh_fine_tune(PGM_P const msg) {
if (ui.should_draw()) {
const float rounded_f = rounded_mesh_value();
MenuEditItemBase::draw_edit_screen(msg, ftostr43sign(rounded_f));
- TERN_(MESH_EDIT_GFX_OVERLAY, _lcd_zoffset_overlay_gfx(rounded_f));
+ TERN_(MESH_EDIT_GFX_OVERLAY, ui.zoffset_overlay(rounded_f));
TERN_(HAS_GRAPHICAL_TFT, ui.refresh(LCDVIEW_NONE));
}
}
@@ -666,6 +666,10 @@ void _lcd_ubl_level_bed() {
GCODES_ITEM(MSG_UBL_DEACTIVATE_MESH, PSTR("G29D"));
else
GCODES_ITEM(MSG_UBL_ACTIVATE_MESH, PSTR("G29A"));
+ #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
+ editable.decimal = planner.z_fade_height;
+ EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, []{ set_z_fade_height(editable.decimal); });
+ #endif
#if ENABLED(G26_MESH_VALIDATION)
SUBMENU(MSG_UBL_STEP_BY_STEP_MENU, _lcd_ubl_step_by_step);
#endif
@@ -677,10 +681,6 @@ void _lcd_ubl_level_bed() {
SUBMENU(MSG_UBL_OUTPUT_MAP, _lcd_ubl_output_map);
SUBMENU(MSG_UBL_TOOLS, _menu_ubl_tools);
GCODES_ITEM(MSG_UBL_INFO_UBL, PSTR("G29W"));
- #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
- editable.decimal = planner.z_fade_height;
- EDIT_ITEM_FAST(float3, MSG_Z_FADE_HEIGHT, &editable.decimal, 0, 100, []{ set_z_fade_height(editable.decimal); });
- #endif
END_MENU();
}
diff --git a/Marlin/src/lcd/tft/tft_string.cpp b/Marlin/src/lcd/tft/tft_string.cpp
index 6f2d8690b2..d5ccfe323a 100644
--- a/Marlin/src/lcd/tft/tft_string.cpp
+++ b/Marlin/src/lcd/tft/tft_string.cpp
@@ -89,11 +89,13 @@ uint8_t read_byte(uint8_t *byte) { return *byte; }
/**
* Add a string, applying substitutions for the following characters:
*
+ * $ displays an inserted C-string given by the itemString parameter
* = displays '0'....'10' for indexes 0 - 10
* ~ displays '1'....'11' for indexes 0 - 10
* * displays 'E1'...'E11' for indexes 0 - 10 (By default. Uses LCD_FIRST_TOOL)
+ * @ displays an axis name such as XYZUVW, or E for an extruder
*/
-void TFT_String::add(uint8_t *string, int8_t index, uint8_t *itemString) {
+void TFT_String::add(uint8_t *string, int8_t index, uint8_t *itemString/*=nullptr*/) {
wchar_t wchar;
while (*string) {
@@ -108,17 +110,15 @@ void TFT_String::add(uint8_t *string, int8_t index, uint8_t *itemString) {
if (inum >= 10) { add_character('0' + (inum / 10)); inum %= 10; }
add_character('0' + inum);
}
- else {
+ else
add(index == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED));
- }
- continue;
}
- else if (ch == '$' && itemString) {
+ else if (ch == '$' && itemString)
add(itemString);
- continue;
- }
-
- add_character(ch);
+ else if (ch == '@')
+ add_character(axis_codes[index]);
+ else
+ add_character(ch);
}
eol();
}
@@ -150,9 +150,8 @@ void TFT_String::rtrim(uint8_t character) {
span -= glyph(data[length])->DWidth;
eol();
}
- else {
+ else
break;
- }
}
}
diff --git a/Marlin/src/lcd/tft/touch.cpp b/Marlin/src/lcd/tft/touch.cpp
index 7262536e77..dc1f2ecb6c 100644
--- a/Marlin/src/lcd/tft/touch.cpp
+++ b/Marlin/src/lcd/tft/touch.cpp
@@ -294,7 +294,9 @@ bool Touch::get_point(int16_t *x, int16_t *y) {
}
void Touch::wakeUp() {
if (isSleeping()) {
- #if PIN_EXISTS(TFT_BACKLIGHT)
+ #if HAS_LCD_BRIGHTNESS
+ ui._set_brightness();
+ #elif PIN_EXISTS(TFT_BACKLIGHT)
WRITE(TFT_BACKLIGHT_PIN, HIGH);
#endif
}
diff --git a/Marlin/src/lcd/tft/ui_1024x600.cpp b/Marlin/src/lcd/tft/ui_1024x600.cpp
index db75c36ef9..3f0c70ab4c 100644
--- a/Marlin/src/lcd/tft/ui_1024x600.cpp
+++ b/Marlin/src/lcd/tft/ui_1024x600.cpp
@@ -667,7 +667,7 @@ static void moveAxis(const AxisEnum axis, const int8_t direction) {
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
const int16_t babystep_increment = direction * BABYSTEP_SIZE_Z;
const bool do_probe = DISABLED(BABYSTEP_HOTEND_Z_OFFSET) || active_extruder == 0;
- const float bsDiff = planner.steps_to_mm[Z_AXIS] * babystep_increment,
+ const float bsDiff = planner.mm_per_step[Z_AXIS] * babystep_increment,
new_probe_offset = probe.offset.z + bsDiff,
new_offs = TERN(BABYSTEP_HOTEND_Z_OFFSET
, do_probe ? new_probe_offset : hotend_offset[active_extruder].z - bsDiff
@@ -785,7 +785,7 @@ static void z_minus() { moveAxis(Z_AXIS, -1); }
static void disable_steppers() {
quick_feedback();
- queue.inject_P(PSTR("M84"));
+ queue.inject(F("M84"));
}
static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) {
diff --git a/Marlin/src/lcd/tft/ui_320x240.cpp b/Marlin/src/lcd/tft/ui_320x240.cpp
index deffbae94c..1ef4c5881c 100644
--- a/Marlin/src/lcd/tft/ui_320x240.cpp
+++ b/Marlin/src/lcd/tft/ui_320x240.cpp
@@ -652,7 +652,7 @@ static void moveAxis(const AxisEnum axis, const int8_t direction) {
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
const int16_t babystep_increment = direction * BABYSTEP_SIZE_Z;
const bool do_probe = DISABLED(BABYSTEP_HOTEND_Z_OFFSET) || active_extruder == 0;
- const float bsDiff = planner.steps_to_mm[Z_AXIS] * babystep_increment,
+ const float bsDiff = planner.mm_per_step[Z_AXIS] * babystep_increment,
new_probe_offset = probe.offset.z + bsDiff,
new_offs = TERN(BABYSTEP_HOTEND_Z_OFFSET
, do_probe ? new_probe_offset : hotend_offset[active_extruder].z - bsDiff
@@ -770,7 +770,7 @@ static void z_minus() { moveAxis(Z_AXIS, -1); }
static void disable_steppers() {
quick_feedback();
- queue.inject_P(PSTR("M84"));
+ queue.inject(F("M84"));
}
static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) {
diff --git a/Marlin/src/lcd/tft/ui_480x320.cpp b/Marlin/src/lcd/tft/ui_480x320.cpp
index c8333f7e4b..f6591d682d 100644
--- a/Marlin/src/lcd/tft/ui_480x320.cpp
+++ b/Marlin/src/lcd/tft/ui_480x320.cpp
@@ -654,7 +654,7 @@ static void moveAxis(const AxisEnum axis, const int8_t direction) {
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
const int16_t babystep_increment = direction * BABYSTEP_SIZE_Z;
const bool do_probe = DISABLED(BABYSTEP_HOTEND_Z_OFFSET) || active_extruder == 0;
- const float bsDiff = planner.steps_to_mm[Z_AXIS] * babystep_increment,
+ const float bsDiff = planner.mm_per_step[Z_AXIS] * babystep_increment,
new_probe_offset = probe.offset.z + bsDiff,
new_offs = TERN(BABYSTEP_HOTEND_Z_OFFSET
, do_probe ? new_probe_offset : hotend_offset[active_extruder].z - bsDiff
@@ -772,7 +772,7 @@ static void z_minus() { moveAxis(Z_AXIS, -1); }
static void disable_steppers() {
quick_feedback();
- queue.inject_P(PSTR("M84"));
+ queue.inject(F("M84"));
}
static void drawBtn(int x, int y, const char *label, intptr_t data, MarlinImage img, uint16_t bgColor, bool enabled = true) {
diff --git a/Marlin/src/lcd/tft/ui_common.cpp b/Marlin/src/lcd/tft/ui_common.cpp
index a5f41874b0..e152ceab50 100644
--- a/Marlin/src/lcd/tft/ui_common.cpp
+++ b/Marlin/src/lcd/tft/ui_common.cpp
@@ -105,9 +105,9 @@ int lcd_put_wchar_max(wchar_t c, pixel_len_t max_length) {
return tft_string.width();
}
-int lcd_put_u8str_max_P(PGM_P utf8_str_P, pixel_len_t max_length) {
+int lcd_put_u8str_max_P(PGM_P utf8_pstr, pixel_len_t max_length) {
if (max_length < 1) return 0;
- tft_string.set(utf8_str_P);
+ tft_string.set(utf8_pstr);
tft_string.trim();
tft_string.truncate(max_length);
tft.add_text(MENU_TEXT_X_OFFSET, MENU_TEXT_Y_OFFSET, COLOR_MENU_TEXT, tft_string);
@@ -210,6 +210,15 @@ void MarlinUI::clear_lcd() {
cursor.set(0, 0);
}
+#if HAS_LCD_BRIGHTNESS
+ void MarlinUI::_set_brightness() {
+ #if PIN_EXISTS(TFT_BACKLIGHT)
+ if (PWM_PIN(TFT_BACKLIGHT_PIN))
+ analogWrite(pin_t(TFT_BACKLIGHT_PIN), brightness);
+ #endif
+ }
+#endif
+
#if ENABLED(TOUCH_SCREEN_CALIBRATION)
void MarlinUI::touch_calibration_screen() {
diff --git a/Marlin/src/lcd/tft_io/tft_io.cpp b/Marlin/src/lcd/tft_io/tft_io.cpp
index 707232b4bb..6ec3bedcdf 100644
--- a/Marlin/src/lcd/tft_io/tft_io.cpp
+++ b/Marlin/src/lcd/tft_io/tft_io.cpp
@@ -49,6 +49,10 @@
#include "ili9341.h"
#include "ili9328.h"
+#if HAS_LCD_BRIGHTNESS
+ #include "../marlinui.h"
+#endif
+
#define DEBUG_OUT ENABLED(DEBUG_GRAPHICAL_TFT)
#include "../../core/debug_out.h"
@@ -72,6 +76,9 @@ if (lcd_id != 0xFFFFFFFF) return;
#if PIN_EXISTS(TFT_BACKLIGHT)
WRITE(TFT_BACKLIGHT_PIN, DISABLED(DELAYED_BACKLIGHT_INIT));
+ #if HAS_LCD_BRIGHTNESS && DISABLED(DELAYED_BACKLIGHT_INIT)
+ ui._set_brightness();
+ #endif
#endif
// io.Init();
@@ -141,11 +148,12 @@ if (lcd_id != 0xFFFFFFFF) return;
lcd_id = 0;
}
#else
- #error Unsupported TFT driver
+ #error "Unsupported TFT driver"
#endif
#if PIN_EXISTS(TFT_BACKLIGHT) && ENABLED(DELAYED_BACKLIGHT_INIT)
WRITE(TFT_BACKLIGHT_PIN, HIGH);
+ TERN_(HAS_LCD_BRIGHTNESS, ui._set_brightness());
#endif
}
diff --git a/Marlin/src/lcd/tft_io/touch_calibration.cpp b/Marlin/src/lcd/tft_io/touch_calibration.cpp
index 1c3b8b35fc..44ebc73d71 100644
--- a/Marlin/src/lcd/tft_io/touch_calibration.cpp
+++ b/Marlin/src/lcd/tft_io/touch_calibration.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/lcd/tft_io/touch_calibration.h b/Marlin/src/lcd/tft_io/touch_calibration.h
index 112fbdca30..abd5667700 100644
--- a/Marlin/src/lcd/tft_io/touch_calibration.h
+++ b/Marlin/src/lcd/tft_io/touch_calibration.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/lcd/touch/touch_buttons.cpp b/Marlin/src/lcd/touch/touch_buttons.cpp
index 2d6158961e..feaba8483b 100644
--- a/Marlin/src/lcd/touch/touch_buttons.cpp
+++ b/Marlin/src/lcd/touch/touch_buttons.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -119,7 +122,9 @@ uint8_t TouchButtons::read_buttons() {
}
void TouchButtons::wakeUp() {
if (isSleeping()) {
- #if PIN_EXISTS(TFT_BACKLIGHT)
+ #if HAS_LCD_BRIGHTNESS
+ ui._set_brightness();
+ #elif PIN_EXISTS(TFT_BACKLIGHT)
WRITE(TFT_BACKLIGHT_PIN, HIGH);
#endif
}
diff --git a/Marlin/src/lcd/touch/touch_buttons.h b/Marlin/src/lcd/touch/touch_buttons.h
index 36be0ee134..39768f2594 100644
--- a/Marlin/src/lcd/touch/touch_buttons.h
+++ b/Marlin/src/lcd/touch/touch_buttons.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/libs/BL24CXX.cpp b/Marlin/src/libs/BL24CXX.cpp
index adcd5ed894..6407fac670 100644
--- a/Marlin/src/libs/BL24CXX.cpp
+++ b/Marlin/src/libs/BL24CXX.cpp
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/libs/stopwatch.cpp b/Marlin/src/libs/stopwatch.cpp
index adfaa3b043..4178807951 100644
--- a/Marlin/src/libs/stopwatch.cpp
+++ b/Marlin/src/libs/stopwatch.cpp
@@ -34,7 +34,7 @@ millis_t Stopwatch::startTimestamp;
millis_t Stopwatch::stopTimestamp;
bool Stopwatch::stop() {
- Stopwatch::debug(PSTR("stop"));
+ debug(F("stop"));
if (isRunning() || isPaused()) {
TERN_(EXTENSIBLE_UI, ExtUI::onPrintTimerStopped());
@@ -46,7 +46,7 @@ bool Stopwatch::stop() {
}
bool Stopwatch::pause() {
- Stopwatch::debug(PSTR("pause"));
+ debug(F("pause"));
if (isRunning()) {
TERN_(EXTENSIBLE_UI, ExtUI::onPrintTimerPaused());
@@ -58,7 +58,7 @@ bool Stopwatch::pause() {
}
bool Stopwatch::start() {
- Stopwatch::debug(PSTR("start"));
+ debug(F("start"));
TERN_(EXTENSIBLE_UI, ExtUI::onPrintTimerStarted());
@@ -74,14 +74,14 @@ bool Stopwatch::start() {
}
void Stopwatch::resume(const millis_t with_time) {
- Stopwatch::debug(PSTR("resume"));
+ debug(F("resume"));
reset();
if ((accumulator = with_time)) state = RUNNING;
}
void Stopwatch::reset() {
- Stopwatch::debug(PSTR("reset"));
+ debug(F("reset"));
state = STOPPED;
startTimestamp = 0;
@@ -95,12 +95,8 @@ millis_t Stopwatch::duration() {
#if ENABLED(DEBUG_STOPWATCH)
- void Stopwatch::debug(const char func[]) {
- if (DEBUGGING(INFO)) {
- SERIAL_ECHOPGM("Stopwatch::");
- SERIAL_ECHOPGM_P(func);
- SERIAL_ECHOLNPGM("()");
- }
+ void Stopwatch::debug(FSTR_P const func) {
+ if (DEBUGGING(INFO)) SERIAL_ECHOLNPGM("Stopwatch::", func, "()");
}
#endif
diff --git a/Marlin/src/libs/stopwatch.h b/Marlin/src/libs/stopwatch.h
index b64a36a90e..fe5101a5be 100644
--- a/Marlin/src/libs/stopwatch.h
+++ b/Marlin/src/libs/stopwatch.h
@@ -21,14 +21,11 @@
*/
#pragma once
+#include "../inc/MarlinConfig.h"
+
// Print debug messages with M111 S2 (Uses 156 bytes of PROGMEM)
//#define DEBUG_STOPWATCH
-#include "../core/macros.h" // for FORCE_INLINE
-
-#include
-typedef uint32_t millis_t;
-
/**
* @brief Stopwatch class
* @details This class acts as a timer proving stopwatch functionality including
@@ -113,11 +110,11 @@ class Stopwatch {
* @brief Print a debug message
* @details Print a simple debug message "Stopwatch::function"
*/
- static void debug(const char func[]);
+ static void debug(FSTR_P const);
#else
- static inline void debug(const char[]) {}
+ static inline void debug(FSTR_P const) {}
#endif
};
diff --git a/Marlin/src/libs/vector_3.cpp b/Marlin/src/libs/vector_3.cpp
index 4db8fb5f2e..614d2121b8 100644
--- a/Marlin/src/libs/vector_3.cpp
+++ b/Marlin/src/libs/vector_3.cpp
@@ -75,8 +75,8 @@ void vector_3::apply_rotation(const matrix_3x3 &matrix) {
matrix.vectors[0].z * _x + matrix.vectors[1].z * _y + matrix.vectors[2].z * _z };
}
-void vector_3::debug(PGM_P const title) {
- SERIAL_ECHOPGM_P(title);
+void vector_3::debug(FSTR_P const title) {
+ SERIAL_ECHOF(title);
SERIAL_ECHOPAIR_F_P(SP_X_STR, x, 6);
SERIAL_ECHOPAIR_F_P(SP_Y_STR, y, 6);
SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z, 6);
@@ -100,14 +100,14 @@ void matrix_3x3::set_to_identity() {
// Create a matrix from 3 vector_3 inputs
matrix_3x3 matrix_3x3::create_from_rows(const vector_3 &row_0, const vector_3 &row_1, const vector_3 &row_2) {
- //row_0.debug(PSTR("row_0"));
- //row_1.debug(PSTR("row_1"));
- //row_2.debug(PSTR("row_2"));
+ //row_0.debug(F("row_0"));
+ //row_1.debug(F("row_1"));
+ //row_2.debug(F("row_2"));
matrix_3x3 new_matrix;
new_matrix.vectors[0] = row_0;
new_matrix.vectors[1] = row_1;
new_matrix.vectors[2] = row_2;
- //new_matrix.debug(PSTR("new_matrix"));
+ //new_matrix.debug(F("new_matrix"));
return new_matrix;
}
@@ -117,14 +117,14 @@ matrix_3x3 matrix_3x3::create_look_at(const vector_3 &target) {
x_row = vector_3(1, 0, -target.x / target.z).get_normal(),
y_row = vector_3::cross(z_row, x_row).get_normal();
- // x_row.debug(PSTR("x_row"));
- // y_row.debug(PSTR("y_row"));
- // z_row.debug(PSTR("z_row"));
+ // x_row.debug(F("x_row"));
+ // y_row.debug(F("y_row"));
+ // z_row.debug(F("z_row"));
// create the matrix already correctly transposed
matrix_3x3 rot = matrix_3x3::create_from_rows(x_row, y_row, z_row);
- // rot.debug(PSTR("rot"));
+ // rot.debug(F("rot"));
return rot;
}
@@ -137,8 +137,8 @@ matrix_3x3 matrix_3x3::transpose(const matrix_3x3 &original) {
return new_matrix;
}
-void matrix_3x3::debug(PGM_P const title) {
- if (title) SERIAL_ECHOLNPGM_P(title);
+void matrix_3x3::debug(FSTR_P const title) {
+ if (title) SERIAL_ECHOLNF(title);
LOOP_L_N(i, 3) {
LOOP_L_N(j, 3) {
if (vectors[i][j] >= 0.0) SERIAL_CHAR('+');
diff --git a/Marlin/src/libs/vector_3.h b/Marlin/src/libs/vector_3.h
index 5d99fcec20..f515333cc7 100644
--- a/Marlin/src/libs/vector_3.h
+++ b/Marlin/src/libs/vector_3.h
@@ -78,7 +78,7 @@ struct vector_3 {
operator xy_float_t() { return xy_float_t({ x, y }); }
operator xyz_float_t() { return xyz_float_t({ x, y, z }); }
- void debug(PGM_P const title);
+ void debug(FSTR_P const title);
};
struct matrix_3x3 {
@@ -91,7 +91,7 @@ struct matrix_3x3 {
void set_to_identity();
- void debug(PGM_P const title);
+ void debug(FSTR_P const title);
void apply_rotation_xyz(float &x, float &y, float &z);
};
diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp
index d29fd3ecb3..da5a0073cf 100644
--- a/Marlin/src/module/endstops.cpp
+++ b/Marlin/src/module/endstops.cpp
@@ -384,7 +384,7 @@ void Endstops::not_homing() {
// If the last move failed to trigger an endstop, call kill
void Endstops::validate_homing_move() {
if (trigger_state()) hit_on_purpose();
- else kill(GET_TEXT(MSG_KILL_HOMING_FAILED));
+ else kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED));
}
#endif
@@ -460,8 +460,8 @@ void Endstops::event_handler() {
SERIAL_EOL();
TERN_(HAS_STATUS_MESSAGE,
- ui.status_printf_P(0,
- PSTR(S_FMT GANG_N_1(LINEAR_AXES, " %c") " %c"),
+ ui.status_printf(0,
+ F(S_FMT GANG_N_1(LINEAR_AXES, " %c") " %c"),
GET_TEXT(MSG_LCD_ENDSTOPS),
LINEAR_AXIS_LIST(chrX, chrY, chrZ, chrI, chrJ, chrK), chrP
)
@@ -483,10 +483,10 @@ void Endstops::event_handler() {
#pragma GCC diagnostic ignored "-Wunused-function"
#endif
-static void print_es_state(const bool is_hit, PGM_P const label=nullptr) {
- if (label) SERIAL_ECHOPGM_P(label);
+static void print_es_state(const bool is_hit, FSTR_P const flabel=nullptr) {
+ if (flabel) SERIAL_ECHOF(flabel);
SERIAL_ECHOPGM(": ");
- SERIAL_ECHOLNPGM_P(is_hit ? PSTR(STR_ENDSTOP_HIT) : PSTR(STR_ENDSTOP_OPEN));
+ SERIAL_ECHOLNF(is_hit ? F(STR_ENDSTOP_HIT) : F(STR_ENDSTOP_OPEN));
}
#if GCC_VERSION <= 50000
@@ -496,7 +496,7 @@ static void print_es_state(const bool is_hit, PGM_P const label=nullptr) {
void _O2 Endstops::report_states() {
TERN_(BLTOUCH, bltouch._set_SW_mode());
SERIAL_ECHOLNPGM(STR_M119_REPORT);
- #define ES_REPORT(S) print_es_state(READ(S##_PIN) != S##_ENDSTOP_INVERTING, PSTR(STR_##S))
+ #define ES_REPORT(S) print_es_state(READ(S##_PIN) != S##_ENDSTOP_INVERTING, F(STR_##S))
#if HAS_X_MIN
ES_REPORT(X_MIN);
#endif
@@ -564,10 +564,10 @@ void _O2 Endstops::report_states() {
ES_REPORT(K_MAX);
#endif
#if BOTH(MARLIN_DEV_MODE, PROBE_ACTIVATION_SWITCH)
- print_es_state(probe_switch_activated(), PSTR(STR_PROBE_EN));
+ print_es_state(probe_switch_activated(), F(STR_PROBE_EN));
#endif
#if USES_Z_MIN_PROBE_PIN
- print_es_state(PROBE_TRIGGERED(), PSTR(STR_Z_PROBE));
+ print_es_state(PROBE_TRIGGERED(), F(STR_Z_PROBE));
#endif
#if MULTI_FILAMENT_SENSOR
#define _CASE_RUNOUT(N) case N: pin = FIL_RUNOUT##N##_PIN; state = FIL_RUNOUT##N##_STATE; break;
@@ -584,7 +584,7 @@ void _O2 Endstops::report_states() {
}
#undef _CASE_RUNOUT
#elif HAS_FILAMENT_SENSOR
- print_es_state(READ(FIL_RUNOUT1_PIN) != FIL_RUNOUT1_STATE, PSTR(STR_FILAMENT));
+ print_es_state(READ(FIL_RUNOUT1_PIN) != FIL_RUNOUT1_STATE, F(STR_FILAMENT));
#endif
TERN_(BLTOUCH, bltouch._reset_SW_mode());
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index cdd425c472..1f13bd22ee 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -124,7 +124,7 @@ xyze_pos_t destination; // {0}
"Offsets for the first hotend must be 0.0."
);
// Transpose from [XYZ][HOTENDS] to [HOTENDS][XYZ]
- HOTEND_LOOP() LOOP_LINEAR_AXES(a) hotend_offset[e][a] = tmp[a][e];
+ HOTEND_LOOP() LOOP_ABC(a) hotend_offset[e][a] = tmp[a][e];
#if ENABLED(DUAL_X_CARRIAGE)
hotend_offset[1].x = _MAX(X2_HOME_POS, X2_MAX_POS);
#endif
@@ -489,7 +489,7 @@ void do_blocking_move_to(LINEAR_AXIS_ARGS(const float), const_feedRate_t fr_mm_s
const feedRate_t z_feedrate = fr_mm_s ?: homing_feedrate(Z_AXIS);
#endif
- #if EITHER(DELTA, IS_SCARA)
+ #if IS_KINEMATIC
if (!position_is_reachable(x, y)) return;
destination = current_position; // sync destination at the start
#endif
@@ -1682,7 +1682,7 @@ void prepare_line_to_destination() {
int16_t phaseDelta = (home_phase[axis] - phaseCurrent) * stepperBackoutDir;
// Check if home distance within endstop assumed repeatability noise of .05mm and warn.
- if (ABS(phaseDelta) * planner.steps_to_mm[axis] / phasePerUStep < 0.05f)
+ if (ABS(phaseDelta) * planner.mm_per_step[axis] / phasePerUStep < 0.05f)
SERIAL_ECHOLNPGM("Selected home phase ", home_phase[axis],
" too close to endstop trigger phase ", phaseCurrent,
". Pick a different phase for ", AS_CHAR(AXIS_CHAR(axis)));
@@ -1691,7 +1691,7 @@ void prepare_line_to_destination() {
if (phaseDelta < 0) phaseDelta += 1024;
// Convert TMC µsteps(phase) to whole Marlin µsteps to effector backout direction to mm
- const float mmDelta = int16_t(phaseDelta / phasePerUStep) * effectorBackoutDir * planner.steps_to_mm[axis];
+ const float mmDelta = int16_t(phaseDelta / phasePerUStep) * effectorBackoutDir * planner.mm_per_step[axis];
// Optional debug messages
if (DEBUGGING(LEVELING)) {
@@ -1829,7 +1829,7 @@ void prepare_line_to_destination() {
}
if (TEST(endstops.state(), es)) {
SERIAL_ECHO_MSG("Bad ", AS_CHAR(AXIS_CHAR(axis)), " Endstop?");
- kill(GET_TEXT(MSG_KILL_HOMING_FAILED));
+ kill(GET_TEXT_F(MSG_KILL_HOMING_FAILED));
}
#endif
@@ -1999,7 +1999,7 @@ void prepare_line_to_destination() {
// Delta homing treats the axes as normal linear axes.
const float adjDistance = delta_endstop_adj[axis],
- minDistance = (MIN_STEPS_PER_SEGMENT) * planner.steps_to_mm[axis];
+ minDistance = (MIN_STEPS_PER_SEGMENT) * planner.mm_per_step[axis];
// Retrace by the amount specified in delta_endstop_adj if more than min steps.
if (adjDistance * (Z_HOME_DIR) < 0 && ABS(adjDistance) > minDistance) { // away from endstop, more than min distance
diff --git a/Marlin/src/module/motion.h b/Marlin/src/module/motion.h
index c41738a5ab..50df5675e6 100644
--- a/Marlin/src/module/motion.h
+++ b/Marlin/src/module/motion.h
@@ -504,6 +504,14 @@ void home_if_needed(const bool keeplev=false);
return HYPOT2(rx, ry) <= sq(DELTA_PRINTABLE_RADIUS - inset + fslop);
+ #elif ENABLED(POLARGRAPH)
+
+ const float x1 = rx - (X_MIN_POS), x2 = (X_MAX_POS) - rx, y = ry - (Y_MAX_POS),
+ a = HYPOT(x1, y), b = HYPOT(x2, y);
+ return a < (POLARGRAPH_MAX_BELT_LEN) + 1
+ && b < (POLARGRAPH_MAX_BELT_LEN) + 1
+ && (a + b) > _MIN(X_BED_SIZE, Y_BED_SIZE);
+
#elif ENABLED(AXEL_TPARA)
const float R2 = HYPOT2(rx - TPARA_OFFSET_X, ry - TPARA_OFFSET_Y);
diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp
index 3e030c84d2..e62a9ab5ee 100644
--- a/Marlin/src/module/planner.cpp
+++ b/Marlin/src/module/planner.cpp
@@ -138,7 +138,7 @@ planner_settings_t Planner::settings; // Initialized by settings.load(
uint32_t Planner::max_acceleration_steps_per_s2[DISTINCT_AXES]; // (steps/s^2) Derived from mm_per_s2
-float Planner::steps_to_mm[DISTINCT_AXES]; // (mm) Millimeters per step
+float Planner::mm_per_step[DISTINCT_AXES]; // (mm) Millimeters per step
#if HAS_JUNCTION_DEVIATION
float Planner::junction_deviation_mm; // (mm) M205 J
@@ -1310,7 +1310,7 @@ void Planner::recalculate() {
*/
void Planner::check_axes_activity() {
- #if ANY(DISABLE_X, DISABLE_Y, DISABLE_Z , DISABLE_I , DISABLE_J , DISABLE_K, DISABLE_E)
+ #if ANY(DISABLE_X, DISABLE_Y, DISABLE_Z, DISABLE_I, DISABLE_J, DISABLE_K, DISABLE_E)
xyze_bool_t axis_active = { false };
#endif
@@ -1375,13 +1375,13 @@ void Planner::check_axes_activity() {
// Disable inactive axes
//
LOGICAL_AXIS_CODE(
- if (TERN0(DISABLE_E, !axis_active.e)) disable_e_steppers(),
- if (TERN0(DISABLE_X, !axis_active.x)) DISABLE_AXIS_X(),
- if (TERN0(DISABLE_Y, !axis_active.y)) DISABLE_AXIS_Y(),
- if (TERN0(DISABLE_Z, !axis_active.z)) DISABLE_AXIS_Z(),
- if (TERN0(DISABLE_I, !axis_active.i)) DISABLE_AXIS_I(),
- if (TERN0(DISABLE_J, !axis_active.j)) DISABLE_AXIS_J(),
- if (TERN0(DISABLE_K, !axis_active.k)) DISABLE_AXIS_K()
+ if (TERN0(DISABLE_E, !axis_active.e)) stepper.disable_e_steppers(),
+ if (TERN0(DISABLE_X, !axis_active.x)) stepper.disable_axis(X_AXIS),
+ if (TERN0(DISABLE_Y, !axis_active.y)) stepper.disable_axis(Y_AXIS),
+ if (TERN0(DISABLE_Z, !axis_active.z)) stepper.disable_axis(Z_AXIS),
+ if (TERN0(DISABLE_I, !axis_active.i)) stepper.disable_axis(I_AXIS),
+ if (TERN0(DISABLE_J, !axis_active.j)) stepper.disable_axis(J_AXIS),
+ if (TERN0(DISABLE_K, !axis_active.k)) stepper.disable_axis(K_AXIS)
);
//
@@ -1702,12 +1702,12 @@ void Planner::endstop_triggered(const AxisEnum axis) {
}
float Planner::triggered_position_mm(const AxisEnum axis) {
- return stepper.triggered_position(axis) * steps_to_mm[axis];
+ return stepper.triggered_position(axis) * mm_per_step[axis];
}
void Planner::finish_and_disable() {
while (has_blocks_queued() || cleaning_buffer_counter) idle();
- disable_all_steppers();
+ stepper.disable_all_steppers();
}
/**
@@ -1759,7 +1759,7 @@ float Planner::get_axis_position_mm(const AxisEnum axis) {
#endif
- return axis_steps * steps_to_mm[axis];
+ return axis_steps * mm_per_step[axis];
}
/**
@@ -1913,7 +1913,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
#endif // PREVENT_COLD_EXTRUSION || PREVENT_LENGTHY_EXTRUDE
// Compute direction bit-mask for this block
- uint8_t dm = 0;
+ axis_bits_t dm = 0;
#if CORE_IS_XY
if (da < 0) SBI(dm, X_HEAD); // Save the toolhead's true direction in X
if (db < 0) SBI(dm, Y_HEAD); // ...and Y
@@ -2015,51 +2015,51 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
} steps_dist_mm;
#if IS_CORE
#if CORE_IS_XY
- steps_dist_mm.head.x = da * steps_to_mm[A_AXIS];
- steps_dist_mm.head.y = db * steps_to_mm[B_AXIS];
- steps_dist_mm.z = dc * steps_to_mm[Z_AXIS];
- steps_dist_mm.a = (da + db) * steps_to_mm[A_AXIS];
- steps_dist_mm.b = CORESIGN(da - db) * steps_to_mm[B_AXIS];
+ steps_dist_mm.head.x = da * mm_per_step[A_AXIS];
+ steps_dist_mm.head.y = db * mm_per_step[B_AXIS];
+ steps_dist_mm.z = dc * mm_per_step[Z_AXIS];
+ steps_dist_mm.a = (da + db) * mm_per_step[A_AXIS];
+ steps_dist_mm.b = CORESIGN(da - db) * mm_per_step[B_AXIS];
#elif CORE_IS_XZ
- steps_dist_mm.head.x = da * steps_to_mm[A_AXIS];
- steps_dist_mm.y = db * steps_to_mm[Y_AXIS];
- steps_dist_mm.head.z = dc * steps_to_mm[C_AXIS];
- steps_dist_mm.a = (da + dc) * steps_to_mm[A_AXIS];
- steps_dist_mm.c = CORESIGN(da - dc) * steps_to_mm[C_AXIS];
+ steps_dist_mm.head.x = da * mm_per_step[A_AXIS];
+ steps_dist_mm.y = db * mm_per_step[Y_AXIS];
+ steps_dist_mm.head.z = dc * mm_per_step[C_AXIS];
+ steps_dist_mm.a = (da + dc) * mm_per_step[A_AXIS];
+ steps_dist_mm.c = CORESIGN(da - dc) * mm_per_step[C_AXIS];
#elif CORE_IS_YZ
- steps_dist_mm.x = da * steps_to_mm[X_AXIS];
- steps_dist_mm.head.y = db * steps_to_mm[B_AXIS];
- steps_dist_mm.head.z = dc * steps_to_mm[C_AXIS];
- steps_dist_mm.b = (db + dc) * steps_to_mm[B_AXIS];
- steps_dist_mm.c = CORESIGN(db - dc) * steps_to_mm[C_AXIS];
+ steps_dist_mm.x = da * mm_per_step[X_AXIS];
+ steps_dist_mm.head.y = db * mm_per_step[B_AXIS];
+ steps_dist_mm.head.z = dc * mm_per_step[C_AXIS];
+ steps_dist_mm.b = (db + dc) * mm_per_step[B_AXIS];
+ steps_dist_mm.c = CORESIGN(db - dc) * mm_per_step[C_AXIS];
#endif
#if LINEAR_AXES >= 4
- steps_dist_mm.i = di * steps_to_mm[I_AXIS];
+ steps_dist_mm.i = di * mm_per_step[I_AXIS];
#endif
#if LINEAR_AXES >= 5
- steps_dist_mm.j = dj * steps_to_mm[J_AXIS];
+ steps_dist_mm.j = dj * mm_per_step[J_AXIS];
#endif
#if LINEAR_AXES >= 6
- steps_dist_mm.k = dk * steps_to_mm[K_AXIS];
+ steps_dist_mm.k = dk * mm_per_step[K_AXIS];
#endif
#elif ENABLED(MARKFORGED_XY)
- steps_dist_mm.head.x = da * steps_to_mm[A_AXIS];
- steps_dist_mm.head.y = db * steps_to_mm[B_AXIS];
- steps_dist_mm.z = dc * steps_to_mm[Z_AXIS];
- steps_dist_mm.a = (da - db) * steps_to_mm[A_AXIS];
- steps_dist_mm.b = db * steps_to_mm[B_AXIS];
+ steps_dist_mm.head.x = da * mm_per_step[A_AXIS];
+ steps_dist_mm.head.y = db * mm_per_step[B_AXIS];
+ steps_dist_mm.z = dc * mm_per_step[Z_AXIS];
+ steps_dist_mm.a = (da - db) * mm_per_step[A_AXIS];
+ steps_dist_mm.b = db * mm_per_step[B_AXIS];
#else
LINEAR_AXIS_CODE(
- steps_dist_mm.a = da * steps_to_mm[A_AXIS],
- steps_dist_mm.b = db * steps_to_mm[B_AXIS],
- steps_dist_mm.c = dc * steps_to_mm[C_AXIS],
- steps_dist_mm.i = di * steps_to_mm[I_AXIS],
- steps_dist_mm.j = dj * steps_to_mm[J_AXIS],
- steps_dist_mm.k = dk * steps_to_mm[K_AXIS]
+ steps_dist_mm.a = da * mm_per_step[A_AXIS],
+ steps_dist_mm.b = db * mm_per_step[B_AXIS],
+ steps_dist_mm.c = dc * mm_per_step[C_AXIS],
+ steps_dist_mm.i = di * mm_per_step[I_AXIS],
+ steps_dist_mm.j = dj * mm_per_step[J_AXIS],
+ steps_dist_mm.k = dk * mm_per_step[K_AXIS]
);
#endif
- TERN_(HAS_EXTRUDERS, steps_dist_mm.e = esteps_float * steps_to_mm[E_AXIS_N(extruder)]);
+ TERN_(HAS_EXTRUDERS, steps_dist_mm.e = esteps_float * mm_per_step[E_AXIS_N(extruder)]);
TERN_(LCD_SHOW_E_TOTAL, e_move_accumulator += steps_dist_mm.e);
@@ -2144,7 +2144,7 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
block->e_to_p_pressure = baricuda_e_to_p_pressure;
#endif
- TERN_(HAS_MULTI_EXTRUDER, block->extruder = extruder);
+ E_TERN_(block->extruder = extruder);
#if ENABLED(AUTO_POWER_CONTROL)
if (LINEAR_AXIS_GANG(
@@ -2160,43 +2160,43 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
// Enable active axes
#if EITHER(CORE_IS_XY, MARKFORGED_XY)
if (block->steps.a || block->steps.b) {
- ENABLE_AXIS_X();
- ENABLE_AXIS_Y();
+ stepper.enable_axis(X_AXIS);
+ stepper.enable_axis(Y_AXIS);
}
#if DISABLED(Z_LATE_ENABLE)
- if (block->steps.z) ENABLE_AXIS_Z();
+ if (block->steps.z) stepper.enable_axis(Z_AXIS);
#endif
#elif CORE_IS_XZ
if (block->steps.a || block->steps.c) {
- ENABLE_AXIS_X();
- ENABLE_AXIS_Z();
+ stepper.enable_axis(X_AXIS);
+ stepper.enable_axis(Z_AXIS);
}
- if (block->steps.y) ENABLE_AXIS_Y();
+ if (block->steps.y) stepper.enable_axis(Y_AXIS);
#elif CORE_IS_YZ
if (block->steps.b || block->steps.c) {
- ENABLE_AXIS_Y();
- ENABLE_AXIS_Z();
+ stepper.enable_axis(Y_AXIS);
+ stepper.enable_axis(Z_AXIS);
}
- if (block->steps.x) ENABLE_AXIS_X();
+ if (block->steps.x) stepper.enable_axis(X_AXIS);
#else
LINEAR_AXIS_CODE(
- if (block->steps.x) ENABLE_AXIS_X(),
- if (block->steps.y) ENABLE_AXIS_Y(),
- if (TERN(Z_LATE_ENABLE, 0, block->steps.z)) ENABLE_AXIS_Z(),
- if (block->steps.i) ENABLE_AXIS_I(),
- if (block->steps.j) ENABLE_AXIS_J(),
- if (block->steps.k) ENABLE_AXIS_K()
+ if (block->steps.x) stepper.enable_axis(X_AXIS),
+ if (block->steps.y) stepper.enable_axis(Y_AXIS),
+ if (TERN(Z_LATE_ENABLE, 0, block->steps.z)) stepper.enable_axis(Z_AXIS),
+ if (block->steps.i) stepper.enable_axis(I_AXIS),
+ if (block->steps.j) stepper.enable_axis(J_AXIS),
+ if (block->steps.k) stepper.enable_axis(K_AXIS)
);
#endif
#if EITHER(IS_CORE, MARKFORGED_XY)
#if LINEAR_AXES >= 4
- if (block->steps.i) ENABLE_AXIS_I();
+ if (block->steps.i) stepper.enable_axis(I_AXIS);
#endif
#if LINEAR_AXES >= 5
- if (block->steps.j) ENABLE_AXIS_J();
+ if (block->steps.j) stepper.enable_axis(J_AXIS);
#endif
#if LINEAR_AXES >= 6
- if (block->steps.k) ENABLE_AXIS_K();
+ if (block->steps.k) stepper.enable_axis(K_AXIS);
#endif
#endif
@@ -2214,27 +2214,27 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
#define ENABLE_ONE_E(N) do{ \
if (E_STEPPER_INDEX(extruder) == N) { \
- ENABLE_AXIS_E##N(); \
+ stepper.ENABLE_EXTRUDER(N); \
g_uc_extruder_last_move[N] = (BLOCK_BUFFER_SIZE) * 2; \
if ((N) == 0 && TERN0(HAS_DUPLICATION_MODE, extruder_duplication_enabled)) \
- ENABLE_AXIS_E1(); \
+ stepper.ENABLE_EXTRUDER(1); \
} \
else if (!g_uc_extruder_last_move[N]) { \
- DISABLE_AXIS_E##N(); \
+ stepper.DISABLE_EXTRUDER(N); \
if ((N) == 0 && TERN0(HAS_DUPLICATION_MODE, extruder_duplication_enabled)) \
- DISABLE_AXIS_E1(); \
+ stepper.DISABLE_EXTRUDER(1); \
} \
}while(0);
#else
- #define ENABLE_ONE_E(N) ENABLE_AXIS_E##N();
+ #define ENABLE_ONE_E(N) stepper.ENABLE_EXTRUDER(N);
#endif
REPEAT(E_STEPPERS, ENABLE_ONE_E); // (ENABLE_ONE_E must end with semicolon)
}
- #endif // EXTRUDERS
+ #endif // HAS_EXTRUDERS
if (esteps)
NOLESS(fr_mm_s, settings.min_feedrate_mm_s);
@@ -2345,11 +2345,11 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
#ifdef XY_FREQUENCY_LIMIT
- static uint8_t old_direction_bits; // = 0
+ static axis_bits_t old_direction_bits; // = 0
if (xy_freq_limit_hz) {
// Check and limit the xy direction change frequency
- const uint8_t direction_change = block->direction_bits ^ old_direction_bits;
+ const axis_bits_t direction_change = block->direction_bits ^ old_direction_bits;
old_direction_bits = block->direction_bits;
segment_time_us = LROUND(float(segment_time_us) / speed_factor);
@@ -2889,7 +2889,7 @@ bool Planner::buffer_segment(const abce_pos_t &abce
// When changing extruders recalculate steps corresponding to the E position
#if ENABLED(DISTINCT_E_FACTORS)
if (last_extruder != extruder && settings.axis_steps_per_mm[E_AXIS_N(extruder)] != settings.axis_steps_per_mm[E_AXIS_N(last_extruder)]) {
- position.e = LROUND(position.e * settings.axis_steps_per_mm[E_AXIS_N(extruder)] * steps_to_mm[E_AXIS_N(last_extruder)]);
+ position.e = LROUND(position.e * settings.axis_steps_per_mm[E_AXIS_N(extruder)] * mm_per_step[E_AXIS_N(last_extruder)]);
last_extruder = extruder;
}
#endif
@@ -3021,7 +3021,7 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s, cons
#else
const feedRate_t feedrate = fr_mm_s;
#endif
- delta.e = machine.e;
+ TERN_(HAS_EXTRUDERS, delta.e = machine.e);
if (buffer_segment(delta OPTARG(HAS_DIST_MM_ARG, cart_dist_mm), feedrate, extruder, mm)) {
position_cart = cart;
return true;
@@ -3036,7 +3036,7 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s, cons
void Planner::buffer_page(const page_idx_t page_idx, const uint8_t extruder, const uint16_t num_steps) {
if (!last_page_step_rate) {
- kill(GET_TEXT(MSG_BAD_PAGE_SPEED));
+ kill(GET_TEXT_F(MSG_BAD_PAGE_SPEED));
return;
}
@@ -3049,7 +3049,7 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s, cons
FANS_LOOP(i) block->fan_speed[i] = thermalManager.fan_speed[i];
#endif
- TERN_(HAS_MULTI_EXTRUDER, block->extruder = extruder);
+ E_TERN_(block->extruder = extruder);
block->page_idx = page_idx;
@@ -3085,7 +3085,7 @@ bool Planner::buffer_line(const xyze_pos_t &cart, const_feedRate_t fr_mm_s, cons
// Move buffer head
block_buffer_head = next_buffer_head;
- enable_all_steppers();
+ stepper.enable_all_steppers();
stepper.wake_up();
}
@@ -3126,7 +3126,7 @@ void Planner::set_position_mm(const xyze_pos_t &xyze) {
#if IS_KINEMATIC
position_cart = xyze;
inverse_kinematics(machine);
- delta.e = machine.e;
+ TERN_(HAS_EXTRUDERS, delta.e = machine.e);
set_machine_position_mm(delta);
#else
set_machine_position_mm(machine);
@@ -3168,11 +3168,11 @@ void Planner::reset_acceleration_rates() {
}
/**
- * Recalculate 'position' and 'steps_to_mm'.
+ * Recalculate 'position' and 'mm_per_step'.
* Must be called whenever settings.axis_steps_per_mm changes!
*/
void Planner::refresh_positioning() {
- LOOP_DISTINCT_AXES(i) steps_to_mm[i] = 1.0f / settings.axis_steps_per_mm[i];
+ LOOP_DISTINCT_AXES(i) mm_per_step[i] = 1.0f / settings.axis_steps_per_mm[i];
set_position_mm(current_position);
reset_acceleration_rates();
}
diff --git a/Marlin/src/module/planner.h b/Marlin/src/module/planner.h
index 5e3922c897..16d136be45 100644
--- a/Marlin/src/module/planner.h
+++ b/Marlin/src/module/planner.h
@@ -48,6 +48,8 @@
#if ENABLED(DELTA)
#include "delta.h"
+#elif ENABLED(POLARGRAPH)
+ #include "polargraph.h"
#endif
#if ABL_PLANAR
@@ -200,7 +202,7 @@ typedef struct block_t {
uint32_t acceleration_rate; // The acceleration rate used for acceleration calculation
#endif
- uint8_t direction_bits; // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h)
+ axis_bits_t direction_bits; // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h)
// Advance extrusion
#if ENABLED(LIN_ADVANCE)
@@ -372,7 +374,7 @@ class Planner {
#endif
static uint32_t max_acceleration_steps_per_s2[DISTINCT_AXES]; // (steps/s^2) Derived from mm_per_s2
- static float steps_to_mm[DISTINCT_AXES]; // Millimeters per step
+ static float mm_per_step[DISTINCT_AXES]; // Millimeters per step
#if HAS_JUNCTION_DEVIATION
static float junction_deviation_mm; // (mm) M205 J
@@ -487,7 +489,7 @@ class Planner {
static void reset_acceleration_rates();
/**
- * Recalculate 'position' and 'steps_to_mm'.
+ * Recalculate 'position' and 'mm_per_step'.
* Must be called whenever settings.axis_steps_per_mm changes!
*/
static void refresh_positioning();
diff --git a/Marlin/src/module/polargraph.cpp b/Marlin/src/module/polargraph.cpp
new file mode 100644
index 0000000000..b7eeeee8af
--- /dev/null
+++ b/Marlin/src/module/polargraph.cpp
@@ -0,0 +1,47 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+/**
+ * polargraph.cpp
+ */
+
+#include "../inc/MarlinConfig.h"
+
+#if ENABLED(POLARGRAPH)
+
+#include "polargraph.h"
+#include "motion.h"
+
+// For homing:
+#include "planner.h"
+#include "endstops.h"
+#include "../lcd/marlinui.h"
+#include "../MarlinCore.h"
+
+float segments_per_second; // Initialized by settings.load()
+
+void inverse_kinematics(const xyz_pos_t &raw) {
+ const float x1 = raw.x - (X_MIN_POS), x2 = (X_MAX_POS) - raw.x, y = raw.y - (Y_MAX_POS);
+ delta.set(HYPOT(x1, y), HYPOT(x2, y), raw.z);
+}
+
+#endif // POLARGRAPH
diff --git a/Marlin/src/module/polargraph.h b/Marlin/src/module/polargraph.h
new file mode 100644
index 0000000000..0406034253
--- /dev/null
+++ b/Marlin/src/module/polargraph.h
@@ -0,0 +1,33 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * polargraph.h - Polargraph-specific functions
+ */
+
+#include "../core/types.h"
+#include "../core/macros.h"
+
+extern float segments_per_second;
+
+void inverse_kinematics(const xyz_pos_t &raw);
diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp
index 071ff25c20..4078effe76 100644
--- a/Marlin/src/module/probe.cpp
+++ b/Marlin/src/module/probe.cpp
@@ -48,8 +48,17 @@
#include "delta.h"
#endif
-#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
- #include "planner.h"
+#if ANY(HAS_QUIET_PROBING, USE_SENSORLESS)
+ #include "stepper/indirection.h"
+ #if BOTH(HAS_QUIET_PROBING, PROBING_ESTEPPERS_OFF)
+ #include "stepper.h"
+ #endif
+ #if USE_SENSORLESS
+ #include "../feature/tmc_util.h"
+ #if ENABLED(IMPROVE_HOMING_RELIABILITY)
+ #include "planner.h"
+ #endif
+ #endif
#endif
#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
@@ -68,15 +77,6 @@
#include "servo.h"
#endif
-#if EITHER(SENSORLESS_PROBING, SENSORLESS_HOMING)
- #include "stepper.h"
- #include "../feature/tmc_util.h"
-#endif
-
-#if HAS_QUIET_PROBING
- #include "stepper/indirection.h"
-#endif
-
#if ENABLED(EXTENSIBLE_UI)
#include "../lcd/extui/ui_api.h"
#elif ENABLED(DWIN_CREALITY_LCD_ENHANCED)
@@ -137,10 +137,10 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
#if ENABLED(TOUCH_MI_MANUAL_DEPLOY)
const screenFunc_t prev_screen = ui.currentScreen;
- LCD_MESSAGEPGM(MSG_MANUAL_DEPLOY_TOUCHMI);
+ LCD_MESSAGE(MSG_MANUAL_DEPLOY_TOUCHMI);
ui.return_to_status();
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Deploy TouchMI"), CONTINUE_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("Deploy TouchMI"), FPSTR(CONTINUE_STR)));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
ui.reset_status();
ui.goto_screen(prev_screen);
@@ -251,17 +251,17 @@ xyz_pos_t Probe::offset; // Initialized by settings.load()
void Probe::set_probing_paused(const bool dopause) {
TERN_(PROBING_HEATERS_OFF, thermalManager.pause_heaters(dopause));
TERN_(PROBING_FANS_OFF, thermalManager.set_fans_paused(dopause));
- TERN_(PROBING_ESTEPPERS_OFF, if (dopause) disable_e_steppers());
+ TERN_(PROBING_ESTEPPERS_OFF, if (dopause) stepper.disable_e_steppers());
#if ENABLED(PROBING_STEPPERS_OFF) && DISABLED(DELTA)
static uint8_t old_trusted;
if (dopause) {
old_trusted = axis_trusted;
- DISABLE_AXIS_X();
- DISABLE_AXIS_Y();
+ stepper.disable_axis(X_AXIS);
+ stepper.disable_axis(Y_AXIS);
}
else {
- if (TEST(old_trusted, X_AXIS)) ENABLE_AXIS_X();
- if (TEST(old_trusted, Y_AXIS)) ENABLE_AXIS_Y();
+ if (TEST(old_trusted, X_AXIS)) stepper.enable_axis(X_AXIS);
+ if (TEST(old_trusted, Y_AXIS)) stepper.enable_axis(Y_AXIS);
axis_trusted = old_trusted;
}
#endif
@@ -290,14 +290,14 @@ FORCE_INLINE void probe_specific_action(const bool deploy) {
BUZZ(100, 659);
BUZZ(100, 698);
- PGM_P const ds_str = deploy ? GET_TEXT(MSG_MANUAL_DEPLOY) : GET_TEXT(MSG_MANUAL_STOW);
+ FSTR_P const ds_str = deploy ? GET_TEXT_F(MSG_MANUAL_DEPLOY) : GET_TEXT_F(MSG_MANUAL_STOW);
ui.return_to_status(); // To display the new status message
- ui.set_status_P(ds_str, 99);
- SERIAL_ECHOLNPGM_P(ds_str);
+ ui.set_status(ds_str, 99);
+ SERIAL_ECHOLNF(ds_str);
- TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, PSTR("Stow Probe"), CONTINUE_STR));
- TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired_P(PSTR("Stow Probe")));
- TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, PSTR("Stow Probe"), CONTINUE_STR));
+ TERN_(HOST_PROMPT_SUPPORT, host_prompt_do(PROMPT_USER_CONTINUE, F("Stow Probe"), FPSTR(CONTINUE_STR)));
+ TERN_(EXTENSIBLE_UI, ExtUI::onUserConfirmRequired(F("Stow Probe")));
+ TERN_(DWIN_CREALITY_LCD_ENHANCED, DWIN_Popup_Confirm(ICON_BLTouch, F("Stow Probe"), FPSTR(CONTINUE_STR)));
TERN_(HAS_RESUME_CONTINUE, wait_for_user_response());
ui.reset_status();
@@ -439,7 +439,7 @@ bool Probe::set_deployed(const bool deploy) {
if (PROBE_TRIGGERED() == deploy) { // Unchanged after deploy/stow action?
if (IsRunning()) {
SERIAL_ERROR_MSG("Z-Probe failed");
- LCD_ALERTMESSAGEPGM_P(PSTR("Err: ZPROBE"));
+ LCD_ALERTMESSAGE_F("Err: ZPROBE");
}
stop();
return true;
@@ -793,7 +793,7 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai
if (isnan(measured_z)) {
stow();
- LCD_MESSAGEPGM(MSG_LCD_PROBING_FAILED);
+ LCD_MESSAGE(MSG_LCD_PROBING_FAILED);
#if DISABLED(G29_RETRY_AND_RECOVER)
SERIAL_ERROR_MSG(STR_ERR_PROBING_FAILED);
#endif
@@ -818,7 +818,7 @@ float Probe::probe_at_point(const_float_t rx, const_float_t ry, const ProbePtRai
#endif // HAS_Z_SERVO_PROBE
-#if EITHER(SENSORLESS_PROBING, SENSORLESS_HOMING)
+#if USE_SENSORLESS
sensorless_t stealth_states { false };
diff --git a/Marlin/src/module/probe.h b/Marlin/src/module/probe.h
index 5da5ea3a22..f9275ba9fd 100644
--- a/Marlin/src/module/probe.h
+++ b/Marlin/src/module/probe.h
@@ -263,7 +263,7 @@ public:
#endif
// Basic functions for Sensorless Homing and Probing
- #if EITHER(SENSORLESS_HOMING, SENSORLESS_PROBING)
+ #if USE_SENSORLESS
static void enable_stallguard_diag1();
static void disable_stallguard_diag1();
static void set_homing_current(const bool onoff);
diff --git a/Marlin/src/module/servo.cpp b/Marlin/src/module/servo.cpp
index 9b71dd390f..231efe84e1 100644
--- a/Marlin/src/module/servo.cpp
+++ b/Marlin/src/module/servo.cpp
@@ -39,19 +39,19 @@ HAL_SERVO_LIB servo[NUM_SERVOS];
void servo_init() {
#if NUM_SERVOS >= 1 && HAS_SERVO_0
servo[0].attach(SERVO0_PIN);
- servo[0].detach(); // Just set up the pin. We don't have a position yet. Don't move to a random position.
+ DETACH_SERVO(0); // Just set up the pin. We don't have a position yet. Don't move to a random position.
#endif
#if NUM_SERVOS >= 2 && HAS_SERVO_1
servo[1].attach(SERVO1_PIN);
- servo[1].detach();
+ DETACH_SERVO(1);
#endif
#if NUM_SERVOS >= 3 && HAS_SERVO_2
servo[2].attach(SERVO2_PIN);
- servo[2].detach();
+ DETACH_SERVO(2);
#endif
#if NUM_SERVOS >= 4 && HAS_SERVO_3
servo[3].attach(SERVO3_PIN);
- servo[3].detach();
+ DETACH_SERVO(3);
#endif
}
diff --git a/Marlin/src/module/servo.h b/Marlin/src/module/servo.h
index 3b5a5e7e2c..73dbbdddb7 100644
--- a/Marlin/src/module/servo.h
+++ b/Marlin/src/module/servo.h
@@ -110,6 +110,7 @@
#endif // HAS_SERVO_ANGLES
#define MOVE_SERVO(I, P) servo[I].move(P)
+#define DETACH_SERVO(I) servo[I].detach()
extern HAL_SERVO_LIB servo[NUM_SERVOS];
void servo_init();
diff --git a/Marlin/src/module/settings.cpp b/Marlin/src/module/settings.cpp
index 8e4c758854..6b7143e82a 100644
--- a/Marlin/src/module/settings.cpp
+++ b/Marlin/src/module/settings.cpp
@@ -36,7 +36,7 @@
*/
// Change EEPROM version if the structure changes
-#define EEPROM_VERSION "V84"
+#define EEPROM_VERSION "V85"
#define EEPROM_OFFSET 100
// Check the integrity of data offsets.
@@ -279,17 +279,24 @@ typedef struct SettingsDataStruct {
bool bltouch_last_written_mode;
//
- // DELTA / [XYZ]_DUAL_ENDSTOPS
+ // Kinematic Settings
//
- #if ENABLED(DELTA)
- float delta_height; // M666 H
- abc_float_t delta_endstop_adj; // M666 X Y Z
- float delta_radius, // M665 R
- delta_diagonal_rod, // M665 L
- segments_per_second; // M665 S
- abc_float_t delta_tower_angle_trim, // M665 X Y Z
- delta_diagonal_rod_trim; // M665 A B C
- #elif HAS_EXTRA_ENDSTOPS
+ #if IS_KINEMATIC
+ float segments_per_second; // M665 S
+ #if ENABLED(DELTA)
+ float delta_height; // M666 H
+ abc_float_t delta_endstop_adj; // M666 X Y Z
+ float delta_radius, // M665 R
+ delta_diagonal_rod; // M665 L
+ abc_float_t delta_tower_angle_trim, // M665 X Y Z
+ delta_diagonal_rod_trim; // M665 A B C
+ #endif
+ #endif
+
+ //
+ // Extra Endstops offsets
+ //
+ #if HAS_EXTRA_ENDSTOPS
float x2_endstop_adj, // M666 X
y2_endstop_adj, // M666 Y
z2_endstop_adj, // M666 (S2) Z
@@ -345,7 +352,7 @@ typedef struct SettingsDataStruct {
//
// HAS_LCD_CONTRAST
//
- int16_t lcd_contrast; // M250 C
+ uint8_t lcd_contrast; // M250 C
//
// HAS_LCD_BRIGHTNESS
@@ -550,7 +557,7 @@ void MarlinSettings::postprocess() {
TERN_(EXTENSIBLE_UI, ExtUI::onPostprocessSettings());
- // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm
+ // Refresh mm_per_step with the reciprocal of axis_steps_per_mm
// and init stepper.count[], planner.position[] with current_position
planner.refresh_positioning();
@@ -857,45 +864,49 @@ void MarlinSettings::postprocess() {
}
//
- // DELTA Geometry or Dual Endstops offsets
+ // Kinematic Settings
//
+ #if IS_KINEMATIC
{
+ EEPROM_WRITE(segments_per_second);
#if ENABLED(DELTA)
-
_FIELD_TEST(delta_height);
-
EEPROM_WRITE(delta_height); // 1 float
EEPROM_WRITE(delta_endstop_adj); // 3 floats
EEPROM_WRITE(delta_radius); // 1 float
EEPROM_WRITE(delta_diagonal_rod); // 1 float
- EEPROM_WRITE(segments_per_second); // 1 float
EEPROM_WRITE(delta_tower_angle_trim); // 3 floats
EEPROM_WRITE(delta_diagonal_rod_trim); // 3 floats
-
- #elif HAS_EXTRA_ENDSTOPS
-
- _FIELD_TEST(x2_endstop_adj);
-
- // Write dual endstops in X, Y, Z order. Unused = 0.0
- dummyf = 0;
- EEPROM_WRITE(TERN(X_DUAL_ENDSTOPS, endstops.x2_endstop_adj, dummyf)); // 1 float
- EEPROM_WRITE(TERN(Y_DUAL_ENDSTOPS, endstops.y2_endstop_adj, dummyf)); // 1 float
- EEPROM_WRITE(TERN(Z_MULTI_ENDSTOPS, endstops.z2_endstop_adj, dummyf)); // 1 float
-
- #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3
- EEPROM_WRITE(endstops.z3_endstop_adj); // 1 float
- #else
- EEPROM_WRITE(dummyf);
- #endif
-
- #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4
- EEPROM_WRITE(endstops.z4_endstop_adj); // 1 float
- #else
- EEPROM_WRITE(dummyf);
- #endif
-
#endif
}
+ #endif
+
+ //
+ // Extra Endstops offsets
+ //
+ #if HAS_EXTRA_ENDSTOPS
+ {
+ _FIELD_TEST(x2_endstop_adj);
+
+ // Write dual endstops in X, Y, Z order. Unused = 0.0
+ dummyf = 0;
+ EEPROM_WRITE(TERN(X_DUAL_ENDSTOPS, endstops.x2_endstop_adj, dummyf)); // 1 float
+ EEPROM_WRITE(TERN(Y_DUAL_ENDSTOPS, endstops.y2_endstop_adj, dummyf)); // 1 float
+ EEPROM_WRITE(TERN(Z_MULTI_ENDSTOPS, endstops.z2_endstop_adj, dummyf)); // 1 float
+
+ #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3
+ EEPROM_WRITE(endstops.z3_endstop_adj); // 1 float
+ #else
+ EEPROM_WRITE(dummyf);
+ #endif
+
+ #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4
+ EEPROM_WRITE(endstops.z4_endstop_adj); // 1 float
+ #else
+ EEPROM_WRITE(dummyf);
+ #endif
+ }
+ #endif
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
EEPROM_WRITE(z_stepper_align.xy);
@@ -1006,7 +1017,7 @@ void MarlinSettings::postprocess() {
//
{
_FIELD_TEST(lcd_contrast);
- const int16_t lcd_contrast = TERN(HAS_LCD_CONTRAST, ui.contrast, 127);
+ const uint8_t lcd_contrast = TERN(HAS_LCD_CONTRAST, ui.contrast, 127);
EEPROM_WRITE(lcd_contrast);
}
@@ -1460,7 +1471,7 @@ void MarlinSettings::postprocess() {
store_mesh(ubl.storage_slot);
#endif
- if (!eeprom_error) LCD_MESSAGEPGM(MSG_SETTINGS_STORED);
+ if (!eeprom_error) LCD_MESSAGE(MSG_SETTINGS_STORED);
TERN_(EXTENSIBLE_UI, ExtUI::onConfigurationStoreWritten(!eeprom_error));
@@ -1486,7 +1497,7 @@ void MarlinSettings::postprocess() {
stored_ver[1] = '\0';
}
DEBUG_ECHO_MSG("EEPROM version mismatch (EEPROM=", stored_ver, " Marlin=" EEPROM_VERSION ")");
- TERN_(DWIN_CREALITY_LCD_ENHANCED, ui.set_status(GET_TEXT(MSG_ERR_EEPROM_VERSION)));
+ TERN_(DWIN_CREALITY_LCD_ENHANCED, LCD_MESSAGE(MSG_ERR_EEPROM_VERSION));
IF_DISABLED(EEPROM_AUTO_INIT, ui.eeprom_alert_version());
eeprom_error = true;
@@ -1724,42 +1735,46 @@ void MarlinSettings::postprocess() {
}
//
- // DELTA Geometry or Dual Endstops offsets
+ // Kinematic Segments-per-second
//
+ #if IS_KINEMATIC
{
+ EEPROM_READ(segments_per_second);
#if ENABLED(DELTA)
-
_FIELD_TEST(delta_height);
-
EEPROM_READ(delta_height); // 1 float
EEPROM_READ(delta_endstop_adj); // 3 floats
EEPROM_READ(delta_radius); // 1 float
EEPROM_READ(delta_diagonal_rod); // 1 float
- EEPROM_READ(segments_per_second); // 1 float
EEPROM_READ(delta_tower_angle_trim); // 3 floats
EEPROM_READ(delta_diagonal_rod_trim); // 3 floats
-
- #elif HAS_EXTRA_ENDSTOPS
-
- _FIELD_TEST(x2_endstop_adj);
-
- EEPROM_READ(TERN(X_DUAL_ENDSTOPS, endstops.x2_endstop_adj, dummyf)); // 1 float
- EEPROM_READ(TERN(Y_DUAL_ENDSTOPS, endstops.y2_endstop_adj, dummyf)); // 1 float
- EEPROM_READ(TERN(Z_MULTI_ENDSTOPS, endstops.z2_endstop_adj, dummyf)); // 1 float
-
- #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3
- EEPROM_READ(endstops.z3_endstop_adj); // 1 float
- #else
- EEPROM_READ(dummyf);
- #endif
- #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4
- EEPROM_READ(endstops.z4_endstop_adj); // 1 float
- #else
- EEPROM_READ(dummyf);
- #endif
-
#endif
}
+ #endif
+
+ //
+ // Extra Endstops offsets
+ //
+ #if HAS_EXTRA_ENDSTOPS
+ {
+ _FIELD_TEST(x2_endstop_adj);
+
+ EEPROM_READ(TERN(X_DUAL_ENDSTOPS, endstops.x2_endstop_adj, dummyf)); // 1 float
+ EEPROM_READ(TERN(Y_DUAL_ENDSTOPS, endstops.y2_endstop_adj, dummyf)); // 1 float
+ EEPROM_READ(TERN(Z_MULTI_ENDSTOPS, endstops.z2_endstop_adj, dummyf)); // 1 float
+
+ #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3
+ EEPROM_READ(endstops.z3_endstop_adj); // 1 float
+ #else
+ EEPROM_READ(dummyf);
+ #endif
+ #if ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4
+ EEPROM_READ(endstops.z4_endstop_adj); // 1 float
+ #else
+ EEPROM_READ(dummyf);
+ #endif
+ }
+ #endif
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
EEPROM_READ(z_stepper_align.xy);
@@ -1869,7 +1884,7 @@ void MarlinSettings::postprocess() {
//
{
_FIELD_TEST(lcd_contrast);
- int16_t lcd_contrast;
+ uint8_t lcd_contrast;
EEPROM_READ(lcd_contrast);
if (!validating) {
TERN_(HAS_LCD_CONTRAST, ui.set_contrast(lcd_contrast));
@@ -2347,7 +2362,7 @@ void MarlinSettings::postprocess() {
else if (working_crc != stored_crc) {
eeprom_error = true;
DEBUG_ERROR_MSG("EEPROM CRC mismatch - (stored) ", stored_crc, " != ", working_crc, " (calculated)!");
- TERN_(DWIN_CREALITY_LCD_ENHANCED, ui.set_status(GET_TEXT(MSG_ERR_EEPROM_CRC)));
+ TERN_(DWIN_CREALITY_LCD_ENHANCED, LCD_MESSAGE(MSG_ERR_EEPROM_CRC));
IF_DISABLED(EEPROM_AUTO_INIT, ui.eeprom_alert_crc());
}
else if (!validating) {
@@ -2721,20 +2736,30 @@ void MarlinSettings::reset() {
//#endif
//
- // Endstop Adjustments
+ // Kinematic settings
//
- #if ENABLED(DELTA)
- const abc_float_t adj = DELTA_ENDSTOP_ADJ, dta = DELTA_TOWER_ANGLE_TRIM, ddr = DELTA_DIAGONAL_ROD_TRIM_TOWER;
- delta_height = DELTA_HEIGHT;
- delta_endstop_adj = adj;
- delta_radius = DELTA_RADIUS;
- delta_diagonal_rod = DELTA_DIAGONAL_ROD;
- segments_per_second = DELTA_SEGMENTS_PER_SECOND;
- delta_tower_angle_trim = dta;
- delta_diagonal_rod_trim = ddr;
+ #if IS_KINEMATIC
+ segments_per_second = (
+ TERN_(DELTA, DELTA_SEGMENTS_PER_SECOND)
+ TERN_(IS_SCARA, SCARA_SEGMENTS_PER_SECOND)
+ TERN_(POLARGRAPH, POLAR_SEGMENTS_PER_SECOND)
+ );
+ #if ENABLED(DELTA)
+ const abc_float_t adj = DELTA_ENDSTOP_ADJ, dta = DELTA_TOWER_ANGLE_TRIM, ddr = DELTA_DIAGONAL_ROD_TRIM_TOWER;
+ delta_height = DELTA_HEIGHT;
+ delta_endstop_adj = adj;
+ delta_radius = DELTA_RADIUS;
+ delta_diagonal_rod = DELTA_DIAGONAL_ROD;
+ delta_tower_angle_trim = dta;
+ delta_diagonal_rod_trim = ddr;
+ #endif
#endif
+ //
+ // Endstop Adjustments
+ //
+
#if ENABLED(X_DUAL_ENDSTOPS)
#ifndef X2_ENDSTOP_ADJUSTMENT
#define X2_ENDSTOP_ADJUSTMENT 0
@@ -3012,7 +3037,7 @@ void MarlinSettings::reset() {
#define CONFIG_ECHO_START() gcode.report_echo_start(forReplay)
#define CONFIG_ECHO_MSG(V...) do{ CONFIG_ECHO_START(); SERIAL_ECHOLNPGM(V); }while(0)
#define CONFIG_ECHO_MSG_P(V...) do{ CONFIG_ECHO_START(); SERIAL_ECHOLNPGM_P(V); }while(0)
- #define CONFIG_ECHO_HEADING(STR) gcode.report_heading(forReplay, PSTR(STR))
+ #define CONFIG_ECHO_HEADING(STR) gcode.report_heading(forReplay, F(STR))
void M92_report(const bool echo=true, const int8_t e=-1);
@@ -3137,7 +3162,7 @@ void MarlinSettings::reset() {
TERN_(EDITABLE_SERVO_ANGLES, gcode.M281_report(forReplay));
//
- // Delta / SCARA Kinematics
+ // Kinematic Settings
//
TERN_(IS_KINEMATIC, gcode.M665_report(forReplay));
@@ -3253,7 +3278,7 @@ void MarlinSettings::reset() {
//
// Tool-changing Parameters
//
- TERN_(HAS_MULTI_EXTRUDER, gcode.M217_report(forReplay));
+ E_TERN_(gcode.M217_report(forReplay));
//
// Backlash Compensation
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index 83aa15063b..3a1ee39c52 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -123,6 +123,10 @@ Stepper stepper; // Singleton
bool L64XX_OK_to_power_up = false; // flag to keep L64xx steppers powered down after a reset or power up
#endif
+#if ENABLED(AUTO_POWER_CONTROL)
+ #include "../feature/power.h"
+#endif
+
#if ENABLED(POWER_LOSS_RECOVERY)
#include "../feature/powerloss.h"
#endif
@@ -131,6 +135,10 @@ Stepper stepper; // Singleton
#include "../feature/spindle_laser.h"
#endif
+#if ENABLED(EXTENSIBLE_UI)
+ #include "../lcd/extui/ui_api.h"
+#endif
+
// public:
#if EITHER(HAS_EXTRA_ENDSTOPS, Z_STEPPER_AUTO_ALIGN)
@@ -145,12 +153,14 @@ Stepper stepper; // Singleton
#endif
#endif
+axis_flags_t Stepper::axis_enabled; // {0}
+
// private:
block_t* Stepper::current_block; // (= nullptr) A pointer to the block currently being traced
-uint8_t Stepper::last_direction_bits, // = 0
- Stepper::axis_did_move; // = 0
+axis_bits_t Stepper::last_direction_bits, // = 0
+ Stepper::axis_did_move; // = 0
bool Stepper::abort_current_block;
@@ -473,6 +483,89 @@ xyze_int8_t Stepper::count_direction{0};
#define DIR_WAIT_AFTER()
#endif
+void Stepper::enable_axis(const AxisEnum axis) {
+ #define _CASE_ENABLE(N) case N##_AXIS: ENABLE_AXIS_##N(); break;
+ switch (axis) {
+ LINEAR_AXIS_CODE(
+ _CASE_ENABLE(X), _CASE_ENABLE(Y), _CASE_ENABLE(Z),
+ _CASE_ENABLE(I), _CASE_ENABLE(J), _CASE_ENABLE(K)
+ );
+ default: break;
+ }
+ mark_axis_enabled(axis);
+}
+
+bool Stepper::disable_axis(const AxisEnum axis) {
+ mark_axis_disabled(axis);
+ // If all the axes that share the enabled bit are disabled
+ const bool can_disable = can_axis_disable(axis);
+ if (can_disable) {
+ #define _CASE_DISABLE(N) case N##_AXIS: DISABLE_AXIS_##N(); break;
+ switch (axis) {
+ LINEAR_AXIS_CODE(
+ _CASE_DISABLE(X), _CASE_DISABLE(Y), _CASE_DISABLE(Z),
+ _CASE_DISABLE(I), _CASE_DISABLE(J), _CASE_DISABLE(K)
+ );
+ default: break;
+ }
+ }
+ return can_disable;
+}
+
+#if HAS_EXTRUDERS
+
+ void Stepper::enable_extruder(E_TERN_(const uint8_t eindex)) {
+ IF_DISABLED(HAS_MULTI_EXTRUDER, constexpr uint8_t eindex = 0);
+ #define _CASE_ENA_E(N) case N: ENABLE_AXIS_E##N(); mark_axis_enabled(E_AXIS E_OPTARG(eindex)); break;
+ switch (eindex) {
+ REPEAT(E_STEPPERS, _CASE_ENA_E)
+ }
+ }
+
+ bool Stepper::disable_extruder(E_TERN_(const uint8_t eindex)) {
+ IF_DISABLED(HAS_MULTI_EXTRUDER, constexpr uint8_t eindex = 0);
+ mark_axis_disabled(E_AXIS E_OPTARG(eindex));
+ const bool can_disable = can_axis_disable(E_AXIS E_OPTARG(eindex));
+ if (can_disable) {
+ #define _CASE_DIS_E(N) case N: DISABLE_AXIS_E##N(); break;
+ switch (eindex) { REPEAT(E_STEPPERS, _CASE_DIS_E) }
+ }
+ return can_disable;
+ }
+
+ void Stepper::enable_e_steppers() {
+ #define _ENA_E(N) ENABLE_EXTRUDER(N);
+ REPEAT(EXTRUDERS, _ENA_E)
+ }
+
+ void Stepper::disable_e_steppers() {
+ #define _DIS_E(N) DISABLE_EXTRUDER(N);
+ REPEAT(EXTRUDERS, _DIS_E)
+ }
+
+#endif
+
+void Stepper::enable_all_steppers() {
+ TERN_(AUTO_POWER_CONTROL, powerManager.power_on());
+ LINEAR_AXIS_CODE(
+ enable_axis(X_AXIS), enable_axis(Y_AXIS), enable_axis(Z_AXIS),
+ enable_axis(I_AXIS), enable_axis(J_AXIS), enable_axis(K_AXIS)
+ );
+ enable_e_steppers();
+
+ TERN_(EXTENSIBLE_UI, ExtUI::onSteppersEnabled());
+}
+
+void Stepper::disable_all_steppers() {
+ LINEAR_AXIS_CODE(
+ disable_axis(X_AXIS), disable_axis(Y_AXIS), disable_axis(Z_AXIS),
+ disable_axis(I_AXIS), disable_axis(J_AXIS), disable_axis(K_AXIS)
+ );
+ disable_e_steppers();
+
+ TERN_(EXTENSIBLE_UI, ExtUI::onSteppersDisabled());
+}
+
/**
* Set the stepper direction of each axis
*
@@ -494,27 +587,12 @@ void Stepper::set_directions() {
count_direction[_AXIS(A)] = 1; \
}
- #if HAS_X_DIR
- SET_STEP_DIR(X); // A
- #endif
- #if HAS_Y_DIR
- SET_STEP_DIR(Y); // B
- #endif
- #if HAS_Z_DIR
- SET_STEP_DIR(Z); // C
- #endif
-
- #if HAS_I_DIR
- SET_STEP_DIR(I); // I
- #endif
-
- #if HAS_J_DIR
- SET_STEP_DIR(J); // J
- #endif
-
- #if HAS_K_DIR
- SET_STEP_DIR(K); // K
- #endif
+ TERN_(HAS_X_DIR, SET_STEP_DIR(X)); // A
+ TERN_(HAS_Y_DIR, SET_STEP_DIR(Y)); // B
+ TERN_(HAS_Z_DIR, SET_STEP_DIR(Z)); // C
+ TERN_(HAS_I_DIR, SET_STEP_DIR(I));
+ TERN_(HAS_J_DIR, SET_STEP_DIR(J));
+ TERN_(HAS_K_DIR, SET_STEP_DIR(K));
#if DISABLED(LIN_ADVANCE)
#if ENABLED(MIXING_EXTRUDER)
@@ -1635,7 +1713,7 @@ void Stepper::pulse_phase_isr() {
case 0: {
const uint8_t low = page_step_state.page[page_step_state.segment_idx],
high = page_step_state.page[page_step_state.segment_idx + 1];
- uint8_t dm = last_direction_bits;
+ axis_bits_t dm = last_direction_bits;
PAGE_SEGMENT_UPDATE(X, low >> 4);
PAGE_SEGMENT_UPDATE(Y, low & 0xF);
@@ -2156,7 +2234,7 @@ uint32_t Stepper::block_phase_isr() {
#define Z_MOVE_TEST !!current_block->steps.c
#endif
- uint8_t axis_bits = 0;
+ axis_bits_t axis_bits = 0;
LINEAR_AXIS_CODE(
if (X_MOVE_TEST) SBI(axis_bits, A_AXIS),
if (Y_MOVE_TEST) SBI(axis_bits, B_AXIS),
@@ -2207,7 +2285,7 @@ uint32_t Stepper::block_phase_isr() {
TERN_(MIXING_EXTRUDER, mixer.stepper_setup(current_block->b_color));
- TERN_(HAS_MULTI_EXTRUDER, stepper_extruder = current_block->extruder);
+ E_TERN_(stepper_extruder = current_block->extruder);
// Initialize the trapezoid generator from the current block.
#if ENABLED(LIN_ADVANCE)
@@ -2230,7 +2308,7 @@ uint32_t Stepper::block_phase_isr() {
|| current_block->direction_bits != last_direction_bits
|| TERN(MIXING_EXTRUDER, false, stepper_extruder != last_moved_extruder)
) {
- TERN_(HAS_MULTI_EXTRUDER, last_moved_extruder = stepper_extruder);
+ E_TERN_(last_moved_extruder = stepper_extruder);
TERN_(HAS_L64XX, L64XX_OK_to_power_up = true);
set_directions(current_block->direction_bits);
}
@@ -2279,7 +2357,7 @@ uint32_t Stepper::block_phase_isr() {
// If delayed Z enable, enable it now. This option will severely interfere with
// timing between pulses when chaining motion between blocks, and it could lead
// to lost steps in both X and Y axis, so avoid using it unless strictly necessary!!
- if (current_block->steps.z) ENABLE_AXIS_Z();
+ if (current_block->steps.z) enable_axis(Z_AXIS);
#endif
// Mark the time_nominal as not calculated yet
@@ -2875,7 +2953,7 @@ void Stepper::report_positions() {
#if ENABLED(BABYSTEPPING)
- #define _ENABLE_AXIS(AXIS) ENABLE_AXIS_## AXIS()
+ #define _ENABLE_AXIS(A) enable_axis(_AXIS(A))
#define _READ_DIR(AXIS) AXIS ##_DIR_READ()
#define _INVERT_DIR(AXIS) INVERT_## AXIS ##_DIR
#define _APPLY_DIR(AXIS, INVERT) AXIS ##_APPLY_DIR(INVERT, true)
@@ -3003,16 +3081,17 @@ void Stepper::report_positions() {
const bool z_direction = direction ^ BABYSTEP_INVERT_Z;
- ENABLE_AXIS_X();
- ENABLE_AXIS_Y();
- ENABLE_AXIS_Z();
- ENABLE_AXIS_I();
- ENABLE_AXIS_J();
- ENABLE_AXIS_K();
+ LINEAR_AXIS_CODE(
+ enable_axis(X_AXIS), enable_axis(Y_AXIS), enable_axis(Z_AXIS),
+ enable_axis(I_AXIS), enable_axis(J_AXIS), enable_axis(K_AXIS)
+ );
DIR_WAIT_BEFORE();
- const xyz_byte_t old_dir = LINEAR_AXIS_ARRAY(X_DIR_READ(), Y_DIR_READ(), Z_DIR_READ(), I_DIR_READ(), J_DIR_READ(), K_DIR_READ());
+ const xyz_byte_t old_dir = LINEAR_AXIS_ARRAY(
+ X_DIR_READ(), Y_DIR_READ(), Z_DIR_READ(),
+ I_DIR_READ(), J_DIR_READ(), K_DIR_READ()
+ );
X_DIR_WRITE(INVERT_X_DIR ^ z_direction);
#ifdef Y_DIR_WRITE
diff --git a/Marlin/src/module/stepper.h b/Marlin/src/module/stepper.h
index d2f42b63fc..f170dd4104 100644
--- a/Marlin/src/module/stepper.h
+++ b/Marlin/src/module/stepper.h
@@ -236,6 +236,71 @@
// Perhaps DISABLE_MULTI_STEPPING should be required with ADAPTIVE_STEP_SMOOTHING.
#define MIN_STEP_ISR_FREQUENCY (MAX_STEP_ISR_FREQUENCY_1X / 2)
+#define ENABLE_COUNT (LINEAR_AXES + E_STEPPERS)
+typedef IF<(ENABLE_COUNT > 8), uint16_t, uint8_t>::type ena_mask_t;
+
+// Axis flags type, for enabled state or other simple state
+typedef struct {
+ union {
+ ena_mask_t bits;
+ struct {
+ bool LINEAR_AXIS_LIST(X:1, Y:1, Z:1, I:1, J:1, K:1);
+ #if HAS_EXTRUDERS
+ bool LIST_N(EXTRUDERS, E0:1, E1:1, E2:1, E3:1, E4:1, E5:1, E6:1, E7:1);
+ #endif
+ };
+ };
+ constexpr ena_mask_t linear_bits() { return _BV(LINEAR_AXES) - 1; }
+ constexpr ena_mask_t e_bits() { return (_BV(EXTRUDERS) - 1) << LINEAR_AXES; }
+} axis_flags_t;
+
+// All the stepper enable pins
+constexpr pin_t ena_pins[] = {
+ LINEAR_AXIS_LIST(X_ENABLE_PIN, Y_ENABLE_PIN, Z_ENABLE_PIN, I_ENABLE_PIN, J_ENABLE_PIN, K_ENABLE_PIN),
+ LIST_N(E_STEPPERS, E0_ENABLE_PIN, E1_ENABLE_PIN, E2_ENABLE_PIN, E3_ENABLE_PIN, E4_ENABLE_PIN, E5_ENABLE_PIN, E6_ENABLE_PIN, E7_ENABLE_PIN)
+};
+
+// Index of the axis or extruder element in a combined array
+constexpr uint8_t index_of_axis(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
+ return uint8_t(axis) + (E_TERN0(axis < LINEAR_AXES ? 0 : eindex));
+}
+//#define __IAX_N(N,V...) _IAX_##N(V)
+//#define _IAX_N(N,V...) __IAX_N(N,V)
+//#define _IAX_1(A) index_of_axis(A)
+//#define _IAX_2(A,B) index_of_axis(A E_OPTARG(B))
+//#define INDEX_OF_AXIS(V...) _IAX_N(TWO_ARGS(V),V)
+
+#define INDEX_OF_AXIS(A,V...) index_of_axis(A E_OPTARG(V+0))
+
+// Bit mask for a matching enable pin, or 0
+constexpr ena_mask_t ena_same(const uint8_t a, const uint8_t b) {
+ return ena_pins[a] == ena_pins[b] ? _BV(b) : 0;
+}
+
+// Recursively get the enable overlaps mask for a given linear axis or extruder
+constexpr ena_mask_t ena_overlap(const uint8_t a=0, const uint8_t b=0) {
+ return b >= ENABLE_COUNT ? 0 : (a == b ? 0 : ena_same(a, b)) | ena_overlap(a, b + 1);
+}
+
+// Recursively get whether there's any overlap at all
+constexpr bool any_enable_overlap(const uint8_t a=0) {
+ return a >= ENABLE_COUNT ? false : ena_overlap(a) || any_enable_overlap(a + 1);
+}
+
+// Array of axes that overlap with each
+// TODO: Consider cases where >=2 steppers are used by a linear axis or extruder
+// (e.g., CoreXY, Dual XYZ, or E with multiple steppers, etc.).
+constexpr ena_mask_t enable_overlap[] = {
+ #define _OVERLAP(N) ena_overlap(INDEX_OF_AXIS(AxisEnum(N))),
+ REPEAT(LINEAR_AXES, _OVERLAP)
+ #if HAS_EXTRUDERS
+ #define _E_OVERLAP(N) ena_overlap(INDEX_OF_AXIS(E_AXIS, N)),
+ REPEAT(E_STEPPERS, _E_OVERLAP)
+ #endif
+};
+
+//static_assert(!any_enable_overlap(), "There is some overlap.");
+
//
// Stepper class definition
//
@@ -276,8 +341,8 @@ class Stepper {
static block_t* current_block; // A pointer to the block currently being traced
- static uint8_t last_direction_bits, // The next stepping-bits to be output
- axis_did_move; // Last Movement in the given direction is not null, as computed when the last movement was fetched from planner
+ static axis_bits_t last_direction_bits, // The next stepping-bits to be output
+ axis_did_move; // Last Movement in the given direction is not null, as computed when the last movement was fetched from planner
static bool abort_current_block; // Signals to the stepper that current block should be aborted
@@ -519,11 +584,48 @@ class Stepper {
static void refresh_motor_power();
#endif
+ static axis_flags_t axis_enabled; // Axis stepper(s) ENABLED states
+
+ static inline bool axis_is_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
+ return TEST(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex));
+ }
+ static inline void mark_axis_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
+ SBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex));
+ }
+ static inline void mark_axis_disabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
+ CBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex));
+ }
+ static inline bool can_axis_disable(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
+ return !any_enable_overlap() || !(axis_enabled.bits & enable_overlap[INDEX_OF_AXIS(axis, eindex)]);
+ }
+
+ static void enable_axis(const AxisEnum axis);
+ static bool disable_axis(const AxisEnum axis);
+
+ #if HAS_EXTRUDERS
+ static void enable_extruder(E_TERN_(const uint8_t eindex=0));
+ static bool disable_extruder(E_TERN_(const uint8_t eindex=0));
+ static void enable_e_steppers();
+ static void disable_e_steppers();
+ #else
+ static inline void enable_extruder() {}
+ static inline bool disable_extruder() { return true; }
+ static inline void enable_e_steppers() {}
+ static inline void disable_e_steppers() {}
+ #endif
+
+ #define ENABLE_EXTRUDER(N) enable_extruder(E_TERN_(N))
+ #define DISABLE_EXTRUDER(N) disable_extruder(E_TERN_(N))
+ #define AXIS_IS_ENABLED(N,V...) axis_is_enabled(N E_OPTARG(#V))
+
+ static void enable_all_steppers();
+ static void disable_all_steppers();
+
// Update direction states for all steppers
static void set_directions();
// Set direction bits and update all stepper DIR states
- static void set_directions(const uint8_t bits) {
+ static void set_directions(const axis_bits_t bits) {
last_direction_bits = bits;
set_directions();
}
diff --git a/Marlin/src/module/stepper/indirection.h b/Marlin/src/module/stepper/indirection.h
index beba03699e..3e3ebd411f 100644
--- a/Marlin/src/module/stepper/indirection.h
+++ b/Marlin/src/module/stepper/indirection.h
@@ -667,183 +667,87 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
//
#ifndef ENABLE_STEPPER_X
- #if HAS_X_ENABLE
- #define ENABLE_STEPPER_X() X_ENABLE_WRITE( X_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_X() NOOP
- #endif
+ #define ENABLE_STEPPER_X() TERN(HAS_X_ENABLE, X_ENABLE_WRITE( X_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_X
- #if HAS_X_ENABLE
- #define DISABLE_STEPPER_X() X_ENABLE_WRITE(!X_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_X() NOOP
- #endif
+ #define DISABLE_STEPPER_X() TERN(HAS_X_ENABLE, X_ENABLE_WRITE(!X_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_X2
- #if HAS_X2_ENABLE
- #define ENABLE_STEPPER_X2() X2_ENABLE_WRITE( X_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_X2() NOOP
- #endif
+ #define ENABLE_STEPPER_X2() TERN(HAS_X2_ENABLE, X2_ENABLE_WRITE( X_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_X2
- #if HAS_X2_ENABLE
- #define DISABLE_STEPPER_X2() X2_ENABLE_WRITE(!X_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_X2() NOOP
- #endif
+ #define DISABLE_STEPPER_X2() TERN(HAS_X2_ENABLE, X2_ENABLE_WRITE(!X_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_Y
- #if HAS_Y_ENABLE
- #define ENABLE_STEPPER_Y() Y_ENABLE_WRITE( Y_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_Y() NOOP
- #endif
+ #define ENABLE_STEPPER_Y() TERN(HAS_Y_ENABLE, Y_ENABLE_WRITE( Y_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_Y
- #if HAS_Y_ENABLE
- #define DISABLE_STEPPER_Y() Y_ENABLE_WRITE(!Y_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_Y() NOOP
- #endif
+ #define DISABLE_STEPPER_Y() TERN(HAS_Y_ENABLE, Y_ENABLE_WRITE(!Y_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_Y2
- #if HAS_Y2_ENABLE
- #define ENABLE_STEPPER_Y2() Y2_ENABLE_WRITE( Y_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_Y2() NOOP
- #endif
+ #define ENABLE_STEPPER_Y2() TERN(HAS_Y2_ENABLE, Y2_ENABLE_WRITE( Y_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_Y2
- #if HAS_Y2_ENABLE
- #define DISABLE_STEPPER_Y2() Y2_ENABLE_WRITE(!Y_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_Y2() NOOP
- #endif
+ #define DISABLE_STEPPER_Y2() TERN(HAS_Y2_ENABLE, Y2_ENABLE_WRITE(!Y_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_Z
- #if HAS_Z_ENABLE
- #define ENABLE_STEPPER_Z() Z_ENABLE_WRITE( Z_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_Z() NOOP
- #endif
+ #define ENABLE_STEPPER_Z() TERN(HAS_Z_ENABLE, Z_ENABLE_WRITE( Z_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_Z
- #if HAS_Z_ENABLE
- #define DISABLE_STEPPER_Z() Z_ENABLE_WRITE(!Z_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_Z() NOOP
- #endif
+ #define DISABLE_STEPPER_Z() TERN(HAS_Z_ENABLE, Z_ENABLE_WRITE(!Z_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_Z2
- #if HAS_Z2_ENABLE
- #define ENABLE_STEPPER_Z2() Z2_ENABLE_WRITE( Z_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_Z2() NOOP
- #endif
+ #define ENABLE_STEPPER_Z2() TERN(HAS_Z2_ENABLE, Z2_ENABLE_WRITE( Z_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_Z2
- #if HAS_Z2_ENABLE
- #define DISABLE_STEPPER_Z2() Z2_ENABLE_WRITE(!Z_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_Z2() NOOP
- #endif
+ #define DISABLE_STEPPER_Z2() TERN(HAS_Z2_ENABLE, Z2_ENABLE_WRITE(!Z_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_Z3
- #if HAS_Z3_ENABLE
- #define ENABLE_STEPPER_Z3() Z3_ENABLE_WRITE( Z_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_Z3() NOOP
- #endif
+ #define ENABLE_STEPPER_Z3() TERN(HAS_Z3_ENABLE, Z3_ENABLE_WRITE( Z_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_Z3
- #if HAS_Z3_ENABLE
- #define DISABLE_STEPPER_Z3() Z3_ENABLE_WRITE(!Z_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_Z3() NOOP
- #endif
+ #define DISABLE_STEPPER_Z3() TERN(HAS_Z3_ENABLE, Z3_ENABLE_WRITE(!Z_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_Z4
- #if HAS_Z4_ENABLE
- #define ENABLE_STEPPER_Z4() Z4_ENABLE_WRITE( Z_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_Z4() NOOP
- #endif
+ #define ENABLE_STEPPER_Z4() TERN(HAS_Z4_ENABLE, Z4_ENABLE_WRITE( Z_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_Z4
- #if HAS_Z4_ENABLE
- #define DISABLE_STEPPER_Z4() Z4_ENABLE_WRITE(!Z_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_Z4() NOOP
- #endif
+ #define DISABLE_STEPPER_Z4() TERN(HAS_Z4_ENABLE, Z4_ENABLE_WRITE(!Z_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_I
- #if HAS_I_ENABLE
- #define ENABLE_STEPPER_I() I_ENABLE_WRITE( I_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_I() NOOP
- #endif
+ #define ENABLE_STEPPER_I() TERN(HAS_I_ENABLE, I_ENABLE_WRITE( I_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_I
- #if HAS_I_ENABLE
- #define DISABLE_STEPPER_I() I_ENABLE_WRITE(!I_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_I() NOOP
- #endif
+ #define DISABLE_STEPPER_I() TERN(HAS_I_ENABLE, I_ENABLE_WRITE(!I_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_J
- #if HAS_J_ENABLE
- #define ENABLE_STEPPER_J() J_ENABLE_WRITE( J_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_J() NOOP
- #endif
+ #define ENABLE_STEPPER_J() TERN(HAS_J_ENABLE, J_ENABLE_WRITE( J_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_J
- #if HAS_J_ENABLE
- #define DISABLE_STEPPER_J() J_ENABLE_WRITE(!J_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_J() NOOP
- #endif
+ #define DISABLE_STEPPER_J() TERN(HAS_J_ENABLE, J_ENABLE_WRITE(!J_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_K
- #if HAS_K_ENABLE
- #define ENABLE_STEPPER_K() K_ENABLE_WRITE( K_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_K() NOOP
- #endif
+ #define ENABLE_STEPPER_K() TERN(HAS_K_ENABLE, K_ENABLE_WRITE( K_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_K
- #if HAS_K_ENABLE
- #define DISABLE_STEPPER_K() K_ENABLE_WRITE(!K_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_K() NOOP
- #endif
+ #define DISABLE_STEPPER_K() TERN(HAS_K_ENABLE, K_ENABLE_WRITE(!K_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_E0
- #if HAS_E0_ENABLE
- #define ENABLE_STEPPER_E0() E0_ENABLE_WRITE( E_ENABLE_ON)
- #else
- #define ENABLE_STEPPER_E0() NOOP
- #endif
+ #define ENABLE_STEPPER_E0() TERN(HAS_E0_ENABLE, E0_ENABLE_WRITE( E_ENABLE_ON), NOOP)
#endif
#ifndef DISABLE_STEPPER_E0
- #if HAS_E0_ENABLE
- #define DISABLE_STEPPER_E0() E0_ENABLE_WRITE(!E_ENABLE_ON)
- #else
- #define DISABLE_STEPPER_E0() NOOP
- #endif
+ #define DISABLE_STEPPER_E0() TERN(HAS_E0_ENABLE, E0_ENABLE_WRITE(!E_ENABLE_ON), NOOP)
#endif
#ifndef ENABLE_STEPPER_E1
@@ -992,21 +896,21 @@ void reset_stepper_drivers(); // Called by settings.load / settings.reset
#endif
#if LINEAR_AXES >= 4
- #define ENABLE_AXIS_I() if (SHOULD_ENABLE(i)) { ENABLE_STEPPER_I(); AFTER_CHANGE(i, true); }
+ #define ENABLE_AXIS_I() if (SHOULD_ENABLE(i)) { ENABLE_STEPPER_I(); AFTER_CHANGE(i, true); }
#define DISABLE_AXIS_I() if (SHOULD_DISABLE(i)) { DISABLE_STEPPER_I(); AFTER_CHANGE(i, false); set_axis_untrusted(I_AXIS); }
#else
#define ENABLE_AXIS_I() NOOP
#define DISABLE_AXIS_I() NOOP
#endif
#if LINEAR_AXES >= 5
- #define ENABLE_AXIS_J() if (SHOULD_ENABLE(j)) { ENABLE_STEPPER_J(); AFTER_CHANGE(j, true); }
+ #define ENABLE_AXIS_J() if (SHOULD_ENABLE(j)) { ENABLE_STEPPER_J(); AFTER_CHANGE(j, true); }
#define DISABLE_AXIS_J() if (SHOULD_DISABLE(j)) { DISABLE_STEPPER_J(); AFTER_CHANGE(j, false); set_axis_untrusted(J_AXIS); }
#else
#define ENABLE_AXIS_J() NOOP
#define DISABLE_AXIS_J() NOOP
#endif
#if LINEAR_AXES >= 6
- #define ENABLE_AXIS_K() if (SHOULD_ENABLE(k)) { ENABLE_STEPPER_K(); AFTER_CHANGE(k, true); }
+ #define ENABLE_AXIS_K() if (SHOULD_ENABLE(k)) { ENABLE_STEPPER_K(); AFTER_CHANGE(k, true); }
#define DISABLE_AXIS_K() if (SHOULD_DISABLE(k)) { DISABLE_STEPPER_K(); AFTER_CHANGE(k, false); set_axis_untrusted(K_AXIS); }
#else
#define ENABLE_AXIS_K() NOOP
diff --git a/Marlin/src/module/stepper/trinamic.cpp b/Marlin/src/module/stepper/trinamic.cpp
index fd63027974..e8ecbf1c76 100644
--- a/Marlin/src/module/stepper/trinamic.cpp
+++ b/Marlin/src/module/stepper/trinamic.cpp
@@ -164,6 +164,15 @@ enum StealthIndex : uint8_t {
#ifndef TMC_Z4_BAUD_RATE
#define TMC_Z4_BAUD_RATE TMC_BAUD_RATE
#endif
+#ifndef TMC_I_BAUD_RATE
+ #define TMC_I_BAUD_RATE TMC_BAUD_RATE
+#endif
+#ifndef TMC_J_BAUD_RATE
+ #define TMC_J_BAUD_RATE TMC_BAUD_RATE
+#endif
+#ifndef TMC_K_BAUD_RATE
+ #define TMC_K_BAUD_RATE TMC_BAUD_RATE
+#endif
#ifndef TMC_E0_BAUD_RATE
#define TMC_E0_BAUD_RATE TMC_BAUD_RATE
#endif
@@ -834,12 +843,8 @@ void restore_trinamic_drivers() {
void reset_trinamic_drivers() {
static constexpr bool stealthchop_by_axis[] = LOGICAL_AXIS_ARRAY(
ENABLED(STEALTHCHOP_E),
- ENABLED(STEALTHCHOP_XY),
- ENABLED(STEALTHCHOP_XY),
- ENABLED(STEALTHCHOP_Z),
- ENABLED(STEALTHCHOP_I),
- ENABLED(STEALTHCHOP_J),
- ENABLED(STEALTHCHOP_K)
+ ENABLED(STEALTHCHOP_XY), ENABLED(STEALTHCHOP_XY), ENABLED(STEALTHCHOP_Z),
+ ENABLED(STEALTHCHOP_I), ENABLED(STEALTHCHOP_J), ENABLED(STEALTHCHOP_K)
);
#if AXIS_IS_TMC(X)
diff --git a/Marlin/src/module/stepper/trinamic.h b/Marlin/src/module/stepper/trinamic.h
index 7957a1b353..0a956a70b3 100644
--- a/Marlin/src/module/stepper/trinamic.h
+++ b/Marlin/src/module/stepper/trinamic.h
@@ -194,7 +194,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_Z2 CHOPPER_TIMING_Z
#endif
static constexpr chopper_timing_t chopper_timing_Z2 = CHOPPER_TIMING_Z2;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z2)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define Z2_ENABLE_INIT() NOOP
#define Z2_ENABLE_WRITE(STATE) stepperZ2.toff((STATE)==Z_ENABLE_ON ? chopper_timing_Z2.toff : 0)
#define Z2_ENABLE_READ() stepperZ2.isEnabled()
@@ -287,7 +287,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E0 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E0 = CHOPPER_TIMING_E0;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E0)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E0_ENABLE_INIT() NOOP
#define E0_ENABLE_WRITE(STATE) stepperE0.toff((STATE)==E_ENABLE_ON ? chopper_timing_E0.toff : 0)
#define E0_ENABLE_READ() stepperE0.isEnabled()
@@ -304,7 +304,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E1 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E1 = CHOPPER_TIMING_E1;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E1)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E1_ENABLE_INIT() NOOP
#define E1_ENABLE_WRITE(STATE) stepperE1.toff((STATE)==E_ENABLE_ON ? chopper_timing_E1.toff : 0)
#define E1_ENABLE_READ() stepperE1.isEnabled()
@@ -321,7 +321,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E2 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E2 = CHOPPER_TIMING_E2;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E2)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E2_ENABLE_INIT() NOOP
#define E2_ENABLE_WRITE(STATE) stepperE2.toff((STATE)==E_ENABLE_ON ? chopper_timing_E2.toff : 0)
#define E2_ENABLE_READ() stepperE2.isEnabled()
@@ -338,7 +338,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E3 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E3 = CHOPPER_TIMING_E3;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E3)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E3_ENABLE_INIT() NOOP
#define E3_ENABLE_WRITE(STATE) stepperE3.toff((STATE)==E_ENABLE_ON ? chopper_timing_E3.toff : 0)
#define E3_ENABLE_READ() stepperE3.isEnabled()
@@ -355,7 +355,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E4 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E4 = CHOPPER_TIMING_E4;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E4)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E4_ENABLE_INIT() NOOP
#define E4_ENABLE_WRITE(STATE) stepperE4.toff((STATE)==E_ENABLE_ON ? chopper_timing_E4.toff : 0)
#define E4_ENABLE_READ() stepperE4.isEnabled()
@@ -372,7 +372,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E5 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E5 = CHOPPER_TIMING_E5;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E5)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E5_ENABLE_INIT() NOOP
#define E5_ENABLE_WRITE(STATE) stepperE5.toff((STATE)==E_ENABLE_ON ? chopper_timing_E5.toff : 0)
#define E5_ENABLE_READ() stepperE5.isEnabled()
@@ -389,7 +389,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E6 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E6 = CHOPPER_TIMING_E6;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E6_ENABLE_INIT() NOOP
#define E6_ENABLE_WRITE(STATE) stepperE6.toff((STATE)==E_ENABLE_ON ? chopper_timing_E6.toff : 0)
#define E6_ENABLE_READ() stepperE6.isEnabled()
@@ -406,7 +406,7 @@ void reset_trinamic_drivers();
#define CHOPPER_TIMING_E7 CHOPPER_TIMING_E
#endif
static constexpr chopper_timing_t chopper_timing_E7 = CHOPPER_TIMING_E7;
- #if ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7)
+ #if ENABLED(SOFTWARE_DRIVER_ENABLE)
#define E7_ENABLE_INIT() NOOP
#define E7_ENABLE_WRITE(STATE) stepperE7.toff((STATE)==E_ENABLE_ON ? chopper_timing_E7.toff : 0)
#define E7_ENABLE_READ() stepperE7.isEnabled()
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index 6be98e90d4..3130914451 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -187,8 +187,8 @@
Temperature thermalManager;
-const char str_t_thermal_runaway[] PROGMEM = STR_T_THERMAL_RUNAWAY,
- str_t_heating_failed[] PROGMEM = STR_T_HEATING_FAILED;
+PGMSTR(str_t_thermal_runaway, STR_T_THERMAL_RUNAWAY);
+PGMSTR(str_t_heating_failed, STR_T_HEATING_FAILED);
/**
* Macros to include the heater id in temp errors. The compiler's dead-code
@@ -196,22 +196,22 @@ const char str_t_thermal_runaway[] PROGMEM = STR_T_THERMAL_RUNAWAY,
*/
#if HAS_HEATED_BED
- #define _BED_PSTR(h) (h) == H_BED ? GET_TEXT(MSG_BED) :
+ #define _BED_FSTR(h) (h) == H_BED ? GET_TEXT_F(MSG_BED) :
#else
- #define _BED_PSTR(h)
+ #define _BED_FSTR(h)
#endif
#if HAS_HEATED_CHAMBER
- #define _CHAMBER_PSTR(h) (h) == H_CHAMBER ? GET_TEXT(MSG_CHAMBER) :
+ #define _CHAMBER_FSTR(h) (h) == H_CHAMBER ? GET_TEXT_F(MSG_CHAMBER) :
#else
- #define _CHAMBER_PSTR(h)
+ #define _CHAMBER_FSTR(h)
#endif
#if HAS_COOLER
- #define _COOLER_PSTR(h) (h) == H_COOLER ? GET_TEXT(MSG_COOLER) :
+ #define _COOLER_FSTR(h) (h) == H_COOLER ? GET_TEXT_F(MSG_COOLER) :
#else
- #define _COOLER_PSTR(h)
+ #define _COOLER_FSTR(h)
#endif
-#define _E_PSTR(h,N) ((HOTENDS) > N && (h) == N) ? PSTR(LCD_STR_E##N) :
-#define HEATER_PSTR(h) _BED_PSTR(h) _CHAMBER_PSTR(h) _COOLER_PSTR(h) _E_PSTR(h,1) _E_PSTR(h,2) _E_PSTR(h,3) _E_PSTR(h,4) _E_PSTR(h,5) PSTR(LCD_STR_E0)
+#define _E_FSTR(h,N) ((HOTENDS) > N && (h) == N) ? F(LCD_STR_E##N) :
+#define HEATER_FSTR(h) _BED_FSTR(h) _CHAMBER_FSTR(h) _COOLER_FSTR(h) _E_FSTR(h,1) _E_FSTR(h,2) _E_FSTR(h,3) _E_FSTR(h,4) _E_FSTR(h,5) F(LCD_STR_E0)
//
// Initialize MAX TC objects/SPI
@@ -635,7 +635,7 @@ volatile bool Temperature::raw_temps_ready = false;
// PID Tuning loop
wait_for_heatup = true; // Can be interrupted with M108
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT), "Wait for heat up..."));
+ TERN_(HAS_STATUS_MESSAGE, ui.set_status(F("Wait for heat up...")));
while (wait_for_heatup) {
const millis_t ms = millis();
@@ -696,7 +696,7 @@ volatile bool Temperature::raw_temps_ready = false;
}
}
SHV((bias + d) >> 1);
- TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PID_CYCLE), cycles, ncycles));
+ TERN_(HAS_STATUS_MESSAGE, ui.status_printf(0, F(S_FMT " %i/%i"), GET_TEXT(MSG_PID_CYCLE), cycles, ncycles));
cycles++;
minT = target;
}
@@ -731,10 +731,10 @@ volatile bool Temperature::raw_temps_ready = false;
if (current_temp > watch_temp_target) heated = true; // - Flag if target temperature reached
}
else if (ELAPSED(ms, temp_change_ms)) // Watch timer expired
- _temp_error(heater_id, str_t_heating_failed, GET_TEXT(MSG_HEATING_FAILED_LCD));
+ _temp_error(heater_id, FPSTR(str_t_heating_failed), GET_TEXT_F(MSG_HEATING_FAILED_LCD));
}
else if (current_temp < target - (MAX_OVERSHOOT_PID_AUTOTUNE)) // Heated, then temperature fell too far?
- _temp_error(heater_id, str_t_thermal_runaway, GET_TEXT(MSG_THERMAL_RUNAWAY));
+ _temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY));
}
#endif
} // every 2 seconds
@@ -755,10 +755,10 @@ volatile bool Temperature::raw_temps_ready = false;
SERIAL_ECHOLNPGM(STR_PID_AUTOTUNE_FINISHED);
#if EITHER(PIDTEMPBED, PIDTEMPCHAMBER)
- PGM_P const estring = GHV(PSTR("chamber"), PSTR("bed"), NUL_STR);
- say_default_(); SERIAL_ECHOPGM_P(estring); SERIAL_ECHOLNPGM("Kp ", tune_pid.Kp);
- say_default_(); SERIAL_ECHOPGM_P(estring); SERIAL_ECHOLNPGM("Ki ", tune_pid.Ki);
- say_default_(); SERIAL_ECHOPGM_P(estring); SERIAL_ECHOLNPGM("Kd ", tune_pid.Kd);
+ FSTR_P const estring = GHV(F("chamber"), F("bed"), FPSTR(NUL_STR));
+ say_default_(); SERIAL_ECHOF(estring); SERIAL_ECHOLNPGM("Kp ", tune_pid.Kp);
+ say_default_(); SERIAL_ECHOF(estring); SERIAL_ECHOLNPGM("Ki ", tune_pid.Ki);
+ say_default_(); SERIAL_ECHOF(estring); SERIAL_ECHOLNPGM("Kd ", tune_pid.Kd);
#else
say_default_(); SERIAL_ECHOLNPGM("Kp ", tune_pid.Kp);
say_default_(); SERIAL_ECHOLNPGM("Ki ", tune_pid.Ki);
@@ -951,7 +951,7 @@ int16_t Temperature::getHeaterPower(const heater_id_t heater_id) {
// Temperature Error Handlers
//
-inline void loud_kill(PGM_P const lcd_msg, const heater_id_t heater_id) {
+inline void loud_kill(FSTR_P const lcd_msg, const heater_id_t heater_id) {
marlin_state = MF_KILLED;
#if USE_BEEPER
thermalManager.disable_all_heaters();
@@ -967,16 +967,16 @@ inline void loud_kill(PGM_P const lcd_msg, const heater_id_t heater_id) {
}
WRITE(BEEPER_PIN, HIGH);
#endif
- kill(lcd_msg, HEATER_PSTR(heater_id));
+ kill(lcd_msg, HEATER_FSTR(heater_id));
}
-void Temperature::_temp_error(const heater_id_t heater_id, PGM_P const serial_msg, PGM_P const lcd_msg) {
+void Temperature::_temp_error(const heater_id_t heater_id, FSTR_P const serial_msg, FSTR_P const lcd_msg) {
static uint8_t killed = 0;
if (IsRunning() && TERN1(BOGUS_TEMPERATURE_GRACE_PERIOD, killed == 2)) {
SERIAL_ERROR_START();
- SERIAL_ECHOPGM_P(serial_msg);
+ SERIAL_ECHOF(serial_msg);
SERIAL_ECHOPGM(STR_STOPPED_HEATER);
heater_id_t real_heater_id = heater_id;
@@ -1031,14 +1031,14 @@ void Temperature::max_temp_error(const heater_id_t heater_id) {
#if HAS_DWIN_E3V2_BASIC && (HAS_HOTEND || HAS_HEATED_BED)
DWIN_Popup_Temperature(1);
#endif
- _temp_error(heater_id, PSTR(STR_T_MAXTEMP), GET_TEXT(MSG_ERR_MAXTEMP));
+ _temp_error(heater_id, F(STR_T_MAXTEMP), GET_TEXT_F(MSG_ERR_MAXTEMP));
}
void Temperature::min_temp_error(const heater_id_t heater_id) {
#if HAS_DWIN_E3V2_BASIC && (HAS_HOTEND || HAS_HEATED_BED)
DWIN_Popup_Temperature(0);
#endif
- _temp_error(heater_id, PSTR(STR_T_MINTEMP), GET_TEXT(MSG_ERR_MINTEMP));
+ _temp_error(heater_id, F(STR_T_MINTEMP), GET_TEXT_F(MSG_ERR_MINTEMP));
}
#if ANY(PID_DEBUG, PID_BED_DEBUG, PID_CHAMBER_DEBUG)
@@ -1102,7 +1102,7 @@ void Temperature::min_temp_error(const heater_id_t heater_id) {
lpq[lpq_ptr] = 0;
if (++lpq_ptr >= lpq_len) lpq_ptr = 0;
- work_pid[ee].Kc = (lpq[lpq_ptr] * planner.steps_to_mm[E_AXIS]) * PID_PARAM(Kc, ee);
+ work_pid[ee].Kc = (lpq[lpq_ptr] * planner.mm_per_step[E_AXIS]) * PID_PARAM(Kc, ee);
pid_output += work_pid[ee].Kc;
}
#endif // PID_EXTRUSION_SCALING
@@ -1294,7 +1294,7 @@ void Temperature::manage_heater() {
REMEMBER(mh, no_reentry, true);
#if ENABLED(EMERGENCY_PARSER)
- if (emergency_parser.killed_by_M112) kill(M112_KILL_STR, nullptr, true);
+ if (emergency_parser.killed_by_M112) kill(FPSTR(M112_KILL_STR), nullptr, true);
if (emergency_parser.quickstop_by_M410) {
emergency_parser.quickstop_by_M410 = false; // quickstop_stepper may call idle so clear this now!
@@ -1344,7 +1344,7 @@ void Temperature::manage_heater() {
start_watching_hotend(e); // If temp reached, turn off elapsed check
else {
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0));
- _temp_error((heater_id_t)e, str_t_heating_failed, GET_TEXT(MSG_HEATING_FAILED_LCD));
+ _temp_error((heater_id_t)e, FPSTR(str_t_heating_failed), GET_TEXT_F(MSG_HEATING_FAILED_LCD));
}
}
#endif
@@ -1356,7 +1356,7 @@ void Temperature::manage_heater() {
#if HAS_TEMP_REDUNDANT
// Make sure measured temperatures are close together
if (ABS(degRedundantTarget() - degRedundant()) > TEMP_SENSOR_REDUNDANT_MAX_DIFF)
- _temp_error((heater_id_t)HEATER_ID(TEMP_SENSOR_REDUNDANT_TARGET), PSTR(STR_REDUNDANCY), GET_TEXT(MSG_ERR_REDUNDANT_TEMP));
+ _temp_error((heater_id_t)HEATER_ID(TEMP_SENSOR_REDUNDANT_TARGET), F(STR_REDUNDANCY), GET_TEXT_F(MSG_ERR_REDUNDANT_TEMP));
#endif
#if HAS_AUTO_FAN
@@ -1387,7 +1387,7 @@ void Temperature::manage_heater() {
start_watching_bed(); // If temp reached, turn off elapsed check
else {
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0));
- _temp_error(H_BED, str_t_heating_failed, GET_TEXT(MSG_HEATING_FAILED_LCD));
+ _temp_error(H_BED, FPSTR(str_t_heating_failed), GET_TEXT_F(MSG_HEATING_FAILED_LCD));
}
}
#endif // WATCH_BED
@@ -1467,7 +1467,7 @@ void Temperature::manage_heater() {
if (watch_chamber.check(degChamber())) // Increased enough? Error below.
start_watching_chamber(); // If temp reached, turn off elapsed check.
else
- _temp_error(H_CHAMBER, str_t_heating_failed, GET_TEXT(MSG_HEATING_FAILED_LCD));
+ _temp_error(H_CHAMBER, FPSTR(str_t_heating_failed), GET_TEXT_F(MSG_HEATING_FAILED_LCD));
}
#endif
@@ -1589,7 +1589,7 @@ void Temperature::manage_heater() {
// Make sure temperature is decreasing
if (watch_cooler.elapsed(ms)) { // Time to check the cooler?
if (degCooler() > watch_cooler.target) // Failed to decrease enough?
- _temp_error(H_COOLER, GET_TEXT(MSG_COOLING_FAILED), GET_TEXT(MSG_COOLING_FAILED));
+ _temp_error(H_COOLER, GET_TEXT_F(MSG_COOLING_FAILED), GET_TEXT_F(MSG_COOLING_FAILED));
else
start_watching_cooler(); // Start again if the target is still far off
}
@@ -1727,7 +1727,7 @@ void Temperature::manage_heater() {
}
void Temperature::M305_report(const uint8_t t_index, const bool forReplay/*=true*/) {
- gcode.report_heading_etc(forReplay, PSTR(STR_USER_THERMISTORS));
+ gcode.report_heading_etc(forReplay, F(STR_USER_THERMISTORS));
SERIAL_ECHOPGM(" M305 P", AS_DIGIT(t_index));
const user_thermistor_t &t = user_thermistor[t_index];
@@ -1737,21 +1737,21 @@ void Temperature::manage_heater() {
SERIAL_ECHOPAIR_F_P(SP_B_STR, t.beta, 1);
SERIAL_ECHOPAIR_F_P(SP_C_STR, t.sh_c_coeff, 9);
SERIAL_ECHOPGM(" ; ");
- SERIAL_ECHOPGM_P(
- TERN_(TEMP_SENSOR_0_IS_CUSTOM, t_index == CTI_HOTEND_0 ? PSTR("HOTEND 0") :)
- TERN_(TEMP_SENSOR_1_IS_CUSTOM, t_index == CTI_HOTEND_1 ? PSTR("HOTEND 1") :)
- TERN_(TEMP_SENSOR_2_IS_CUSTOM, t_index == CTI_HOTEND_2 ? PSTR("HOTEND 2") :)
- TERN_(TEMP_SENSOR_3_IS_CUSTOM, t_index == CTI_HOTEND_3 ? PSTR("HOTEND 3") :)
- TERN_(TEMP_SENSOR_4_IS_CUSTOM, t_index == CTI_HOTEND_4 ? PSTR("HOTEND 4") :)
- TERN_(TEMP_SENSOR_5_IS_CUSTOM, t_index == CTI_HOTEND_5 ? PSTR("HOTEND 5") :)
- TERN_(TEMP_SENSOR_6_IS_CUSTOM, t_index == CTI_HOTEND_6 ? PSTR("HOTEND 6") :)
- TERN_(TEMP_SENSOR_7_IS_CUSTOM, t_index == CTI_HOTEND_7 ? PSTR("HOTEND 7") :)
- TERN_(TEMP_SENSOR_BED_IS_CUSTOM, t_index == CTI_BED ? PSTR("BED") :)
- TERN_(TEMP_SENSOR_CHAMBER_IS_CUSTOM, t_index == CTI_CHAMBER ? PSTR("CHAMBER") :)
- TERN_(TEMP_SENSOR_COOLER_IS_CUSTOM, t_index == CTI_COOLER ? PSTR("COOLER") :)
- TERN_(TEMP_SENSOR_PROBE_IS_CUSTOM, t_index == CTI_PROBE ? PSTR("PROBE") :)
- TERN_(TEMP_SENSOR_BOARD_IS_CUSTOM, t_index == CTI_BOARD ? PSTR("BOARD") :)
- TERN_(TEMP_SENSOR_REDUNDANT_IS_CUSTOM, t_index == CTI_REDUNDANT ? PSTR("REDUNDANT") :)
+ SERIAL_ECHOF(
+ TERN_(TEMP_SENSOR_0_IS_CUSTOM, t_index == CTI_HOTEND_0 ? F("HOTEND 0") :)
+ TERN_(TEMP_SENSOR_1_IS_CUSTOM, t_index == CTI_HOTEND_1 ? F("HOTEND 1") :)
+ TERN_(TEMP_SENSOR_2_IS_CUSTOM, t_index == CTI_HOTEND_2 ? F("HOTEND 2") :)
+ TERN_(TEMP_SENSOR_3_IS_CUSTOM, t_index == CTI_HOTEND_3 ? F("HOTEND 3") :)
+ TERN_(TEMP_SENSOR_4_IS_CUSTOM, t_index == CTI_HOTEND_4 ? F("HOTEND 4") :)
+ TERN_(TEMP_SENSOR_5_IS_CUSTOM, t_index == CTI_HOTEND_5 ? F("HOTEND 5") :)
+ TERN_(TEMP_SENSOR_6_IS_CUSTOM, t_index == CTI_HOTEND_6 ? F("HOTEND 6") :)
+ TERN_(TEMP_SENSOR_7_IS_CUSTOM, t_index == CTI_HOTEND_7 ? F("HOTEND 7") :)
+ TERN_(TEMP_SENSOR_BED_IS_CUSTOM, t_index == CTI_BED ? F("BED") :)
+ TERN_(TEMP_SENSOR_CHAMBER_IS_CUSTOM, t_index == CTI_CHAMBER ? F("CHAMBER") :)
+ TERN_(TEMP_SENSOR_COOLER_IS_CUSTOM, t_index == CTI_COOLER ? F("COOLER") :)
+ TERN_(TEMP_SENSOR_PROBE_IS_CUSTOM, t_index == CTI_PROBE ? F("PROBE") :)
+ TERN_(TEMP_SENSOR_BOARD_IS_CUSTOM, t_index == CTI_BOARD ? F("BOARD") :)
+ TERN_(TEMP_SENSOR_REDUNDANT_IS_CUSTOM, t_index == CTI_REDUNDANT ? F("REDUNDANT") :)
nullptr
);
SERIAL_EOL();
@@ -2597,7 +2597,7 @@ void Temperature::init() {
case TRRunaway:
TERN_(HAS_DWIN_E3V2_BASIC, DWIN_Popup_Temperature(0));
- _temp_error(heater_id, str_t_thermal_runaway, GET_TEXT(MSG_THERMAL_RUNAWAY));
+ _temp_error(heater_id, FPSTR(str_t_thermal_runaway), GET_TEXT_F(MSG_THERMAL_RUNAWAY));
}
}
@@ -3603,11 +3603,11 @@ void Temperature::isr() {
#if HAS_HOTEND && HAS_STATUS_MESSAGE
void Temperature::set_heating_message(const uint8_t e) {
const bool heating = isHeatingHotend(e);
- ui.status_printf_P(0,
+ ui.status_printf(0,
#if HAS_MULTI_HOTEND
- PSTR("E%c " S_FMT), '1' + e
+ F("E%c " S_FMT), '1' + e
#else
- PSTR("E1 " S_FMT)
+ F("E1 " S_FMT)
#endif
, heating ? GET_TEXT(MSG_HEATING) : GET_TEXT(MSG_COOLING)
);
@@ -3744,7 +3744,7 @@ void Temperature::isr() {
void Temperature::wait_for_hotend_heating(const uint8_t target_extruder) {
if (isHeatingHotend(target_extruder)) {
SERIAL_ECHOLNPGM("Wait for hotend heating...");
- LCD_MESSAGEPGM(MSG_HEATING);
+ LCD_MESSAGE(MSG_HEATING);
wait_for_hotend(target_extruder);
ui.reset_status();
}
@@ -3874,7 +3874,7 @@ void Temperature::isr() {
void Temperature::wait_for_bed_heating() {
if (isHeatingBed()) {
SERIAL_ECHOLNPGM("Wait for bed heating...");
- LCD_MESSAGEPGM(MSG_BED_HEATING);
+ LCD_MESSAGE(MSG_BED_HEATING);
wait_for_bed();
ui.reset_status();
}
@@ -3896,7 +3896,7 @@ void Temperature::isr() {
const bool wants_to_cool = isProbeAboveTemp(target_temp),
will_wait = !(wants_to_cool && no_wait_for_cooling);
if (will_wait)
- SERIAL_ECHOLNPGM("Waiting for probe to ", (wants_to_cool ? PSTR("cool down") : PSTR("heat up")), " to ", target_temp, " degrees.");
+ SERIAL_ECHOLNPGM("Waiting for probe to ", wants_to_cool ? F("cool down") : F("heat up"), " to ", target_temp, " degrees.");
#if DISABLED(BUSY_WHILE_HEATING) && ENABLED(HOST_KEEPALIVE_FEATURE)
KEEPALIVE_STATE(NOT_BUSY);
diff --git a/Marlin/src/module/temperature.h b/Marlin/src/module/temperature.h
index 1675507f86..5579f71172 100644
--- a/Marlin/src/module/temperature.h
+++ b/Marlin/src/module/temperature.h
@@ -961,7 +961,7 @@ class Temperature {
static float get_pid_output_chamber();
#endif
- static void _temp_error(const heater_id_t e, PGM_P const serial_msg, PGM_P const lcd_msg);
+ static void _temp_error(const heater_id_t e, FSTR_P const serial_msg, FSTR_P const lcd_msg);
static void min_temp_error(const heater_id_t e);
static void max_temp_error(const heater_id_t e);
diff --git a/Marlin/src/module/thermistor/thermistor_99.h b/Marlin/src/module/thermistor/thermistor_99.h
index f813abae69..fa3dae93af 100644
--- a/Marlin/src/module/thermistor/thermistor_99.h
+++ b/Marlin/src/module/thermistor/thermistor_99.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
// 100k bed thermistor with a 10K pull-up resistor - made by $ buildroot/share/scripts/createTemperatureLookupMarlin.py --rp=10000
diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp
index cb551647d7..b968537e71 100644
--- a/Marlin/src/module/tool_change.cpp
+++ b/Marlin/src/module/tool_change.cpp
@@ -432,7 +432,7 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
}
else if (kill_on_error && (!tool_sensor_disabled || disable)) {
sensor_tries++;
- if (sensor_tries > 10) kill(PSTR("Tool Sensor error"));
+ if (sensor_tries > 10) kill(F("Tool Sensor error"));
safe_delay(5);
}
else {
@@ -490,12 +490,12 @@ void fast_line_to_current(const AxisEnum fr_axis) { _line_to_current(fr_axis, 0.
#endif
if (check_tool_sensor_stats(0)) {
- ui.set_status_P("TC error");
+ LCD_MESSAGE_F("TC error");
switching_toolhead_lock(false);
while (check_tool_sensor_stats(0)) { /* nada */ }
switching_toolhead_lock(true);
}
- ui.set_status_P("TC Success");
+ LCD_MESSAGE_F("TC Success");
#endif
}
@@ -1310,17 +1310,17 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) {
if (!no_move) {
#ifdef EVENT_GCODE_TOOLCHANGE_T0
if (new_tool == 0)
- gcode.process_subcommands_now_P(PSTR(EVENT_GCODE_TOOLCHANGE_T0));
+ gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T0));
#endif
#ifdef EVENT_GCODE_TOOLCHANGE_T1
if (new_tool == 1)
- gcode.process_subcommands_now_P(PSTR(EVENT_GCODE_TOOLCHANGE_T1));
+ gcode.process_subcommands_now(F(EVENT_GCODE_TOOLCHANGE_T1));
#endif
#ifdef EVENT_GCODE_AFTER_TOOLCHANGE
if (TERN1(DUAL_X_CARRIAGE, dual_x_carriage_mode == DXC_AUTO_PARK_MODE))
- gcode.process_subcommands_now_P(PSTR(EVENT_GCODE_AFTER_TOOLCHANGE));
+ gcode.process_subcommands_now(F(EVENT_GCODE_AFTER_TOOLCHANGE));
#endif
}
diff --git a/Marlin/src/pins/esp32/pins_E4D.h b/Marlin/src/pins/esp32/pins_E4D.h
index 9e28af2190..54621f36c1 100644
--- a/Marlin/src/pins/esp32/pins_E4D.h
+++ b/Marlin/src/pins/esp32/pins_E4D.h
@@ -22,9 +22,10 @@
#pragma once
/**
- * E4d@Box pin assignments
- * E4d@Box is a small factor 3D printer control board based on the ESP32 microcontroller for Laser, CNC and 3d printers
- * for more info check https://atbox.tech/ and join to Facebook page E4d@box.
+ * E4d@box pin assignments
+ *
+ * Small factor 3D printer control board based on the ESP32 microcontroller for Laser, CNC and 3D printers.
+ * More info at https://atbox.tech/ and the E4d@box Facebook page.
*/
#include "env_validate.h"
@@ -35,7 +36,7 @@
#error "E4d@box only supports one hotend / E-stepper. Comment out this line to continue."
#endif
-#define BOARD_INFO_NAME "E4D@BOX"
+#define BOARD_INFO_NAME "E4d@box"
#define BOARD_WEBSITE_URL "github.com/Exilaus/E4d@box"
#define DEFAULT_MACHINE_NAME BOARD_INFO_NAME
diff --git a/Marlin/src/pins/esp32/pins_FYSETC_E4.h b/Marlin/src/pins/esp32/pins_FYSETC_E4.h
index 7dd7f94ae5..2b2fe40c4a 100644
--- a/Marlin/src/pins/esp32/pins_FYSETC_E4.h
+++ b/Marlin/src/pins/esp32/pins_FYSETC_E4.h
@@ -23,7 +23,8 @@
/**
* FYSETC E4 pin assignments
- * FYSETC E4 is a 3D printer control board based on the ESP32 microcontroller.
+ *
+ * 3D printer control board based on the ESP32 microcontroller.
* Supports 4 stepper drivers, heated bed, single hotend.
*/
diff --git a/Marlin/src/pins/esp32/pins_MRR_ESPA.h b/Marlin/src/pins/esp32/pins_MRR_ESPA.h
index 38f43b53d3..ab4f401f26 100644
--- a/Marlin/src/pins/esp32/pins_MRR_ESPA.h
+++ b/Marlin/src/pins/esp32/pins_MRR_ESPA.h
@@ -23,7 +23,8 @@
/**
* MRR ESPA pin assignments
- * MRR ESPA is a 3D printer control board based on the ESP32 microcontroller.
+ *
+ * 3D printer control board based on the ESP32 microcontroller.
* Supports 4 stepper drivers, heated bed, single hotend.
*/
diff --git a/Marlin/src/pins/esp32/pins_MRR_ESPE.h b/Marlin/src/pins/esp32/pins_MRR_ESPE.h
index 8b4ec8b197..1f829b7755 100644
--- a/Marlin/src/pins/esp32/pins_MRR_ESPE.h
+++ b/Marlin/src/pins/esp32/pins_MRR_ESPE.h
@@ -23,7 +23,8 @@
/**
* MRR ESPE pin assignments
- * MRR ESPE is a 3D printer control board based on the ESP32 microcontroller.
+ *
+ * 3D printer control board based on the ESP32 microcontroller.
* Supports 5 stepper drivers (using I2S stepper stream), heated bed,
* single hotend, and LCD controller.
*/
diff --git a/Marlin/src/pins/esp32/pins_PANDA_M4.h b/Marlin/src/pins/esp32/pins_PANDA_M4.h
new file mode 100644
index 0000000000..5e2e72af05
--- /dev/null
+++ b/Marlin/src/pins/esp32/pins_PANDA_M4.h
@@ -0,0 +1,38 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Panda M4 pin assignments
+ */
+
+#define BOARD_INFO_NAME "Panda_M4"
+
+#include "pins_PANDA_common.h"
+
+//
+// Steppers
+//
+#define X_ENABLE_PIN 115
+#define Y_ENABLE_PIN 114
+#define Z_ENABLE_PIN 113
+#define E0_ENABLE_PIN 112
diff --git a/Marlin/src/pins/esp32/pins_PANDA_ZHU.h b/Marlin/src/pins/esp32/pins_PANDA_ZHU.h
new file mode 100644
index 0000000000..4750057897
--- /dev/null
+++ b/Marlin/src/pins/esp32/pins_PANDA_ZHU.h
@@ -0,0 +1,61 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Panda ZHU pin assignments
+ */
+
+#define BOARD_INFO_NAME "Panda_ZHU"
+
+#include "pins_PANDA_common.h"
+
+//
+// Steppers
+//
+#define X_ENABLE_PIN 128 // Shared with all steppers
+#define Y_ENABLE_PIN X_ENABLE_PIN
+#define Z_ENABLE_PIN X_ENABLE_PIN
+#define E0_ENABLE_PIN X_ENABLE_PIN
+
+//#define X_CS_PIN 0
+//#define Y_CS_PIN 13
+//#define Z_CS_PIN 5 // SS_PIN
+//#define E0_CS_PIN 21
+
+#define E1_STEP_PIN 115
+#define E1_DIR_PIN 114
+#define E1_ENABLE_PIN X_ENABLE_PIN
+
+#define E2_STEP_PIN 112
+#define E2_DIR_PIN 113
+#define E2_ENABLE_PIN X_ENABLE_PIN
+
+#define E3_STEP_PIN 110
+#define E3_DIR_PIN 111
+#define E3_ENABLE_PIN X_ENABLE_PIN
+
+#define E4_STEP_PIN 121
+#define E4_DIR_PIN 122
+#define E4_ENABLE_PIN X_ENABLE_PIN
+
+#define HEATER_1_PIN 123
diff --git a/Marlin/src/pins/esp32/pins_PANDA_common.h b/Marlin/src/pins/esp32/pins_PANDA_common.h
new file mode 100644
index 0000000000..81862fbd55
--- /dev/null
+++ b/Marlin/src/pins/esp32/pins_PANDA_common.h
@@ -0,0 +1,98 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+#pragma once
+
+/**
+ * Panda common pin assignments
+ */
+
+#include "env_validate.h"
+
+#define DEFAULT_MACHINE_NAME BOARD_INFO_NAME
+
+//
+// Servos
+//
+#define SERVO0_PIN 0
+
+//
+// Limit Switches
+//
+#define X_STOP_PIN 4
+#define Y_STOP_PIN 35
+#define Z_STOP_PIN 21
+
+//
+// Steppers
+//
+#define X_STEP_PIN 101
+#define X_DIR_PIN 100
+
+#define Y_STEP_PIN 103
+#define Y_DIR_PIN 102
+
+#define Z_STEP_PIN 105
+#define Z_DIR_PIN 104
+
+#define E0_STEP_PIN 107
+#define E0_DIR_PIN 106
+
+//
+// Temperature Sensors
+//
+#define TEMP_0_PIN 39 // Analog Input
+#define TEMP_BED_PIN 36 // Analog Input
+
+//
+// Heaters / Fans
+//
+#define HEATER_0_PIN 108
+#define HEATER_BED_PIN 109
+#define FAN_PIN 118 // FAN0
+#define FAN1_PIN 119 // FAN1
+
+#ifndef E0_AUTO_FAN_PIN
+ #define E0_AUTO_FAN_PIN 120 // FAN2
+#endif
+
+//
+// SD card
+//
+#if ENABLED(SDSUPPORT)
+ #define SD_MOSI_PIN 23
+ #define SD_MISO_PIN 19
+ #define SD_SCK_PIN 18
+ #define SDSS 5
+ #define SD_DETECT_PIN 2
+#endif
+
+#if HAS_WIRED_LCD
+ #define BEEPER_PIN 129
+ #define BTN_ENC 12
+
+ #define BTN_EN1 33
+ #define BTN_EN2 32
+
+ #define LCD_PINS_RS 27
+ #define LCD_PINS_ENABLE 26
+ #define LCD_PINS_D4 14
+#endif
diff --git a/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h b/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h
index f94381e13a..92152170a0 100644
--- a/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h
+++ b/Marlin/src/pins/lpc1768/pins_BIQU_BQ111_A4.h
@@ -22,11 +22,7 @@
#pragma once
/**
- * BIQU BQ111-A4
- *
- * Applies to the following boards:
- *
- * BOARD_BIQU_BQ111_A4 (Hotend, Fan, Bed)
+ * BIQU BQ111-A4 pin assignments
*/
#include "env_validate.h"
diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h
index 6404fbbf25..48b178dab5 100644
--- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h
+++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_1.h
@@ -21,6 +21,10 @@
*/
#pragma once
+/**
+ * BigTreeTech SKR 1.1 pin assignments
+ */
+
#define BOARD_INFO_NAME "BTT SKR V1.1"
//
diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h
index 56944273e3..ec8f31b854 100644
--- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h
+++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_3.h
@@ -21,6 +21,10 @@
*/
#pragma once
+/**
+ * BigTreeTech SKR 1.3 pin assignments
+ */
+
#define BOARD_INFO_NAME "BTT SKR V1.3"
#define LPC1768_IS_SKRV1_3 1
@@ -216,12 +220,13 @@
#error "ANET_FULL_GRAPHICS_LCD_ALT_WIRING only applies to the ANET 1.0 board."
#elif ENABLED(ANET_FULL_GRAPHICS_LCD)
+
#error "CAUTION! ANET_FULL_GRAPHICS_LCD requires wiring modifications. See 'pins_BTT_SKR_V1_3.h' for details. Comment out this line to continue."
/**
* 1. Cut the tab off the LCD connector so it can be plugged into the "EXP1" connector the other way.
* 2. Swap the LCD's +5V (Pin2) and GND (Pin1) wires. (This is the critical part!)
- * 3. Rewire the CLK Signal (LCD Pin9) to LCD Pin7. (LCD Pin9 remains open because this pin is open drain.)
+ * 3. Rewire the CLK Signal (LCD Pin9) to LCD Pin7. (LCD Pin9 remains open because it is open drain.)
* 4. A wire is needed to connect the Reset switch at J3 (LCD Pin7) to EXP2 (Pin3) on the board.
*
* !!! If you are unsure, ask for help! Your motherboard may be damaged in some circumstances !!!
@@ -248,6 +253,38 @@
#define LCD_PINS_ENABLE EXP1_05_PIN
#define LCD_PINS_D4 EXP1_07_PIN
+ #elif ENABLED(WYH_L12864)
+
+ #error "CAUTION! WYH_L12864 requires wiring modifications. Comment out this line to continue."
+
+ /**
+ * 1. Cut the tab off the LCD connector so it can be plugged into the "EXP1" connector the other way.
+ * 2. Swap the LCD's +5V (Pin2) and GND (Pin1) wires. (This is the critical part!)
+ * 3. Swap the LCD's MOSI (Pin9) and empty (Pin10) wires because Pin9 is open drain.
+ *
+ * !!! If you are unsure, ask for help! Your motherboard may be damaged in some circumstances !!!
+ *
+ * The WYH_L12864 connector plug:
+ *
+ * BEFORE AFTER
+ * ______ ______
+ * GND | 1 2 | 5V 5V | 1 2 | GND
+ * CS | 3 4 | BTN_EN2 CS | 3 4 | BTN_EN2
+ * SID | 5 6 BTN_EN1 SID | 5 6 BTN_EN1
+ * SCK | 7 8 | BTN_ENC SCK | 7 8 | BTN_ENC
+ * MOSI | 9 10 | open | 9 10 | MOSI
+ * ------ ------
+ * LCD LCD
+ */
+ #define BTN_EN1 EXP1_06_PIN
+ #define BTN_EN2 EXP1_04_PIN
+ #define BTN_ENC EXP1_08_PIN
+ #define DOGLCD_CS EXP1_03_PIN
+ #define DOGLCD_A0 EXP1_05_PIN
+ #define DOGLCD_SCK EXP1_07_PIN
+ #define DOGLCD_MOSI EXP1_10_PIN
+ #define LCD_BACKLIGHT_PIN -1
+
#elif ENABLED(CR10_STOCKDISPLAY)
#define LCD_PINS_RS EXP1_04_PIN
diff --git a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h
index 56d548847c..dc82a2857f 100644
--- a/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h
+++ b/Marlin/src/pins/lpc1768/pins_BTT_SKR_V1_4.h
@@ -21,6 +21,10 @@
*/
#pragma once
+/**
+ * BigTreeTech SKR 1.4 pin assignments
+ */
+
#include "env_validate.h"
#ifndef BOARD_INFO_NAME
@@ -317,7 +321,7 @@
/**
* 1. Cut the tab off the LCD connector so it can be plugged into the "EXP1" connector the other way.
* 2. Swap the LCD's +5V (Pin2) and GND (Pin1) wires. (This is the critical part!)
- * 3. Rewire the CLK Signal (LCD Pin9) to LCD Pin7. (LCD Pin9 remains open because this pin is open drain.)
+ * 3. Rewire the CLK Signal (LCD Pin9) to LCD Pin7. (LCD Pin9 remains open because it is open drain.)
* 4. A wire is needed to connect the Reset switch at J3 (LCD Pin7) to EXP2 (Pin3) on the board.
*
* !!! If you are unsure, ask for help! Your motherboard may be damaged in some circumstances !!!
diff --git a/Marlin/src/pins/lpc1768/pins_GMARSH_X6_REV1.h b/Marlin/src/pins/lpc1768/pins_GMARSH_X6_REV1.h
index eee3ede713..39ab0bbd89 100644
--- a/Marlin/src/pins/lpc1768/pins_GMARSH_X6_REV1.h
+++ b/Marlin/src/pins/lpc1768/pins_GMARSH_X6_REV1.h
@@ -21,6 +21,10 @@
*/
#pragma once
+/**
+ * GMARSH X6 Rev.1 pin assignments
+ */
+
#include "env_validate.h"
#define BOARD_INFO_NAME "GMARSH X6 REV1"
diff --git a/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h b/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h
index a9701bc8b5..258ecd107b 100644
--- a/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h
+++ b/Marlin/src/pins/lpc1768/pins_MKS_SBASE.h
@@ -22,7 +22,7 @@
#pragma once
/**
- * MKS SBASE pin assignments
+ * Makerbase MKS SBASE pin assignments
*/
#include "env_validate.h"
diff --git a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h
index fe2a71ae03..d6b1eeab46 100644
--- a/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h
+++ b/Marlin/src/pins/lpc1768/pins_MKS_SGEN_L.h
@@ -22,7 +22,7 @@
#pragma once
/**
- * MKS SGEN-L pin assignments
+ * Makerbase MKS SGEN-L pin assignments
*/
#include "env_validate.h"
diff --git a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h
index 8b855e8d01..9c514f8ca3 100644
--- a/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h
+++ b/Marlin/src/pins/lpc1769/pins_BTT_SKR_E3_TURBO.h
@@ -21,6 +21,10 @@
*/
#pragma once
+/**
+ * BigTreeTech SKR E3 Turbo pin assignments
+ */
+
#include "env_validate.h"
#ifndef BOARD_INFO_NAME
diff --git a/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h b/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h
index 5af1dfec3f..2b847d339f 100644
--- a/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h
+++ b/Marlin/src/pins/lpc1769/pins_BTT_SKR_V1_4_TURBO.h
@@ -21,6 +21,10 @@
*/
#pragma once
+/**
+ * BigTreeTech SKR 1.4 Turbo pin assignments
+ */
+
#define BOARD_INFO_NAME "BTT SKR V1.4 TURBO"
//
diff --git a/Marlin/src/pins/lpc1769/pins_FLY_CDY.h b/Marlin/src/pins/lpc1769/pins_FLY_CDY.h
index 535fb32e3e..ec0b14af90 100644
--- a/Marlin/src/pins/lpc1769/pins_FLY_CDY.h
+++ b/Marlin/src/pins/lpc1769/pins_FLY_CDY.h
@@ -21,6 +21,10 @@
*/
#pragma once
+/**
+ * FLYmaker FLY-CDY pin assignments
+ */
+
#include "env_validate.h"
#define BOARD_INFO_NAME "FLY-CDY"
diff --git a/Marlin/src/pins/lpc1769/pins_MKS_SGEN.h b/Marlin/src/pins/lpc1769/pins_MKS_SGEN.h
index f5c158162c..23bcecc78d 100644
--- a/Marlin/src/pins/lpc1769/pins_MKS_SGEN.h
+++ b/Marlin/src/pins/lpc1769/pins_MKS_SGEN.h
@@ -24,7 +24,7 @@
/**
* MKS SGen pin assignments
*
- * The pins diagram can be found and the following URL:
+ * Pins diagram:
* https://github.com/makerbase-mks/MKS-SGen/blob/master/Hardware/MKS%20SGEN%20V1.0_001/MKS%20SGEN%20V1.0_001%20PIN.pdf
*/
diff --git a/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h b/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h
index 124f0301b1..bb39009f09 100644
--- a/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h
+++ b/Marlin/src/pins/lpc1769/pins_MKS_SGEN_L_V2.h
@@ -22,7 +22,7 @@
#pragma once
/**
- * MKS SGen pin assignments
+ * MKS SGen-L V2 pin assignments
*/
#include "env_validate.h"
diff --git a/Marlin/src/pins/lpc1769/pins_SMOOTHIEBOARD.h b/Marlin/src/pins/lpc1769/pins_SMOOTHIEBOARD.h
index f7bc9602d7..e80116efd0 100644
--- a/Marlin/src/pins/lpc1769/pins_SMOOTHIEBOARD.h
+++ b/Marlin/src/pins/lpc1769/pins_SMOOTHIEBOARD.h
@@ -22,7 +22,7 @@
#pragma once
/**
- * Smoothieboard pin assignments
+ * Smoothieware Smoothieboard pin assignments
*/
#include "env_validate.h"
diff --git a/Marlin/src/pins/mega/pins_MEGATRONICS_3.h b/Marlin/src/pins/mega/pins_MEGATRONICS_3.h
index 5dea438d70..86aff16f92 100644
--- a/Marlin/src/pins/mega/pins_MEGATRONICS_3.h
+++ b/Marlin/src/pins/mega/pins_MEGATRONICS_3.h
@@ -67,9 +67,19 @@
#define X_DIR_PIN 57
#define X_ENABLE_PIN 59
-#define Y_STEP_PIN 5
-#define Y_DIR_PIN 17
-#define Y_ENABLE_PIN 4
+#if ENABLED(REPRAPWORLD_KEYPAD) && EXTRUDERS <= 2
+ #define Y_ENABLE_PIN 23
+ #define Y_STEP_PIN 22
+ #define Y_DIR_PIN 60
+#else
+ #define Y_STEP_PIN 5
+ #define Y_DIR_PIN 17
+ #define Y_ENABLE_PIN 4
+
+ #define E2_STEP_PIN 22
+ #define E2_DIR_PIN 60
+ #define E2_ENABLE_PIN 23
+#endif
#define Z_STEP_PIN 16
#define Z_DIR_PIN 11
@@ -83,10 +93,6 @@
#define E1_DIR_PIN 24
#define E1_ENABLE_PIN 26
-#define E2_STEP_PIN 22
-#define E2_DIR_PIN 60
-#define E2_ENABLE_PIN 23
-
//
// Temperature Sensors
//
@@ -181,15 +187,6 @@
#elif EXTRUDERS <= 2
// Hijack the last extruder so that we can get the PWM signal off the Y breakout
// Move Y to the E2 plug. This makes dual Y steppers harder
- #undef Y_ENABLE_PIN // 4
- #undef Y_STEP_PIN // 5
- #undef Y_DIR_PIN // 17
- #undef E2_ENABLE_PIN // 23
- #undef E2_STEP_PIN // 22
- #undef E2_DIR_PIN // 60
- #define Y_ENABLE_PIN 23
- #define Y_STEP_PIN 22
- #define Y_DIR_PIN 60
#define SPINDLE_LASER_PWM_PIN 4 // Hardware PWM
#define SPINDLE_LASER_ENA_PIN 17 // Pullup!
#define SPINDLE_DIR_PIN 5
diff --git a/Marlin/src/pins/mega/pins_SILVER_GATE.h b/Marlin/src/pins/mega/pins_SILVER_GATE.h
index 7b4f53a764..c2ca5b3103 100644
--- a/Marlin/src/pins/mega/pins_SILVER_GATE.h
+++ b/Marlin/src/pins/mega/pins_SILVER_GATE.h
@@ -73,7 +73,7 @@
#define TEMP_BED_PIN 6
#if HAS_WIRED_LCD
- #if ENABLED(U8GLIB_ST7920) // SPI GLCD 12864 ST7920
+ #if IS_U8GLIB_ST7920 // SPI GLCD 12864 ST7920
#define LCD_PINS_RS 30
#define LCD_PINS_ENABLE 20
#define LCD_PINS_D4 25
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index 0293da1dba..6ab41fff0e 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -49,7 +49,7 @@
#define IS_RAMPS_SF
#endif
-#if !(BOTH(IS_ULTRA_LCD, IS_NEWPANEL) && ANY(PANEL_ONE, VIKI2, miniVIKI, MINIPANEL, REPRAPWORLD_KEYPAD))
+#if !(BOTH(IS_ULTRA_LCD, IS_NEWPANEL) && ANY(PANEL_ONE, VIKI2, miniVIKI, WYH_L12864, MINIPANEL, REPRAPWORLD_KEYPAD))
#define HAS_FREE_AUX2_PINS 1
#endif
@@ -681,6 +681,10 @@
#include "esp32/pins_E4D.h" // ESP32 env:esp32
#elif MB(FYSETC_E4)
#include "esp32/pins_FYSETC_E4.h" // ESP32 env:FYSETC_E4
+#elif MB(PANDA_ZHU)
+ #include "esp32/pins_PANDA_ZHU.h" // ESP32 env:PANDA
+#elif MB(PANDA_M4)
+ #include "esp32/pins_PANDA_M4.h" // ESP32 env:PANDA
//
// Adafruit Grand Central M4 (SAMD51 ARM Cortex-M4)
diff --git a/Marlin/src/pins/pinsDebug.h b/Marlin/src/pins/pinsDebug.h
index e29067268d..e5db7f7b54 100644
--- a/Marlin/src/pins/pinsDebug.h
+++ b/Marlin/src/pins/pinsDebug.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -41,7 +44,7 @@
#define REPORT_NAME_ANALOG(COUNTER, NAME) _ADD_PIN(#NAME, COUNTER)
#include "pinsDebug_list.h"
-#line 45
+#line 48
// manually add pins that have names that are macros which don't play well with these macros
#if ANY(AVR_ATmega2560_FAMILY, AVR_ATmega1284_FAMILY, ARDUINO_ARCH_SAM, TARGET_LPC1768)
@@ -160,7 +163,7 @@ const PinInfo pin_array[] PROGMEM = {
#endif
#include "pinsDebug_list.h"
- #line 164
+ #line 167
};
@@ -175,7 +178,7 @@ static void print_input_or_output(const bool isout) {
}
// pretty report with PWM info
-inline void report_pin_state_extended(pin_t pin, const bool ignore, const bool extended=false, PGM_P const start_string=nullptr) {
+inline void report_pin_state_extended(pin_t pin, const bool ignore, const bool extended=false, FSTR_P const start_string=nullptr) {
char buffer[MAX_NAME_LENGTH + 1]; // for the sprintf statements
bool found = false, multi_name_pin = false;
@@ -199,7 +202,7 @@ inline void report_pin_state_extended(pin_t pin, const bool ignore, const bool e
LOOP_L_N(x, COUNT(pin_array)) { // scan entire array and report all instances of this pin
if (GET_ARRAY_PIN(x) == pin) {
if (!found) { // report digital and analog pin number only on the first time through
- if (start_string) SERIAL_ECHOPGM_P(start_string);
+ if (start_string) SERIAL_ECHOF(start_string);
SERIAL_ECHOPGM("PIN: ");
PRINT_PIN(pin);
PRINT_PORT(pin);
@@ -208,7 +211,7 @@ inline void report_pin_state_extended(pin_t pin, const bool ignore, const bool e
}
else {
SERIAL_CHAR('.');
- SERIAL_ECHO_SP(MULTI_NAME_PAD + (start_string ? strlen_P(start_string) : 0)); // add padding if not the first instance found
+ SERIAL_ECHO_SP(MULTI_NAME_PAD + (start_string ? strlen_P(FTOP(start_string)) : 0)); // add padding if not the first instance found
}
PRINT_ARRAY_NAME(x);
if (extended) {
@@ -247,7 +250,7 @@ inline void report_pin_state_extended(pin_t pin, const bool ignore, const bool e
} // end of for loop
if (!found) {
- if (start_string) SERIAL_ECHOPGM_P(start_string);
+ if (start_string) SERIAL_ECHOF(start_string);
SERIAL_ECHOPGM("PIN: ");
PRINT_PIN(pin);
PRINT_PORT(pin);
diff --git a/Marlin/src/pins/pinsDebug_list.h b/Marlin/src/pins/pinsDebug_list.h
index 501ae921c2..fe670cca29 100644
--- a/Marlin/src/pins/pinsDebug_list.h
+++ b/Marlin/src/pins/pinsDebug_list.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -22,15 +25,13 @@
// Following this pattern is a must.
// If the new pin name is over 28 characters long then pinsDebug.h will need to be modified.
-// Pin lists 1.1.x and 2.0.x synchronized 2018-02-17
-
#if TARGET_LPC1768
#define ANALOG_OK(PN) ((PN) == P0_02 || (PN) == P0_03 || (PN) == P0_23 || (PN) == P0_24 || (PN) == P0_25 || (PN) == P0_26 || (PN) == P1_30 || (PN) == P1_31)
#else
#define ANALOG_OK(PN) ((PN) >= 0 && (PN) < NUM_ANALOG_INPUTS)
#endif
-#line 34 // set __LINE__ to a known value for both passes
+#line 35 // set __LINE__ to a known value for both passes
//
// Analog Pin Assignments
diff --git a/Marlin/src/pins/pins_postprocess.h b/Marlin/src/pins/pins_postprocess.h
index 6b5c695e85..827e07e3f5 100644
--- a/Marlin/src/pins/pins_postprocess.h
+++ b/Marlin/src/pins/pins_postprocess.h
@@ -464,11 +464,19 @@
#ifdef I_STOP_PIN
#if I_HOME_TO_MIN
#define I_MIN_PIN I_STOP_PIN
- #define I_MAX_PIN -1
+ #ifndef I_MAX_PIN
+ #define I_MAX_PIN -1
+ #endif
#else
- #define I_MIN_PIN -1
#define I_MAX_PIN I_STOP_PIN
+ #ifndef I_MIN_PIN
+ #define I_MIN_PIN -1
+ #endif
#endif
+ #elif I_HOME_TO_MIN
+ #define I_STOP_PIN I_MIN_PIN
+ #else
+ #define I_STOP_PIN I_MAX_PIN
#endif
#else
#undef I_MIN_PIN
@@ -479,11 +487,19 @@
#ifdef J_STOP_PIN
#if J_HOME_TO_MIN
#define J_MIN_PIN J_STOP_PIN
- #define J_MAX_PIN -1
+ #ifndef J_MAX_PIN
+ #define J_MAX_PIN -1
+ #endif
#else
- #define J_MIN_PIN -1
#define J_MAX_PIN J_STOP_PIN
+ #ifndef J_MIN_PIN
+ #define J_MIN_PIN -1
+ #endif
#endif
+ #elif J_HOME_TO_MIN
+ #define J_STOP_PIN J_MIN_PIN
+ #else
+ #define J_STOP_PIN J_MAX_PIN
#endif
#else
#undef J_MIN_PIN
@@ -494,11 +510,19 @@
#ifdef K_STOP_PIN
#if K_HOME_TO_MIN
#define K_MIN_PIN K_STOP_PIN
- #define K_MAX_PIN -1
+ #ifndef K_MAX_PIN
+ #define K_MAX_PIN -1
+ #endif
#else
- #define K_MIN_PIN -1
#define K_MAX_PIN K_STOP_PIN
+ #ifndef K_MIN_PIN
+ #define K_MIN_PIN -1
+ #endif
#endif
+ #elif K_HOME_TO_MIN
+ #define K_STOP_PIN K_MIN_PIN
+ #else
+ #define K_STOP_PIN K_MAX_PIN
#endif
#else
#undef K_MIN_PIN
@@ -542,6 +566,7 @@
#define __EPIN(p,q) E##p##_##q##_PIN
#define _EPIN(p,q) __EPIN(p,q)
#define DIAG_REMAPPED(p,q) (PIN_EXISTS(q) && _EPIN(p##_E_INDEX, DIAG) == q##_PIN)
+#define _En_DIAG_(p) _E##p##_DIAG_
// The E0/E1 steppers are always used for Dual E
#if ENABLED(E_DUAL_STEPPER_DRIVERS)
@@ -554,6 +579,11 @@
#endif
// The X2 axis, if any, should be the next open extruder port
+#if EITHER(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS) && !defined(X2_DIAG_PIN) && !defined(X2_STEP_PIN) && !PIN_EXISTS(X2_CS_PIN)
+ #define Y2_E_INDEX INCREMENT(X2_E_INDEX)
+#else
+ #define Y2_E_INDEX X2_E_INDEX
+#endif
#if EITHER(DUAL_X_CARRIAGE, X_DUAL_STEPPER_DRIVERS)
#ifndef X2_STEP_PIN
#define X2_STEP_PIN _EPIN(X2_E_INDEX, STEP)
@@ -561,19 +591,33 @@
#define X2_ENABLE_PIN _EPIN(X2_E_INDEX, ENABLE)
#if X2_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(X2_STEP)
#error "No E stepper plug left for X2!"
+ #else
+ #define AUTO_ASSIGNED_X2_STEPPER 1
#endif
#endif
#ifndef X2_MS1_PIN
#define X2_MS1_PIN _EPIN(X2_E_INDEX, MS1)
+ #if PIN_EXISTS(X2_MS1)
+ #define AUTO_ASSIGNED_X2_MS1 1
+ #endif
#endif
#ifndef X2_MS2_PIN
#define X2_MS2_PIN _EPIN(X2_E_INDEX, MS2)
+ #if PIN_EXISTS(X2_MS2)
+ #define AUTO_ASSIGNED_X2_MS2 1
+ #endif
#endif
#ifndef X2_MS3_PIN
#define X2_MS3_PIN _EPIN(X2_E_INDEX, MS3)
+ #if PIN_EXISTS(X2_MS3)
+ #define AUTO_ASSIGNED_X2_MS3 1
+ #endif
#endif
#if AXIS_HAS_SPI(X2) && !defined(X2_CS_PIN)
#define X2_CS_PIN _EPIN(X2_E_INDEX, CS)
+ #if PIN_EXISTS(X2_CS)
+ #define AUTO_ASSIGNED_X2_CS 1
+ #endif
#endif
#if AXIS_HAS_UART(X2)
#ifndef X2_SERIAL_TX_PIN
@@ -587,7 +631,7 @@
//
// Auto-assign pins for stallGuard sensorless homing
//
- #if !defined(X2_USE_ENDSTOP) && defined(X2_STALL_SENSITIVITY) && ENABLED(X_DUAL_ENDSTOPS) && _PEXI(X2_E_INDEX, DIAG)
+ #if !defined(X2_DIAG_PIN) && !defined(X2_USE_ENDSTOP) && defined(X2_STALL_SENSITIVITY) && ENABLED(X_DUAL_ENDSTOPS) && _PEXI(X2_E_INDEX, DIAG)
#define X2_DIAG_PIN _EPIN(X2_E_INDEX, DIAG)
#if DIAG_REMAPPED(X2, X_MIN) // If already remapped in the pins file...
#define X2_USE_ENDSTOP _XMIN_
@@ -601,16 +645,12 @@
#define X2_USE_ENDSTOP _YMAX_
#elif DIAG_REMAPPED(X2, Z_MAX)
#define X2_USE_ENDSTOP _ZMAX_
- #else // Otherwise use the driver DIAG_PIN directly
- #define _X2_USE_ENDSTOP(P) _E##P##_DIAG_
- #define X2_USE_ENDSTOP _X2_USE_ENDSTOP(X2_E_INDEX)
+ #else // Otherwise pick the next free En_DIAG_PIN directly
+ #define X2_USE_ENDSTOP _En_DIAG_(X2_E_INDEX)
#endif
- #undef X2_DIAG_PIN
+ #define AUTO_ASSIGNED_X2_DIAG 1
+ #undef X2_DIAG_PIN // Defined in Conditionals_post.h based on X2_USE_ENDSTOP
#endif
-
- #define Y2_E_INDEX INCREMENT(X2_E_INDEX)
-#else
- #define Y2_E_INDEX X2_E_INDEX
#endif
#ifndef X2_CS_PIN
@@ -627,6 +667,11 @@
#endif
// The Y2 axis, if any, should be the next open extruder port
+#if ENABLED(Y_DUAL_STEPPER_DRIVERS) && !defined(Y2_DIAG_PIN) && !defined(Y2_STEP_PIN) && !PIN_EXISTS(Y2_CS_PIN)
+ #define Z2_E_INDEX INCREMENT(Y2_E_INDEX)
+#else
+ #define Z2_E_INDEX Y2_E_INDEX
+#endif
#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
#ifndef Y2_STEP_PIN
#define Y2_STEP_PIN _EPIN(Y2_E_INDEX, STEP)
@@ -634,19 +679,33 @@
#define Y2_ENABLE_PIN _EPIN(Y2_E_INDEX, ENABLE)
#if Y2_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(Y2_STEP)
#error "No E stepper plug left for Y2!"
+ #else
+ #define AUTO_ASSIGNED_Y2_STEPPER 1
#endif
#endif
#ifndef Y2_MS1_PIN
#define Y2_MS1_PIN _EPIN(Y2_E_INDEX, MS1)
+ #if PIN_EXISTS(Y2_MS1)
+ #define AUTO_ASSIGNED_Y2_MS1 1
+ #endif
#endif
#ifndef Y2_MS2_PIN
#define Y2_MS2_PIN _EPIN(Y2_E_INDEX, MS2)
+ #if PIN_EXISTS(Y2_MS2)
+ #define AUTO_ASSIGNED_Y2_MS2 1
+ #endif
#endif
#ifndef Y2_MS3_PIN
#define Y2_MS3_PIN _EPIN(Y2_E_INDEX, MS3)
+ #if PIN_EXISTS(Y2_MS3)
+ #define AUTO_ASSIGNED_Y2_MS3 1
+ #endif
#endif
#if AXIS_HAS_SPI(Y2) && !defined(Y2_CS_PIN)
#define Y2_CS_PIN _EPIN(Y2_E_INDEX, CS)
+ #if PIN_EXISTS(Y2_CS)
+ #define AUTO_ASSIGNED_Y2_CS 1
+ #endif
#endif
#if AXIS_HAS_UART(Y2)
#ifndef Y2_SERIAL_TX_PIN
@@ -657,7 +716,7 @@
#endif
#endif
// Auto-assign pins for stallGuard sensorless homing
- #if !defined(Y2_USE_ENDSTOP) && defined(Y2_STALL_SENSITIVITY) && ENABLED(Y_DUAL_ENDSTOPS) && _PEXI(Y2_E_INDEX, DIAG)
+ #if !defined(Y2_DIAG_PIN) && !defined(Y2_USE_ENDSTOP) && defined(Y2_STALL_SENSITIVITY) && ENABLED(Y_DUAL_ENDSTOPS) && _PEXI(Y2_E_INDEX, DIAG)
#define Y2_DIAG_PIN _EPIN(Y2_E_INDEX, DIAG)
#if DIAG_REMAPPED(Y2, X_MIN)
#define Y2_USE_ENDSTOP _XMIN_
@@ -672,14 +731,11 @@
#elif DIAG_REMAPPED(Y2, Z_MAX)
#define Y2_USE_ENDSTOP _ZMAX_
#else
- #define _Y2_USE_ENDSTOP(P) _E##P##_DIAG_
- #define Y2_USE_ENDSTOP _Y2_USE_ENDSTOP(Y2_E_INDEX)
+ #define Y2_USE_ENDSTOP _En_DIAG_(Y2_E_INDEX)
#endif
- #undef Y2_DIAG_PIN
+ #define AUTO_ASSIGNED_Y2_DIAG 1
+ #undef Y2_DIAG_PIN // Defined in Conditionals_post.h based on Y2_USE_ENDSTOP
#endif
- #define Z2_E_INDEX INCREMENT(Y2_E_INDEX)
-#else
- #define Z2_E_INDEX Y2_E_INDEX
#endif
#ifndef Y2_CS_PIN
@@ -696,6 +752,11 @@
#endif
// The Z2 axis, if any, should be the next open extruder port
+#if NUM_Z_STEPPER_DRIVERS >= 2 && !defined(Z2_DIAG_PIN) && !defined(Z2_STEP_PIN) && !PIN_EXISTS(Z2_CS_PIN)
+ #define Z3_E_INDEX INCREMENT(Z2_E_INDEX)
+#else
+ #define Z3_E_INDEX Z2_E_INDEX
+#endif
#if NUM_Z_STEPPER_DRIVERS >= 2
#ifndef Z2_STEP_PIN
#define Z2_STEP_PIN _EPIN(Z2_E_INDEX, STEP)
@@ -703,19 +764,33 @@
#define Z2_ENABLE_PIN _EPIN(Z2_E_INDEX, ENABLE)
#if Z2_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(Z2_STEP)
#error "No E stepper plug left for Z2!"
+ #else
+ #define AUTO_ASSIGNED_Z2_STEPPER 1
#endif
#endif
#ifndef Z2_MS1_PIN
#define Z2_MS1_PIN _EPIN(Z2_E_INDEX, MS1)
+ #if PIN_EXISTS(Z2_MS1)
+ #define AUTO_ASSIGNED_Z2_MS1 1
+ #endif
#endif
#ifndef Z2_MS2_PIN
#define Z2_MS2_PIN _EPIN(Z2_E_INDEX, MS2)
+ #if PIN_EXISTS(Z2_MS2)
+ #define AUTO_ASSIGNED_Z2_MS2 1
+ #endif
#endif
#ifndef Z2_MS3_PIN
#define Z2_MS3_PIN _EPIN(Z2_E_INDEX, MS3)
+ #if PIN_EXISTS(Z2_MS3)
+ #define AUTO_ASSIGNED_Z2_MS3 1
+ #endif
#endif
#if AXIS_HAS_SPI(Z2) && !defined(Z2_CS_PIN)
#define Z2_CS_PIN _EPIN(Z2_E_INDEX, CS)
+ #if PIN_EXISTS(Z2_CS)
+ #define AUTO_ASSIGNED_Z2_CS 1
+ #endif
#endif
#if AXIS_HAS_UART(Z2)
#ifndef Z2_SERIAL_TX_PIN
@@ -726,7 +801,7 @@
#endif
#endif
// Auto-assign pins for stallGuard sensorless homing
- #if !defined(Z2_USE_ENDSTOP) && defined(Z2_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 2 && _PEXI(Z2_E_INDEX, DIAG)
+ #if !defined(Z2_DIAG_PIN) && !defined(Z2_USE_ENDSTOP) && defined(Z2_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 2 && _PEXI(Z2_E_INDEX, DIAG)
#define Z2_DIAG_PIN _EPIN(Z2_E_INDEX, DIAG)
#if DIAG_REMAPPED(Z2, X_MIN)
#define Z2_USE_ENDSTOP _XMIN_
@@ -741,14 +816,11 @@
#elif DIAG_REMAPPED(Z2, Z_MAX)
#define Z2_USE_ENDSTOP _ZMAX_
#else
- #define _Z2_USE_ENDSTOP(P) _E##P##_DIAG_
- #define Z2_USE_ENDSTOP _Z2_USE_ENDSTOP(Z2_E_INDEX)
+ #define Z2_USE_ENDSTOP _En_DIAG_(Z2_E_INDEX)
#endif
- #undef Z2_DIAG_PIN
+ #define AUTO_ASSIGNED_Z2_DIAG 1
+ #undef Z2_DIAG_PIN // Defined in Conditionals_post.h based on Z2_USE_ENDSTOP
#endif
- #define Z3_E_INDEX INCREMENT(Z2_E_INDEX)
-#else
- #define Z3_E_INDEX Z2_E_INDEX
#endif
#ifndef Z2_CS_PIN
@@ -764,6 +836,12 @@
#define Z2_MS3_PIN -1
#endif
+// The Z3 axis, if any, should be the next open extruder port
+#if NUM_Z_STEPPER_DRIVERS >= 3 && !defined(Z3_DIAG_PIN) && !defined(Z3_STEP_PIN) && !PIN_EXISTS(Z3_CS_PIN)
+ #define Z4_E_INDEX INCREMENT(Z3_E_INDEX)
+#else
+ #define Z4_E_INDEX Z3_E_INDEX
+#endif
#if NUM_Z_STEPPER_DRIVERS >= 3
#ifndef Z3_STEP_PIN
#define Z3_STEP_PIN _EPIN(Z3_E_INDEX, STEP)
@@ -771,21 +849,33 @@
#define Z3_ENABLE_PIN _EPIN(Z3_E_INDEX, ENABLE)
#if Z3_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(Z3_STEP)
#error "No E stepper plug left for Z3!"
+ #else
+ #define AUTO_ASSIGNED_Z3_STEPPER 1
#endif
#endif
- #if AXIS_HAS_SPI(Z3)
- #ifndef Z3_CS_PIN
- #define Z3_CS_PIN _EPIN(Z3_E_INDEX, CS)
+ #if AXIS_HAS_SPI(Z3) && !defined(Z3_CS_PIN)
+ #define Z3_CS_PIN _EPIN(Z3_E_INDEX, CS)
+ #if PIN_EXISTS(Z3_CS)
+ #define AUTO_ASSIGNED_Z3_CS 1
#endif
#endif
#ifndef Z3_MS1_PIN
#define Z3_MS1_PIN _EPIN(Z3_E_INDEX, MS1)
+ #if PIN_EXISTS(Z3_MS1)
+ #define AUTO_ASSIGNED_Z3_MS1 1
+ #endif
#endif
#ifndef Z3_MS2_PIN
#define Z3_MS2_PIN _EPIN(Z3_E_INDEX, MS2)
+ #if PIN_EXISTS(Z3_MS2)
+ #define AUTO_ASSIGNED_Z3_MS2 1
+ #endif
#endif
#ifndef Z3_MS3_PIN
#define Z3_MS3_PIN _EPIN(Z3_E_INDEX, MS3)
+ #if PIN_EXISTS(Z3_MS3)
+ #define AUTO_ASSIGNED_Z3_MS3 1
+ #endif
#endif
#if AXIS_HAS_UART(Z3)
#ifndef Z3_SERIAL_TX_PIN
@@ -796,7 +886,7 @@
#endif
#endif
// Auto-assign pins for stallGuard sensorless homing
- #if !defined(Z3_USE_ENDSTOP) && defined(Z3_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3 && _PEXI(Z3_E_INDEX, DIAG)
+ #if !defined(Z3_DIAG_PIN) && !defined(Z3_USE_ENDSTOP) && defined(Z3_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3 && _PEXI(Z3_E_INDEX, DIAG)
#define Z3_DIAG_PIN _EPIN(Z3_E_INDEX, DIAG)
#if DIAG_REMAPPED(Z3, X_MIN)
#define Z3_USE_ENDSTOP _XMIN_
@@ -811,14 +901,11 @@
#elif DIAG_REMAPPED(Z3, Z_MAX)
#define Z3_USE_ENDSTOP _ZMAX_
#else
- #define _Z3_USE_ENDSTOP(P) _E##P##_DIAG_
- #define Z3_USE_ENDSTOP _Z3_USE_ENDSTOP(Z3_E_INDEX)
+ #define Z3_USE_ENDSTOP _En_DIAG_(Z3_E_INDEX)
#endif
- #undef Z3_DIAG_PIN
+ #define AUTO_ASSIGNED_Z3_DIAG 1
+ #undef Z3_DIAG_PIN // Defined in Conditionals_post.h based on Z3_USE_ENDSTOP
#endif
- #define Z4_E_INDEX INCREMENT(Z3_E_INDEX)
-#else
- #define Z4_E_INDEX Z3_E_INDEX
#endif
#ifndef Z3_CS_PIN
@@ -834,6 +921,12 @@
#define Z3_MS3_PIN -1
#endif
+// The Z4 axis, if any, should be the next open extruder port
+#if NUM_Z_STEPPER_DRIVERS >= 4 && !defined(Z4_DIAG_PIN) && !defined(Z4_STEP_PIN) && !PIN_EXISTS(Z4_CS_PIN)
+ #define I_E_INDEX INCREMENT(Z4_E_INDEX)
+#else
+ #define I_E_INDEX Z4_E_INDEX
+#endif
#if NUM_Z_STEPPER_DRIVERS >= 4
#ifndef Z4_STEP_PIN
#define Z4_STEP_PIN _EPIN(Z4_E_INDEX, STEP)
@@ -841,21 +934,33 @@
#define Z4_ENABLE_PIN _EPIN(Z4_E_INDEX, ENABLE)
#if Z4_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(Z4_STEP)
#error "No E stepper plug left for Z4!"
+ #else
+ #define AUTO_ASSIGNED_Z4_STEPPER 1
#endif
#endif
- #if AXIS_HAS_SPI(Z4)
- #ifndef Z4_CS_PIN
- #define Z4_CS_PIN _EPIN(Z4_E_INDEX, CS)
+ #if AXIS_HAS_SPI(Z4) && !defined(Z4_CS_PIN)
+ #define Z4_CS_PIN _EPIN(Z4_E_INDEX, CS)
+ #if PIN_EXISTS(Z4_CS)
+ #define AUTO_ASSIGNED_Z4_CS 1
#endif
#endif
#ifndef Z4_MS1_PIN
#define Z4_MS1_PIN _EPIN(Z4_E_INDEX, MS1)
+ #if PIN_EXISTS(Z4_MS1)
+ #define AUTO_ASSIGNED_Z4_MS1 1
+ #endif
#endif
#ifndef Z4_MS2_PIN
#define Z4_MS2_PIN _EPIN(Z4_E_INDEX, MS2)
+ #if PIN_EXISTS(Z4_MS2)
+ #define AUTO_ASSIGNED_Z4_MS2 1
+ #endif
#endif
#ifndef Z4_MS3_PIN
#define Z4_MS3_PIN _EPIN(Z4_E_INDEX, MS3)
+ #if PIN_EXISTS(Z4_MS3)
+ #define AUTO_ASSIGNED_Z4_MS3 1
+ #endif
#endif
#if AXIS_HAS_UART(Z4)
#ifndef Z4_SERIAL_TX_PIN
@@ -866,7 +971,7 @@
#endif
#endif
// Auto-assign pins for stallGuard sensorless homing
- #if !defined(Z4_USE_ENDSTOP) && defined(Z4_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4 && _PEXI(Z4_E_INDEX, DIAG)
+ #if !defined(Z4_DIAG_PIN) && !defined(Z4_USE_ENDSTOP) && defined(Z4_STALL_SENSITIVITY) && ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4 && _PEXI(Z4_E_INDEX, DIAG)
#define Z4_DIAG_PIN _EPIN(Z4_E_INDEX, DIAG)
#if DIAG_REMAPPED(Z4, X_MIN)
#define Z4_USE_ENDSTOP _XMIN_
@@ -881,14 +986,11 @@
#elif DIAG_REMAPPED(Z4, Z_MAX)
#define Z4_USE_ENDSTOP _ZMAX_
#else
- #define _Z4_USE_ENDSTOP(P) _E##P##_DIAG_
- #define Z4_USE_ENDSTOP _Z4_USE_ENDSTOP(Z4_E_INDEX)
+ #define Z4_USE_ENDSTOP _En_DIAG_(Z4_E_INDEX)
#endif
- #undef Z4_DIAG_PIN
+ #define AUTO_ASSIGNED_Z4_DIAG 1
+ #undef Z4_DIAG_PIN // Defined in Conditionals_post.h based on Z4_USE_ENDSTOP
#endif
- #define I_E_INDEX INCREMENT(Z4_E_INDEX)
-#else
- #define I_E_INDEX Z4_E_INDEX
#endif
#ifndef Z4_CS_PIN
@@ -904,6 +1006,12 @@
#define Z4_MS3_PIN -1
#endif
+// The I axis, if any, should be the next open extruder port
+#if LINEAR_AXES >= 4 && !defined(I_DIAG_PIN) && !defined(I_STEP_PIN) && !PIN_EXISTS(I_CS_PIN)
+ #define J_E_INDEX INCREMENT(I_E_INDEX)
+#else
+ #define J_E_INDEX I_E_INDEX
+#endif
#if LINEAR_AXES >= 4
#ifndef I_STEP_PIN
#define I_STEP_PIN _EPIN(I_E_INDEX, STEP)
@@ -911,21 +1019,33 @@
#define I_ENABLE_PIN _EPIN(I_E_INDEX, ENABLE)
#if I_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(I_STEP)
#error "No E stepper plug left for I!"
+ #else
+ #define AUTO_ASSIGNED_I_STEPPER 1
#endif
#endif
- #if AXIS_HAS_SPI(I)
- #ifndef I_CS_PIN
- #define I_CS_PIN _EPIN(I_E_INDEX, CS)
+ #if AXIS_HAS_SPI(I) && !defined(I_CS_PIN)
+ #define I_CS_PIN _EPIN(I_E_INDEX, CS)
+ #if PIN_EXISTS(I_CS)
+ #define AUTO_ASSIGNED_I_CS 1
#endif
#endif
#ifndef I_MS1_PIN
#define I_MS1_PIN _EPIN(I_E_INDEX, MS1)
+ #if PIN_EXISTS(I_MS1)
+ #define AUTO_ASSIGNED_I_MS1 1
+ #endif
#endif
#ifndef I_MS2_PIN
#define I_MS2_PIN _EPIN(I_E_INDEX, MS2)
+ #if PIN_EXISTS(I_MS2)
+ #define AUTO_ASSIGNED_I_MS2 1
+ #endif
#endif
#ifndef I_MS3_PIN
#define I_MS3_PIN _EPIN(I_E_INDEX, MS3)
+ #if PIN_EXISTS(I_MS3)
+ #define AUTO_ASSIGNED_I_MS3 1
+ #endif
#endif
#if AXIS_HAS_UART(I)
#ifndef I_SERIAL_TX_PIN
@@ -936,7 +1056,7 @@
#endif
#endif
// Auto-assign pins for stallGuard sensorless homing
- #if !defined(I_USE_ENDSTOP) && defined(I_STALL_SENSITIVITY) && _PEXI(I_E_INDEX, DIAG)
+ #if !defined(I_DIAG_PIN) && !defined(I_USE_ENDSTOP) && defined(I_STALL_SENSITIVITY) && _PEXI(I_E_INDEX, DIAG)
#define I_DIAG_PIN _EPIN(I_E_INDEX, DIAG)
#if DIAG_REMAPPED(I, X_MIN)
#define I_USE_ENDSTOP _XMIN_
@@ -951,14 +1071,11 @@
#elif DIAG_REMAPPED(I, Z_MAX)
#define I_USE_ENDSTOP _ZMAX_
#else
- #define _I_USE_ENDSTOP(P) _E##P##_DIAG_
- #define I_USE_ENDSTOP _I_USE_ENDSTOP(I_E_INDEX)
+ #define I_USE_ENDSTOP _En_DIAG_(I_E_INDEX)
#endif
- #undef I_DIAG_PIN
+ #define AUTO_ASSIGNED_I_DIAG 1
+ #undef I_DIAG_PIN // Defined in Conditionals_post.h based on I_USE_ENDSTOP
#endif
- #define J_E_INDEX INCREMENT(I_E_INDEX)
-#else
- #define J_E_INDEX I_E_INDEX
#endif
#ifndef I_CS_PIN
@@ -974,6 +1091,12 @@
#define I_MS3_PIN -1
#endif
+// The J axis, if any, should be the next open extruder port
+#if LINEAR_AXES >= 5 && !defined(J_DIAG_PIN) && !defined(J_STEP_PIN) && !PIN_EXISTS(J_CS_PIN)
+ #define K_E_INDEX INCREMENT(J_E_INDEX)
+#else
+ #define K_E_INDEX J_E_INDEX
+#endif
#if LINEAR_AXES >= 5
#ifndef J_STEP_PIN
#define J_STEP_PIN _EPIN(J_E_INDEX, STEP)
@@ -981,21 +1104,33 @@
#define J_ENABLE_PIN _EPIN(J_E_INDEX, ENABLE)
#if I_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(J_STEP)
#error "No E stepper plug left for J!"
+ #else
+ #define AUTO_ASSIGNED_J_STEPPER 1
#endif
#endif
- #if AXIS_HAS_SPI(J)
- #ifndef J_CS_PIN
- #define J_CS_PIN _EPIN(J_E_INDEX, CS)
+ #if AXIS_HAS_SPI(J) && !defined(J_CS_PIN)
+ #define J_CS_PIN _EPIN(J_E_INDEX, CS)
+ #if PIN_EXISTS(J_CS)
+ #define AUTO_ASSIGNED_J_CS 1
#endif
#endif
#ifndef J_MS1_PIN
#define J_MS1_PIN _EPIN(J_E_INDEX, MS1)
+ #if PIN_EXISTS(J_MS1)
+ #define AUTO_ASSIGNED_J_MS1 1
+ #endif
#endif
#ifndef J_MS2_PIN
#define J_MS2_PIN _EPIN(J_E_INDEX, MS2)
+ #if PIN_EXISTS(J_MS2)
+ #define AUTO_ASSIGNED_J_MS2 1
+ #endif
#endif
#ifndef J_MS3_PIN
#define J_MS3_PIN _EPIN(J_E_INDEX, MS3)
+ #if PIN_EXISTS(J_MS3)
+ #define AUTO_ASSIGNED_J_MS3 1
+ #endif
#endif
#if AXIS_HAS_UART(J)
#ifndef J_SERIAL_TX_PIN
@@ -1006,7 +1141,7 @@
#endif
#endif
// Auto-assign pins for stallGuard sensorless homing
- #if !defined(J_USE_ENDSTOP) && defined(J_STALL_SENSITIVITY) && _PEXI(J_E_INDEX, DIAG)
+ #if !defined(J_DIAG_PIN) && !defined(J_USE_ENDSTOP) && defined(J_STALL_SENSITIVITY) && _PEXI(J_E_INDEX, DIAG)
#define J_DIAG_PIN _EPIN(J_E_INDEX, DIAG)
#if DIAG_REMAPPED(J, X_MIN)
#define J_USE_ENDSTOP _XMIN_
@@ -1021,14 +1156,11 @@
#elif DIAG_REMAPPED(I, Z_MAX)
#define J_USE_ENDSTOP _ZMAX_
#else
- #define _J_USE_ENDSTOP(P) _E##P##_DIAG_
- #define J_USE_ENDSTOP _J_USE_ENDSTOP(J_E_INDEX)
+ #define J_USE_ENDSTOP _En_DIAG_(J_E_INDEX)
#endif
- #undef J_DIAG_PIN
+ #define AUTO_ASSIGNED_J_DIAG 1
+ #undef J_DIAG_PIN // Defined in Conditionals_post.h based on J_USE_ENDSTOP
#endif
- #define K_E_INDEX INCREMENT(J_E_INDEX)
-#else
- #define K_E_INDEX J_E_INDEX
#endif
#ifndef J_CS_PIN
@@ -1044,6 +1176,7 @@
#define J_MS3_PIN -1
#endif
+// The K axis, if any, should be the next open extruder port
#if LINEAR_AXES >= 6
#ifndef K_STEP_PIN
#define K_STEP_PIN _EPIN(K_E_INDEX, STEP)
@@ -1051,21 +1184,33 @@
#define K_ENABLE_PIN _EPIN(K_E_INDEX, ENABLE)
#if K_E_INDEX >= MAX_E_STEPPERS || !PIN_EXISTS(K_STEP)
#error "No E stepper plug left for K!"
+ #else
+ #define AUTO_ASSIGNED_K_STEPPER 1
#endif
#endif
- #if AXIS_HAS_SPI(K)
- #ifndef K_CS_PIN
- #define K_CS_PIN _EPIN(K_E_INDEX, CS)
+ #if AXIS_HAS_SPI(K) && !defined(K_CS_PIN)
+ #define K_CS_PIN _EPIN(K_E_INDEX, CS)
+ #if PIN_EXISTS(K_CS)
+ #define AUTO_ASSIGNED_K_CS 1
#endif
#endif
#ifndef K_MS1_PIN
#define K_MS1_PIN _EPIN(K_E_INDEX, MS1)
+ #if PIN_EXISTS(K_MS1)
+ #define AUTO_ASSIGNED_K_MS1 1
+ #endif
#endif
#ifndef K_MS2_PIN
#define K_MS2_PIN _EPIN(K_E_INDEX, MS2)
+ #if PIN_EXISTS(K_MS2)
+ #define AUTO_ASSIGNED_K_MS2 1
+ #endif
#endif
#ifndef K_MS3_PIN
#define K_MS3_PIN _EPIN(K_E_INDEX, MS3)
+ #if PIN_EXISTS(K_MS3)
+ #define AUTO_ASSIGNED_K_MS3 1
+ #endif
#endif
#if AXIS_HAS_UART(K)
#ifndef K_SERIAL_TX_PIN
@@ -1076,7 +1221,7 @@
#endif
#endif
// Auto-assign pins for stallGuard sensorless homing
- #if !defined(K_USE_ENDSTOP) && defined(K_STALL_SENSITIVITY) && _PEXI(K_E_INDEX, DIAG)
+ #if !defined(K_DIAG_PIN) && !defined(K_USE_ENDSTOP) && defined(K_STALL_SENSITIVITY) && _PEXI(K_E_INDEX, DIAG)
#define K_DIAG_PIN _EPIN(K_E_INDEX, DIAG)
#if DIAG_REMAPPED(K, X_MIN)
#define K_USE_ENDSTOP _XMIN_
@@ -1091,10 +1236,10 @@
#elif DIAG_REMAPPED(K, Z_MAX)
#define K_USE_ENDSTOP _ZMAX_
#else
- #define _K_USE_ENDSTOP(P) _E##P##_DIAG_
- #define K_USE_ENDSTOP _K_USE_ENDSTOP(K_E_INDEX)
+ #define K_USE_ENDSTOP _En_DIAG_(K_E_INDEX)
#endif
- #undef K_DIAG_PIN
+ #define AUTO_ASSIGNED_K_DIAG 1
+ #undef K_DIAG_PIN // Defined in Conditionals_post.h based on K_USE_ENDSTOP
#endif
#endif
@@ -1221,7 +1366,7 @@
//
// Default DOGLCD SPI delays
//
-#if DISABLED(U8GLIB_ST7920)
+#if !IS_U8GLIB_ST7920
#undef ST7920_DELAY_1
#undef ST7920_DELAY_2
#undef ST7920_DELAY_3
diff --git a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h
index 25decbf035..a7d1a62820 100644
--- a/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h
+++ b/Marlin/src/pins/rambo/pins_EINSY_RAMBO.h
@@ -205,7 +205,7 @@
#endif // IS_ULTIPANEL || TOUCH_UI_ULTIPANEL
#endif // HAS_WIRED_LCD
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 250
#define BOARD_ST7920_DELAY_3 0
diff --git a/Marlin/src/pins/rambo/pins_EINSY_RETRO.h b/Marlin/src/pins/rambo/pins_EINSY_RETRO.h
index 48c68d55f9..45c09ae33e 100644
--- a/Marlin/src/pins/rambo/pins_EINSY_RETRO.h
+++ b/Marlin/src/pins/rambo/pins_EINSY_RETRO.h
@@ -201,7 +201,7 @@
#endif // HAS_WIRED_LCD || TOUCH_UI_ULTIPANEL || TOUCH_UI_FTDI_EVE
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 250
#define BOARD_ST7920_DELAY_3 0
diff --git a/Marlin/src/pins/rambo/pins_MINIRAMBO.h b/Marlin/src/pins/rambo/pins_MINIRAMBO.h
index c496878908..ab25e2e692 100644
--- a/Marlin/src/pins/rambo/pins_MINIRAMBO.h
+++ b/Marlin/src/pins/rambo/pins_MINIRAMBO.h
@@ -193,7 +193,7 @@
#endif // HAS_WIRED_LCD || TOUCH_UI_ULTIPANEL
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 250
#define BOARD_ST7920_DELAY_3 0
diff --git a/Marlin/src/pins/rambo/pins_RAMBO.h b/Marlin/src/pins/rambo/pins_RAMBO.h
index 8153103a38..41e59c1b22 100644
--- a/Marlin/src/pins/rambo/pins_RAMBO.h
+++ b/Marlin/src/pins/rambo/pins_RAMBO.h
@@ -270,7 +270,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 0
#define BOARD_ST7920_DELAY_3 0
diff --git a/Marlin/src/pins/ramps/pins_3DRAG.h b/Marlin/src/pins/ramps/pins_3DRAG.h
index 316323ef9c..4ff6e2d7e5 100644
--- a/Marlin/src/pins/ramps/pins_3DRAG.h
+++ b/Marlin/src/pins/ramps/pins_3DRAG.h
@@ -37,6 +37,28 @@
#define DEFAULT_SOURCE_CODE_URL "3dprint.elettronicain.it"
#endif
+//
+// Limit Switches
+//
+#define Z_STOP_PIN 18
+
+//
+// Steppers
+//
+#if HAS_CUTTER
+ #define Z_DIR_PIN 28
+ #define Z_ENABLE_PIN 24
+ #define Z_STEP_PIN 26
+#else
+ #define Z_ENABLE_PIN 63
+#endif
+
+#if HAS_CUTTER && !HAS_EXTRUDERS
+ #define E0_DIR_PIN -1
+ #define E0_ENABLE_PIN -1
+ #define E0_STEP_PIN -1
+#endif
+
//
// Heaters / Fans
//
@@ -53,19 +75,55 @@
#define CASE_LIGHT_PIN -1 // Hardware PWM but one is not available on expansion header
#endif
+/**
+ * M3/M4/M5 - Spindle/Laser Control
+ *
+ * If you want to control the speed of your spindle then you'll have
+ * have to sacrifce the Extruder and pull some signals off the Z stepper
+ * driver socket.
+ *
+ * The following assumes:
+ * - the Z stepper driver socket is empty
+ * - the extruder driver socket has a driver board plugged into it
+ * - the Z stepper wires are attached the the extruder connector
+ *
+ * If you want to keep the extruder AND don't have a LCD display then
+ * you can still control the power on/off and spindle direction.
+ *
+ * Where to get spindle signals
+ *
+ * stepper signal socket name socket name
+ * -------
+ * SPINDLE_LASER_ENA_PIN /ENABLE O| |O VMOT
+ * MS1 O| |O GND
+ * MS2 O| |O 2B
+ * MS3 O| |O 2A
+ * /RESET O| |O 1A
+ * /SLEEP O| |O 1B
+ * SPINDLE_LASER_PWM_PIN STEP O| |O VDD
+ * SPINDLE_DIR_PIN DIR O| |O GND
+ * -------
+ *
+ * Note: Socket names vary from vendor to vendor
+ */
+#if HAS_CUTTER
+ #if !HAS_EXTRUDERS
+ #define SPINDLE_LASER_PWM_PIN 46 // Hardware PWM
+ #define SPINDLE_LASER_ENA_PIN 62 // Pullup!
+ #define SPINDLE_DIR_PIN 48
+ #elif !BOTH(IS_ULTRA_LCD, IS_NEWPANEL) // Use expansion header if no LCD in use
+ #define SPINDLE_LASER_ENA_PIN 16 // Pullup or pulldown!
+ #define SPINDLE_DIR_PIN 17
+ #if !NUM_SERVOS // Use servo connector if possible
+ #define SPINDLE_LASER_PWM_PIN 6 // Hardware PWM
+ #elif HAS_FREE_AUX2_PINS
+ #define SPINDLE_LASER_PWM_PIN 44 // Hardware PWM
+ #endif
+ #endif
+#endif
+
#include "pins_RAMPS.h"
-//
-// Limit Switches
-//
-#undef Z_MAX_PIN
-
-//
-// Steppers
-//
-#undef Z_ENABLE_PIN
-#define Z_ENABLE_PIN 63
-
//
// Heaters / Fans
//
@@ -108,63 +166,8 @@
#endif // IS_ULTRA_LCD && IS_NEWPANEL
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 188
#define BOARD_ST7920_DELAY_3 0
#endif
-
-/**
- * M3/M4/M5 - Spindle/Laser Control
- *
- * If you want to control the speed of your spindle then you'll have
- * have to sacrifce the Extruder and pull some signals off the Z stepper
- * driver socket.
- *
- * The following assumes:
- * - the Z stepper driver socket is empty
- * - the extruder driver socket has a driver board plugged into it
- * - the Z stepper wires are attached the the extruder connector
- *
- * If you want to keep the extruder AND don't have a LCD display then
- * you can still control the power on/off and spindle direction.
- *
- * Where to get spindle signals
- *
- * stepper signal socket name socket name
- * -------
- * SPINDLE_LASER_ENA_PIN /ENABLE O| |O VMOT
- * MS1 O| |O GND
- * MS2 O| |O 2B
- * MS3 O| |O 2A
- * /RESET O| |O 1A
- * /SLEEP O| |O 1B
- * SPINDLE_LASER_PWM_PIN STEP O| |O VDD
- * SPINDLE_DIR_PIN DIR O| |O GND
- * -------
- *
- * Note: Socket names vary from vendor to vendor
- */
-#undef SPINDLE_LASER_PWM_PIN // Definitions in pins_RAMPS.h are not good with 3DRAG
-#undef SPINDLE_LASER_ENA_PIN
-#undef SPINDLE_DIR_PIN
-
-#if HAS_CUTTER
- #if !HAS_EXTRUDERS
- #undef E0_DIR_PIN
- #undef E0_ENABLE_PIN
- #undef E0_STEP_PIN
- #undef Z_DIR_PIN
- #undef Z_ENABLE_PIN
- #undef Z_STEP_PIN
- #define Z_DIR_PIN 28
- #define Z_ENABLE_PIN 24
- #define Z_STEP_PIN 26
- #define SPINDLE_LASER_PWM_PIN 46 // Hardware PWM
- #define SPINDLE_LASER_ENA_PIN 62 // Pullup!
- #define SPINDLE_DIR_PIN 48
- #elif !BOTH(IS_ULTRA_LCD, IS_NEWPANEL) // Use expansion header if no LCD in use
- #define SPINDLE_LASER_ENA_PIN 16 // Pullup or pulldown!
- #define SPINDLE_DIR_PIN 17
- #endif
-#endif
diff --git a/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h b/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h
index 14f54cdcf3..64d881866b 100644
--- a/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h
+++ b/Marlin/src/pins/ramps/pins_BQ_ZUM_MEGA_3D.h
@@ -30,6 +30,41 @@
#define BOARD_INFO_NAME "ZUM Mega 3D"
+//
+// Limit Switches
+//
+#define X_MAX_PIN 79
+
+// This board has headers for Z-min, Z-max and IND_S_5V *but* as the bq team
+// decided to ship the printer only with the probe and no additional Z-min
+// endstop and the instruction manual advises the user to connect the probe to
+// IND_S_5V the option Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN will not work.
+#if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
+ #define Z_MIN_PIN 19 // IND_S_5V
+ #define Z_MAX_PIN 18 // Z-MIN Label
+#endif
+
+//
+// Z Probe (when not Z_MIN_PIN)
+//
+#ifndef Z_MIN_PROBE_PIN
+ #define Z_MIN_PROBE_PIN 19 // IND_S_5V
+#endif
+
+//
+// Steppers
+//
+#define Z_ENABLE_PIN 77
+
+#define DIGIPOTSS_PIN 22
+#define DIGIPOT_CHANNELS { 4, 5, 3, 0, 1 }
+
+//
+// Temperature Sensors
+//
+#define TEMP_1_PIN 14 // Analog Input
+#define TEMP_BED_PIN 15 // Analog Input
+
//
// Heaters / Fans
//
@@ -61,61 +96,27 @@
#define SPINDLE_LASER_PWM_PIN 44 // Hardware PWM
#define SPINDLE_DIR_PIN 42
-//
-// Limit Switches
-//
-#define X_MAX_PIN 79 // 2
-
-//
-// Import RAMPS 1.3 pins
-//
-#include "pins_RAMPS_13.h"
-
-//
-// Z Probe (when not Z_MIN_PIN)
-//
-#undef Z_MIN_PROBE_PIN
-#define Z_MIN_PROBE_PIN 19 // IND_S_5V
-
-#undef Z_ENABLE_PIN
-#define Z_ENABLE_PIN 77 // 62
-
-//
-// Steppers
-//
-#define DIGIPOTSS_PIN 22
-#define DIGIPOT_CHANNELS { 4, 5, 3, 0, 1 }
-
-//
-// Temperature Sensors
-//
-#undef TEMP_1_PIN
-#define TEMP_1_PIN 14 // Analog Input (15)
-
-#undef TEMP_BED_PIN
-#define TEMP_BED_PIN 15 // Analog Input (14)
-
//
// Misc. Functions
//
-#undef PS_ON_PIN // 12
#define PS_ON_PIN 81 // External Power Supply
#ifndef CASE_LIGHT_PIN
#define CASE_LIGHT_PIN 44 // Hardware PWM
#endif
-// This board has headers for Z-min, Z-max and IND_S_5V *but* as the bq team
-// decided to ship the printer only with the probe and no additional Z-min
-// endstop and the instruction manual advises the user to connect the probe to
-// IND_S_5V the option Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN will not work.
-#ifdef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
- #undef Z_MIN_PIN
- #undef Z_MAX_PIN
- #define Z_MIN_PIN 19 // IND_S_5V
- #define Z_MAX_PIN 18 // Z-MIN Label
+// Alter timing for graphical display
+#if IS_U8GLIB_ST7920
+ #define BOARD_ST7920_DELAY_1 0
+ #define BOARD_ST7920_DELAY_2 0
+ #define BOARD_ST7920_DELAY_3 189
#endif
+//
+// Import RAMPS 1.3 pins
+//
+#include "pins_RAMPS_13.h"
+
//
// Used by the Hephestos 2 heated bed upgrade kit
//
@@ -123,10 +124,3 @@
#undef HEATER_BED_PIN
#define HEATER_BED_PIN 8
#endif
-
-// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
- #define BOARD_ST7920_DELAY_1 0
- #define BOARD_ST7920_DELAY_2 0
- #define BOARD_ST7920_DELAY_3 189
-#endif
diff --git a/Marlin/src/pins/ramps/pins_DAGOMA_F5.h b/Marlin/src/pins/ramps/pins_DAGOMA_F5.h
index 4bebd6ded6..ced66d80b8 100644
--- a/Marlin/src/pins/ramps/pins_DAGOMA_F5.h
+++ b/Marlin/src/pins/ramps/pins_DAGOMA_F5.h
@@ -40,7 +40,7 @@
#endif
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 250
#define BOARD_ST7920_DELAY_3 250
diff --git a/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h b/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h
index 94c4551fc2..f15c89e4f8 100644
--- a/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h
+++ b/Marlin/src/pins/ramps/pins_FORMBOT_TREX2PLUS.h
@@ -199,7 +199,7 @@
#endif
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 200
#define BOARD_ST7920_DELAY_2 200
#define BOARD_ST7920_DELAY_3 200
diff --git a/Marlin/src/pins/ramps/pins_K8400.h b/Marlin/src/pins/ramps/pins_K8400.h
index af687927f4..bed2238162 100644
--- a/Marlin/src/pins/ramps/pins_K8400.h
+++ b/Marlin/src/pins/ramps/pins_K8400.h
@@ -35,7 +35,14 @@
#define BOARD_INFO_NAME "K8400"
#define DEFAULT_MACHINE_NAME "Vertex"
-#include "pins_3DRAG.h"
+//
+// Steppers
+//
+#if HAS_CUTTER
+ #define Z_STEP_PIN 32
+#endif
+
+#define E1_STEP_PIN 32
//
// Limit Switches
@@ -43,16 +50,7 @@
#define X_STOP_PIN 3
#define Y_STOP_PIN 14
-#undef X_MIN_PIN
-#undef X_MAX_PIN
-#undef Y_MIN_PIN
-#undef Y_MAX_PIN
-
-//
-// Steppers
-//
-#undef E1_STEP_PIN
-#define E1_STEP_PIN 32
+#include "pins_3DRAG.h"
//
// Heaters / Fans
@@ -66,8 +64,3 @@
#undef PS_ON_PIN
#undef KILL_PIN
#undef SD_DETECT_PIN
-
-#if Z_STEP_PIN == 26
- #undef Z_STEP_PIN
- #define Z_STEP_PIN 32
-#endif
diff --git a/Marlin/src/pins/ramps/pins_K8600.h b/Marlin/src/pins/ramps/pins_K8600.h
index 9049308ba8..d312490dbe 100644
--- a/Marlin/src/pins/ramps/pins_K8600.h
+++ b/Marlin/src/pins/ramps/pins_K8600.h
@@ -40,6 +40,11 @@
#define Z_MAX_PIN 18
#define Z_MIN_PIN -1
+//
+// Steppers
+//
+#define Z_ENABLE_PIN 63
+
//
// Heaters / Fans
//
@@ -57,12 +62,6 @@
#define IS_RAMPS_EFB // Override autodetection. Bed will be undefined.
#include "pins_RAMPS.h"
-//
-// Steppers
-//
-#undef Z_ENABLE_PIN
-#define Z_ENABLE_PIN 63
-
//
// Heaters / Fans
//
diff --git a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h
index 5ff3b366be..ccf7ab6793 100644
--- a/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h
+++ b/Marlin/src/pins/ramps/pins_LONGER3D_LKx_PRO.h
@@ -82,11 +82,31 @@
#define Z_MAX_PIN 37
#endif
+#undef CHANGE_Y_LIMIT_PINS
+
+//
+// Steppers - No E1 pins
+//
+#define E1_STEP_PIN -1
+#define E1_DIR_PIN -1
+#define E1_ENABLE_PIN -1
+#define E1_CS_PIN -1
+
//
// Z Probe (when not Z_MIN_PIN)
//
#define Z_MIN_PROBE_PIN -1
+//
+// Temperature Sensors
+//
+#define TEMP_1_PIN -1
+
+//
+// Průša i3 MK2 Multiplexer Support
+//
+#define E_MUX2_PIN -1
+
//
// Misc. Functions
//
@@ -98,22 +118,3 @@
//
#define IS_RAMPS_EFB // Override autodetection. Bed will be undefined.
#include "pins_RAMPS_13.h"
-
-//
-// Steppers
-//
-#undef E1_STEP_PIN
-#undef E1_DIR_PIN
-#undef E1_ENABLE_PIN
-#undef E1_CS_PIN
-
-//
-// Temperature Sensors
-//
-#undef TEMP_1_PIN
-
-//
-// Průša i3 MK2 Multiplexer Support
-//
-#undef E_MUX2_PIN
-#undef CHANGE_Y_LIMIT_PINS
diff --git a/Marlin/src/pins/ramps/pins_ORTUR_4.h b/Marlin/src/pins/ramps/pins_ORTUR_4.h
index 428279c92a..bc86c1a8c6 100644
--- a/Marlin/src/pins/ramps/pins_ORTUR_4.h
+++ b/Marlin/src/pins/ramps/pins_ORTUR_4.h
@@ -45,7 +45,14 @@
//
// Steppers
//
+#define E0_STEP_PIN 36
+#define E0_DIR_PIN 34
+#define E0_ENABLE_PIN 30
#define E0_CS_PIN 44
+
+#define E1_STEP_PIN 26
+#define E1_DIR_PIN 28
+#define E1_ENABLE_PIN 24
#define E1_CS_PIN 42
//
@@ -70,23 +77,6 @@
#include "pins_RAMPS.h"
-//
-// Steppers
-//
-#undef E0_STEP_PIN
-#undef E0_DIR_PIN
-#undef E0_ENABLE_PIN
-#define E0_STEP_PIN 36
-#define E0_DIR_PIN 34
-#define E0_ENABLE_PIN 30
-
-#undef E1_STEP_PIN
-#undef E1_DIR_PIN
-#undef E1_ENABLE_PIN
-#define E1_STEP_PIN 26
-#define E1_DIR_PIN 28
-#define E1_ENABLE_PIN 24
-
//
// LCD / Controller
//
diff --git a/Marlin/src/pins/ramps/pins_RAMPS.h b/Marlin/src/pins/ramps/pins_RAMPS.h
index b51d212f4f..e90c3d03fc 100644
--- a/Marlin/src/pins/ramps/pins_RAMPS.h
+++ b/Marlin/src/pins/ramps/pins_RAMPS.h
@@ -133,22 +133,38 @@
#ifndef Z_STEP_PIN
#define Z_STEP_PIN 46
#endif
-#define Z_DIR_PIN 48
-#define Z_ENABLE_PIN 62
+#ifndef Z_DIR_PIN
+ #define Z_DIR_PIN 48
+#endif
+#ifndef Z_ENABLE_PIN
+ #define Z_ENABLE_PIN 62
+#endif
#ifndef Z_CS_PIN
#define Z_CS_PIN 40
#endif
-#define E0_STEP_PIN 26
-#define E0_DIR_PIN 28
-#define E0_ENABLE_PIN 24
+#ifndef E0_STEP_PIN
+ #define E0_STEP_PIN 26
+#endif
+#ifndef E0_DIR_PIN
+ #define E0_DIR_PIN 28
+#endif
+#ifndef E0_ENABLE_PIN
+ #define E0_ENABLE_PIN 24
+#endif
#ifndef E0_CS_PIN
#define E0_CS_PIN 42
#endif
-#define E1_STEP_PIN 36
-#define E1_DIR_PIN 34
-#define E1_ENABLE_PIN 30
+#ifndef E1_STEP_PIN
+ #define E1_STEP_PIN 36
+#endif
+#ifndef E1_DIR_PIN
+ #define E1_DIR_PIN 34
+#endif
+#ifndef E1_ENABLE_PIN
+ #define E1_ENABLE_PIN 30
+#endif
#ifndef E1_CS_PIN
#define E1_CS_PIN 44
#endif
@@ -219,10 +235,10 @@
#define FAN1_PIN RAMPS_D8_PIN
#elif DISABLED(IS_RAMPS_SF) // Not Spindle, Fan (i.e., "EFBF" or "EFBE")
#define HEATER_BED_PIN RAMPS_D8_PIN
- #if HOTENDS == 1 && DISABLED(HEATERS_PARALLEL)
- #define FAN1_PIN MOSFET_D_PIN
- #else
+ #if EITHER(HAS_MULTI_HOTEND, HEATERS_PARALLEL)
#define HEATER_1_PIN MOSFET_D_PIN
+ #else
+ #define FAN1_PIN MOSFET_D_PIN
#endif
#endif
diff --git a/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h b/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h
index 43a769b34d..af91f63bdb 100644
--- a/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h
+++ b/Marlin/src/pins/ramps/pins_RAMPS_PLUS.h
@@ -44,32 +44,25 @@
#define RAMPS_D8_PIN 10
#define RAMPS_D10_PIN 8
-#include "pins_RAMPS.h"
-
//
-// Steppers - Swap E0 / E1 on 3DYMY
+// Steppers
//
-#undef E0_STEP_PIN
-#undef E0_DIR_PIN
-#undef E0_ENABLE_PIN
-
-#undef E1_STEP_PIN
-#undef E1_DIR_PIN
-#undef E1_ENABLE_PIN
+#define X_CS_PIN -1
+#define Y_CS_PIN -1
+#define Z_CS_PIN -1
+// Swap E0 / E1 on 3DYMY
#define E0_STEP_PIN 36
#define E0_DIR_PIN 34
#define E0_ENABLE_PIN 30
+#define E0_CS_PIN -1
#define E1_STEP_PIN 26
#define E1_DIR_PIN 28
#define E1_ENABLE_PIN 24
+#define E1_CS_PIN -1
-#undef X_CS_PIN
-#undef Y_CS_PIN
-#undef Z_CS_PIN
-#undef E0_CS_PIN
-#undef E1_CS_PIN
+#include "pins_RAMPS.h"
#if IS_ULTRA_LCD && NONE(REPRAPWORLD_GRAPHICAL_LCD, CR10_STOCKDISPLAY) && !BOTH(IS_NEWPANEL, PANEL_ONE)
#if DISABLED(MKS_12864OLED) || ENABLED(MKS_12864OLED_SSD1306)
diff --git a/Marlin/src/pins/ramps/pins_RIGIDBOARD.h b/Marlin/src/pins/ramps/pins_RIGIDBOARD.h
index 203af5e081..0263c78b06 100644
--- a/Marlin/src/pins/ramps/pins_RIGIDBOARD.h
+++ b/Marlin/src/pins/ramps/pins_RIGIDBOARD.h
@@ -29,6 +29,18 @@
#define BOARD_INFO_NAME "RigidBoard"
#endif
+//
+// Steppers
+// RigidBot swaps E0 / E1 plugs vs RAMPS 1.3
+//
+#define E0_STEP_PIN 36
+#define E0_DIR_PIN 34
+#define E0_ENABLE_PIN 30
+
+#define E1_STEP_PIN 26
+#define E1_DIR_PIN 28
+#define E1_ENABLE_PIN 24
+
//
// Z Probe (when not Z_MIN_PIN)
//
@@ -45,24 +57,6 @@
#include "pins_RAMPS.h"
-//
-// Steppers
-//
-// RigidBot swaps E0 / E1 plugs vs RAMPS 1.3
-#undef E0_STEP_PIN
-#undef E0_DIR_PIN
-#undef E0_ENABLE_PIN
-#define E0_STEP_PIN 36
-#define E0_DIR_PIN 34
-#define E0_ENABLE_PIN 30
-
-#undef E1_STEP_PIN
-#undef E1_DIR_PIN
-#undef E1_ENABLE_PIN
-#define E1_STEP_PIN 26
-#define E1_DIR_PIN 28
-#define E1_ENABLE_PIN 24
-
#define STEPPER_RESET_PIN 41 // Stepper drivers have a reset on RigidBot
//
diff --git a/Marlin/src/pins/ramps/pins_RUMBA.h b/Marlin/src/pins/ramps/pins_RUMBA.h
index 942afafd7a..d8e2dd0971 100644
--- a/Marlin/src/pins/ramps/pins_RUMBA.h
+++ b/Marlin/src/pins/ramps/pins_RUMBA.h
@@ -47,12 +47,27 @@
//
// Limit Switches
//
-#define X_MIN_PIN 37
-#define X_MAX_PIN 36
-#define Y_MIN_PIN 35
-#define Y_MAX_PIN 34
-#define Z_MIN_PIN 33
-#define Z_MAX_PIN 32
+#ifndef X_MIN_PIN
+ #define X_MIN_PIN 37
+#endif
+#ifndef X_MIN_PIN
+ #define X_MIN_PIN 37
+#endif
+#ifndef X_MAX_PIN
+ #define X_MAX_PIN 36
+#endif
+#ifndef Y_MIN_PIN
+ #define Y_MIN_PIN 35
+#endif
+#ifndef Y_MAX_PIN
+ #define Y_MAX_PIN 34
+#endif
+#ifndef Z_MIN_PIN
+ #define Z_MIN_PIN 33
+#endif
+#ifndef Z_MAX_PIN
+ #define Z_MAX_PIN 32
+#endif
//
// Z Probe (when not Z_MIN_PIN)
diff --git a/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h b/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h
index 9508be0173..ce9e4e5466 100644
--- a/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h
+++ b/Marlin/src/pins/ramps/pins_TRIGORILLA_13.h
@@ -29,6 +29,12 @@
#define IS_RAMPS_EFB
#define RAMPS_D9_PIN 44
+
+#define E1_STEP_PIN -1
+#define E1_DIR_PIN -1
+#define E1_ENABLE_PIN -1
+#define E1_CS_PIN -1
+
#define FAN2_PIN 9
#ifndef E0_AUTO_FAN_PIN
@@ -36,8 +42,3 @@
#endif
#include "pins_RAMPS_13.h"
-
-#undef E1_STEP_PIN
-#undef E1_DIR_PIN
-#undef E1_ENABLE_PIN
-#undef E1_CS_PIN
diff --git a/Marlin/src/pins/sanguino/pins_MELZI.h b/Marlin/src/pins/sanguino/pins_MELZI.h
index 31583fd109..852ad5a34b 100644
--- a/Marlin/src/pins/sanguino/pins_MELZI.h
+++ b/Marlin/src/pins/sanguino/pins_MELZI.h
@@ -32,7 +32,7 @@
#define IS_MELZI 1
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#ifndef BOARD_ST7920_DELAY_1
#define BOARD_ST7920_DELAY_1 0
#endif
diff --git a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h
index 3c6dd901c0..36e26980f4 100644
--- a/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h
+++ b/Marlin/src/pins/sanguino/pins_MELZI_CREALITY.h
@@ -36,7 +36,7 @@
#define BOARD_INFO_NAME "Melzi (Creality)"
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 125
#define BOARD_ST7920_DELAY_2 125
#define BOARD_ST7920_DELAY_3 125
diff --git a/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h b/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h
index 8abed5c30c..81bd78b7a0 100644
--- a/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h
+++ b/Marlin/src/pins/sanguino/pins_MELZI_TRONXY.h
@@ -28,7 +28,7 @@
#define BOARD_INFO_NAME "Melzi (Tronxy)"
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 125
#define BOARD_ST7920_DELAY_3 0
diff --git a/Marlin/src/pins/sanguino/pins_MELZI_V2.h b/Marlin/src/pins/sanguino/pins_MELZI_V2.h
index badf53a641..a3ab5ff61b 100644
--- a/Marlin/src/pins/sanguino/pins_MELZI_V2.h
+++ b/Marlin/src/pins/sanguino/pins_MELZI_V2.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -25,7 +28,7 @@
#define BOARD_INFO_NAME "Melzi V2"
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 0
#define BOARD_ST7920_DELAY_2 400
#define BOARD_ST7920_DELAY_3 0
diff --git a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h
index 8dd6171b92..02f4a6e985 100644
--- a/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h
+++ b/Marlin/src/pins/sanguino/pins_SANGUINOLOLU_11.h
@@ -165,7 +165,7 @@
#define KILL_PIN 10
#define BEEPER_PIN 27
- #elif ENABLED(U8GLIB_ST7920) // SPI GLCD 12864 ST7920 ( like [www.digole.com] ) For Melzi V2.0
+ #elif IS_U8GLIB_ST7920 // SPI GLCD 12864 ST7920 ( like [www.digole.com] ) For Melzi V2.0
#if IS_MELZI
#define LCD_PINS_RS 30 // CS chip select /SS chip slave select
diff --git a/Marlin/src/pins/stm32f0/pins_MALYAN_M200_V2.h b/Marlin/src/pins/stm32f0/pins_MALYAN_M200_V2.h
index abdd088f9b..178c873af7 100644
--- a/Marlin/src/pins/stm32f0/pins_MALYAN_M200_V2.h
+++ b/Marlin/src/pins/stm32f0/pins_MALYAN_M200_V2.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#if NOT_TARGET(STM32F0xx)
diff --git a/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h b/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h
index 2717439f24..299b9ff49c 100644
--- a/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h
+++ b/Marlin/src/pins/stm32f0/pins_MALYAN_M300.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#if NOT_TARGET(__STM32F1__, STM32F1xx, STM32F0xx)
diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h
index 650357ee9e..a6cc5ffa60 100644
--- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h
+++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_V1_1.h
@@ -202,7 +202,7 @@
#endif // !FYSETC_MINI_12864
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 125
#define BOARD_ST7920_DELAY_2 125
#define BOARD_ST7920_DELAY_3 125
diff --git a/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h b/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h
index 77eb6aaf14..f8e3e76ada 100644
--- a/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h
+++ b/Marlin/src/pins/stm32f1/pins_CCROBOT_MEEB_3DP.h
@@ -155,7 +155,7 @@
#endif
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 125
#define BOARD_ST7920_DELAY_2 125
#define BOARD_ST7920_DELAY_3 125
diff --git a/Marlin/src/pins/stm32f1/pins_FLY_MINI.h b/Marlin/src/pins/stm32f1/pins_FLY_MINI.h
index 3f02d7082f..e4c741eae7 100644
--- a/Marlin/src/pins/stm32f1/pins_FLY_MINI.h
+++ b/Marlin/src/pins/stm32f1/pins_FLY_MINI.h
@@ -179,7 +179,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 715
diff --git a/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h b/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h
index b3da8d884e..520764a503 100644
--- a/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h
+++ b/Marlin/src/pins/stm32f1/pins_GTM32_MINI.h
@@ -158,7 +158,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 715
diff --git a/Marlin/src/pins/stm32f1/pins_GTM32_MINI_A30.h b/Marlin/src/pins/stm32f1/pins_GTM32_MINI_A30.h
index 3650ffde5c..cb5200bc27 100644
--- a/Marlin/src/pins/stm32f1/pins_GTM32_MINI_A30.h
+++ b/Marlin/src/pins/stm32f1/pins_GTM32_MINI_A30.h
@@ -166,7 +166,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 715
diff --git a/Marlin/src/pins/stm32f1/pins_GTM32_PRO_VB.h b/Marlin/src/pins/stm32f1/pins_GTM32_PRO_VB.h
index 56dda2b143..88aa35f2c0 100644
--- a/Marlin/src/pins/stm32f1/pins_GTM32_PRO_VB.h
+++ b/Marlin/src/pins/stm32f1/pins_GTM32_PRO_VB.h
@@ -163,7 +163,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 715
diff --git a/Marlin/src/pins/stm32f1/pins_GTM32_REV_B.h b/Marlin/src/pins/stm32f1/pins_GTM32_REV_B.h
index c9a20fd66e..12a6d5b84d 100644
--- a/Marlin/src/pins/stm32f1/pins_GTM32_REV_B.h
+++ b/Marlin/src/pins/stm32f1/pins_GTM32_REV_B.h
@@ -168,7 +168,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 715
diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h
index c9d16b16b0..34fbdaf02f 100644
--- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h
+++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -132,6 +135,7 @@
#define TFT_RESET_PIN PC4 // pin 33
#define TFT_BACKLIGHT_PIN PD12 // pin 59
+ #define TFT_BACKLIGHT_PWM 150 // Brightness with alt. TIM4 chan 1 (1-255)
#define DOGLCD_MOSI -1 // Prevent auto-define by Conditionals_post.h
#define DOGLCD_SCK -1
@@ -140,6 +144,11 @@
#define TFT_BUFFER_SIZE 3200
#endif
+#if defined(TFT_BACKLIGHT_PWM) && !defined(MAPLE_STM32F1)
+ #define HAS_LCD_BRIGHTNESS 1
+ #define DEFAULT_LCD_BRIGHTNESS TFT_BACKLIGHT_PWM
+#endif
+
#if ENABLED(SDIO_SUPPORT)
#define SD_SS_PIN -1 // else SDSS set to PA4 in M43 (spi_pins.h)
#endif
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h
index 489da08393..dd1008ee3a 100644
--- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h
@@ -221,7 +221,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#ifndef BOARD_ST7920_DELAY_1
#define BOARD_ST7920_DELAY_1 125
#endif
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h
index 6388e1723c..3767748e53 100644
--- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_LITE.h
@@ -113,7 +113,7 @@
#endif // !MKS_MINI_12864
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 125
#define BOARD_ST7920_DELAY_2 125
#define BOARD_ST7920_DELAY_3 125
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h
index d19343386e..3df6727d03 100644
--- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO_V2.h
@@ -365,7 +365,7 @@
#endif
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 125
#define BOARD_ST7920_DELAY_2 125
#define BOARD_ST7920_DELAY_3 125
diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h
index fdee796692..69fdd1da89 100644
--- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h
+++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_PRO.h
@@ -300,7 +300,7 @@
#endif
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 125
#define BOARD_ST7920_DELAY_2 125
#define BOARD_ST7920_DELAY_3 125
diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h
index daacd0c124..ca6510c7d9 100644
--- a/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h
+++ b/Marlin/src/pins/stm32f1/pins_ZM3E4_V1_0.h
@@ -332,7 +332,7 @@
#endif
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 125
#define BOARD_ST7920_DELAY_2 250
#define BOARD_ST7920_DELAY_3 125
diff --git a/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h b/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h
index e0b2f6adfc..817ad71752 100644
--- a/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h
+++ b/Marlin/src/pins/stm32f1/pins_ZM3E4_V2_0.h
@@ -305,7 +305,7 @@
#endif
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 200 // Tclk_fall <200ns
#define BOARD_ST7920_DELAY_2 250 // Tdata_width >200ns
#define BOARD_ST7920_DELAY_3 200 // Tclk_rise <200ns
diff --git a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h
index d2ee2e013c..8343010432 100644
--- a/Marlin/src/pins/stm32f4/pins_ANET_ET4.h
+++ b/Marlin/src/pins/stm32f4/pins_ANET_ET4.h
@@ -19,13 +19,10 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#include "env_validate.h"
-#include "env_validate.h"
-
#if HOTENDS > 1 || E_STEPPERS > 1
#error "Anet ET4 only supports one hotend / E-stepper. Comment out this line to continue."
#endif
diff --git a/Marlin/src/pins/stm32f4/pins_ANET_ET4P.h b/Marlin/src/pins/stm32f4/pins_ANET_ET4P.h
index f5ebf82a48..bad5b8f718 100644
--- a/Marlin/src/pins/stm32f4/pins_ANET_ET4P.h
+++ b/Marlin/src/pins/stm32f4/pins_ANET_ET4P.h
@@ -19,7 +19,6 @@
* along with this program. If not, see .
*
*/
-
#pragma once
#define BOARD_INFO_NAME "Anet ET4P 1.x"
diff --git a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h
index 86851a7840..d054e354f7 100644
--- a/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h
+++ b/Marlin/src/pins/stm32f4/pins_BTT_BTT002_V1_0.h
@@ -285,7 +285,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 600
diff --git a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h
index eb0c3bdbb9..bd483ecf0a 100644
--- a/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h
+++ b/Marlin/src/pins/stm32f4/pins_BTT_E3_RRF.h
@@ -277,7 +277,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 600
diff --git a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h
index 68948f7de9..0715380e22 100644
--- a/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h
+++ b/Marlin/src/pins/stm32f4/pins_BTT_GTR_V1_0.h
@@ -483,7 +483,7 @@
#endif
// Alter timing for graphical display
- #if ENABLED(U8GLIB_ST7920)
+ #if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 600
diff --git a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h
index ab0a7dd962..7ab8012d88 100644
--- a/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h
+++ b/Marlin/src/pins/stm32f4/pins_BTT_OCTOPUS_V1_common.h
@@ -37,6 +37,7 @@
//
// Servos
+//
#define SERVO0_PIN PB6
//
@@ -56,12 +57,30 @@
#define E2_DIAG_PIN PG14 // E2DET
#define E3_DIAG_PIN PG15 // E3DET
+//
// Z Probe (when not Z_MIN_PIN)
//
#ifndef Z_MIN_PROBE_PIN
#define Z_MIN_PROBE_PIN PB7
#endif
+//
+// Check for additional used endstop pins
+//
+#if HAS_EXTRA_ENDSTOPS
+ #define _ENDSTOP_IS_ANY(ES) X2_USE_ENDSTOP == ES || Y2_USE_ENDSTOP == ES || Z2_USE_ENDSTOP == ES || Z3_USE_ENDSTOP == ES || Z4_USE_ENDSTOP == ES
+ #if _ENDSTOP_IS_ANY(_XMIN_) || _ENDSTOP_IS_ANY(_XMAX_)
+ #define NEEDS_X_MINMAX 1
+ #endif
+ #if _ENDSTOP_IS_ANY(_YMIN_) || _ENDSTOP_IS_ANY(_YMAX_)
+ #define NEEDS_Y_MINMAX 1
+ #endif
+ #if _ENDSTOP_IS_ANY(_ZMIN_) || _ENDSTOP_IS_ANY(_ZMAX_)
+ #define NEEDS_Z_MINMAX 1
+ #endif
+ #undef _ENDSTOP_IS_ANY
+#endif
+
//
// Limit Switches
//
@@ -72,7 +91,7 @@
#else
#define X_MIN_PIN E0_DIAG_PIN // E0DET
#endif
-#elif EITHER(X_DUAL_ENDSTOPS, DUAL_X_CARRIAGE)
+#elif EITHER(DUAL_X_CARRIAGE, NEEDS_X_MINMAX)
#ifndef X_MIN_PIN
#define X_MIN_PIN X_DIAG_PIN // X-STOP
#endif
@@ -90,7 +109,7 @@
#else
#define Y_MIN_PIN E1_DIAG_PIN // E1DET
#endif
-#elif ENABLED(Y_DUAL_ENDSTOPS)
+#elif NEEDS_Y_MINMAX
#ifndef Y_MIN_PIN
#define Y_MIN_PIN Y_DIAG_PIN // Y-STOP
#endif
@@ -108,7 +127,7 @@
#else
#define Z_MIN_PIN E2_DIAG_PIN // PWRDET
#endif
-#elif ENABLED(Z_MULTI_ENDSTOPS)
+#elif NEEDS_Z_MINMAX
#ifndef Z_MIN_PIN
#define Z_MIN_PIN Z_DIAG_PIN // Z-STOP
#endif
@@ -119,6 +138,10 @@
#define Z_STOP_PIN Z_DIAG_PIN // Z-STOP
#endif
+#undef NEEDS_X_MINMAX
+#undef NEEDS_Y_MINMAX
+#undef NEEDS_Z_MINMAX
+
//
// Filament Runout Sensor
//
@@ -478,7 +501,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 120
#define BOARD_ST7920_DELAY_2 80
#define BOARD_ST7920_DELAY_3 580
diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h
index 72154be2ee..3314d0154d 100644
--- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h
+++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_PRO_common.h
@@ -453,6 +453,39 @@
#define BTN_EN1 EXP2_08_PIN
#define BTN_EN2 EXP2_06_PIN
+ #elif ENABLED(WYH_L12864)
+
+ #error "CAUTION! WYH_L12864 requires wiring modifications. Comment out this line to continue."
+
+ /**
+ * 1. Cut the tab off the LCD connector so it can be plugged into the "EXP1" connector the other way.
+ * 2. Swap the LCD's +5V (Pin2) and GND (Pin1) wires.
+ *
+ * !!! If you are unsure, ask for help! Your motherboard may be damaged in some circumstances !!!
+ *
+ * The WYH_L12864 connector plug:
+ *
+ * BEFORE AFTER
+ * ______ ______
+ * GND | 1 2 | 5V 5V | 1 2 | GND
+ * CS | 3 4 | BTN_EN2 CS | 3 4 | BTN_EN2
+ * SID | 5 6 BTN_EN1 SID | 5 6 BTN_EN1
+ * SCK | 7 8 | BTN_ENC SCK | 7 8 | BTN_ENC
+ * MOSI | 9 10 | MOSI | 9 10 |
+ * ------ ------
+ * LCD LCD
+ */
+ #undef BEEPER_PIN
+ #undef BTN_ENC
+ #define BTN_EN1 EXP1_06_PIN
+ #define BTN_EN2 EXP1_04_PIN
+ #define BTN_ENC EXP1_08_PIN
+ #define DOGLCD_CS EXP1_03_PIN
+ #define DOGLCD_A0 EXP1_05_PIN
+ #define DOGLCD_SCK EXP1_07_PIN
+ #define DOGLCD_MOSI EXP1_09_PIN
+ #define LCD_BACKLIGHT_PIN -1
+
#else
#define LCD_PINS_RS EXP1_07_PIN
@@ -499,7 +532,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#ifndef BOARD_ST7920_DELAY_1
#define BOARD_ST7920_DELAY_1 125
#endif
diff --git a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h
index a05f4fb5b9..95cfb1234d 100644
--- a/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h
+++ b/Marlin/src/pins/stm32f4/pins_BTT_SKR_V2_0_common.h
@@ -483,7 +483,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#ifndef BOARD_ST7920_DELAY_1
#define BOARD_ST7920_DELAY_1 120
#endif
diff --git a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h
index 8a9ac56e9e..794649e416 100644
--- a/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h
+++ b/Marlin/src/pins/stm32f4/pins_FLYF407ZG.h
@@ -305,7 +305,7 @@
#define FIL_RUNOUT_PIN PA3
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 715
diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h b/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h
index 3fe7449330..a604a71c4b 100644
--- a/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h
+++ b/Marlin/src/pins/stm32f4/pins_FYSETC_CHEETAH_V20.h
@@ -245,7 +245,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 600
diff --git a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
index 6b6f644159..e2454b578d 100644
--- a/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
+++ b/Marlin/src/pins/stm32f4/pins_FYSETC_S6.h
@@ -314,7 +314,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 640
diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h
index 3cfa3cd3e5..6ad3849d11 100644
--- a/Marlin/src/pins/stm32f4/pins_LERDGE_K.h
+++ b/Marlin/src/pins/stm32f4/pins_LERDGE_K.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h
index 2d5a45eee0..68e5636955 100644
--- a/Marlin/src/pins/stm32f4/pins_LERDGE_S.h
+++ b/Marlin/src/pins/stm32f4/pins_LERDGE_S.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h
index f65476c0b7..12e47e35cc 100644
--- a/Marlin/src/pins/stm32f4/pins_LERDGE_X.h
+++ b/Marlin/src/pins/stm32f4/pins_LERDGE_X.h
@@ -2,6 +2,9 @@
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
diff --git a/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h b/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h
index b12f4737b7..04dcc432ca 100644
--- a/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h
+++ b/Marlin/src/pins/stm32f4/pins_RUMBA32_BTT.h
@@ -19,14 +19,13 @@
* along with this program. If not, see .
*
*/
+#pragma once
/**
* No offical schematics have been found.
* But these differences where noted in https://github.com/bigtreetech/Rumba32/issues/1
*/
-#pragma once
-
#define BOARD_INFO_NAME "RUMBA32 (BTT)"
#if NO_EEPROM_SELECTED
diff --git a/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h b/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h
index 4c0e3515f6..00f49acbeb 100644
--- a/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h
+++ b/Marlin/src/pins/stm32f4/pins_RUMBA32_common.h
@@ -172,7 +172,7 @@
#endif // HAS_WIRED_LCD
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 640
diff --git a/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h b/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h
index 5f8ffe975b..7ccb57e238 100644
--- a/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h
+++ b/Marlin/src/pins/stm32f4/pins_STEVAL_3DP001V1.h
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+#pragma once
// Source: https://github.com/stm32duino/Arduino_Core_STM32/blob/master/variants/ST3DP001_EVAL/variant.cpp
@@ -38,8 +39,6 @@
* C Runtime Library: "newlib Nano (default)"
*/
-#pragma once
-
#include "env_validate.h"
#ifndef MACHINE_NAME
diff --git a/Marlin/src/pins/stm32f4/pins_VAKE403D.h b/Marlin/src/pins/stm32f4/pins_VAKE403D.h
index f936df2c2c..bb5507b29a 100644
--- a/Marlin/src/pins/stm32f4/pins_VAKE403D.h
+++ b/Marlin/src/pins/stm32f4/pins_VAKE403D.h
@@ -183,7 +183,7 @@
#endif
// Alter timing for graphical display
-#if ENABLED(U8GLIB_ST7920)
+#if IS_U8GLIB_ST7920
#define BOARD_ST7920_DELAY_1 96
#define BOARD_ST7920_DELAY_2 48
#define BOARD_ST7920_DELAY_3 715
diff --git a/Marlin/src/sd/SdFile.h b/Marlin/src/sd/SdFile.h
index 1691898899..1ff05828d2 100644
--- a/Marlin/src/sd/SdFile.h
+++ b/Marlin/src/sd/SdFile.h
@@ -33,7 +33,6 @@
#include "SdBaseFile.h"
#include
-#include
/**
* \class SdFile
diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp
index 993f7cfcb5..2384edb9e2 100644
--- a/Marlin/src/sd/cardreader.cpp
+++ b/Marlin/src/sd/cardreader.cpp
@@ -462,7 +462,7 @@ void CardReader::mount() {
cdroot();
#if ENABLED(USB_FLASH_DRIVE_SUPPORT) || PIN_EXISTS(SD_DETECT)
else if (marlin_state != MF_INITIALIZING)
- ui.set_status_P(GET_TEXT(MSG_SD_INIT_FAIL), -1);
+ ui.set_status(GET_TEXT_F(MSG_SD_INIT_FAIL), -1);
#endif
ui.refresh();
@@ -619,7 +619,7 @@ void announceOpen(const uint8_t doing, const char * const path) {
PORT_REDIRECT(SerialMask::All);
SERIAL_ECHO_START();
SERIAL_ECHOPGM("Now ");
- SERIAL_ECHOPGM_P(doing == 1 ? PSTR("doing") : PSTR("fresh"));
+ SERIAL_ECHOF(doing == 1 ? F("doing") : F("fresh"));
SERIAL_ECHOLNPGM(" file: ", path);
}
}
@@ -651,7 +651,7 @@ void CardReader::openFileRead(const char * const path, const uint8_t subcall_typ
// Too deep? The firmware has to bail.
if (file_subcall_ctr > SD_PROCEDURE_DEPTH - 1) {
SERIAL_ERROR_MSG("Exceeded max SUBROUTINE depth:", SD_PROCEDURE_DEPTH);
- kill(GET_TEXT(MSG_KILL_SUBCALL_OVERFLOW));
+ kill(GET_TEXT_F(MSG_KILL_SUBCALL_OVERFLOW));
return;
}
@@ -1330,7 +1330,7 @@ void CardReader::fileHasFinished() {
removeFile(recovery.filename);
#if ENABLED(DEBUG_POWER_LOSS_RECOVERY)
SERIAL_ECHOPGM("Power-loss file delete");
- SERIAL_ECHOPGM_P(jobRecoverFileExists() ? PSTR(" failed.\n") : PSTR("d.\n"));
+ SERIAL_ECHOF(jobRecoverFileExists() ? F(" failed.\n") : F("d.\n"));
#endif
}
}
diff --git a/Marlin/src/sd/cardreader.h b/Marlin/src/sd/cardreader.h
index 66cb97baeb..97003e1d13 100644
--- a/Marlin/src/sd/cardreader.h
+++ b/Marlin/src/sd/cardreader.h
@@ -27,8 +27,13 @@
extern const char M23_STR[], M24_STR[];
-#if BOTH(SDCARD_SORT_ALPHA, SDSORT_DYNAMIC_RAM)
- #define SD_RESORT 1
+#if ENABLED(SDCARD_SORT_ALPHA)
+ #if ENABLED(SDSORT_DYNAMIC_RAM)
+ #define SD_RESORT 1
+ #endif
+ #if FOLDER_SORTING || ENABLED(SDSORT_GCODE)
+ #define HAS_FOLDER_SORTING 1
+ #endif
#endif
#if ENABLED(SDCARD_RATHERRECENTFIRST) && DISABLED(SDCARD_SORT_ALPHA)
diff --git a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
index 5991a9fb83..05671167c8 100644
--- a/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
+++ b/Marlin/src/sd/usb_flashdrive/Sd2Card_FlashDrive.cpp
@@ -126,7 +126,7 @@ bool DiskIODriver_USBFlash::usbStartup() {
SERIAL_ECHOPGM("Starting USB host...");
if (!UHS_START) {
SERIAL_ECHOLNPGM(" failed.");
- LCD_MESSAGEPGM(MSG_MEDIA_USB_FAILED);
+ LCD_MESSAGE(MSG_MEDIA_USB_FAILED);
return false;
}
@@ -221,7 +221,7 @@ void DiskIODriver_USBFlash::idle() {
#if USB_DEBUG >= 1
SERIAL_ECHOLNPGM("Waiting for media");
#endif
- LCD_MESSAGEPGM(MSG_MEDIA_WAITING);
+ LCD_MESSAGE(MSG_MEDIA_WAITING);
GOTO_STATE_AFTER_DELAY(state, 2000);
}
break;
@@ -236,7 +236,7 @@ void DiskIODriver_USBFlash::idle() {
SERIAL_ECHOLNPGM("USB device removed");
#endif
if (state != MEDIA_READY)
- LCD_MESSAGEPGM(MSG_MEDIA_USB_REMOVED);
+ LCD_MESSAGE(MSG_MEDIA_USB_REMOVED);
GOTO_STATE_AFTER_DELAY(WAIT_FOR_DEVICE, 0);
}
@@ -245,12 +245,12 @@ void DiskIODriver_USBFlash::idle() {
#if USB_DEBUG >= 1
SERIAL_ECHOLNPGM("Media removed");
#endif
- LCD_MESSAGEPGM(MSG_MEDIA_REMOVED);
+ LCD_MESSAGE(MSG_MEDIA_REMOVED);
GOTO_STATE_AFTER_DELAY(WAIT_FOR_DEVICE, 0);
}
else if (task_state == UHS_STATE(ERROR)) {
- LCD_MESSAGEPGM(MSG_MEDIA_READ_ERROR);
+ LCD_MESSAGE(MSG_MEDIA_READ_ERROR);
GOTO_STATE_AFTER_DELAY(MEDIA_ERROR, 0);
}
}
diff --git a/buildroot/bin/mftest b/buildroot/bin/mftest
index 7a55033e9e..4ed1b9d951 100755
--- a/buildroot/bin/mftest
+++ b/buildroot/bin/mftest
@@ -208,7 +208,7 @@ if [[ $TESTENV == '-' ]]; then
NAMES=()
MENU=()
BIGLEN=0
- for FILE in $( ls -1 $TESTPATH/* )
+ for FILE in $( ls -1 $TESTPATH/* | sort -f )
do
let IND++
TNAME=${FILE/$TESTPATH\//}
diff --git a/buildroot/bin/opt_find b/buildroot/bin/opt_find
new file mode 100755
index 0000000000..a7c8fd9d71
--- /dev/null
+++ b/buildroot/bin/opt_find
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+#
+# opt_find
+# Find one or more Marlin options - Configuration lines starting with #define
+#
+
+MYNAME=$(basename $0)
+
+[[ $# == 0 ]] && ONE="-h" || ONE=$1
+
+COMM="(//\\s*)?" ; TYPE=""
+case "$ONE" in
+ -d|--disabled )
+ shift ; COMM="(//\\s*)" ; TYPE="disabled " ;;
+ -e|--enabled )
+ shift ; COMM="" ; TYPE="enabled " ;;
+ -h|--help )
+ echo "$MYNAME [-d|--disabled|-e|--enabled] STRING ... Find matching Marlin configuration options."
+ echo ; shift ;;
+ -* )
+ echo "Unknown option $ONE" ; shift ;;
+esac
+
+while [[ $# > 0 ]]; do
+ DID=0
+ for FN in Configuration Configuration_adv; do
+ FOUND=$( grep -HEn "^\s*${COMM}#define\s+[A-Z0-9_]*${1}" "Marlin/$FN.h" 2>/dev/null )
+ [[ -n "$FOUND" ]] && { echo "$FOUND" ; DID=1 ; }
+ done
+ ((DID)) || { echo "ERROR: ${MYNAME} - No ${TYPE}match for ${1}" ; exit 9; }
+ shift
+ echo
+done
diff --git a/buildroot/bin/pins_set b/buildroot/bin/pins_set
index 158c5224e6..31b4480449 100755
--- a/buildroot/bin/pins_set
+++ b/buildroot/bin/pins_set
@@ -3,9 +3,13 @@
IFS='/' read -r -a PINPATH <<< "$1"
DIR=${PINPATH[0]}
NAM=${PINPATH[1]}
-PIN=$2
-VAL=$3
SED=$(which gsed sed | head -n1)
-eval "${SED} -i '/^[[:blank:]]*\(\/\/\)*[[:blank:]]*\(#define \+${PIN}\b\).*$/{s//\2 ${VAL}/;h};\${x;/./{x;q0};x;q9}' Marlin/src/pins/$DIR/pins_${NAM}.h" ||
-(echo "ERROR: pins_set Can't find ${PIN}" >&2 && exit 9)
+
+shift
+while [[ $# > 1 ]]; do
+ PIN=$1 ; VAL=$2
+ eval "${SED} -i '/^[[:blank:]]*\(\/\/\)*[[:blank:]]*\(#define \+${PIN}\b\).*$/{s//\2 ${VAL}/;h};\${x;/./{x;q0};x;q9}' Marlin/src/pins/$DIR/pins_${NAM}.h" ||
+ (echo "ERROR: pins_set Can't find ${PIN}" >&2 && exit 9)
+ shift 2
+done
diff --git a/buildroot/share/PlatformIO/scripts/preflight-checks.py b/buildroot/share/PlatformIO/scripts/preflight-checks.py
index c553953349..47cb1138ae 100644
--- a/buildroot/share/PlatformIO/scripts/preflight-checks.py
+++ b/buildroot/share/PlatformIO/scripts/preflight-checks.py
@@ -75,14 +75,21 @@ def sanity_check_target():
err = "ERROR: Config files found in directory %s. Please move them into the Marlin subfolder." % p
raise SystemExit(err)
+ #
+ # Give warnings on every build
+ #
+ warnfile = os.path.join(env['PROJECT_BUILD_DIR'], build_env, "src", "src", "inc", "Warnings.cpp.o")
+ if os.path.exists(warnfile):
+ os.remove(warnfile)
+
#
# Check for old files indicating an entangled Marlin (mixing old and new code)
#
mixedin = []
- for p in [ os.path.join(env['PROJECT_DIR'], "Marlin/src/lcd/dogm") ]:
- for f in [ "ultralcd_DOGM.cpp", "ultralcd_DOGM.h" ]:
- if os.path.isfile(os.path.join(p, f)):
- mixedin += [ f ]
+ p = os.path.join(env['PROJECT_DIR'], "Marlin", "src", "lcd", "dogm")
+ for f in [ "ultralcd_DOGM.cpp", "ultralcd_DOGM.h" ]:
+ if os.path.isfile(os.path.join(p, f)):
+ mixedin += [ f ]
if mixedin:
err = "ERROR: Old files fell into your Marlin folder. Remove %s and try again" % ", ".join(mixedin)
raise SystemExit(err)
@@ -90,4 +97,4 @@ def sanity_check_target():
# Detect that 'vscode init' is running
from SCons.Script import COMMAND_LINE_TARGETS
if "idedata" not in COMMAND_LINE_TARGETS:
- sanity_check_target()
+ sanity_check_target()
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h
index 59a7f24527..5657450100 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_BTT002/variant.h
@@ -244,7 +244,7 @@ extern "C" {
#define PIN_WIRE_SCL PB6
// Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
#define TIMER_TONE TIM7
#define TIMER_SERVO TIM5
#define TIMER_SERIAL TIM2
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h
index 42f21ce5a6..646d635679 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_E3_RRF/variant.h
@@ -244,7 +244,7 @@ extern "C" {
#define PIN_WIRE_SCL PB8
// Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
#define TIMER_TONE TIM7
#define TIMER_SERVO TIM5
#define TIMER_SERIAL TIM8
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h
index 732e0c51f1..41e4641102 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_GTR_V1/variant.h
@@ -254,7 +254,7 @@ extern "C" {
#endif
// Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
#define TIMER_TONE TIM10
#define TIMER_SERVO TIM5
#define TIMER_SERIAL TIM7
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h
index f9091a4f91..11ebf561f3 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BIGTREE_SKR_PRO_11/variant.h
@@ -254,7 +254,7 @@ extern "C" {
#endif
// Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
#define TIMER_TONE TIM2
#define TIMER_SERVO TIM5 // Only 1 Servo PIN on SKR-PRO, so use the same timer as defined in PeripheralPins
#define TIMER_SERIAL TIM7
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h
index 5be18f9aa4..74f29514a8 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_BTT_SKR_SE_BX/variant.h
@@ -156,7 +156,7 @@ extern "C" {
#define NUM_ANALOG_FIRST 108
// Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
#define TIMER_TONE TIM2
#define TIMER_SERVO TIM5
#define TIMER_SERIAL TIM7
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h
index 4e7e299f1c..3eed147309 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_F407VE/variant.h
@@ -298,7 +298,7 @@ extern "C" {
#define PIN_WIRE_SCL PB6
// Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
#define TIMER_TONE TIM6
// Do not use basic timer: OC is required
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h
index ae973c89c5..fd9a5c7741 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_FLY_F407ZG/variant.h
@@ -27,7 +27,6 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
*/
-
#pragma once
#ifdef __cplusplus
@@ -185,7 +184,7 @@ extern "C" {
#define PIN_WIRE_SCL PB6
// Timer Definitions
-//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
+// Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
#define TIMER_TONE TIM6
// Do not use basic timer: OC is required
diff --git a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h
index f4488356b7..d82f000655 100644
--- a/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h
+++ b/buildroot/share/PlatformIO/variants/MARLIN_LERDGE/variant.h
@@ -27,7 +27,6 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
*/
-
#pragma once
#ifdef __cplusplus
diff --git a/buildroot/share/fonts/genallfont.sh b/buildroot/share/fonts/genallfont.sh
index d5cad54361..ebb99b273f 100755
--- a/buildroot/share/fonts/genallfont.sh
+++ b/buildroot/share/fonts/genallfont.sh
@@ -62,7 +62,7 @@ OLDWD=`pwd`
#
# By default loop through all languages
#
-LANGS_DEFAULT="an bg ca cz da de el el_gr en es eu fi fr gl hr hu it jp_kana ko_KR nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test"
+LANGS_DEFAULT="an bg ca cz da de el el_CY en es eu fi fr gl hr hu it jp_kana ko_KR nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test"
#
# Generate data for language list MARLIN_LANGS or all if not provided
@@ -105,6 +105,9 @@ if [ 1 = 1 ]; then
* Marlin 3D Printer Firmware
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
@@ -119,6 +122,7 @@ if [ 1 = 1 ]; then
* along with this program. If not, see .
*
*/
+
#include
#if defined(__AVR__) && ENABLED(NOT_EXTENDED_ISO10646_1_5X7)
diff --git a/buildroot/share/scripts/findMissingTranslations.sh b/buildroot/share/scripts/findMissingTranslations.sh
index 0cf77366d2..24a2a910a2 100755
--- a/buildroot/share/scripts/findMissingTranslations.sh
+++ b/buildroot/share/scripts/findMissingTranslations.sh
@@ -13,37 +13,35 @@ LANGHOME="Marlin/src/lcd/language"
[ -d $LANGHOME ] && cd $LANGHOME
-FILES=$(ls language_*.h | grep -v -E "(_en|_test)\.h" | sed -E 's/language_([^\.]+)\.h/\1/')
-declare -A STRING_MAP
+FILES=$(ls language_*.h | grep -v -E "(_en|_test)\.h" | sed -E 's/language_([^\.]+)\.h/\1/' | tr '\n' ' ')
# Get files matching the given arguments
-TEST_LANGS=$FILES
+TEST_LANGS=""
if [[ -n $@ ]]; then
- TEST_LANGS=""
for K in "$@"; do
for F in $FILES; do
- [[ "$F" != "${F%$K*}" ]] && TEST_LANGS="$TEST_LANGS $F"
+ [[ "$F" != "${F%$K*}" ]] && TEST_LANGS+="$F "
done
done
+ [[ -z $TEST_LANGS ]] && { echo "No languages matching $@." ; exit 0 ; }
+else
+ TEST_LANGS=$FILES
fi
-echo -n "Building list of missing strings..."
+echo "Missing strings for $TEST_LANGS..."
-for i in $(awk '/Language_Str/{print $3}' language_en.h); do
- [[ $i == "MSG_CUBED" ]] && continue
+for WORD in $(awk '/LSTR/{print $2}' language_en.h); do
+ [[ $WORD == "MSG_MARLIN" ]] && break
LANG_LIST=""
- for j in $TEST_LANGS; do
- [[ $(grep -c " ${i} " language_${j}.h) -eq 0 ]] && LANG_LIST="$LANG_LIST $j"
+ for LANG in $TEST_LANGS; do
+ if [[ $(grep -c -E "^ *LSTR +$WORD\b" language_${LANG}.h) -eq 0 ]]; then
+ INHERIT=$(awk '/using namespace/{print $3}' language_${LANG}.h | sed -E 's/Language_([a-zA-Z_]+)\s*;/\1/')
+ if [[ -z $INHERIT || $INHERIT == "en" ]]; then
+ LANG_LIST+=" $LANG"
+ elif [[ $(grep -c -E "^ *LSTR +$WORD\b" language_${INHERIT}.h) -eq 0 ]]; then
+ LANG_LIST+=" $LANG"
+ fi
+ fi
done
- [[ -z $LANG_LIST ]] && continue
- STRING_MAP[$i]=$LANG_LIST
-done
-
-echo
-
-for K in $( printf "%s\n" "${!STRING_MAP[@]}" | sort ); do
- case "$#" in
- 1 ) echo $K ;;
- * ) printf "%-35s :%s\n" "$K" "${STRING_MAP[$K]}" ;;
- esac
+ [[ -n $LANG_LIST ]] && printf "%-38s :%s\n" "$WORD" "$LANG_LIST"
done
diff --git a/buildroot/tests/BIGTREE_GTR_V1_0 b/buildroot/tests/BIGTREE_GTR_V1_0
index 58cbe4a142..0a80a6b78c 100755
--- a/buildroot/tests/BIGTREE_GTR_V1_0
+++ b/buildroot/tests/BIGTREE_GTR_V1_0
@@ -12,10 +12,11 @@ opt_set MOTHERBOARD BOARD_BTT_GTR_V1_0 SERIAL_PORT -1 \
# Not necessary to enable auto-fan for all extruders to hit problematic code paths
opt_set E0_AUTO_FAN_PIN PC10 E1_AUTO_FAN_PIN PC11 E2_AUTO_FAN_PIN PC12 NEOPIXEL_PIN PF13 \
X_DRIVER_TYPE TMC2208 Y_DRIVER_TYPE TMC2130 \
- FIL_RUNOUT_PIN 3 FIL_RUNOUT2_PIN 4 FIL_RUNOUT3_PIN 5 FIL_RUNOUT4_PIN 6 FIL_RUNOUT5_PIN 7 FIL_RUNOUT6_PIN 8 FIL_RUNOUT7_PIN 9 FIL_RUNOUT8_PIN 10 \
- FIL_RUNOUT4_STATE HIGH FIL_RUNOUT8_STATE HIGH
+ NUM_RUNOUT_SENSORS 8 FIL_RUNOUT_PIN 3 FIL_RUNOUT2_PIN 4 FIL_RUNOUT3_PIN 5 FIL_RUNOUT4_PIN 6 FIL_RUNOUT5_PIN 7 \
+ FIL_RUNOUT6_PIN 8 FIL_RUNOUT7_PIN 9 FIL_RUNOUT8_PIN 10 FIL_RUNOUT4_STATE HIGH FIL_RUNOUT8_STATE HIGH \
+ FILAMENT_RUNOUT_SCRIPT '"M600 T%c"'
opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER BLTOUCH NEOPIXEL_LED Z_SAFE_HOMING NOZZLE_PARK_FEATURE ADVANCED_PAUSE_FEATURE \
- FILAMENT_RUNOUT_SENSOR FIL_RUNOUT4_PULLUP FIL_RUNOUT8_PULLUP
+ FILAMENT_RUNOUT_SENSOR FIL_RUNOUT4_PULLUP FIL_RUNOUT8_PULLUP FILAMENT_CHANGE_RESUME_ON_INSERT PAUSE_REHEAT_FAST_RESUME
exec_test $1 $2 "BigTreeTech GTR | 8 Extruders | Auto-Fan | Mixed TMC Drivers | Runout Sensors w/ distinct states" "$3"
restore_configs
diff --git a/buildroot/tests/LPC1768 b/buildroot/tests/LPC1768
index 26e3710890..92ba286693 100755
--- a/buildroot/tests/LPC1768
+++ b/buildroot/tests/LPC1768
@@ -28,7 +28,8 @@ restore_configs
opt_set MOTHERBOARD BOARD_MKS_SBASE \
EXTRUDERS 2 TEMP_SENSOR_1 1 \
NUM_SERVOS 2 SERVO_DELAY '{ 300, 300 }'
-opt_enable SWITCHING_NOZZLE SWITCHING_NOZZLE_E1_SERVO_NR ULTIMAKERCONTROLLER REALTIME_REPORTING_COMMANDS FULL_REPORT_TO_HOST_FEATURE
+opt_enable SWITCHING_NOZZLE SWITCHING_NOZZLE_E1_SERVO_NR EDITABLE_SERVO_ANGLES SERVO_DETACH_GCODE \
+ ULTIMAKERCONTROLLER REALTIME_REPORTING_COMMANDS FULL_REPORT_TO_HOST_FEATURE
exec_test $1 $2 "MKS SBASE with SWITCHING_NOZZLE, Grbl Realtime Report" "$3"
restore_configs
diff --git a/buildroot/tests/STM32F103RET6_creality b/buildroot/tests/STM32F103RET6_creality
index 277a68411d..d530f7b851 100755
--- a/buildroot/tests/STM32F103RET6_creality
+++ b/buildroot/tests/STM32F103RET6_creality
@@ -10,21 +10,21 @@ set -e
# Build with configs included in the PR
#
use_example_configs "Creality/Ender-3 V2/CrealityUI"
-opt_enable MARLIN_DEV_MODE BUFFER_MONITORING
+opt_enable MARLIN_DEV_MODE BUFFER_MONITORING BLTOUCH AUTO_BED_LEVELING_BILINEAR Z_SAFE_HOMING
exec_test $1 $2 "Ender 3 v2 with CrealityUI" "$3"
use_example_configs "Creality/Ender-3 V2/CrealityUI"
opt_disable DWIN_CREALITY_LCD
-opt_enable DWIN_CREALITY_LCD_ENHANCED
+opt_enable DWIN_CREALITY_LCD_ENHANCED BLTOUCH AUTO_BED_LEVELING_UBL Z_SAFE_HOMING
exec_test $1 $2 "Ender 3 v2 with Enhanced UI" "$3"
use_example_configs "Creality/Ender-3 V2/CrealityUI"
opt_disable DWIN_CREALITY_LCD
-opt_enable DWIN_CREALITY_LCD_JYERSUI
+opt_enable DWIN_CREALITY_LCD_JYERSUI AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY
exec_test $1 $2 "Ender 3 v2 with JyersUI" "$3"
use_example_configs "Creality/Ender-3 V2/MarlinUI"
-opt_add SDCARD_EEPROM_EMULATION
+opt_add SDCARD_EEPROM_EMULATION AUTO_BED_LEVELING_BILINEAR Z_SAFE_HOMING
exec_test $1 $2 "Ender 3 v2 with MarlinUI" "$3"
restore_configs
diff --git a/buildroot/tests/mega1280 b/buildroot/tests/mega1280
index d8cefbaf81..cae747017f 100755
--- a/buildroot/tests/mega1280
+++ b/buildroot/tests/mega1280
@@ -46,6 +46,7 @@ exec_test $1 $2 "RAMPS | DELTA | RRD LCD | DELTA_AUTO_CALIBRATION | DELTA_CALIBR
#
# Delta Config (generic) + ABL bilinear + BLTOUCH
+#
use_example_configs delta/generic
opt_set LCD_LANGUAGE cz \
Z_MIN_PROBE_ENDSTOP_INVERTING false \
diff --git a/buildroot/tests/mega2560 b/buildroot/tests/mega2560
index 723d133081..bf3290b9d0 100755
--- a/buildroot/tests/mega2560
+++ b/buildroot/tests/mega2560
@@ -182,7 +182,7 @@ opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_C
opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT \
LASER_FEATURE AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN LASER_COOLANT_FLOW_METER MEATPACK_ON_SERIAL_PORT_1
-exec_test $1 $2 "REPRAP MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Flowmeter | 12864 LCD | meatpack | SERIAL_PORT_2 " "$3"
+exec_test $1 $2 "MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Flowmeter | 12864 LCD | meatpack | SERIAL_PORT_2 " "$3"
#
# Test Laser features with 44780 LCD
@@ -197,7 +197,7 @@ opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 0 LCD_LANGUAGE en TEMP_SENSOR_C
opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT \
LASER_FEATURE AIR_EVACUATION AIR_EVACUATION_PIN AIR_ASSIST AIR_ASSIST_PIN LASER_COOLANT_FLOW_METER I2C_AMMETER
-exec_test $1 $2 "REPRAP MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Flowmeter | 44780 LCD " "$3"
+exec_test $1 $2 "MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Flowmeter | 44780 LCD " "$3"
#
# Test redundant temperature sensors + MAX TC
@@ -210,16 +210,22 @@ opt_set MOTHERBOARD BOARD_RAMPS_14_EFB EXTRUDERS 1 \
exec_test $1 $2 "MEGA2560 RAMPS | Redundant temperature sensor | 2x MAX6675" "$3"
+#
+# Polargraph Config
+#
+use_example_configs Polargraph
+exec_test $1 $2 "RUMBA | POLARGRAPH | RRD LCD" "$3"
+
#
# Language files test with REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
#
#restore_configs
#opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT
-#for lang in an bg ca cz da de el el_gr en es eu fi fr gl hr hu it jp_kana nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff" "$3"; done
+#for lang in an bg ca cz da de el el_CY en es eu fi fr gl hr hu it jp_kana nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff" "$3"; done
#
#restore_configs
#opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT
-#for lang in an bg ca cz da de el el_gr en es eu fi fr gl hr hu it jp_kana nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff" "$3"; done
+#for lang in an bg ca cz da de el el_CY en es eu fi fr gl hr hu it jp_kana nl pl pt pt_br ro ru sk sv tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff" "$3"; done
######## Example Configurations ##############
#
diff --git a/buildroot/tests/mks_robin_maple b/buildroot/tests/mks_robin_maple
index fcb5118307..ab4e6d7118 100755
--- a/buildroot/tests/mks_robin_maple
+++ b/buildroot/tests/mks_robin_maple
@@ -16,6 +16,7 @@ exec_test $1 $2 "MKS Robin config (FSMC Color UI)" "$3"
use_example_configs Mks/Robin
opt_disable TFT_CLASSIC_UI TFT_COLOR_UI TOUCH_SCREEN TFT_RES_320x240
opt_enable TFT_LVGL_UI TFT_RES_480x320
+opt_set TFT_ROTATION TFT_ROTATE_180
exec_test $1 $2 "MKS Robin nano v1.2 LVGL FSMC" "$3"
# cleanup
diff --git a/docs/Serial.md b/docs/Serial.md
index ff8f84ef99..be3b23e87d 100644
--- a/docs/Serial.md
+++ b/docs/Serial.md
@@ -62,7 +62,7 @@ The following macros are defined (in `serial.h`) to output data to the serial po
| `SERIAL_ECHOLNPGM` | Same as `SERIAL_ECHOPGM` | Do `SERIAL_ECHOPGM`, adding a newline | `SERIAL_ECHOPGM("Alice", 56);` | `alice56` |
| `SERIAL_ECHOPGM_P` | Like `SERIAL_ECHOPGM` but takes PGM strings | Print a series of PGM strings and values alternately | `SERIAL_ECHOPGM_P(GET_TEXT(MSG_HELLO), 123);` | `Hello123` |
| `SERIAL_ECHOLNPGM_P` | Same as `SERIAL_ECHOPGM_P` | Do `SERIAL_ECHOPGM_P`, adding a newline | `SERIAL_ECHOLNPGM_P(PSTR("Alice"), 78);` | `alice78\n` |
-| `SERIAL_ECHOLIST` | String literal, values | Print a string literal and a list of values | `SERIAL_ECHOLIST("Key ", 1, 2, 3);` | `Key 1, 2, 3` |
+| `SERIAL_ECHOLIST` | String literal, values | Print a string literal and a list of values | `SERIAL_ECHOLIST(F("Key "), 1, 2, 3);` | `Key 1, 2, 3` |
| `SERIAL_ECHO_START` | None | Prefix an echo line | `SERIAL_ECHO_START();` | `echo:` |
| `SERIAL_ECHO_MSG` | Same as `SERIAL_ECHOLN_PAIR` | Print a full echo line | `SERIAL_ECHO_MSG("Count is ", count);` | `echo:Count is 3` |
| `SERIAL_ERROR_START`| None | Prefix an error line | `SERIAL_ERROR_START();` | `Error:` |
diff --git a/ini/esp32.ini b/ini/esp32.ini
index fcfa829608..9c0c44db67 100644
--- a/ini/esp32.ini
+++ b/ini/esp32.ini
@@ -27,3 +27,13 @@ monitor_speed = 250000
platform = espressif32@2.1.0
extends = env:esp32
board_build.partitions = default_16MB.csv
+
+[env:PANDA]
+platform = espressif32@2.1.0
+extends = env:esp32
+build_flags = ${env:esp32.build_flags} -DUSE_ESP32_EXIO -DUSE_ESP32_TASK_WDT
+lib_deps = ${common.lib_deps}
+ SoftwareSerialEsp32
+board_build.partitions = Marlin/src/HAL/ESP32/esp32.csv
+upload_speed = 115200
+monitor_speed = 115200
diff --git a/ini/features.ini b/ini/features.ini
index 8a7a75df86..6e9f6506a1 100644
--- a/ini/features.ini
+++ b/ini/features.ini
@@ -44,10 +44,11 @@ HAS_SPI_TFT = src_filter=+
SOFT_I2C_EEPROM = SlowSoftI2CMaster, SlowSoftWire=https://github.com/felias-fogg/SlowSoftWire/archive/master.zip
SPI_EEPROM = src_filter=+
+HAS_DWIN_E3V2|IS_DWIN_MARLINUI = src_filter=+
DWIN_CREALITY_LCD = src_filter=+
DWIN_CREALITY_LCD_ENHANCED = src_filter=+
DWIN_CREALITY_LCD_JYERSUI = src_filter=+
-DWIN_MARLINUI_.+ = src_filter=+
+IS_DWIN_MARLINUI = src_filter=+
HAS_GRAPHICAL_TFT = src_filter=+
IS_TFTGLCD_PANEL = src_filter=+
HAS_TOUCH_BUTTONS = src_filter=+
@@ -175,6 +176,7 @@ HAS_SMART_EFF_MOD = src_filter=+
COOLANT_CONTROL|AIR_ASSIST = src_filter=+
AIR_EVACUATION = src_filter=+
HAS_SOFTWARE_ENDSTOPS = src_filter=+
+SERVO_DETACH_GCODE = src_filter=+
HAS_DUPLICATION_MODE = src_filter=+
LIN_ADVANCE = src_filter=+
PHOTO_GCODE = src_filter=+
@@ -219,6 +221,7 @@ NEED_LSF = src_filter=+ +
NOZZLE_CLEAN_FEATURE = src_filter=+ +
DELTA = src_filter=+ +
+POLARGRAPH = src_filter=+
BEZIER_CURVE_SUPPORT = src_filter=+ +
PRINTCOUNTER = src_filter=+
HAS_BED_PROBE = src_filter=+ + + +
diff --git a/ini/native.ini b/ini/native.ini
index 2f38e715ed..981e93f996 100644
--- a/ini/native.ini
+++ b/ini/native.ini
@@ -70,13 +70,16 @@ build_flags = ${simulator_linux.build_flags} ${simulator_linux.release_flags}
#
# Simulator for macOS (MacPorts)
#
-# sudo port install gcc10 gdb glm libsdl2 freetype
+# sudo port install gcc10 gdb glm libsdl2 libsdl2_net freetype
# sudo port install ld64 @3_3 +ld64_xcode
-# sudo port uninstall ld64 ld64-latest
+#
# cd /opt/local/bin
# sudo rm -f gcc g++ cc
-# sudo ln gcc-mp-10 gcc ; sudo ln g++-mp-10 g++ ; sudo ln g++ cc
-# cd -
+# sudo ln -s gcc-mp-10 gcc ; sudo ln -s g++-mp-10 g++ ; sudo ln -s g++ cc
+# This step may be obsolete:
+# sudo port uninstall ld64 ld64-latest
+#
+# cd -
#
# Use 'sudo port install mesa' to get a if no Xcode is installed.
# If Xcode is installed be sure to run `xcode-select --install` first.
diff --git a/ini/stm32-common.ini b/ini/stm32-common.ini
index 1d3f858bf8..54bc746ff4 100644
--- a/ini/stm32-common.ini
+++ b/ini/stm32-common.ini
@@ -16,7 +16,6 @@ build_flags = ${common.build_flags}
-std=gnu++14 -DHAL_STM32
-DUSBCON -DUSBD_USE_CDC
-DTIM_IRQ_PRIO=13
- -DADC_RESOLUTION=12
build_unflags = -std=gnu++11
src_filter = ${common.default_src_filter} + +
extra_scripts = ${common.extra_scripts}
diff --git a/ini/stm32f1-maple.ini b/ini/stm32f1-maple.ini
index 00ba93aa63..e11aa03560 100644
--- a/ini/stm32f1-maple.ini
+++ b/ini/stm32f1-maple.ini
@@ -65,8 +65,7 @@ build_flags = ${common_stm32f1.build_flags}
extra_scripts = ${common_stm32f1.extra_scripts}
pre:buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py
-lib_deps = ${common.lib_deps}
- SoftwareSerialM
+lib_deps = ${common_stm32f1.lib_deps}
USBComposite for STM32F1@0.91
custom_marlin.NEOPIXEL_LED = Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use
debug_tool = stlink
@@ -377,7 +376,8 @@ extra_scripts = ${common.extra_scripts}
buildroot/share/PlatformIO/scripts/offset_and_rename.py
build_flags = ${common_stm32f1.build_flags}
-D__STM32F1__=1 -DDEBUG_LEVEL=0 -DSS_TIMER=4 -DSERIAL_USB
-lib_deps = USBComposite for STM32F1@0.91
+lib_deps = ${common_stm32f1.lib_deps}
+ USBComposite for STM32F1@0.91
lib_ignore = Adafruit NeoPixel, SPI, SailfishLCD, SailfishRGB_LED, SlowSoftI2CMaster, TMCStepper
[env:STM32F103RC_ZM3E2_USB_maple]
diff --git a/ini/stm32f4.ini b/ini/stm32f4.ini
index c8f8676b68..7ff0443df6 100644
--- a/ini/stm32f4.ini
+++ b/ini/stm32f4.ini
@@ -422,7 +422,7 @@ board_build.offset = 0xC000
board_upload.offset_address = 0x0800C000
board_build.rename = mks_monster8.bin
build_flags = ${stm32_variant.build_flags} ${stm32f4_I2C1_CAN.build_flags}
- -DHAL_PCD_MODULE_ENABLED
+ -DHAL_PCD_MODULE_ENABLED -DTIMER_SERIAL=TIM4
debug_tool = jlink
upload_protocol = jlink
diff --git a/platformio.ini b/platformio.ini
index 0c017ee1a3..f09c34a7f8 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -391,7 +391,7 @@ lib_deps =
default_src_filter = + - - +
- - - - -
- -
- - - - -
+ - - - - -
-
- - -
- -
@@ -431,7 +431,7 @@ default_src_filter = + - - +
-
- -
-
- - - - - - - -
+ - - - - - -
-
-
-
@@ -502,6 +502,7 @@ default_src_filter = + - - +
-
-
-
+ -
-
-
-
@@ -510,7 +511,6 @@ default_src_filter = + - - +
-
-
-
- -
-
-
-
@@ -584,10 +584,11 @@ default_src_filter = + - - +
- -
-
-