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 = + - - + - - - - + - - - - - - - - - + - + - - - - - #