diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h index 7c8222f014d5..ac32add6b9cc 100644 --- a/Marlin/Configuration.h +++ b/Marlin/Configuration.h @@ -1638,9 +1638,9 @@ * 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, - * jp_kana, ko_KR, nl, pl, pt, pt_br, ru, sk, tr, uk, vi, zh_CN, zh_TW, test + * jp_kana, ko_KR, nl, pl, pt, pt_br, ro ru, sk, tr, uk, vi, zh_CN, zh_TW, test * - * :{ '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)', 'ru':'Russian', 'sk':'Slovak', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' } + * :{ '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', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)', 'test':'TEST' } */ #define LCD_LANGUAGE en @@ -2121,6 +2121,10 @@ // //#define EXTENSIBLE_UI +#if ENABLED(EXTENSIBLE_UI) + //#define EXTUI_LOCAL_BEEPER // Enables use of local Beeper pin with external display +#endif + //============================================================================= //=============================== Graphical TFTs ============================== //============================================================================= @@ -2131,9 +2135,12 @@ //#define FSMC_GRAPHICAL_TFT // -// TFT Little VGL UI +// TFT LVGL UI +// +// Default MKS icons and fonts: https://git.io/JJvzK +// Copy mks_pic and mks_font folders to the root of your SD // -//#define TFT_LITTLE_VGL_UI +//#define TFT_LVGL_UI //============================================================================= //============================ Other Controllers ============================ diff --git a/Marlin/src/HAL/STM32F1/HAL.cpp b/Marlin/src/HAL/STM32F1/HAL.cpp index 658882943845..202d3bd5be4e 100644 --- a/Marlin/src/HAL/STM32F1/HAL.cpp +++ b/Marlin/src/HAL/STM32F1/HAL.cpp @@ -277,9 +277,8 @@ void HAL_clear_reset_source() { } /** * TODO: Check this and change or remove. - * currently returns 1 that's equal to poweron reset. */ -uint8_t HAL_get_reset_source() { return 1; } +uint8_t HAL_get_reset_source() { return RST_POWER_ON; } void _delay_ms(const int delay_ms) { delay(delay_ms); } diff --git a/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_fsmc.cpp b/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_fsmc.cpp index cc26a003d19a..d61723e269eb 100644 --- a/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_fsmc.cpp +++ b/Marlin/src/HAL/STM32F1/dogm/u8g_com_stm32duino_fsmc.cpp @@ -291,7 +291,7 @@ uint32_t LCD_IO_ReadData(uint16_t RegValue, uint8_t ReadSize) { return uint32_t(data); } -#if ENABLED(LCD_USE_DMA_FSMC) +#ifdef LCD_USE_DMA_FSMC void LCD_IO_WriteMultiple(uint16_t color, uint32_t count) { while (count > 0) { diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp index 66d3c78ca464..976edfe7ce70 100644 --- a/Marlin/src/MarlinCore.cpp +++ b/Marlin/src/MarlinCore.cpp @@ -59,7 +59,7 @@ #include "gcode/parser.h" #include "gcode/queue.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lvgl.h" #include "lcd/extui/lib/mks_ui/tft_lvgl_configuration.h" #include "lcd/extui/lib/mks_ui/draw_ui.h" @@ -743,7 +743,7 @@ void idle(TERN_(ADVANCED_PAUSE_FEATURE, bool no_stepper_sleep/*=false*/)) { // Direct Stepping TERN_(DIRECT_STEPPING, page_manager.write_responses()); - #if ENABLED(TFT_LITTLE_VGL_UI) + #if ENABLED(TFT_LVGL_UI) LV_TASK_HANDLER(); #endif } @@ -936,11 +936,11 @@ void setup() { // Check startup - does nothing if bootloader sets MCUSR to 0 const byte mcu = HAL_get_reset_source(); - if (mcu & 1) SERIAL_ECHOLNPGM(STR_POWERUP); - if (mcu & 2) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); - if (mcu & 4) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET); - if (mcu & 8) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); - if (mcu & 32) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); + if (mcu & RST_POWER_ON) SERIAL_ECHOLNPGM(STR_POWERUP); + if (mcu & RST_EXTERNAL) SERIAL_ECHOLNPGM(STR_EXTERNAL_RESET); + if (mcu & RST_BROWN_OUT) SERIAL_ECHOLNPGM(STR_BROWNOUT_RESET); + if (mcu & RST_WATCHDOG) SERIAL_ECHOLNPGM(STR_WATCHDOG_RESET); + if (mcu & RST_SOFTWARE) SERIAL_ECHOLNPGM(STR_SOFTWARE_RESET); HAL_clear_reset_source(); serialprintPGM(GET_TEXT(MSG_MARLIN)); @@ -1136,7 +1136,7 @@ void setup() { #endif #if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) - SETUP_RUN(init_closedloop()); + SETUP_RUN(closedloop.init()); #endif #ifdef STARTUP_COMMANDS @@ -1180,7 +1180,8 @@ void setup() { SETUP_RUN(page_manager.init()); #endif - #if ENABLED(TFT_LITTLE_VGL_UI) + #if ENABLED(TFT_LVGL_UI) + if (!card.isMounted()) SETUP_RUN(card.mount()); // Mount SD to load graphics and fonts SETUP_RUN(tft_lvgl_init()); #endif @@ -1216,7 +1217,7 @@ void loop() { endstops.event_handler(); - TERN_(TFT_LITTLE_VGL_UI, printer_state_polling()); + TERN_(TFT_LVGL_UI, printer_state_polling()); } while (ENABLED(__AVR__)); // Loop forever on slower (AVR) boards } diff --git a/Marlin/src/core/language.h b/Marlin/src/core/language.h index 4bd853d219c9..ce4bfa18dfbc 100644 --- a/Marlin/src/core/language.h +++ b/Marlin/src/core/language.h @@ -65,6 +65,7 @@ // pl Polish // pt Portuguese // pt_br Portuguese (Brazilian) +// ro Romanian // ru Russian // sk Slovak // tr Turkish diff --git a/Marlin/src/feature/closedloop.cpp b/Marlin/src/feature/closedloop.cpp index b777243481ca..5d302683a17b 100644 --- a/Marlin/src/feature/closedloop.cpp +++ b/Marlin/src/feature/closedloop.cpp @@ -29,12 +29,14 @@ #include "closedloop.h" -void init_closedloop() { +ClosedLoop closedloop; + +void ClosedLoop::init() { OUT_WRITE(CLOSED_LOOP_ENABLE_PIN, LOW); SET_INPUT_PULLUP(CLOSED_LOOP_MOVE_COMPLETE_PIN); } -void set_closedloop(const byte val) { +void ClosedLoop::set(const byte val) { OUT_WRITE(CLOSED_LOOP_ENABLE_PIN, val); } diff --git a/Marlin/src/feature/closedloop.h b/Marlin/src/feature/closedloop.h index 7e5594447d0e..75c7109ce620 100644 --- a/Marlin/src/feature/closedloop.h +++ b/Marlin/src/feature/closedloop.h @@ -21,5 +21,12 @@ */ #pragma once -void init_closedloop(); -void set_closedloop(const byte val); +class ClosedLoop { +public: + static void init(); + static void set(const byte val); +}; + +extern ClosedLoop closedloop; + +#define CLOSED_LOOP_WAITING() (READ(CLOSED_LOOP_ENABLE_PIN) && !READ(CLOSED_LOOP_MOVE_COMPLETE_PIN)) diff --git a/Marlin/src/feature/runout.cpp b/Marlin/src/feature/runout.cpp index 452781b7f29b..80bce6d75844 100644 --- a/Marlin/src/feature/runout.cpp +++ b/Marlin/src/feature/runout.cpp @@ -40,6 +40,7 @@ bool FilamentMonitorBase::enabled = true, #endif #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE) + //#define DEBUG_TOOLCHANGE_MIGRATION_FEATURE #include "../module/tool_change.h" #endif @@ -80,8 +81,18 @@ void event_filament_runout() { if (TERN0(ADVANCED_PAUSE_FEATURE, did_pause_print)) return; // Action already in progress. Purge triggered repeated runout. #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE) - if (migration.in_progress) return; // Action already in progress. Purge triggered repeated runout. - if (migration.automode) { extruder_migration(); return; } + if (migration.in_progress) { + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHOLN("Migration Already In Progress"); + #endif + return; // Action already in progress. Purge triggered repeated runout. + } + if (migration.automode) { + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHOLN("Migration Starting"); + #endif + if (extruder_migration()) return; + } #endif TERN_(EXTENSIBLE_UI, ExtUI::onFilamentRunout(ExtUI::getActiveTool())); diff --git a/Marlin/src/feature/touch/xpt2046.cpp b/Marlin/src/feature/touch/xpt2046.cpp index 463034d96b98..9c84e4d95ca9 100644 --- a/Marlin/src/feature/touch/xpt2046.cpp +++ b/Marlin/src/feature/touch/xpt2046.cpp @@ -101,39 +101,41 @@ void XPT2046::init() { #include "../../lcd/ultralcd.h" // For EN_C bit mask uint8_t XPT2046::read_buttons() { - int16_t tsoffsets[4] = { 0 }; - - if (tsoffsets[0] + tsoffsets[1] == 0) { - // Not yet set, so use defines as fallback... - tsoffsets[0] = XPT2046_X_CALIBRATION; - tsoffsets[1] = XPT2046_X_OFFSET; - tsoffsets[2] = XPT2046_Y_CALIBRATION; - tsoffsets[3] = XPT2046_Y_OFFSET; - } + #ifdef HAS_SPI_LCD + int16_t tsoffsets[4] = { 0 }; + + if (tsoffsets[0] + tsoffsets[1] == 0) { + // Not yet set, so use defines as fallback... + tsoffsets[0] = XPT2046_X_CALIBRATION; + tsoffsets[1] = XPT2046_X_OFFSET; + tsoffsets[2] = XPT2046_Y_CALIBRATION; + tsoffsets[3] = XPT2046_Y_OFFSET; + } - // We rely on XPT2046 compatible mode to ADS7843, hence no Z1 and Z2 measurements possible. + // We rely on XPT2046 compatible mode to ADS7843, hence no Z1 and Z2 measurements possible. - if (!isTouched()) return 0; - const uint16_t x = uint16_t(((uint32_t(getInTouch(XPT2046_X))) * tsoffsets[0]) >> 16) + tsoffsets[1], - y = uint16_t(((uint32_t(getInTouch(XPT2046_Y))) * tsoffsets[2]) >> 16) + tsoffsets[3]; - if (!isTouched()) return 0; // Fingers must still be on the TS for a valid read. + if (!isTouched()) return 0; + const uint16_t x = uint16_t(((uint32_t(getInTouch(XPT2046_X))) * tsoffsets[0]) >> 16) + tsoffsets[1], + y = uint16_t(((uint32_t(getInTouch(XPT2046_Y))) * tsoffsets[2]) >> 16) + tsoffsets[3]; + if (!isTouched()) return 0; // Fingers must still be on the TS for a valid read. - // Touch within the button area simulates an encoder button - if (y > BUTTON_AREA_TOP && y < BUTTON_AREA_BOT) - return WITHIN(x, 14, 77) ? EN_D - : WITHIN(x, 90, 153) ? EN_A - : WITHIN(x, 166, 229) ? EN_B - : WITHIN(x, 242, 305) ? EN_C - : 0; + // Touch within the button area simulates an encoder button + if (y > BUTTON_AREA_TOP && y < BUTTON_AREA_BOT) + return WITHIN(x, 14, 77) ? EN_D + : WITHIN(x, 90, 153) ? EN_A + : WITHIN(x, 166, 229) ? EN_B + : WITHIN(x, 242, 305) ? EN_C + : 0; - if (x > TOUCH_SCREEN_WIDTH || !WITHIN(y, SCREEN_START_TOP, SCREEN_START_TOP + SCREEN_HEIGHT)) return 0; + if (x > TOUCH_SCREEN_WIDTH || !WITHIN(y, SCREEN_START_TOP, SCREEN_START_TOP + SCREEN_HEIGHT)) return 0; - // Column and row above BUTTON_AREA_TOP - int8_t col = (x - (SCREEN_START_LEFT)) * (LCD_WIDTH) / (TOUCHABLE_X_WIDTH), - row = (y - (SCREEN_START_TOP)) * (LCD_HEIGHT) / (TOUCHABLE_Y_HEIGHT); + // Column and row above BUTTON_AREA_TOP + int8_t col = (x - (SCREEN_START_LEFT)) * (LCD_WIDTH) / (TOUCHABLE_X_WIDTH), + row = (y - (SCREEN_START_TOP)) * (LCD_HEIGHT) / (TOUCHABLE_Y_HEIGHT); - // Send the touch to the UI (which will simulate the encoder wheel) - MarlinUI::screen_click(row, col, x, y); + // Send the touch to the UI (which will simulate the encoder wheel) + MarlinUI::screen_click(row, col, x, y); + #endif return 0; } diff --git a/Marlin/src/gcode/calibrate/M12.cpp b/Marlin/src/gcode/calibrate/M12.cpp index 26f15bb89213..97d5bbc1ab5b 100644 --- a/Marlin/src/gcode/calibrate/M12.cpp +++ b/Marlin/src/gcode/calibrate/M12.cpp @@ -28,9 +28,12 @@ #include "../../feature/closedloop.h" void GcodeSuite::M12() { + planner.synchronize(); + if (parser.seenval('S')) - set_closedloop(parser.value_int()); // Force a CLC set + closedloop.set(parser.value_int()); // Force a CLC set + } #endif diff --git a/Marlin/src/gcode/calibrate/M665.cpp b/Marlin/src/gcode/calibrate/M665.cpp index 0436736b4a13..8b2e7f99ed49 100644 --- a/Marlin/src/gcode/calibrate/M665.cpp +++ b/Marlin/src/gcode/calibrate/M665.cpp @@ -38,8 +38,11 @@ * R = delta radius * S = segments per second * X = Alpha (Tower 1) angle trim - * Y = Beta (Tower 2) angle trim + * Y = Beta (Tower 2) angle trim * Z = Gamma (Tower 3) angle trim + * A = Alpha (Tower 1) digonal rod trim + * B = Beta (Tower 2) digonal rod trim + * C = Gamma (Tower 3) digonal rod trim */ void GcodeSuite::M665() { if (parser.seen('H')) delta_height = parser.value_linear_units(); @@ -49,6 +52,9 @@ if (parser.seen('X')) delta_tower_angle_trim.a = parser.value_float(); if (parser.seen('Y')) delta_tower_angle_trim.b = parser.value_float(); if (parser.seen('Z')) delta_tower_angle_trim.c = parser.value_float(); + if (parser.seen('A')) delta_diagonal_rod_trim.a = parser.value_float(); + if (parser.seen('B')) delta_diagonal_rod_trim.b = parser.value_float(); + if (parser.seen('C')) delta_diagonal_rod_trim.c = parser.value_float(); recalc_delta_settings(); } diff --git a/Marlin/src/gcode/config/M217.cpp b/Marlin/src/gcode/config/M217.cpp index a1e53e5ecb43..a3a9d7b0aaa5 100644 --- a/Marlin/src/gcode/config/M217.cpp +++ b/Marlin/src/gcode/config/M217.cpp @@ -49,7 +49,7 @@ void M217_report(const bool eeprom=false) { " G", toolchange_settings.fan_time); #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE) - SERIAL_ECHOPAIR(" N", int(migration.automode)); + SERIAL_ECHOPAIR(" A", int(migration.automode)); SERIAL_ECHOPAIR(" L", LINEAR_UNIT(migration.last)); #endif diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index be63d3ec36db..8eaa02b5e54b 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -660,20 +660,22 @@ */ #if ENABLED(X_DUAL_ENDSTOPS) #if X_HOME_DIR > 0 - #if X2_USE_ENDSTOP == _XMIN_ - #define X2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _XMAX_ - #define X2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _YMIN_ - #define X2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _YMAX_ - #define X2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _ZMIN_ - #define X2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _ZMAX_ - #define X2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else - #define X2_MAX_ENDSTOP_INVERTING false + #ifndef X2_MAX_ENDSTOP_INVERTING + #if X2_USE_ENDSTOP == _XMIN_ + #define X2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _XMAX_ + #define X2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _YMIN_ + #define X2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _YMAX_ + #define X2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _ZMIN_ + #define X2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _ZMAX_ + #define X2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define X2_MAX_ENDSTOP_INVERTING false + #endif #endif #ifndef X2_MAX_PIN #if X2_USE_ENDSTOP == _XMIN_ @@ -712,23 +714,27 @@ #define X2_MAX_PIN E7_DIAG_PIN #endif #endif - #define X2_MIN_ENDSTOP_INVERTING false - #else - #if X2_USE_ENDSTOP == _XMIN_ - #define X2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _XMAX_ - #define X2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _YMIN_ - #define X2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _YMAX_ - #define X2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _ZMIN_ - #define X2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif X2_USE_ENDSTOP == _ZMAX_ - #define X2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else + #ifndef X2_MIN_ENDSTOP_INVERTING #define X2_MIN_ENDSTOP_INVERTING false #endif + #else + #ifndef X2_MIN_ENDSTOP_INVERTING + #if X2_USE_ENDSTOP == _XMIN_ + #define X2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _XMAX_ + #define X2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _YMIN_ + #define X2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _YMAX_ + #define X2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _ZMIN_ + #define X2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif X2_USE_ENDSTOP == _ZMAX_ + #define X2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define X2_MIN_ENDSTOP_INVERTING false + #endif + #endif #ifndef X2_MIN_PIN #if X2_USE_ENDSTOP == _XMIN_ #define X2_MIN_PIN X_MIN_PIN @@ -766,7 +772,9 @@ #define X2_MIN_PIN E7_DIAG_PIN #endif #endif - #define X2_MAX_ENDSTOP_INVERTING false + #ifndef X2_MAX_ENDSTOP_INVERTING + #define X2_MAX_ENDSTOP_INVERTING false + #endif #endif #endif @@ -775,20 +783,22 @@ */ #if ENABLED(Y_DUAL_ENDSTOPS) #if Y_HOME_DIR > 0 - #if Y2_USE_ENDSTOP == _XMIN_ - #define Y2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _XMAX_ - #define Y2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _YMIN_ - #define Y2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _YMAX_ - #define Y2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _ZMIN_ - #define Y2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _ZMAX_ - #define Y2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else - #define Y2_MAX_ENDSTOP_INVERTING false + #ifndef Y2_MAX_ENDSTOP_INVERTING + #if Y2_USE_ENDSTOP == _XMIN_ + #define Y2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _XMAX_ + #define Y2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _YMIN_ + #define Y2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _YMAX_ + #define Y2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _ZMIN_ + #define Y2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _ZMAX_ + #define Y2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Y2_MAX_ENDSTOP_INVERTING false + #endif #endif #ifndef Y2_MAX_PIN #if Y2_USE_ENDSTOP == _XMIN_ @@ -827,23 +837,27 @@ #define Y2_MAX_PIN E7_DIAG_PIN #endif #endif - #define Y2_MIN_ENDSTOP_INVERTING false - #else - #if Y2_USE_ENDSTOP == _XMIN_ - #define Y2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _XMAX_ - #define Y2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _YMIN_ - #define Y2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _YMAX_ - #define Y2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _ZMIN_ - #define Y2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Y2_USE_ENDSTOP == _ZMAX_ - #define Y2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else + #ifndef Y2_MIN_ENDSTOP_INVERTING #define Y2_MIN_ENDSTOP_INVERTING false #endif + #else + #ifndef Y2_MIN_ENDSTOP_INVERTING + #if Y2_USE_ENDSTOP == _XMIN_ + #define Y2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _XMAX_ + #define Y2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _YMIN_ + #define Y2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _YMAX_ + #define Y2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _ZMIN_ + #define Y2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Y2_USE_ENDSTOP == _ZMAX_ + #define Y2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Y2_MIN_ENDSTOP_INVERTING false + #endif + #endif #ifndef Y2_MIN_PIN #if Y2_USE_ENDSTOP == _XMIN_ #define Y2_MIN_PIN X_MIN_PIN @@ -881,7 +895,9 @@ #define Y2_MIN_PIN E7_DIAG_PIN #endif #endif - #define Y2_MAX_ENDSTOP_INVERTING false + #ifndef Y2_MAX_ENDSTOP_INVERTING + #define Y2_MAX_ENDSTOP_INVERTING false + #endif #endif #endif @@ -891,20 +907,22 @@ #if ENABLED(Z_MULTI_ENDSTOPS) #if Z_HOME_DIR > 0 - #if Z2_USE_ENDSTOP == _XMIN_ - #define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _XMAX_ - #define Z2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _YMIN_ - #define Z2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _YMAX_ - #define Z2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _ZMIN_ - #define Z2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _ZMAX_ - #define Z2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else - #define Z2_MAX_ENDSTOP_INVERTING false + #ifndef Z2_MAX_ENDSTOP_INVERTING + #if Z2_USE_ENDSTOP == _XMIN_ + #define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _XMAX_ + #define Z2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _YMIN_ + #define Z2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _YMAX_ + #define Z2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _ZMIN_ + #define Z2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _ZMAX_ + #define Z2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Z2_MAX_ENDSTOP_INVERTING false + #endif #endif #ifndef Z2_MAX_PIN #if Z2_USE_ENDSTOP == _XMIN_ @@ -943,23 +961,27 @@ #define Z2_MAX_PIN E7_DIAG_PIN #endif #endif - #define Z2_MIN_ENDSTOP_INVERTING false - #else - #if Z2_USE_ENDSTOP == _XMIN_ - #define Z2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _XMAX_ - #define Z2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _YMIN_ - #define Z2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _YMAX_ - #define Z2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _ZMIN_ - #define Z2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Z2_USE_ENDSTOP == _ZMAX_ - #define Z2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else + #ifndef Z2_MIN_ENDSTOP_INVERTING #define Z2_MIN_ENDSTOP_INVERTING false #endif + #else + #ifndef Z2_MIN_ENDSTOP_INVERTING + #if Z2_USE_ENDSTOP == _XMIN_ + #define Z2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _XMAX_ + #define Z2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _YMIN_ + #define Z2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _YMAX_ + #define Z2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _ZMIN_ + #define Z2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Z2_USE_ENDSTOP == _ZMAX_ + #define Z2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Z2_MIN_ENDSTOP_INVERTING false + #endif + #endif #ifndef Z2_MIN_PIN #if Z2_USE_ENDSTOP == _XMIN_ #define Z2_MIN_PIN X_MIN_PIN @@ -997,25 +1019,29 @@ #define Z2_MIN_PIN E7_DIAG_PIN #endif #endif - #define Z2_MAX_ENDSTOP_INVERTING false + #ifndef Z2_MAX_ENDSTOP_INVERTING + #define Z2_MAX_ENDSTOP_INVERTING false + #endif #endif #if NUM_Z_STEPPER_DRIVERS >= 3 #if Z_HOME_DIR > 0 - #if Z3_USE_ENDSTOP == _XMIN_ - #define Z3_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _XMAX_ - #define Z3_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _YMIN_ - #define Z3_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _YMAX_ - #define Z3_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _ZMIN_ - #define Z3_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _ZMAX_ - #define Z3_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else - #define Z3_MAX_ENDSTOP_INVERTING false + #ifndef Z3_MAX_ENDSTOP_INVERTING + #if Z3_USE_ENDSTOP == _XMIN_ + #define Z3_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _XMAX_ + #define Z3_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _YMIN_ + #define Z3_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _YMAX_ + #define Z3_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _ZMIN_ + #define Z3_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _ZMAX_ + #define Z3_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Z3_MAX_ENDSTOP_INVERTING false + #endif #endif #ifndef Z3_MAX_PIN #if Z3_USE_ENDSTOP == _XMIN_ @@ -1054,23 +1080,27 @@ #define Z3_MAX_PIN E7_DIAG_PIN #endif #endif - #define Z3_MIN_ENDSTOP_INVERTING false - #else - #if Z3_USE_ENDSTOP == _XMIN_ - #define Z3_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _XMAX_ - #define Z3_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _YMIN_ - #define Z3_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _YMAX_ - #define Z3_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _ZMIN_ - #define Z3_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Z3_USE_ENDSTOP == _ZMAX_ - #define Z3_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else + #ifndef Z3_MIN_ENDSTOP_INVERTING #define Z3_MIN_ENDSTOP_INVERTING false #endif + #else + #ifndef Z3_MIN_ENDSTOP_INVERTING + #if Z3_USE_ENDSTOP == _XMIN_ + #define Z3_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _XMAX_ + #define Z3_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _YMIN_ + #define Z3_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _YMAX_ + #define Z3_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _ZMIN_ + #define Z3_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Z3_USE_ENDSTOP == _ZMAX_ + #define Z3_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Z3_MIN_ENDSTOP_INVERTING false + #endif + #endif #ifndef Z3_MIN_PIN #if Z3_USE_ENDSTOP == _XMIN_ #define Z3_MIN_PIN X_MIN_PIN @@ -1108,26 +1138,30 @@ #define Z3_MIN_PIN E7_DIAG_PIN #endif #endif - #define Z3_MAX_ENDSTOP_INVERTING false + #ifndef Z3_MAX_ENDSTOP_INVERTING + #define Z3_MAX_ENDSTOP_INVERTING false + #endif #endif #endif #if NUM_Z_STEPPER_DRIVERS >= 4 #if Z_HOME_DIR > 0 - #if Z4_USE_ENDSTOP == _XMIN_ - #define Z4_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _XMAX_ - #define Z4_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _YMIN_ - #define Z4_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _YMAX_ - #define Z4_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _ZMIN_ - #define Z4_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _ZMAX_ - #define Z4_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else - #define Z4_MAX_ENDSTOP_INVERTING false + #ifndef Z4_MAX_ENDSTOP_INVERTING + #if Z4_USE_ENDSTOP == _XMIN_ + #define Z4_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _XMAX_ + #define Z4_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _YMIN_ + #define Z4_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _YMAX_ + #define Z4_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _ZMIN_ + #define Z4_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _ZMAX_ + #define Z4_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Z4_MAX_ENDSTOP_INVERTING false + #endif #endif #ifndef Z4_MAX_PIN #if Z4_USE_ENDSTOP == _XMIN_ @@ -1166,23 +1200,27 @@ #define Z4_MAX_PIN E7_DIAG_PIN #endif #endif - #define Z4_MIN_ENDSTOP_INVERTING false - #else - #if Z4_USE_ENDSTOP == _XMIN_ - #define Z4_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _XMAX_ - #define Z4_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _YMIN_ - #define Z4_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _YMAX_ - #define Z4_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _ZMIN_ - #define Z4_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING - #elif Z4_USE_ENDSTOP == _ZMAX_ - #define Z4_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING - #else + #ifndef Z4_MIN_ENDSTOP_INVERTING #define Z4_MIN_ENDSTOP_INVERTING false #endif + #else + #ifndef Z4_MIN_ENDSTOP_INVERTING + #if Z4_USE_ENDSTOP == _XMIN_ + #define Z4_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _XMAX_ + #define Z4_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _YMIN_ + #define Z4_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _YMAX_ + #define Z4_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _ZMIN_ + #define Z4_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING + #elif Z4_USE_ENDSTOP == _ZMAX_ + #define Z4_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING + #else + #define Z4_MIN_ENDSTOP_INVERTING false + #endif + #endif #ifndef Z4_MIN_PIN #if Z4_USE_ENDSTOP == _XMIN_ #define Z4_MIN_PIN X_MIN_PIN @@ -1220,7 +1258,9 @@ #define Z4_MIN_PIN E7_DIAG_PIN #endif #endif - #define Z4_MAX_ENDSTOP_INVERTING false + #ifndef Z4_MAX_ENDSTOP_INVERTING + #define Z4_MAX_ENDSTOP_INVERTING false + #endif #endif #endif diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h index 67d68168886f..f3fea10e0aac 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 "2020-06-27" + #define STRING_DISTRIBUTION_DATE "2020-07-01" #endif /** diff --git a/Marlin/src/lcd/dogm/dogm_Statusscreen.h b/Marlin/src/lcd/dogm/dogm_Statusscreen.h index e34e098dfa10..8bf37fcd0220 100644 --- a/Marlin/src/lcd/dogm/dogm_Statusscreen.h +++ b/Marlin/src/lcd/dogm/dogm_Statusscreen.h @@ -1370,7 +1370,7 @@ #define STATUS_LOGO_X 0 #endif #ifndef STATUS_LOGO_Y - #define STATUS_LOGO_Y _MIN(0U, ((20 - (STATUS_LOGO_HEIGHT)) / 2) + #define STATUS_LOGO_Y _MIN(0U, (20 - (STATUS_LOGO_HEIGHT)) / 2) #endif #ifndef STATUS_LOGO_HEIGHT #define STATUS_LOGO_HEIGHT (sizeof(status_logo_bmp) / (STATUS_LOGO_BYTEWIDTH)) diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_ro.h b/Marlin/src/lcd/dogm/fontdata/langdata_ro.h new file mode 100644 index 000000000000..ffda82764fa2 --- /dev/null +++ b/Marlin/src/lcd/dogm/fontdata/langdata_ro.h @@ -0,0 +1,9 @@ +/** + * Generated automatically by buildroot/share/fonts/uxggenpages.sh + * Contents will be REPLACED by future processing! + * Use genallfont.sh to generate font data for updated languages. + */ +#include + +#define FONTDATA_ITEM(page, begin, end, data) { page, begin, end, COUNT(data), data } +static const uxg_fontinfo_t g_fontinfo[] PROGMEM = {}; diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_sk.h b/Marlin/src/lcd/dogm/fontdata/langdata_sk.h index b069b351d78b..6bcafb64ed3e 100644 --- a/Marlin/src/lcd/dogm/fontdata/langdata_sk.h +++ b/Marlin/src/lcd/dogm/fontdata/langdata_sk.h @@ -15,6 +15,10 @@ const u8g_fntpgm_uint8_t fontpage_2_186_186[33] U8G_FONT_SECTION("fontpage_2_186 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xba,0xba,0x00,0x0a,0x00,0x00, 0x00,0x03,0x0a,0x0a,0x06,0x01,0x00,0x20,0x40,0x00,0xc0,0x40,0x40,0x40,0x40,0x40, 0xe0}; +const u8g_fntpgm_uint8_t fontpage_2_190_190[33] U8G_FONT_SECTION("fontpage_2_190_190") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbe,0xbe,0x00,0x0a,0x00,0x00, + 0x00,0x03,0x0a,0x0a,0x06,0x01,0x00,0xa0,0x40,0x00,0xc0,0x40,0x40,0x40,0x40,0x40, + 0xe0}; const u8g_fntpgm_uint8_t fontpage_2_199_200[47] U8G_FONT_SECTION("fontpage_2_199_200") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc7,0xc8,0x00,0x0a,0x00,0x00, 0x00,0x05,0x0a,0x0a,0x06,0x00,0x00,0x50,0x20,0x00,0x88,0x88,0xc8,0xa8,0x98,0x88, @@ -36,6 +40,7 @@ const u8g_fntpgm_uint8_t fontpage_2_253_254[47] U8G_FONT_SECTION("fontpage_2_253 static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(2, 140, 143, fontpage_2_140_143), // 'Č' -- 'ď' FONTDATA_ITEM(2, 186, 186, fontpage_2_186_186), // 'ĺ' -- 'ĺ' + FONTDATA_ITEM(2, 190, 190, fontpage_2_190_190), // 'ľ' -- 'ľ' FONTDATA_ITEM(2, 199, 200, fontpage_2_199_200), // 'Ň' -- 'ň' FONTDATA_ITEM(2, 224, 225, fontpage_2_224_225), // 'Š' -- 'š' FONTDATA_ITEM(2, 229, 229, fontpage_2_229_229), // 'ť' -- 'ť' diff --git a/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h b/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h index 98d005ec6214..e1d36478236f 100644 --- a/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h +++ b/Marlin/src/lcd/dogm/fontdata/langdata_zh_CN.h @@ -5,6 +5,9 @@ */ #include +const u8g_fntpgm_uint8_t fontpage_64_157_157[26] U8G_FONT_SECTION("fontpage_64_157_157") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9d,0x9d,0x00,0x07,0x00,0x00, + 0x00,0x05,0x03,0x03,0x06,0x00,0x04,0xd8,0x48,0x90}; const u8g_fntpgm_uint8_t fontpage_69_191_191[28] U8G_FONT_SECTION("fontpage_69_191_191") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbf,0xbf,0x00,0x05,0x00,0x00, 0x00,0x05,0x05,0x05,0x06,0x00,0x00,0x08,0x18,0x28,0x48,0xf8}; @@ -23,6 +26,10 @@ const u8g_fntpgm_uint8_t fontpage_156_141_141[45] U8G_FONT_SECTION("fontpage_156 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8d,0x8d,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xff,0xe0,0x02,0x00,0x02,0x00,0x04,0x00,0x0d, 0x00,0x14,0x80,0x24,0x40,0x44,0x20,0x84,0x00,0x04,0x00,0x04,0x00}; +const u8g_fntpgm_uint8_t fontpage_156_147_147[45] U8G_FONT_SECTION("fontpage_156_147_147") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x93,0x93,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x3f,0xc0,0x04,0x00,0x04,0x00,0xff, + 0xe0,0x08,0x00,0x1f,0xc0,0x00,0x80,0x0d,0x00,0x02,0x00,0x01,0x00}; const u8g_fntpgm_uint8_t fontpage_156_157_157[45] U8G_FONT_SECTION("fontpage_156_157_157") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9d,0x9d,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x21,0x00,0x29,0x40,0x4a,0x40,0xf7, @@ -35,10 +42,16 @@ const u8g_fntpgm_uint8_t fontpage_156_173_173[45] U8G_FONT_SECTION("fontpage_156 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xad,0xad,0x00,0x0a,0xff,0x00, 0x00,0x09,0x0b,0x16,0x0c,0x01,0xff,0x08,0x00,0x08,0x00,0xff,0x80,0x88,0x80,0x88, 0x80,0x88,0x80,0xff,0x80,0x88,0x80,0x08,0x00,0x08,0x00,0x08,0x00}; -const u8g_fntpgm_uint8_t fontpage_156_187_187[45] U8G_FONT_SECTION("fontpage_156_187_187") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0x00,0x0a,0xff,0x00, - 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0x04,0x00,0xff,0xe0,0x04,0x00,0x04, - 0x00,0x04,0x00,0x7f,0xc0,0x04,0x00,0x04,0x00,0x04,0x00,0xff,0xe0}; +const u8g_fntpgm_uint8_t fontpage_156_186_187[73] U8G_FONT_SECTION("fontpage_156_186_187") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xba,0xbb,0x00,0x0a,0xff,0x00, + 0x00,0x09,0x0b,0x16,0x0c,0x01,0xff,0x48,0x00,0x28,0x00,0x08,0x00,0xff,0x80,0x08, + 0x80,0x0c,0x80,0x12,0x80,0x12,0x80,0x20,0x80,0x44,0x80,0x83,0x00,0x0b,0x0b,0x16, + 0x0c,0x00,0xff,0x08,0x00,0x04,0x00,0xff,0xe0,0x04,0x00,0x04,0x00,0x04,0x00,0x7f, + 0xc0,0x04,0x00,0x04,0x00,0x04,0x00,0xff,0xe0}; +const u8g_fntpgm_uint8_t fontpage_156_201_201[45] U8G_FONT_SECTION("fontpage_156_201_201") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc9,0xc9,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x80,0x24,0x80,0x24,0x80,0x21,0x00,0x11, + 0x00,0x12,0x00,0x0a,0x00,0x04,0x00,0x0a,0x00,0x31,0x80,0xc0,0x60}; const u8g_fntpgm_uint8_t fontpage_156_203_203[45] U8G_FONT_SECTION("fontpage_156_203_203") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcb,0xcb,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0x04,0x00,0x7f,0xc0,0x00,0x80,0x01, @@ -47,10 +60,18 @@ const u8g_fntpgm_uint8_t fontpage_157_134_134[45] U8G_FONT_SECTION("fontpage_157 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x86,0x86,0x00,0x0a,0xff,0x00, 0x00,0x09,0x0b,0x16,0x0c,0x01,0xff,0xff,0x80,0x01,0x00,0x02,0x00,0x0c,0x00,0x08, 0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x28,0x00,0x10,0x00}; +const u8g_fntpgm_uint8_t fontpage_157_140_140[39] U8G_FONT_SECTION("fontpage_157_140_140") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8c,0x8c,0x00,0x08,0x00,0x00, + 0x00,0x0b,0x08,0x10,0x0c,0x00,0x00,0x7f,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xff,0xe0}; const u8g_fntpgm_uint8_t fontpage_157_142_142[45] U8G_FONT_SECTION("fontpage_157_142_142") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8e,0x8e,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7f,0xc0,0x04,0x00,0x04,0x00,0x04,0x00,0xff, 0xe0,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x1c,0x00}; +const u8g_fntpgm_uint8_t fontpage_157_164_164[45] U8G_FONT_SECTION("fontpage_157_164_164") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa4,0xa4,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x00,0x00,0x11,0x00,0x20, + 0x80,0x51,0x40,0x11,0x00,0x0a,0x00,0x04,0x00,0x1b,0x00,0x60,0xe0}; const u8g_fntpgm_uint8_t fontpage_157_174_174[45] U8G_FONT_SECTION("fontpage_157_174_174") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xae,0xae,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x11,0x00,0x1f,0x00,0x00, @@ -59,10 +80,16 @@ const u8g_fntpgm_uint8_t fontpage_157_206_206[45] U8G_FONT_SECTION("fontpage_157 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xce,0xce,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11, 0x00,0x11,0x00,0x2a,0x80,0x2a,0x80,0x44,0x40,0x88,0x40,0x10,0x20}; -const u8g_fntpgm_uint8_t fontpage_157_228_228[45] U8G_FONT_SECTION("fontpage_157_228_228") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe4,0xe4,0x00,0x0a,0xff,0x00, +const u8g_fntpgm_uint8_t fontpage_157_228_229[73] U8G_FONT_SECTION("fontpage_157_228_229") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe4,0xe5,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x04,0x00,0x0a,0x00,0x11,0x00,0x24, - 0x80,0xc2,0x60,0x3f,0x80,0x01,0x00,0x0a,0x00,0x04,0x00,0x02,0x00}; + 0x80,0xc2,0x60,0x3f,0x80,0x01,0x00,0x0a,0x00,0x04,0x00,0x02,0x00,0x0a,0x0b,0x16, + 0x0c,0x01,0xff,0x01,0x00,0x81,0x00,0x91,0x00,0x89,0x00,0x89,0x00,0x81,0x00,0x91, + 0x00,0xa1,0x00,0xc2,0x80,0x84,0x40,0x18,0x40}; +const u8g_fntpgm_uint8_t fontpage_157_246_246[45] U8G_FONT_SECTION("fontpage_157_246_246") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf6,0xf6,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x15,0x00,0x25,0x00,0x2f,0xc0,0x71, + 0x00,0xa1,0x00,0x2f,0xe0,0x21,0x00,0x21,0x00,0x21,0x00,0x21,0x00}; const u8g_fntpgm_uint8_t fontpage_157_253_253[45] U8G_FONT_SECTION("fontpage_157_253_253") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfd,0xfd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x80,0x12,0x80,0x22,0x40,0x24,0x40,0x68, @@ -71,20 +98,40 @@ const u8g_fntpgm_uint8_t fontpage_158_145_145[45] U8G_FONT_SECTION("fontpage_158 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x91,0x91,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x11,0x00,0x21,0x00,0x3f,0xe0,0x61, 0x00,0xa3,0x80,0x23,0x80,0x25,0x40,0x29,0x20,0x31,0x00,0x21,0x00}; +const u8g_fntpgm_uint8_t fontpage_158_160_160[45] U8G_FONT_SECTION("fontpage_158_160_160") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa0,0xa0,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x11,0x00,0x27,0xe0,0x21,0x00,0x6f, + 0xe0,0xa2,0x00,0x27,0xe0,0x20,0x40,0x22,0x80,0x21,0x00,0x20,0x80}; const u8g_fntpgm_uint8_t fontpage_158_205_206[73] U8G_FONT_SECTION("fontpage_158_205_206") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcd,0xce,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x12,0x00,0x11,0x00,0x20,0x00,0x2f,0xe0,0x60, 0x00,0xa4,0x40,0x22,0x40,0x22,0x80,0x20,0x80,0x21,0x00,0x2f,0xe0,0x0b,0x0b,0x16, 0x0c,0x00,0xff,0x10,0xc0,0x1f,0x00,0x29,0x00,0x29,0x00,0x69,0x00,0xaf,0xe0,0x29, 0x00,0x29,0x20,0x2a,0xa0,0x2d,0x60,0x28,0xa0}; +const u8g_fntpgm_uint8_t fontpage_158_211_211[45] U8G_FONT_SECTION("fontpage_158_211_211") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd3,0xd3,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x00,0x22,0x00,0x5f,0xc0,0x42,0x00,0xc7, + 0x00,0x4a,0x80,0x52,0x40,0x62,0x20,0x4f,0x80,0x42,0x00,0x42,0x00}; +const u8g_fntpgm_uint8_t fontpage_158_217_217[45] U8G_FONT_SECTION("fontpage_158_217_217") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd9,0xd9,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x0a,0x00,0x11,0x00,0x20,0x80,0xdf, + 0x60,0x04,0x00,0x7f,0xc0,0x04,0x00,0x15,0x00,0x24,0x80,0x4c,0x40}; const u8g_fntpgm_uint8_t fontpage_158_220_220[45] U8G_FONT_SECTION("fontpage_158_220_220") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdc,0xdc,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x14,0x00,0x14,0x00,0x27,0xe0,0x2a,0x00,0x72, 0x00,0xa3,0xc0,0x22,0x00,0x22,0x00,0x23,0xe0,0x22,0x00,0x22,0x00}; +const u8g_fntpgm_uint8_t fontpage_158_255_255[45] U8G_FONT_SECTION("fontpage_158_255_255") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x1f,0xe0,0x21,0x00,0x2f,0xe0,0x69, + 0x20,0xaf,0xe0,0x29,0x00,0x25,0x00,0x22,0x00,0x25,0x80,0x38,0x60}; const u8g_fntpgm_uint8_t fontpage_159_155_155[45] U8G_FONT_SECTION("fontpage_159_155_155") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9b,0x9b,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x14,0x80,0x14,0x80,0x24,0x80,0x2f,0xe0,0x64, 0x80,0xa4,0x80,0x3f,0xe0,0x20,0x00,0x24,0x80,0x28,0x40,0x30,0x20}; +const u8g_fntpgm_uint8_t fontpage_159_181_181[45] U8G_FONT_SECTION("fontpage_159_181_181") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb5,0xb5,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x2f,0xc0,0x20,0x40,0x4f,0xc0,0x40,0x40,0xdf, + 0xe0,0x50,0x20,0x4f,0xc0,0x44,0x80,0x43,0x00,0x44,0x80,0x58,0x60}; const u8g_fntpgm_uint8_t fontpage_159_221_221[45] U8G_FONT_SECTION("fontpage_159_221_221") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x17,0xc0,0x14,0x40,0x24,0x40,0x27,0xc0,0x61, @@ -97,6 +144,10 @@ const u8g_fntpgm_uint8_t fontpage_160_188_188[45] U8G_FONT_SECTION("fontpage_160 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbc,0xbc,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x1f,0xe0,0x22,0x00,0x27,0xc0,0x64, 0x40,0xa7,0xc0,0x24,0x40,0x27,0x40,0x25,0xc0,0x24,0x40,0x2f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_160_190_190[45] U8G_FONT_SECTION("fontpage_160_190_190") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbe,0xbe,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x13,0xe0,0x19,0x00,0x2b,0xe0,0x2e,0x20,0x6a, + 0xa0,0xaa,0xa0,0x2a,0xa0,0x2e,0xa0,0x2a,0xa0,0x21,0x40,0x26,0x20}; const u8g_fntpgm_uint8_t fontpage_160_207_207[45] U8G_FONT_SECTION("fontpage_160_207_207") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcf,0xcf,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x2f,0xe0,0x28,0x20,0x2f,0xe0,0x68, @@ -109,14 +160,20 @@ const u8g_fntpgm_uint8_t fontpage_161_168_168[45] U8G_FONT_SECTION("fontpage_161 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa8,0xa8,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x61,0x20,0x57,0xc0,0x41,0x40,0x77,0xe0,0xd1, 0x00,0x53,0xc0,0x56,0x40,0x53,0xc0,0x5a,0x40,0x52,0x40,0x43,0xc0}; +const u8g_fntpgm_uint8_t fontpage_161_207_207[45] U8G_FONT_SECTION("fontpage_161_207_207") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcf,0xcf,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x13,0xc0,0x14,0x80,0x2f,0xe0,0x35,0x20,0x67, + 0xe0,0xa2,0x20,0x2d,0x40,0x22,0x80,0x2d,0xc0,0x22,0xa0,0x2d,0x80}; const u8g_fntpgm_uint8_t fontpage_162_197_197[45] U8G_FONT_SECTION("fontpage_162_197_197") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc5,0xc5,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x04,0x00,0xff,0xc0,0x08,0x00,0x11,0x00,0x7f, 0x80,0x12,0x80,0x12,0x00,0x12,0x00,0x22,0x40,0x22,0x40,0xc1,0xc0}; -const u8g_fntpgm_uint8_t fontpage_162_200_200[45] U8G_FONT_SECTION("fontpage_162_200_200") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc8,0xc8,0x00,0x0a,0xff,0x00, +const u8g_fntpgm_uint8_t fontpage_162_200_201[73] U8G_FONT_SECTION("fontpage_162_200_201") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc8,0xc9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x24,0x00,0x3f,0xc0,0x44,0x00,0x84, - 0x00,0xff,0xe0,0x12,0x00,0x12,0x00,0x12,0x20,0x22,0x20,0xc1,0xe0}; + 0x00,0xff,0xe0,0x12,0x00,0x12,0x00,0x12,0x20,0x22,0x20,0xc1,0xe0,0x0b,0x0b,0x16, + 0x0c,0x00,0xff,0x04,0x00,0x44,0x40,0x24,0x80,0x04,0x00,0xff,0xe0,0x12,0x00,0x12, + 0x00,0x12,0x20,0x12,0x20,0x22,0x20,0xc1,0xe0}; const u8g_fntpgm_uint8_t fontpage_162_229_229[45] U8G_FONT_SECTION("fontpage_162_229_229") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe5,0xe5,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x18,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0a, @@ -137,6 +194,10 @@ const u8g_fntpgm_uint8_t fontpage_162_247_247[45] U8G_FONT_SECTION("fontpage_162 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf7,0xf7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x3f,0x80,0x20,0x80,0x3f,0x80,0x20,0x80,0x3f, 0x80,0x20,0x80,0x3f,0x80,0x20,0x80,0xff,0xe0,0x11,0x00,0xe0,0xe0}; +const u8g_fntpgm_uint8_t fontpage_163_151_151[43] U8G_FONT_SECTION("fontpage_163_151_151") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x97,0x97,0x00,0x09,0xff,0x00, + 0x00,0x0b,0x0a,0x14,0x0c,0x00,0xff,0x7f,0xe0,0x40,0x20,0x9f,0x40,0x11,0x00,0x11, + 0x00,0x11,0x00,0x11,0x00,0x21,0x20,0x41,0x20,0x80,0xe0}; const u8g_fntpgm_uint8_t fontpage_163_183_183[45] U8G_FONT_SECTION("fontpage_163_183_183") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb7,0xb7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x82,0x00,0x42,0x00,0x05,0x00,0x28,0x80,0x32, @@ -155,10 +216,12 @@ const u8g_fntpgm_uint8_t fontpage_163_250_251[73] U8G_FONT_SECTION("fontpage_163 0xc0,0x04,0x00,0x84,0x20,0x84,0x20,0x84,0x20,0x84,0x20,0xff,0xe0,0x0b,0x0b,0x16, 0x0c,0x00,0xff,0x04,0x00,0x04,0x00,0x7f,0xc0,0x04,0x00,0x04,0x00,0xff,0xe0,0x04, 0x00,0x44,0x40,0x44,0x40,0x44,0x40,0x7f,0xc0}; -const u8g_fntpgm_uint8_t fontpage_164_134_134[45] U8G_FONT_SECTION("fontpage_164_134_134") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x86,0x86,0x00,0x0a,0xff,0x00, +const u8g_fntpgm_uint8_t fontpage_164_134_135[73] U8G_FONT_SECTION("fontpage_164_134_135") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x86,0x87,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x11,0x00,0x20,0x80,0x20,0x80,0x40, - 0x40,0xbf,0xa0,0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0xc3,0x00}; + 0x40,0xbf,0xa0,0x08,0x80,0x08,0x80,0x10,0x80,0x20,0x80,0xc3,0x00,0x0b,0x0b,0x16, + 0x0c,0x00,0xff,0x20,0x00,0x27,0xe0,0x21,0x20,0x39,0x20,0xe1,0x20,0x21,0x20,0x29, + 0x20,0x32,0x20,0x22,0x20,0x04,0x20,0x08,0xc0}; const u8g_fntpgm_uint8_t fontpage_164_155_155[45] U8G_FONT_SECTION("fontpage_164_155_155") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9b,0x9b,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x20,0x18,0x20,0x24,0xa0,0x42,0xa0,0xbc, @@ -167,6 +230,10 @@ const u8g_fntpgm_uint8_t fontpage_164_157_157[45] U8G_FONT_SECTION("fontpage_164 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9d,0x9d,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x40,0x00,0x27,0xe0,0xf9,0x20,0x11,0x20,0x21, 0x20,0x69,0x20,0xb1,0x20,0x29,0x20,0x22,0x20,0x24,0x20,0x28,0xc0}; +const u8g_fntpgm_uint8_t fontpage_164_171_171[45] U8G_FONT_SECTION("fontpage_164_171_171") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xab,0xab,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7c,0x20,0x44,0x20,0x44,0xa0,0x7c,0xa0,0x10, + 0xa0,0xfe,0xa0,0x12,0xa0,0x22,0xa0,0x22,0x20,0x42,0x20,0x8c,0xe0}; const u8g_fntpgm_uint8_t fontpage_164_176_176[45] U8G_FONT_SECTION("fontpage_164_176_176") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb0,0xb0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xfe,0x20,0x10,0x20,0x20,0xa0,0x44,0xa0,0xfe, @@ -177,6 +244,10 @@ const u8g_fntpgm_uint8_t fontpage_164_182_183[73] U8G_FONT_SECTION("fontpage_164 0xa0,0x10,0xa0,0x7e,0xa0,0x52,0xa0,0x52,0x20,0x56,0x20,0x10,0xe0,0x0b,0x0b,0x16, 0x0c,0x00,0xff,0x7e,0x20,0x42,0x20,0x7e,0xa0,0x48,0xa0,0x48,0xa0,0x7e,0xa0,0x6a, 0xa0,0xaa,0xa0,0xaa,0xa0,0x2e,0x20,0x08,0xe0}; +const u8g_fntpgm_uint8_t fontpage_164_242_242[45] U8G_FONT_SECTION("fontpage_164_242_242") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf2,0xf2,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x20,0xfe,0x20,0x92,0xa0,0x7c,0xa0,0x10, + 0xa0,0x7c,0xa0,0x10,0xa0,0xfe,0xa0,0x44,0x20,0x44,0x20,0x7c,0xe0}; const u8g_fntpgm_uint8_t fontpage_165_155_155[45] U8G_FONT_SECTION("fontpage_165_155_155") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9b,0x9b,0x00,0x0a,0xff,0x00, 0x00,0x09,0x0b,0x16,0x0c,0x01,0xff,0x08,0x00,0x08,0x00,0x08,0x00,0xff,0x80,0x08, @@ -193,6 +264,10 @@ const u8g_fntpgm_uint8_t fontpage_166_150_150[45] U8G_FONT_SECTION("fontpage_166 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x96,0x96,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x12,0x00,0x12,0x00,0x22,0x40,0x22,0x80,0x63, 0x00,0xa2,0x00,0x26,0x00,0x2a,0x00,0x22,0x20,0x22,0x20,0x21,0xe0}; +const u8g_fntpgm_uint8_t fontpage_166_199_199[45] U8G_FONT_SECTION("fontpage_166_199_199") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc7,0xc7,0x00,0x0a,0xff,0x00, + 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x0d,0x00,0x71,0x00,0x11,0x00,0x11,0x00,0x11, + 0x00,0xff,0xc0,0x11,0x00,0x11,0x00,0x21,0x00,0x41,0x00,0x81,0x00}; const u8g_fntpgm_uint8_t fontpage_166_202_202[45] U8G_FONT_SECTION("fontpage_166_202_202") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xca,0xca,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x44,0x40,0x24,0x80,0x15,0x00,0x7f, @@ -209,10 +284,16 @@ const u8g_fntpgm_uint8_t fontpage_166_225_225[45] U8G_FONT_SECTION("fontpage_166 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe1,0xe1,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0x0f,0x80,0x08,0x00,0x08,0x00,0xff, 0xe0,0x08,0x00,0x0a,0x00,0x09,0x00,0x08,0x80,0x08,0x00,0x08,0x00}; -const u8g_fntpgm_uint8_t fontpage_166_240_240[45] U8G_FONT_SECTION("fontpage_166_240_240") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,0x00,0x0a,0xff,0x00, +const u8g_fntpgm_uint8_t fontpage_166_240_241[73] U8G_FONT_SECTION("fontpage_166_240_241") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf0,0xf1,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x10,0x00,0xe7,0xc0,0x84,0x40,0x84,0x40,0xf4, - 0x40,0x84,0x40,0x84,0x40,0x94,0x40,0xe5,0x80,0x84,0x00,0x04,0x00}; + 0x40,0x84,0x40,0x84,0x40,0x94,0x40,0xe5,0x80,0x84,0x00,0x04,0x00,0x0b,0x0b,0x16, + 0x0c,0x00,0xff,0x10,0x00,0x1f,0x80,0x21,0x00,0x7f,0xe0,0x20,0x00,0x2f,0x80,0x28, + 0x80,0x28,0x80,0x2b,0x20,0x48,0x20,0x87,0xe0}; +const u8g_fntpgm_uint8_t fontpage_166_244_244[45] U8G_FONT_SECTION("fontpage_166_244_244") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf4,0xf4,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x00,0x11,0xe0,0x7d,0x20,0x11,0x20,0x11, + 0x20,0xff,0x20,0x11,0x20,0x21,0x20,0x4d,0x60,0x75,0x00,0x01,0x00}; const u8g_fntpgm_uint8_t fontpage_166_248_248[45] U8G_FONT_SECTION("fontpage_166_248_248") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf8,0xf8,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x40,0x00,0x7d,0xe0,0x91,0x20,0x11,0x20,0xff, @@ -221,10 +302,12 @@ const u8g_fntpgm_uint8_t fontpage_167_159_159[45] U8G_FONT_SECTION("fontpage_167 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9f,0x9f,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x3f,0xe0,0x22,0x00,0x2f,0xc0,0x28,0x40,0x2f, 0xc0,0x28,0x40,0x2f,0xc0,0x22,0x00,0x2a,0x80,0x52,0x60,0xa6,0x20}; -const u8g_fntpgm_uint8_t fontpage_167_204_204[43] U8G_FONT_SECTION("fontpage_167_204_204") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0x00,0x09,0xff,0x00, +const u8g_fntpgm_uint8_t fontpage_167_204_205[71] U8G_FONT_SECTION("fontpage_167_204_205") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcc,0xcd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0a,0x14,0x0c,0x00,0xff,0xff,0xe0,0x0a,0x40,0x4a,0x40,0x2a,0x40,0x11, - 0x40,0x11,0x40,0x28,0x80,0x45,0x80,0x82,0x40,0x04,0x20}; + 0x40,0x11,0x40,0x28,0x80,0x45,0x80,0x82,0x40,0x04,0x20,0x0b,0x0b,0x16,0x0c,0x00, + 0xff,0x01,0xc0,0x3e,0x00,0x20,0x00,0x20,0x00,0x3f,0xc0,0x28,0x80,0x25,0x00,0x22, + 0x00,0x45,0x00,0x48,0x80,0xb0,0x60}; const u8g_fntpgm_uint8_t fontpage_167_214_214[45] U8G_FONT_SECTION("fontpage_167_214_214") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd6,0xd6,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xfc,0x00,0x4b,0xe0,0x4a,0x20,0x7a,0x20,0x49, @@ -237,18 +320,40 @@ const u8g_fntpgm_uint8_t fontpage_167_240_240[45] U8G_FONT_SECTION("fontpage_167 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,0x00,0x0a,0xff,0x00, 0x00,0x09,0x0b,0x16,0x0c,0x01,0xff,0x08,0x00,0x10,0x00,0x22,0x00,0x41,0x00,0xff, 0x80,0x00,0x80,0x7f,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x7f,0x00}; +const u8g_fntpgm_uint8_t fontpage_168_131_131[45] U8G_FONT_SECTION("fontpage_168_131_131") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x83,0x83,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x02,0x00,0xf2,0x00,0x97,0xe0,0x98,0x00,0x97, + 0xc0,0x90,0x80,0x91,0x00,0xf2,0x00,0x94,0x20,0x04,0x20,0x03,0xe0}; const u8g_fntpgm_uint8_t fontpage_168_136_136[45] U8G_FONT_SECTION("fontpage_168_136_136") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x0a,0x00,0x11,0x00,0x20,0x80,0xdf, 0x60,0x00,0x00,0x3f,0x80,0x20,0x80,0x20,0x80,0x3f,0x80,0x20,0x80}; -const u8g_fntpgm_uint8_t fontpage_168_142_142[45] U8G_FONT_SECTION("fontpage_168_142_142") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8e,0x8e,0x00,0x0a,0xff,0x00, - 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x01,0xc0,0x3e,0x00,0x20,0x00,0x3f,0xe0,0x20, - 0x00,0x20,0x00,0x2f,0xc0,0x28,0x40,0x48,0x40,0x4f,0xc0,0x88,0x40}; +const u8g_fntpgm_uint8_t fontpage_168_141_142[73] U8G_FONT_SECTION("fontpage_168_141_142") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8d,0x8e,0x00,0x0a,0xff,0x00, + 0x00,0x0a,0x0b,0x16,0x0c,0x00,0xff,0x10,0x00,0x1f,0xc0,0x10,0x80,0x29,0x00,0x46, + 0x00,0x04,0x00,0x1f,0xc0,0xf0,0x40,0x10,0x40,0x10,0x40,0x1f,0xc0,0x0b,0x0b,0x16, + 0x0c,0x00,0xff,0x01,0xc0,0x3e,0x00,0x20,0x00,0x3f,0xe0,0x20,0x00,0x20,0x00,0x2f, + 0xc0,0x28,0x40,0x48,0x40,0x4f,0xc0,0x88,0x40}; +const u8g_fntpgm_uint8_t fontpage_168_145_145[45] U8G_FONT_SECTION("fontpage_168_145_145") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x91,0x91,0x00,0x0a,0xff,0x00, + 0x00,0x0a,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0x10,0x00,0xff,0xc0,0x80,0x40,0x9e, + 0x40,0x92,0x40,0x92,0x40,0x9e,0x40,0x80,0x40,0x80,0x40,0x81,0xc0}; +const u8g_fntpgm_uint8_t fontpage_168_166_166[45] U8G_FONT_SECTION("fontpage_168_166_166") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa6,0xa6,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xff,0xe0,0x04,0x00,0x0d,0x80,0x34,0x40,0xc4, + 0x20,0x04,0x00,0x3f,0xc0,0x20,0x40,0x20,0x40,0x3f,0xc0,0x20,0x40}; const u8g_fntpgm_uint8_t fontpage_168_175_175[45] U8G_FONT_SECTION("fontpage_168_175_175") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaf,0xaf,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x3f,0xc0,0x20,0x40,0x20,0x40,0x3f, 0xc0,0x20,0x00,0x3f,0xc0,0x30,0x40,0x50,0x40,0x5f,0xc0,0x90,0x40}; +const u8g_fntpgm_uint8_t fontpage_168_202_202[45] U8G_FONT_SECTION("fontpage_168_202_202") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xca,0xca,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x24,0x00,0x24,0x00,0x3f,0xc0,0x44,0x00,0x04, + 0x00,0xff,0xe0,0x00,0x00,0x3f,0x80,0x20,0x80,0x20,0x80,0x3f,0x80}; +const u8g_fntpgm_uint8_t fontpage_168_232_232[45] U8G_FONT_SECTION("fontpage_168_232_232") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe8,0xe8,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x3f,0xe0,0x22,0x20,0x2f,0xa0,0x22,0x20,0x3f, + 0xe0,0x20,0x20,0x2f,0xa0,0x28,0xa0,0x4f,0xa0,0x40,0x20,0x80,0x60}; const u8g_fntpgm_uint8_t fontpage_168_253_253[45] U8G_FONT_SECTION("fontpage_168_253_253") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfd,0xfd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x0a,0x00,0x11,0x00,0xee,0xe0,0x00, @@ -257,6 +362,10 @@ const u8g_fntpgm_uint8_t fontpage_169_140_140[45] U8G_FONT_SECTION("fontpage_169 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8c,0x8c,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x0c,0x00,0x70,0x00,0x11,0xe0,0xfd,0x20,0x11, 0x20,0x39,0x20,0x35,0x20,0x55,0x20,0x91,0x20,0x11,0xe0,0x10,0x00}; +const u8g_fntpgm_uint8_t fontpage_169_205_205[45] U8G_FONT_SECTION("fontpage_169_205_205") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcd,0xcd,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x01,0x00,0x02,0x00,0xef,0xe0,0xa8,0x20,0xab, + 0xa0,0xaa,0xa0,0xaa,0xa0,0xeb,0xa0,0x08,0x20,0x08,0x20,0x08,0x60}; const u8g_fntpgm_uint8_t fontpage_171_183_183[45] U8G_FONT_SECTION("fontpage_171_183_183") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb7,0xb7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x01,0x00,0xef,0xe0,0xa5,0x40,0xaf,0xe0,0xa4, @@ -265,6 +374,14 @@ const u8g_fntpgm_uint8_t fontpage_172_180_180[45] U8G_FONT_SECTION("fontpage_172 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb4,0xb4,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x02,0xa0,0xeb,0xc0,0xaa,0xa0,0xbf,0xe0,0xa4, 0x80,0xaf,0xe0,0xf9,0x20,0x0f,0xe0,0x09,0x20,0x0f,0xe0,0x11,0x20}; +const u8g_fntpgm_uint8_t fontpage_172_232_232[45] U8G_FONT_SECTION("fontpage_172_232_232") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe8,0xe8,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7b,0xc0,0x4a,0x40,0x4a,0x40,0x7b,0xc0,0x04, + 0x80,0xff,0xe0,0x11,0x00,0xfb,0xe0,0x4a,0x40,0x4a,0x40,0x7b,0xc0}; +const u8g_fntpgm_uint8_t fontpage_172_244_244[45] U8G_FONT_SECTION("fontpage_172_244_244") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf4,0xf4,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x01,0x00,0xef,0xe0,0xa5,0x40,0xaf,0xe0,0xa4, + 0x40,0xa7,0xc0,0xe4,0x40,0x07,0xc0,0x04,0x40,0x07,0xc0,0x0c,0x60}; const u8g_fntpgm_uint8_t fontpage_173_222_222[45] U8G_FONT_SECTION("fontpage_173_222_222") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xde,0xde,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0xff,0xc0,0x80,0x40,0x80,0x40,0x9e,0x40,0x92, @@ -273,6 +390,10 @@ const u8g_fntpgm_uint8_t fontpage_173_224_224[45] U8G_FONT_SECTION("fontpage_173 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xff,0xe0,0x84,0x20,0x84,0x20,0xbf,0xa0,0x84, 0x20,0x84,0x20,0x8a,0x20,0x91,0x20,0xa0,0xa0,0x80,0x20,0xff,0xe0}; +const u8g_fntpgm_uint8_t fontpage_173_250_250[45] U8G_FONT_SECTION("fontpage_173_250_250") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfa,0xfa,0x00,0x0a,0xff,0x00, + 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0xff,0xc0,0x88,0x40,0x88,0x40,0xff,0x40,0x88, + 0x40,0xbe,0x40,0xa2,0x40,0xa2,0x40,0xbe,0x40,0x80,0x40,0xff,0xc0}; const u8g_fntpgm_uint8_t fontpage_173_254_254[45] U8G_FONT_SECTION("fontpage_173_254_254") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfe,0xfe,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0xff,0xc0,0x90,0x40,0x9f,0x40,0xb2,0x40,0xcc, @@ -281,6 +402,10 @@ const u8g_fntpgm_uint8_t fontpage_174_168_168[45] U8G_FONT_SECTION("fontpage_174 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa8,0xa8,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x08,0x00,0x08,0x00,0xff,0xc0,0x10,0x00,0x22, 0x00,0x62,0x00,0xaf,0x80,0x22,0x00,0x22,0x00,0x22,0x00,0x3f,0xc0}; +const u8g_fntpgm_uint8_t fontpage_174_207_207[45] U8G_FONT_SECTION("fontpage_174_207_207") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcf,0xcf,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x00,0x2f,0xe0,0x20,0x80,0xf8,0x80,0x21, + 0x00,0x21,0x80,0x23,0x40,0x35,0x20,0xc9,0x20,0x01,0x00,0x01,0x00}; const u8g_fntpgm_uint8_t fontpage_174_215_215[45] U8G_FONT_SECTION("fontpage_174_215_215") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd7,0xd7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x21,0x00,0x27,0xc0,0xf9,0x40,0x21, @@ -331,6 +456,14 @@ const u8g_fntpgm_uint8_t fontpage_178_177_177[45] U8G_FONT_SECTION("fontpage_178 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb1,0xb1,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x24,0x00,0x24,0x00,0x3f,0xc0,0x44,0x00,0x04, 0x00,0xff,0xe0,0x04,0x00,0x0a,0x00,0x11,0x00,0x20,0x80,0xc0,0x60}; +const u8g_fntpgm_uint8_t fontpage_178_180_180[45] U8G_FONT_SECTION("fontpage_178_180_180") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb4,0xb4,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x12,0x00,0x0a,0x00,0x22,0x00,0x12,0x00,0x02, + 0x00,0xff,0xe0,0x02,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x60,0x20}; +const u8g_fntpgm_uint8_t fontpage_178_253_253[45] U8G_FONT_SECTION("fontpage_178_253_253") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfd,0xfd,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x00,0x23,0xe0,0xf8,0x40,0x28,0x80,0x28, + 0x80,0x4f,0xe0,0x50,0x80,0x30,0x80,0x28,0x80,0x48,0x80,0x83,0x80}; const u8g_fntpgm_uint8_t fontpage_179_203_203[45] U8G_FONT_SECTION("fontpage_179_203_203") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcb,0xcb,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x21,0x00,0xfa,0x40,0x2a,0x20,0x2f, @@ -359,6 +492,10 @@ const u8g_fntpgm_uint8_t fontpage_183_162_162[45] U8G_FONT_SECTION("fontpage_183 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa2,0xa2,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x08,0x00,0xff,0xc0,0x90,0x40,0x3f,0x00,0x52, 0x00,0x8c,0x00,0x33,0x00,0xff,0xc0,0x21,0x00,0x21,0x00,0x3f,0x00}; +const u8g_fntpgm_uint8_t fontpage_183_171_171[45] U8G_FONT_SECTION("fontpage_183_171_171") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xab,0xab,0x00,0x0a,0xff,0x00, + 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x08,0x00,0xff,0xc0,0x80,0x40,0x3f,0x00,0x21, + 0x00,0x3f,0x00,0x00,0x00,0x7f,0x80,0x40,0x80,0x7f,0x80,0x40,0x80}; const u8g_fntpgm_uint8_t fontpage_183_185_185[45] U8G_FONT_SECTION("fontpage_183_185_185") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb9,0xb9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x91,0x20,0x24,0x80,0x4a, @@ -367,6 +504,10 @@ const u8g_fntpgm_uint8_t fontpage_183_249_249[45] U8G_FONT_SECTION("fontpage_183 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf9,0xf9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x00,0x80,0xf0,0x80,0x1f,0xe0,0x90,0x80,0x50, 0x80,0x24,0x80,0x22,0x80,0x50,0x80,0x50,0x80,0x82,0x80,0x01,0x00}; +const u8g_fntpgm_uint8_t fontpage_184_134_134[45] U8G_FONT_SECTION("fontpage_184_134_134") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x86,0x86,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x00,0x27,0xc0,0xa4,0x80,0x6b,0x00,0x22, + 0x80,0x24,0x80,0x6f,0xe0,0xa4,0x80,0x22,0x80,0x20,0x80,0x21,0x80}; const u8g_fntpgm_uint8_t fontpage_184_143_143[45] U8G_FONT_SECTION("fontpage_184_143_143") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8f,0x8f,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x04,0x00,0x04,0x00,0x24,0x80,0x24, @@ -383,6 +524,10 @@ const u8g_fntpgm_uint8_t fontpage_187_229_229[41] U8G_FONT_SECTION("fontpage_187 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe5,0xe5,0x00,0x09,0x00,0x00, 0x00,0x0b,0x09,0x12,0x0c,0x00,0x00,0x7f,0xc0,0x04,0x00,0x04,0x00,0x04,0x00,0x04, 0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xff,0xe0}; +const u8g_fntpgm_uint8_t fontpage_187_238_238[45] U8G_FONT_SECTION("fontpage_187_238_238") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x80,0x09,0x00,0xff,0xe0,0x04,0x00,0x7f, + 0xc0,0x08,0x00,0xff,0xe0,0x10,0x00,0x2f,0x80,0x42,0x00,0xbf,0xe0}; const u8g_fntpgm_uint8_t fontpage_187_242_242[43] U8G_FONT_SECTION("fontpage_187_242_242") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf2,0xf2,0x00,0x09,0xff,0x00, 0x00,0x0a,0x0a,0x14,0x0c,0x01,0xff,0xff,0x00,0x01,0x00,0x01,0x00,0x81,0x00,0xff, @@ -415,6 +560,22 @@ const u8g_fntpgm_uint8_t fontpage_190_128_128[45] U8G_FONT_SECTION("fontpage_190 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7f,0xc0,0x11,0x00,0x11,0x00,0x11,0x00,0x11, 0x00,0xff,0xe0,0x11,0x00,0x21,0x00,0x21,0x00,0x41,0x00,0x81,0x00}; +const u8g_fntpgm_uint8_t fontpage_190_131_131[45] U8G_FONT_SECTION("fontpage_190_131_131") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x83,0x83,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x08,0x00,0x10,0x80,0x3f, + 0xc0,0x11,0x00,0xff,0xe0,0x11,0x00,0x11,0x00,0x21,0x00,0x41,0x00}; +const u8g_fntpgm_uint8_t fontpage_190_143_143[45] U8G_FONT_SECTION("fontpage_190_143_143") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8f,0x8f,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x02,0x80,0x02,0x40,0x02,0x00,0xff,0xe0,0x02, + 0x00,0x7a,0x00,0x12,0x00,0x11,0x00,0x11,0x20,0x18,0xa0,0xe0,0x60}; +const u8g_fntpgm_uint8_t fontpage_190_149_149[45] U8G_FONT_SECTION("fontpage_190_149_149") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x95,0x95,0x00,0x0a,0xff,0x00, + 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0xfc,0x40,0x04,0x40,0x04,0x40,0x7c,0x40,0x40, + 0x40,0xfc,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x28,0x40,0x10,0x40}; +const u8g_fntpgm_uint8_t fontpage_190_185_185[45] U8G_FONT_SECTION("fontpage_190_185_185") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb9,0xb9,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xe4,0x40,0x22,0x80,0x2f,0xe0,0xe9,0x20,0x8f, + 0xe0,0x89,0x20,0xef,0xe0,0x21,0x00,0x2f,0xe0,0xa1,0x00,0x41,0x00}; const u8g_fntpgm_uint8_t fontpage_190_210_210[45] U8G_FONT_SECTION("fontpage_190_210_210") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd2,0xd2,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x10,0x00,0x17,0xc0,0x90,0x40,0x90,0x40,0x90, @@ -425,6 +586,10 @@ const u8g_fntpgm_uint8_t fontpage_191_132_133[73] U8G_FONT_SECTION("fontpage_191 0x40,0x68,0x20,0xa7,0xc0,0x21,0x00,0x21,0x00,0x21,0x00,0x2f,0xe0,0x0b,0x0b,0x16, 0x0c,0x00,0xff,0x11,0x00,0x21,0x00,0x47,0xc0,0x91,0x00,0x1f,0xe0,0x20,0x80,0x6f, 0xe0,0xa4,0x80,0x22,0x80,0x20,0x80,0x21,0x80}; +const u8g_fntpgm_uint8_t fontpage_191_170_170[45] U8G_FONT_SECTION("fontpage_191_170_170") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaa,0xaa,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x1f,0xe0,0x28,0x80,0x4f,0xe0,0x98,0x80,0x2b, + 0xe0,0x6a,0x20,0xab,0xe0,0x2a,0x20,0x2b,0xe0,0x2a,0x20,0x33,0xe0}; const u8g_fntpgm_uint8_t fontpage_191_174_174[45] U8G_FONT_SECTION("fontpage_191_174_174") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xae,0xae,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x2a,0x80,0x6a,0x80,0xbe,0x80,0x01,0xe0,0x5d, @@ -433,6 +598,10 @@ const u8g_fntpgm_uint8_t fontpage_191_195_195[45] U8G_FONT_SECTION("fontpage_191 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc3,0xc3,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x02,0x00,0x12,0x00,0x12,0x00,0x10, 0x40,0x50,0x20,0x50,0x20,0x50,0xa0,0x90,0x80,0x10,0x80,0x0f,0x80}; +const u8g_fntpgm_uint8_t fontpage_191_253_253[45] U8G_FONT_SECTION("fontpage_191_253_253") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfd,0xfd,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x00,0x3f,0xc0,0x2a,0x40,0x4a,0x40,0x14, + 0x40,0x28,0x40,0x05,0x80,0x12,0x40,0x50,0xa0,0x50,0xa0,0x8f,0x80}; const u8g_fntpgm_uint8_t fontpage_192_167_167[45] U8G_FONT_SECTION("fontpage_192_167_167") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa7,0xa7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x25,0x00,0xb5,0x00,0xaf,0xe0,0xa9, @@ -449,10 +618,16 @@ const u8g_fntpgm_uint8_t fontpage_192_239_239[45] U8G_FONT_SECTION("fontpage_192 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xef,0xef,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0x3f,0x80,0x20,0x80,0x3f,0x80,0x20, 0x80,0x3f,0x80,0x20,0x80,0x3f,0x80,0x54,0x40,0x52,0xa0,0x8f,0x80}; -const u8g_fntpgm_uint8_t fontpage_196_144_144[45] U8G_FONT_SECTION("fontpage_196_144_144") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x90,0x90,0x00,0x0a,0xff,0x00, - 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x02,0x80,0x02,0x40,0x7f,0xe0,0x42,0x00,0x42, - 0x00,0x7a,0x40,0x4a,0x40,0x4a,0x80,0x49,0x20,0x52,0xa0,0x84,0x60}; +const u8g_fntpgm_uint8_t fontpage_194_159_159[45] U8G_FONT_SECTION("fontpage_194_159_159") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9f,0x9f,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x01,0x40,0x7f,0xe0,0x41,0x00,0x7f,0x40,0x5d, + 0x40,0x52,0x80,0x9d,0xa0,0x82,0x60,0x24,0x40,0xa2,0xa0,0x9f,0x80}; +const u8g_fntpgm_uint8_t fontpage_196_143_144[73] U8G_FONT_SECTION("fontpage_196_143_144") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8f,0x90,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x02,0x80,0x7a,0x40,0x0a,0x00,0x4f,0xe0,0x2a, + 0x00,0x12,0x40,0x12,0x80,0x29,0x00,0x41,0x20,0x86,0xa0,0x00,0x60,0x0b,0x0b,0x16, + 0x0c,0x00,0xff,0x02,0x80,0x02,0x40,0x7f,0xe0,0x42,0x00,0x42,0x00,0x7a,0x40,0x4a, + 0x40,0x4a,0x80,0x49,0x20,0x52,0xa0,0x84,0x60}; const u8g_fntpgm_uint8_t fontpage_196_183_183[45] U8G_FONT_SECTION("fontpage_196_183_183") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb7,0xb7,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x02,0x00,0x3f,0xc0,0x20,0x40,0x20, @@ -485,6 +660,14 @@ const u8g_fntpgm_uint8_t fontpage_197_150_150[45] U8G_FONT_SECTION("fontpage_197 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x96,0x96,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x40,0x22,0x40,0xf9,0x40,0x20,0x40,0x2a, 0x40,0x31,0x40,0x60,0xe0,0xaf,0x40,0x20,0x40,0x20,0x40,0xe0,0x40}; +const u8g_fntpgm_uint8_t fontpage_197_165_165[45] U8G_FONT_SECTION("fontpage_197_165_165") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa5,0xa5,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x27,0xc0,0x24,0x40,0xfc,0x40,0x25,0x80,0x2c, + 0x00,0x37,0xe0,0x65,0x40,0xa5,0x40,0x24,0x80,0x25,0x40,0xe6,0x20}; +const u8g_fntpgm_uint8_t fontpage_197_172_172[45] U8G_FONT_SECTION("fontpage_197_172_172") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xac,0xac,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x21,0x00,0xfa,0x40,0x27,0xa0,0x28, + 0x20,0x30,0x00,0x67,0xe0,0xa4,0x20,0x24,0x20,0x27,0xe0,0xe4,0x20}; const u8g_fntpgm_uint8_t fontpage_197_189_189[45] U8G_FONT_SECTION("fontpage_197_189_189") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbd,0xbd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x80,0x20,0x80,0xf8,0x80,0x27,0xe0,0x2c, @@ -509,6 +692,10 @@ const u8g_fntpgm_uint8_t fontpage_198_164_164[45] U8G_FONT_SECTION("fontpage_198 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa4,0xa4,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x27,0xe0,0xfa,0x40,0x21,0x80,0x2e, 0x60,0x30,0x00,0x62,0x40,0xa2,0x40,0x22,0x40,0x24,0x40,0xe8,0x40}; +const u8g_fntpgm_uint8_t fontpage_198_223_223[45] U8G_FONT_SECTION("fontpage_198_223_223") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdf,0xdf,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x23,0xc0,0x22,0x40,0xfb,0xc0,0x20,0x00,0x2f, + 0xe0,0x34,0x20,0x65,0x20,0xa5,0x20,0x25,0x20,0x22,0x80,0xec,0x60}; const u8g_fntpgm_uint8_t fontpage_198_226_226[45] U8G_FONT_SECTION("fontpage_198_226_226") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe2,0xe2,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x00,0x23,0xc0,0xfc,0x80,0x27,0xc0,0x2d, @@ -521,10 +708,18 @@ const u8g_fntpgm_uint8_t fontpage_199_162_162[45] U8G_FONT_SECTION("fontpage_199 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa2,0xa2,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x2f,0xe0,0x28,0x20,0xf2,0x80,0x24,0x40,0x29, 0x20,0x31,0x00,0x6f,0xe0,0xa1,0x00,0x25,0x80,0x29,0x40,0xf1,0x20}; +const u8g_fntpgm_uint8_t fontpage_199_165_165[45] U8G_FONT_SECTION("fontpage_199_165_165") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa5,0xa5,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x2f,0xe0,0xf4,0x40,0x22,0x80,0x2f, + 0xe0,0x31,0x00,0x6f,0xe0,0xa2,0x40,0x26,0x80,0x21,0x40,0xee,0x20}; const u8g_fntpgm_uint8_t fontpage_199_167_167[45] U8G_FONT_SECTION("fontpage_199_167_167") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa7,0xa7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x2f,0xe0,0xf8,0x20,0x22,0x80,0x24, 0x40,0x38,0x20,0x67,0xc0,0xa1,0x00,0x21,0x00,0x21,0x00,0xef,0xe0}; +const u8g_fntpgm_uint8_t fontpage_199_208_208[45] U8G_FONT_SECTION("fontpage_199_208_208") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd0,0xd0,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x27,0xc0,0x24,0x40,0xff,0xc0,0x24,0x40,0x27, + 0xc0,0x30,0x00,0x6f,0xe0,0xa5,0x00,0x25,0xe0,0x2b,0x00,0xf1,0xe0}; const u8g_fntpgm_uint8_t fontpage_199_210_210[45] U8G_FONT_SECTION("fontpage_199_210_210") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd2,0xd2,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0xc0,0x27,0x00,0xf1,0x00,0x2f,0xe0,0x21, @@ -541,10 +736,18 @@ const u8g_fntpgm_uint8_t fontpage_202_240_240[45] U8G_FONT_SECTION("fontpage_202 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf0,0xf0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x95,0x00,0x59,0x00,0xfd,0xe0,0x33,0x40,0x59, 0x40,0x95,0x40,0xfd,0x40,0x29,0x40,0x68,0x80,0x11,0x40,0xee,0x20}; +const u8g_fntpgm_uint8_t fontpage_202_242_242[45] U8G_FONT_SECTION("fontpage_202_242_242") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf2,0xf2,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x80,0xfe,0xe0,0x00,0x80,0x78,0x80,0x4b, + 0xe0,0x79,0x40,0x01,0x40,0xff,0x40,0xaa,0x80,0xbb,0x40,0x86,0x20}; const u8g_fntpgm_uint8_t fontpage_202_244_244[45] U8G_FONT_SECTION("fontpage_202_244_244") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf4,0xf4,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0xff,0xe0,0x55,0x40,0x7c,0x80,0x39, 0x40,0x56,0x20,0x7f,0xc0,0x04,0x00,0x27,0x80,0x24,0x00,0xff,0xe0}; +const u8g_fntpgm_uint8_t fontpage_203_135_135[45] U8G_FONT_SECTION("fontpage_203_135_135") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x87,0x87,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0x04,0x00,0xff,0xe0,0x11,0x00,0x11, + 0x00,0x11,0x00,0x0a,0x00,0x0a,0x00,0x04,0x00,0x1b,0x00,0xe0,0xe0}; const u8g_fntpgm_uint8_t fontpage_203_153_153[45] U8G_FONT_SECTION("fontpage_203_153_153") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x80,0xac,0x80,0x72,0x80,0x20,0x80,0xfc, @@ -553,10 +756,18 @@ const u8g_fntpgm_uint8_t fontpage_203_156_156[45] U8G_FONT_SECTION("fontpage_203 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9c,0x9c,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x40,0x29,0x40,0x44,0xc0,0xb8,0x40,0x12, 0x40,0x7d,0x40,0x10,0x60,0x55,0xc0,0x52,0x40,0x92,0x40,0x30,0x40}; +const u8g_fntpgm_uint8_t fontpage_203_173_173[45] U8G_FONT_SECTION("fontpage_203_173_173") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xad,0xad,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x60,0xd5,0x80,0xb9,0x00,0x91,0x00,0xfd, + 0xe0,0xb1,0x40,0xd9,0x40,0xd5,0x40,0x91,0x40,0xfa,0x40,0x04,0x40}; const u8g_fntpgm_uint8_t fontpage_203_176_176[45] U8G_FONT_SECTION("fontpage_203_176_176") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb0,0xb0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x60,0xfd,0x80,0x45,0x00,0x29,0x00,0xfd, 0xe0,0x11,0x40,0xfd,0x40,0x11,0x40,0x55,0x40,0x92,0x40,0x34,0x40}; +const u8g_fntpgm_uint8_t fontpage_203_185_185[45] U8G_FONT_SECTION("fontpage_203_185_185") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb9,0xb9,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0x04,0x00,0xff,0xe0,0x08,0x00,0x08, + 0x00,0x0f,0x80,0x10,0x80,0x10,0x80,0x20,0x80,0x40,0x80,0x87,0x00}; const u8g_fntpgm_uint8_t fontpage_203_224_224[45] U8G_FONT_SECTION("fontpage_203_224_224") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7f,0xc0,0x04,0x00,0x04,0x00,0x04,0x00,0xff, @@ -569,6 +780,10 @@ const u8g_fntpgm_uint8_t fontpage_204_142_142[45] U8G_FONT_SECTION("fontpage_204 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x8e,0x8e,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x03,0xe0,0xf2,0x20,0x92,0x20,0x93,0xe0,0xf2, 0x20,0x92,0x20,0x93,0xe0,0xf2,0x20,0x04,0x20,0x08,0xa0,0x30,0x40}; +const u8g_fntpgm_uint8_t fontpage_204_175_175[45] U8G_FONT_SECTION("fontpage_204_175_175") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaf,0xaf,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x1f,0x80,0x10,0x80,0x1f,0x80,0x10,0x80,0x1f, + 0x80,0x00,0x00,0xff,0xe0,0x24,0x00,0x27,0x80,0x54,0x00,0x8f,0xe0}; const u8g_fntpgm_uint8_t fontpage_205_130_130[45] U8G_FONT_SECTION("fontpage_205_130_130") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x40,0xfb,0x80,0x52,0x00,0xfb,0xe0,0x12, @@ -589,6 +804,10 @@ const u8g_fntpgm_uint8_t fontpage_206_137_137[45] U8G_FONT_SECTION("fontpage_206 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x89,0x89,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x08,0x00,0xff,0xe0,0x10,0x00,0x1f,0x80,0x30, 0x80,0x5f,0x80,0x90,0x80,0x1f,0x80,0x10,0x80,0x10,0x80,0x11,0x80}; +const u8g_fntpgm_uint8_t fontpage_206_159_159[45] U8G_FONT_SECTION("fontpage_206_159_159") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9f,0x9f,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x49,0xe0,0xfd,0x20,0x49,0x20,0x79,0xe0,0x49, + 0x20,0x79,0x20,0x49,0xe0,0xfd,0x20,0x01,0x20,0x49,0x20,0x86,0x60}; const u8g_fntpgm_uint8_t fontpage_206_186_186[45] U8G_FONT_SECTION("fontpage_206_186_186") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xba,0xba,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x00,0x27,0x80,0x24,0x80,0xfc,0x80,0x24, @@ -597,6 +816,10 @@ const u8g_fntpgm_uint8_t fontpage_206_192_192[45] U8G_FONT_SECTION("fontpage_206 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x80,0x19,0x00,0x06,0x00,0x19,0x00,0x64, 0xc0,0x04,0x00,0xff,0xe0,0x15,0x00,0x24,0x80,0xc4,0x60,0x0c,0x00}; +const u8g_fntpgm_uint8_t fontpage_206_223_223[45] U8G_FONT_SECTION("fontpage_206_223_223") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdf,0xdf,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x04,0x00,0x3f,0x80,0x24, + 0x80,0x24,0x80,0x3f,0x80,0x0e,0x00,0x15,0x00,0x24,0x80,0xc4,0x60}; const u8g_fntpgm_uint8_t fontpage_206_225_225[45] U8G_FONT_SECTION("fontpage_206_225_225") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe1,0xe1,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x00,0x1f,0x80,0x29,0x00,0x46,0x00,0x0a, @@ -621,6 +844,10 @@ const u8g_fntpgm_uint8_t fontpage_208_188_188[45] U8G_FONT_SECTION("fontpage_208 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbc,0xbc,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x00,0x23,0xc0,0xf4,0x40,0x2a,0x80,0x21, 0x00,0x72,0x80,0x6c,0x60,0xa7,0xc0,0x24,0x40,0x24,0x40,0x27,0xc0}; +const u8g_fntpgm_uint8_t fontpage_209_175_175[45] U8G_FONT_SECTION("fontpage_209_175_175") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaf,0xaf,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x24,0x40,0x22,0x80,0x27,0xc0,0xf9,0x40,0x27, + 0xc0,0x75,0x00,0x6f,0xe0,0xa3,0x20,0x25,0x20,0x29,0xc0,0x21,0x00}; const u8g_fntpgm_uint8_t fontpage_209_192_192[45] U8G_FONT_SECTION("fontpage_209_192_192") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x22,0x80,0xfc,0x40,0x28,0x20,0x27, @@ -629,6 +856,10 @@ const u8g_fntpgm_uint8_t fontpage_211_253_253[45] U8G_FONT_SECTION("fontpage_211 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfd,0xfd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x80,0x2f,0xe0,0xfa,0xa0,0x2f,0xe0,0x2a, 0xa0,0x3f,0xe0,0x64,0x40,0xa7,0xc0,0x24,0x40,0x27,0xc0,0x24,0x40}; +const u8g_fntpgm_uint8_t fontpage_212_161_161[45] U8G_FONT_SECTION("fontpage_212_161_161") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa1,0xa1,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x80,0x2f,0xe0,0xf2,0x80,0x27,0xc0,0x34, + 0x40,0x6f,0xc0,0x64,0x40,0xaf,0xe0,0x21,0x00,0x22,0x80,0x2c,0x60}; const u8g_fntpgm_uint8_t fontpage_212_217_217[45] U8G_FONT_SECTION("fontpage_212_217_217") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd9,0xd9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x2f,0x40,0x2a,0xa0,0xf4,0x40,0x27,0xc0,0x38, @@ -655,10 +886,22 @@ const u8g_fntpgm_uint8_t fontpage_217_226_226[45] U8G_FONT_SECTION("fontpage_217 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe2,0xe2,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x21,0x00,0x8f,0xe0,0x49,0x20,0x19, 0x00,0x2f,0xc0,0x28,0x40,0xca,0x80,0x49,0x00,0x52,0x80,0x6c,0x60}; +const u8g_fntpgm_uint8_t fontpage_217_232_232[45] U8G_FONT_SECTION("fontpage_217_232_232") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe8,0xe8,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x42,0x00,0x21,0x00,0x8f,0xe0,0x51,0x00,0x11, + 0x00,0x21,0x00,0x27,0xc0,0xc1,0x00,0x41,0x00,0x41,0x00,0x4f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_218_151_151[45] U8G_FONT_SECTION("fontpage_218_151_151") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x97,0x97,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x25,0x00,0x87,0xc0,0x49,0x00,0x21, + 0x00,0x3f,0xe0,0x42,0x80,0xc2,0x80,0x44,0xa0,0x48,0xa0,0x50,0xe0}; const u8g_fntpgm_uint8_t fontpage_218_187_187[45] U8G_FONT_SECTION("fontpage_218_187_187") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x40,0xc0,0x27,0x00,0x81,0x00,0x5f,0xe0,0x11, 0x00,0x21,0x00,0x27,0xc0,0xc4,0x40,0x44,0x40,0x47,0xc0,0x44,0x40}; +const u8g_fntpgm_uint8_t fontpage_218_193_193[45] U8G_FONT_SECTION("fontpage_218_193_193") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc1,0xc1,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x82,0x00,0x5f,0xe0,0x04,0x00,0x88,0x80,0x5f, + 0xc0,0x20,0x40,0x2a,0x80,0xca,0x80,0x4a,0xa0,0x4a,0xa0,0x52,0x60}; const u8g_fntpgm_uint8_t fontpage_218_203_203[45] U8G_FONT_SECTION("fontpage_218_203_203") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcb,0xcb,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xbe,0x20,0x62,0xa0,0x2a,0xa0,0xaa,0xa0,0x6a, @@ -671,6 +914,10 @@ const u8g_fntpgm_uint8_t fontpage_219_225_225[45] U8G_FONT_SECTION("fontpage_219 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe1,0xe1,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x25,0x40,0x09,0x80,0x82,0x80,0x54, 0x40,0x29,0x20,0x25,0x40,0xc5,0x80,0x49,0x00,0x42,0x80,0x5c,0x60}; +const u8g_fntpgm_uint8_t fontpage_219_247_247[45] U8G_FONT_SECTION("fontpage_219_247_247") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf7,0xf7,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x4f,0xc0,0x28,0x40,0x0f,0xc0,0x88,0x40,0x5f, + 0xc0,0x29,0x20,0x29,0x40,0xcf,0x80,0x49,0x20,0x4b,0x20,0x4c,0xe0}; const u8g_fntpgm_uint8_t fontpage_220_133_133[45] U8G_FONT_SECTION("fontpage_220_133_133") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x85,0x85,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x2f,0xe0,0x01,0x00,0x97,0xc0,0x51, @@ -679,10 +926,22 @@ const u8g_fntpgm_uint8_t fontpage_220_169_169[45] U8G_FONT_SECTION("fontpage_220 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa9,0xa9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x47,0xc0,0x24,0x40,0x07,0xc0,0x94,0x40,0x57, 0xc0,0x20,0x00,0x2f,0xe0,0xca,0xa0,0x4a,0xa0,0x4a,0xa0,0x5f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_220_184_184[45] U8G_FONT_SECTION("fontpage_220_184_184") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb8,0xb8,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x48,0x80,0x24,0xe0,0x1f,0x00,0x88,0xe0,0x5e, + 0x20,0x2a,0x40,0x2b,0xe0,0xca,0x40,0x4a,0x40,0x52,0x40,0x66,0xc0}; const u8g_fntpgm_uint8_t fontpage_221_144_144[45] U8G_FONT_SECTION("fontpage_221_144_144") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x90,0x90,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x4f,0xe0,0x28,0x80,0x8b,0xe0,0x4a,0x20,0x1b, 0xe0,0x2a,0x20,0x2b,0xe0,0xc8,0x80,0x4a,0xc0,0x54,0xa0,0x69,0xa0}; +const u8g_fntpgm_uint8_t fontpage_221_162_162[45] U8G_FONT_SECTION("fontpage_221_162_162") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa2,0xa2,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x44,0x40,0x22,0x80,0x0f,0xe0,0x82,0x80,0x44, + 0x40,0x28,0x20,0x3f,0xe0,0xca,0xa0,0x4a,0xa0,0x4a,0xa0,0x5f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_221_209_209[45] U8G_FONT_SECTION("fontpage_221_209_209") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd1,0xd1,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x47,0xc0,0x24,0x40,0x07,0x40,0x85,0x40,0x5f, + 0xe0,0x34,0x60,0x27,0xc0,0xc4,0x40,0x47,0xc0,0x44,0x40,0x44,0xc0}; const u8g_fntpgm_uint8_t fontpage_223_192_192[45] U8G_FONT_SECTION("fontpage_223_192_192") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x44,0x80,0x3e,0x80,0x12,0xe0,0x9e,0xa0,0x53, @@ -703,6 +962,10 @@ const u8g_fntpgm_uint8_t fontpage_228_199_199[45] U8G_FONT_SECTION("fontpage_228 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc7,0xc7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x21,0x00,0x21,0x00,0x3f,0xe0,0x20, 0x00,0x20,0x00,0x3f,0x80,0x20,0x80,0x20,0x80,0x40,0x80,0x80,0x80}; +const u8g_fntpgm_uint8_t fontpage_228_233_233[45] U8G_FONT_SECTION("fontpage_228_233_233") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe9,0xe9,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x00,0xa2,0x00,0xa7,0xe0,0xfa,0xa0,0xa2, + 0xa0,0x32,0xa0,0x64,0xa0,0xa9,0x20,0x22,0x20,0x25,0x20,0x28,0xc0}; const u8g_fntpgm_uint8_t fontpage_228_249_249[45] U8G_FONT_SECTION("fontpage_228_249_249") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf9,0xf9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0xa7,0xc0,0xf1,0x00,0xa1,0x00,0xaf, @@ -711,6 +974,10 @@ const u8g_fntpgm_uint8_t fontpage_231_135_135[45] U8G_FONT_SECTION("fontpage_231 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x87,0x87,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x88,0x40,0x52,0x80,0x0c, 0x00,0x2a,0x80,0xdf,0x40,0x04,0x00,0xff,0xe0,0x04,0x00,0x04,0x00}; +const u8g_fntpgm_uint8_t fontpage_231_175_175[45] U8G_FONT_SECTION("fontpage_231_175_175") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaf,0xaf,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x07,0xe0,0xf9,0x00,0x21,0x00,0x23,0x00,0x73, + 0x80,0x25,0x40,0x25,0x20,0x39,0x20,0xc1,0x00,0x01,0x00,0x01,0x00}; const u8g_fntpgm_uint8_t fontpage_234_168_168[45] U8G_FONT_SECTION("fontpage_234_168_168") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa8,0xa8,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x00,0xff,0x7f,0xc0,0x44,0x40,0x44,0x40,0x7f,0xc0,0x44, @@ -719,6 +986,10 @@ const u8g_fntpgm_uint8_t fontpage_234_181_181[45] U8G_FONT_SECTION("fontpage_234 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb5,0xb5,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x08,0x00,0x08,0x00,0xff,0x80,0x88,0x80,0xff, 0x80,0x88,0x80,0x88,0x80,0xff,0x80,0x08,0x40,0x08,0x40,0x07,0xc0}; +const u8g_fntpgm_uint8_t fontpage_234_229_229[45] U8G_FONT_SECTION("fontpage_234_229_229") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe5,0xe5,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x02,0x00,0xfb,0xc0,0xae,0x40,0xa9,0x80,0xfa, + 0x40,0xac,0x20,0xab,0xc0,0xaa,0x40,0xfa,0x40,0x8b,0xc0,0x02,0x40}; const u8g_fntpgm_uint8_t fontpage_236_253_253[34] U8G_FONT_SECTION("fontpage_236_253_253") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfd,0xfd,0x00,0x0a,0xff,0x00, 0x00,0x08,0x0b,0x0b,0x0c,0x02,0xff,0x10,0x20,0xff,0x81,0x81,0xff,0x81,0x81,0x81, @@ -727,6 +998,10 @@ const u8g_fntpgm_uint8_t fontpage_237_132_132[45] U8G_FONT_SECTION("fontpage_237 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x22,0x00,0x42,0x00,0xf7,0xc0,0x98,0x40,0x90, 0x40,0xf4,0x40,0x92,0x40,0x92,0x40,0x90,0x40,0xf0,0x40,0x91,0x80}; +const u8g_fntpgm_uint8_t fontpage_237_209_209[45] U8G_FONT_SECTION("fontpage_237_209_209") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd1,0xd1,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x0a,0x00,0x4a,0x00,0x4b,0xe0,0x4a,0x00,0x4c, + 0x80,0x48,0x40,0x08,0x00,0x7f,0xc0,0x4a,0x40,0x4a,0x40,0xff,0xe0}; const u8g_fntpgm_uint8_t fontpage_237_244_244[45] U8G_FONT_SECTION("fontpage_237_244_244") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf4,0xf4,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x04,0x00,0x3f,0x80,0x20, @@ -743,6 +1018,10 @@ const u8g_fntpgm_uint8_t fontpage_240_238_238[45] U8G_FONT_SECTION("fontpage_240 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xee,0xee,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x02,0x00,0xf3,0xc0,0x24,0x80,0x4f,0xe0,0xf5, 0x20,0x57,0xe0,0x55,0x20,0x57,0xe0,0x75,0x20,0x45,0x20,0x08,0x60}; +const u8g_fntpgm_uint8_t fontpage_243_187_187[45] U8G_FONT_SECTION("fontpage_243_187_187") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x2a,0x80,0x24,0x80,0x2a, + 0x80,0x3f,0x80,0x04,0x00,0x7f,0xc0,0x49,0x40,0x5f,0x40,0x40,0xc0}; const u8g_fntpgm_uint8_t fontpage_243_239_239[45] U8G_FONT_SECTION("fontpage_243_239_239") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xef,0xef,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x18,0x00,0xe3,0xe0,0x22,0x20,0xfa,0x20,0x22, @@ -751,22 +1030,42 @@ const u8g_fntpgm_uint8_t fontpage_243_251_251[45] U8G_FONT_SECTION("fontpage_243 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfb,0xfb,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0xe3,0xe0,0x24,0x20,0xfa,0x40,0x21, 0x80,0x36,0x80,0x29,0xe0,0x62,0x20,0xa5,0x40,0x20,0x80,0x27,0x00}; +const u8g_fntpgm_uint8_t fontpage_244_250_250[45] U8G_FONT_SECTION("fontpage_244_250_250") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfa,0xfa,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x7f,0xe0,0x40,0x20,0x89,0x00,0x10, + 0x80,0x60,0x40,0x1f,0x80,0x04,0x00,0x04,0x00,0x04,0x00,0x7f,0xe0}; const u8g_fntpgm_uint8_t fontpage_245_239_239[45] U8G_FONT_SECTION("fontpage_245_239_239") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xef,0xef,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x81,0x00,0x45,0x20,0xf7,0xe0,0x00,0x00,0xaf, 0xe0,0xa1,0x00,0xaf,0xe0,0x4a,0xa0,0x6a,0xa0,0x8a,0xa0,0x08,0x60}; +const u8g_fntpgm_uint8_t fontpage_246_172_172[45] U8G_FONT_SECTION("fontpage_246_172_172") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xac,0xac,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x42,0x00,0x7b,0xe0,0x54,0x80,0xbf,0xc0,0x04, + 0x40,0x7f,0xc0,0x44,0x00,0x7f,0xe0,0x14,0x20,0x24,0xc0,0xc4,0x00}; const u8g_fntpgm_uint8_t fontpage_246_201_201[45] U8G_FONT_SECTION("fontpage_246_201_201") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc9,0xc9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x42,0x00,0x7b,0xe0,0x94,0x80,0x7f,0xc0,0x04, 0x00,0xff,0xe0,0x01,0x00,0x7f,0xc0,0x11,0x00,0x09,0x00,0x03,0x00}; +const u8g_fntpgm_uint8_t fontpage_247_128_128[45] U8G_FONT_SECTION("fontpage_247_128_128") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x42,0x00,0x7b,0xe0,0x94,0x80,0x27,0xc0,0x50, + 0x40,0x4f,0x40,0x49,0x40,0x4f,0x40,0x49,0x40,0x4f,0x40,0x40,0xc0}; const u8g_fntpgm_uint8_t fontpage_247_161_161[45] U8G_FONT_SECTION("fontpage_247_161_161") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa1,0xa1,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x3d,0xe0,0x52,0x80,0xff,0xe0,0x80, 0x20,0x3f,0x80,0x20,0x80,0x3f,0xc0,0x20,0x40,0x20,0x40,0x3f,0xc0}; +const u8g_fntpgm_uint8_t fontpage_247_177_177[45] U8G_FONT_SECTION("fontpage_247_177_177") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xb1,0xb1,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x3d,0xe0,0x4a,0x80,0x94,0x40,0x7f, + 0xc0,0x12,0x40,0x3b,0xc0,0x56,0x40,0x93,0xc0,0x12,0x40,0x13,0xc0}; const u8g_fntpgm_uint8_t fontpage_248_251_251[45] U8G_FONT_SECTION("fontpage_248_251_251") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfb,0xfb,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x24,0x80,0x15,0x00,0xff,0xe0,0x15,0x00,0x24, 0x80,0x40,0x40,0x04,0x00,0xff,0xe0,0x0a,0x00,0x11,0x00,0xe0,0xe0}; +const u8g_fntpgm_uint8_t fontpage_250_162_162[45] U8G_FONT_SECTION("fontpage_250_162_162") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa2,0xa2,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x7f,0xc0,0x04,0x00,0xff,0xe0,0x91, + 0x20,0x3e,0x00,0x08,0x80,0x7f,0xc0,0x04,0x40,0x24,0x80,0xcc,0x60}; const u8g_fntpgm_uint8_t fontpage_250_171_171[45] U8G_FONT_SECTION("fontpage_250_171_171") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xab,0xab,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x51,0x40,0x5d,0x80,0x51,0x20,0xfd, @@ -775,6 +1074,10 @@ const u8g_fntpgm_uint8_t fontpage_253_162_162[45] U8G_FONT_SECTION("fontpage_253 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa2,0xa2,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x00,0x27,0xc0,0x41,0x00,0x51,0x00,0xe1, 0x00,0x21,0x00,0x41,0x00,0xf1,0x00,0x01,0x00,0x31,0x00,0xcf,0xe0}; +const u8g_fntpgm_uint8_t fontpage_253_167_167[45] U8G_FONT_SECTION("fontpage_253_167_167") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa7,0xa7,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x2f,0xc0,0x22,0x40,0x4a,0x40,0x52,0x80,0xe2, + 0xe0,0x22,0x20,0x42,0x20,0xf5,0x40,0x0c,0x80,0x35,0x40,0xca,0x20}; const u8g_fntpgm_uint8_t fontpage_253_191_191[45] U8G_FONT_SECTION("fontpage_253_191_191") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xbf,0xbf,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x80,0x22,0x40,0x43,0xc0,0x4e,0x00,0xe3, @@ -787,6 +1090,14 @@ const u8g_fntpgm_uint8_t fontpage_253_200_200[45] U8G_FONT_SECTION("fontpage_253 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc8,0xc8,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x22,0x00,0x23,0xc0,0x54,0x40,0xea,0x80,0x21, 0x00,0x42,0x80,0xec,0x60,0x01,0x00,0x30,0xc0,0xc3,0x00,0x00,0xc0}; +const u8g_fntpgm_uint8_t fontpage_253_211_211[45] U8G_FONT_SECTION("fontpage_253_211_211") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd3,0xd3,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x21,0x00,0x4f,0xe0,0x51,0x00,0xe7, + 0xc0,0x20,0x00,0x47,0xc0,0xf4,0x40,0x0c,0x40,0x37,0xc0,0xc4,0x40}; +const u8g_fntpgm_uint8_t fontpage_253_217_217[45] U8G_FONT_SECTION("fontpage_253_217_217") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd9,0xd9,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x21,0x00,0x42,0x80,0x54,0x40,0xe8, + 0x20,0x27,0xc0,0x40,0x00,0xf7,0xc0,0x0c,0x40,0x34,0x40,0xc7,0xc0}; const u8g_fntpgm_uint8_t fontpage_253_223_223[45] U8G_FONT_SECTION("fontpage_253_223_223") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdf,0xdf,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x2f,0xe0,0x42,0x00,0x54,0x40,0xef, @@ -827,10 +1138,18 @@ const u8g_fntpgm_uint8_t fontpage_254_242_242[45] U8G_FONT_SECTION("fontpage_254 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf2,0xf2,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7f,0xe0,0x49,0x20,0x7f,0xe0,0x04,0x40,0x3f, 0x80,0x05,0x00,0xff,0xe0,0x30,0x80,0xdf,0x80,0x10,0x80,0x1f,0x80}; +const u8g_fntpgm_uint8_t fontpage_256_133_133[45] U8G_FONT_SECTION("fontpage_256_133_133") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x85,0x85,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x3f,0x40,0x04,0x80,0x05,0x00,0xff, + 0xe0,0x08,0x00,0x3f,0x80,0xd0,0x80,0x1f,0x80,0x10,0x80,0x1f,0x80}; const u8g_fntpgm_uint8_t fontpage_256_234_234[45] U8G_FONT_SECTION("fontpage_256_234_234") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xea,0xea,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x40,0xfa,0x80,0x57,0xc0,0x54,0x40,0x74, 0x40,0x57,0xc0,0x71,0x00,0x5a,0xa0,0xf6,0xa0,0x1a,0x40,0x11,0xc0}; +const u8g_fntpgm_uint8_t fontpage_257_253_253[45] U8G_FONT_SECTION("fontpage_257_253_253") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfd,0xfd,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x49,0x40,0xfd,0x80,0x01,0x20,0x7d, + 0xe0,0x44,0x00,0x7d,0x40,0x45,0x80,0x7d,0x20,0x45,0x20,0x4d,0xe0}; const u8g_fntpgm_uint8_t fontpage_259_234_234[34] U8G_FONT_SECTION("fontpage_259_234_234") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xea,0xea,0x00,0x0a,0xff,0x00, 0x00,0x07,0x0b,0x0b,0x0c,0x02,0xff,0x20,0xfe,0x82,0x82,0xfe,0x82,0xfe,0x82,0x82, @@ -843,6 +1162,10 @@ const u8g_fntpgm_uint8_t fontpage_265_221_221[45] U8G_FONT_SECTION("fontpage_265 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0xff,0xe0,0x11,0x00,0x52,0x00,0x53, 0xc0,0x55,0x00,0x10,0x80,0x7f,0xc0,0x4a,0x40,0x4a,0x40,0xff,0xe0}; +const u8g_fntpgm_uint8_t fontpage_269_199_199[45] U8G_FONT_SECTION("fontpage_269_199_199") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc7,0xc7,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0x20,0x80,0x27,0xe0,0xfc,0x20,0xaa, + 0x00,0xaa,0x40,0xfb,0x80,0x22,0x00,0x2a,0x20,0x3a,0x20,0xc9,0xe0}; const u8g_fntpgm_uint8_t fontpage_272_204_204[45] U8G_FONT_SECTION("fontpage_272_204_204") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x27,0xc0,0x40,0x00,0x80,0x00,0x10,0x00,0x2f, @@ -855,6 +1178,10 @@ const u8g_fntpgm_uint8_t fontpage_273_197_197[45] U8G_FONT_SECTION("fontpage_273 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc5,0xc5,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x9f,0xe0,0x51,0x00,0x31,0x00,0xd7, 0xc0,0x12,0x00,0xff,0xe0,0x0c,0x40,0x32,0x80,0xd1,0x00,0x18,0xe0}; +const u8g_fntpgm_uint8_t fontpage_275_129_129[45] U8G_FONT_SECTION("fontpage_275_129_129") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x81,0x81,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xff,0xe0,0x0a,0x00,0x7f,0xc0,0x4a,0x40,0x7f, + 0xc0,0x08,0x00,0xff,0xe0,0x11,0x00,0x3a,0x00,0x0f,0x00,0x70,0xc0}; const u8g_fntpgm_uint8_t fontpage_275_210_210[45] U8G_FONT_SECTION("fontpage_275_210_210") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd2,0xd2,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x00,0xff,0x10,0x00,0x1f,0x00,0x22,0x00,0x7f,0xc0,0xa4, @@ -883,6 +1210,10 @@ const u8g_fntpgm_uint8_t fontpage_279_247_247[45] U8G_FONT_SECTION("fontpage_279 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf7,0xf7,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x2f,0xe0,0x21,0x00,0x07,0xc0,0xe1, 0x00,0x2f,0xe0,0x24,0x40,0x27,0xc0,0x24,0x40,0x37,0xc0,0x24,0x40}; +const u8g_fntpgm_uint8_t fontpage_279_251_251[45] U8G_FONT_SECTION("fontpage_279_251_251") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xfb,0xfb,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x27,0xc0,0x01,0x00,0xef,0xe0,0x22, + 0xa0,0x25,0x80,0x22,0x80,0x2f,0xe0,0x31,0x80,0x22,0x40,0x0c,0x20}; const u8g_fntpgm_uint8_t fontpage_280_131_131[45] U8G_FONT_SECTION("fontpage_280_131_131") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x83,0x83,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x4f,0xe0,0x29,0x20,0x0b,0xa0,0xe9,0x20,0x2f, @@ -891,6 +1222,30 @@ const u8g_fntpgm_uint8_t fontpage_282_165_165[45] U8G_FONT_SECTION("fontpage_282 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xa5,0xa5,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xf9,0x00,0x89,0x00,0xa9,0xe0,0xa9,0x40,0xab, 0x40,0xad,0x40,0xa9,0x40,0x21,0x40,0x50,0x80,0x49,0x40,0x8a,0x20}; +const u8g_fntpgm_uint8_t fontpage_282_170_170[45] U8G_FONT_SECTION("fontpage_282_170_170") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xaa,0xaa,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x0a,0x00,0x35,0x80,0xdf,0x60,0x01, + 0x00,0x3f,0x80,0x24,0x80,0x24,0x80,0x2a,0x80,0x11,0x00,0x60,0xc0}; +const u8g_fntpgm_uint8_t fontpage_282_247_247[45] U8G_FONT_SECTION("fontpage_282_247_247") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf7,0xf7,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x10,0x00,0x13,0xc0,0x7c,0x40,0x10,0x40,0xff, + 0xc0,0x12,0x00,0x52,0x20,0x5e,0x20,0x53,0xe0,0xb0,0x00,0x8f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_283_133_133[45] U8G_FONT_SECTION("fontpage_283_133_133") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x85,0x85,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x17,0xc0,0x11,0x40,0x7d,0x40,0x12,0xc0,0xfc, + 0x00,0x13,0xc0,0x5e,0x40,0x52,0x40,0x73,0xc0,0x98,0x00,0x87,0xe0}; +const u8g_fntpgm_uint8_t fontpage_283_221_221[45] U8G_FONT_SECTION("fontpage_283_221_221") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdd,0xdd,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7b,0xe0,0x4a,0x00,0x4a,0x00,0x7b,0xe0,0x12, + 0x20,0x52,0x20,0x5a,0x20,0x53,0xe0,0x52,0x00,0x5e,0x00,0xe3,0xe0}; +const u8g_fntpgm_uint8_t fontpage_286_236_236[45] U8G_FONT_SECTION("fontpage_286_236_236") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xec,0xec,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x21,0x00,0xf7,0xc0,0x41,0x00,0x6f,0xe0,0xa2, + 0x00,0xf7,0xc0,0x20,0x40,0x3a,0x80,0xe1,0x00,0x20,0x80,0x20,0x80}; +const u8g_fntpgm_uint8_t fontpage_286_239_239[45] U8G_FONT_SECTION("fontpage_286_239_239") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xef,0xef,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x42,0x00,0x42,0x00,0xfb,0xe0,0x42,0x20,0xa5, + 0x40,0xf9,0x00,0x21,0x00,0x3a,0x80,0xe2,0x80,0x24,0x40,0x28,0x20}; const u8g_fntpgm_uint8_t fontpage_286_244_244[45] U8G_FONT_SECTION("fontpage_286_244_244") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf4,0xf4,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x20,0x80,0xf8,0x80,0x47,0xe0,0x64,0xa0,0xa4, @@ -929,6 +1284,14 @@ const u8g_fntpgm_uint8_t fontpage_287_219_219[45] U8G_FONT_SECTION("fontpage_287 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdb,0xdb,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x44,0x80,0x24,0x80,0x2f,0xc0,0x04,0x80,0xe4, 0x80,0x3f,0xe0,0x24,0x80,0x24,0x80,0x28,0x80,0x50,0x80,0x8f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_287_222_222[45] U8G_FONT_SECTION("fontpage_287_222_222") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xde,0xde,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x42,0x00,0x2f,0xe0,0x22,0x00,0x05,0x00,0xef, + 0xc0,0x21,0x00,0x2f,0xe0,0x21,0x00,0x21,0x00,0x51,0x00,0x8f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_287_247_247[45] U8G_FONT_SECTION("fontpage_287_247_247") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf7,0xf7,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x29,0x20,0x25,0x40,0x01,0x00,0xef, + 0xe0,0x21,0x00,0x23,0x80,0x25,0x40,0x29,0x20,0x51,0x00,0x8f,0xe0}; const u8g_fntpgm_uint8_t fontpage_288_128_128[45] U8G_FONT_SECTION("fontpage_288_128_128") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x8f,0xc0,0x48,0x40,0x4f,0xc0,0x08,0x40,0xcf, @@ -945,6 +1308,10 @@ const u8g_fntpgm_uint8_t fontpage_289_232_232[45] U8G_FONT_SECTION("fontpage_289 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe8,0xe8,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0xe0,0xff,0x20,0x45,0x20,0x29,0x40,0xff, 0x80,0x01,0x40,0x7d,0x20,0x45,0x20,0x45,0xa0,0x7d,0x40,0x45,0x00}; +const u8g_fntpgm_uint8_t fontpage_290_205_205[45] U8G_FONT_SECTION("fontpage_290_205_205") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcd,0xcd,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xfb,0xe0,0x50,0x20,0x50,0x20,0xf8,0x20,0xab, + 0xe0,0xda,0x00,0x8a,0x00,0xfa,0x00,0x8a,0x20,0xfa,0x20,0x8b,0xe0}; const u8g_fntpgm_uint8_t fontpage_291_202_202[45] U8G_FONT_SECTION("fontpage_291_202_202") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xca,0xca,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x1f,0xc0,0xe2,0x80,0xa9,0x00,0x72,0x80,0xfd, @@ -969,10 +1336,10 @@ const u8g_fntpgm_uint8_t fontpage_298_153_153[45] U8G_FONT_SECTION("fontpage_298 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x99,0x99,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x42,0x80,0x4f,0xe0,0x72,0x80,0x82,0x80,0xef, 0xe0,0x40,0x00,0xf7,0xc0,0x44,0x40,0x47,0xc0,0x54,0x40,0x67,0xc0}; -const u8g_fntpgm_uint8_t fontpage_298_174_174[45] U8G_FONT_SECTION("fontpage_298_174_174") = { - 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xae,0xae,0x00,0x0a,0xff,0x00, - 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x5c,0x80,0x47,0xe0,0x68,0xa0,0x8b,0xe0,0xfc, - 0xa0,0x47,0xe0,0xe4,0x80,0x57,0xe0,0x48,0x80,0x6c,0x80,0x53,0xe0}; +const u8g_fntpgm_uint8_t fontpage_298_220_220[45] U8G_FONT_SECTION("fontpage_298_220_220") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xdc,0xdc,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x41,0x00,0x4f,0xe0,0x72,0x80,0x8f,0xe0,0xf4, + 0x40,0x27,0xc0,0xf4,0x40,0x27,0xc0,0x2a,0x80,0x32,0xa0,0x2c,0x60}; const u8g_fntpgm_uint8_t fontpage_298_255_255[45] U8G_FONT_SECTION("fontpage_298_255_255") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x21,0x00,0x22,0x00,0x24,0x00,0x28,0x00,0x30, @@ -981,10 +1348,18 @@ const u8g_fntpgm_uint8_t fontpage_299_237_237[45] U8G_FONT_SECTION("fontpage_299 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xed,0xed,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x47,0xe0,0x20,0x20,0x82,0x20,0x82,0x20,0xbf, 0xa0,0x86,0x20,0x8a,0x20,0x92,0x20,0xa2,0x20,0x86,0x20,0x80,0xe0}; +const u8g_fntpgm_uint8_t fontpage_299_242_242[45] U8G_FONT_SECTION("fontpage_299_242_242") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf2,0xf2,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x4f,0xe0,0x20,0x20,0x84,0x20,0x84,0x20,0xbf, + 0xa0,0x84,0x20,0x8e,0x20,0x95,0x20,0xa4,0xa0,0x84,0x20,0x80,0xe0}; const u8g_fntpgm_uint8_t fontpage_299_244_244[45] U8G_FONT_SECTION("fontpage_299_244_244") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf4,0xf4,0x00,0x0a,0xff,0x00, 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0x4f,0xc0,0x20,0x40,0x80,0x40,0x9e,0x40,0x92, 0x40,0x9e,0x40,0x92,0x40,0x92,0x40,0x9e,0x40,0x80,0x40,0x81,0xc0}; +const u8g_fntpgm_uint8_t fontpage_300_136_136[45] U8G_FONT_SECTION("fontpage_300_136_136") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x88,0x88,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x27,0xe0,0x11,0x20,0x82,0xa0,0xbf,0xe0,0x82, + 0x20,0xba,0xa0,0xaa,0xa0,0xb9,0x20,0x81,0x20,0xba,0xa0,0x84,0x60}; const u8g_fntpgm_uint8_t fontpage_300_205_205[45] U8G_FONT_SECTION("fontpage_300_205_205") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xcd,0xcd,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xf2,0x00,0x93,0xe0,0xa6,0x40,0xc1,0x80,0xa6, @@ -993,6 +1368,18 @@ const u8g_fntpgm_uint8_t fontpage_300_228_228[45] U8G_FONT_SECTION("fontpage_300 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe4,0xe4,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xf1,0x00,0x92,0x80,0xa4,0x40,0xcb,0xa0,0xa1, 0x00,0x9f,0xe0,0x91,0x00,0xe5,0x40,0x89,0x20,0x91,0x20,0x83,0x00}; +const u8g_fntpgm_uint8_t fontpage_300_233_233[45] U8G_FONT_SECTION("fontpage_300_233_233") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe9,0xe9,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xf1,0x00,0x92,0x80,0xa4,0x40,0xc8,0x20,0xa7, + 0xc0,0x90,0x00,0x9a,0x40,0xd5,0x40,0xa5,0x40,0x80,0x80,0x8f,0xe0}; +const u8g_fntpgm_uint8_t fontpage_301_246_246[45] U8G_FONT_SECTION("fontpage_301_246_246") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf6,0xf6,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7f,0xc0,0x04,0x00,0xff,0xe0,0x95,0x20,0x0e, + 0x00,0x31,0x80,0xc4,0x60,0x3f,0x80,0x01,0x00,0x0e,0x00,0x03,0x00}; +const u8g_fntpgm_uint8_t fontpage_302_128_128[45] U8G_FONT_SECTION("fontpage_302_128_128") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x7f,0xc0,0x04,0x00,0xff,0xe0,0xb5,0xa0,0x04, + 0x00,0xff,0xe0,0x08,0x00,0x7f,0xc0,0x4a,0x40,0x4a,0x40,0x4a,0xc0}; const u8g_fntpgm_uint8_t fontpage_302_210_210[45] U8G_FONT_SECTION("fontpage_302_210_210") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd2,0xd2,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0x7f,0xc0,0x04,0x00,0x3f,0x80,0x04, @@ -1001,6 +1388,18 @@ const u8g_fntpgm_uint8_t fontpage_302_222_222[45] U8G_FONT_SECTION("fontpage_302 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xde,0xde,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x0a,0x00,0x0a,0x00,0xfb,0xe0,0x0a,0x00,0x0a, 0x00,0x7b,0xc0,0x0a,0x00,0x0a,0x00,0xfb,0xe0,0x0a,0x00,0x0a,0x00}; +const u8g_fntpgm_uint8_t fontpage_302_224_224[45] U8G_FONT_SECTION("fontpage_302_224_224") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe0,0xe0,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x24,0x00,0x3f,0xc0,0x44,0x00,0xff,0xe0,0x20, + 0x80,0x3f,0x80,0x0a,0x00,0xfb,0xe0,0x0a,0x00,0xfb,0xe0,0x0a,0x00}; +const u8g_fntpgm_uint8_t fontpage_302_226_226[45] U8G_FONT_SECTION("fontpage_302_226_226") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xe2,0xe2,0x00,0x0a,0xff,0x00, + 0x00,0x0a,0x0b,0x16,0x0c,0x01,0xff,0xff,0xc0,0x08,0x00,0x10,0x00,0xff,0xc0,0x92, + 0x40,0x9e,0x40,0x92,0x40,0x9e,0x40,0x92,0x40,0xff,0xc0,0x80,0x40}; +const u8g_fntpgm_uint8_t fontpage_304_245_245[45] U8G_FONT_SECTION("fontpage_304_245_245") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf5,0xf5,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xff,0xe0,0x04,0x00,0x3f,0x80,0x20,0x80,0x24, + 0x80,0x24,0x80,0x24,0x80,0x26,0x80,0x09,0x00,0x10,0xc0,0x60,0x40}; const u8g_fntpgm_uint8_t fontpage_304_249_249[45] U8G_FONT_SECTION("fontpage_304_249_249") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xf9,0xf9,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x07,0xe0,0xf9,0x00,0x27,0xe0,0x24,0x20,0x25, @@ -1009,6 +1408,10 @@ const u8g_fntpgm_uint8_t fontpage_305_132_132[45] U8G_FONT_SECTION("fontpage_305 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x84,0x84,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xfb,0xe0,0x10,0x80,0x63,0xe0,0x22,0x20,0xfa, 0xa0,0x2a,0xa0,0x22,0xa0,0x22,0xa0,0x22,0xa0,0x21,0x40,0x66,0x20}; +const u8g_fntpgm_uint8_t fontpage_305_145_145[45] U8G_FONT_SECTION("fontpage_305_145_145") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x91,0x91,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x13,0xe0,0x50,0x80,0x5f,0xe0,0x52,0x20,0xfe, + 0xa0,0x12,0xa0,0x56,0xa0,0x5a,0xa0,0x92,0xa0,0x21,0x40,0xc6,0x20}; const u8g_fntpgm_uint8_t fontpage_305_157_157[45] U8G_FONT_SECTION("fontpage_305_157_157") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9d,0x9d,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x23,0xe0,0xfc,0x80,0x87,0xe0,0x7a,0x20,0xca, @@ -1033,79 +1436,115 @@ const u8g_fntpgm_uint8_t fontpage_317_196_196[45] U8G_FONT_SECTION("fontpage_317 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xc4,0xc4,0x00,0x0a,0xff,0x00, 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x11,0x00,0x7f,0xc0,0x11,0x00,0xff,0xe0,0x04, 0x00,0x3f,0x80,0x24,0x80,0x3f,0x80,0x24,0x80,0x3f,0x80,0x60,0xc0}; +const u8g_fntpgm_uint8_t fontpage_317_222_222[45] U8G_FONT_SECTION("fontpage_317_222_222") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xde,0xde,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0xf8,0x80,0xa8,0x80,0xf8,0xe0,0xa8,0x80,0xf8, + 0x80,0x23,0xe0,0xfa,0x20,0x22,0x20,0xfa,0x20,0x52,0x20,0xab,0xe0}; +const u8g_fntpgm_uint8_t fontpage_318_208_208[45] U8G_FONT_SECTION("fontpage_318_208_208") = { + 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0xd0,0xd0,0x00,0x0a,0xff,0x00, + 0x00,0x0b,0x0b,0x16,0x0c,0x00,0xff,0x04,0x00,0xff,0xe0,0x10,0x80,0x09,0x00,0x06, + 0x00,0x19,0x80,0xe0,0x60,0x09,0x00,0x09,0x00,0x11,0x00,0x61,0x00}; const u8g_fntpgm_uint8_t fontpage_510_154_154[30] U8G_FONT_SECTION("fontpage_510_154_154") = { 0x00,0x0c,0x0f,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x9a,0x9a,0x00,0x08,0x00,0x00, 0x00,0x02,0x07,0x07,0x0c,0x06,0x01,0xc0,0xc0,0x00,0x00,0x00,0xc0,0xc0}; #define FONTDATA_ITEM(page, begin, end, data) { page, begin, end, COUNT(data), data } static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { + FONTDATA_ITEM(64, 157, 157, fontpage_64_157_157), // '”' -- '”' FONTDATA_ITEM(69, 191, 191, fontpage_69_191_191), // '⊿' -- '⊿' FONTDATA_ITEM(156, 128, 128, fontpage_156_128_128), // '一' -- '一' FONTDATA_ITEM(156, 137, 139, fontpage_156_137_139), // '三' -- '下' FONTDATA_ITEM(156, 141, 141, fontpage_156_141_141), // '不' -- '不' + FONTDATA_ITEM(156, 147, 147, fontpage_156_147_147), // '专' -- '专' FONTDATA_ITEM(156, 157, 157, fontpage_156_157_157), // '丝' -- '丝' FONTDATA_ITEM(156, 170, 170, fontpage_156_170_170), // '个' -- '个' FONTDATA_ITEM(156, 173, 173, fontpage_156_173_173), // '中' -- '中' - FONTDATA_ITEM(156, 187, 187, fontpage_156_187_187), // '主' -- '主' + FONTDATA_ITEM(156, 186, 187, fontpage_156_186_187), // '为' -- '主' + FONTDATA_ITEM(156, 201, 201, fontpage_156_201_201), // '义' -- '义' FONTDATA_ITEM(156, 203, 203, fontpage_156_203_203), // '之' -- '之' FONTDATA_ITEM(157, 134, 134, fontpage_157_134_134), // '了' -- '了' + FONTDATA_ITEM(157, 140, 140, fontpage_157_140_140), // '二' -- '二' FONTDATA_ITEM(157, 142, 142, fontpage_157_142_142), // '于' -- '于' + FONTDATA_ITEM(157, 164, 164, fontpage_157_164_164), // '交' -- '交' FONTDATA_ITEM(157, 174, 174, fontpage_157_174_174), // '亮' -- '亮' FONTDATA_ITEM(157, 206, 206, fontpage_157_206_206), // '从' -- '从' - FONTDATA_ITEM(157, 228, 228, fontpage_157_228_228), // '令' -- '令' + FONTDATA_ITEM(157, 228, 229, fontpage_157_228_229), // '令' -- '以' + FONTDATA_ITEM(157, 246, 246, fontpage_157_246_246), // '件' -- '件' FONTDATA_ITEM(157, 253, 253, fontpage_157_253_253), // '份' -- '份' FONTDATA_ITEM(158, 145, 145, fontpage_158_145_145), // '休' -- '休' + FONTDATA_ITEM(158, 160, 160, fontpage_158_160_160), // '传' -- '传' FONTDATA_ITEM(158, 205, 206, fontpage_158_205_206), // '位' -- '低' + FONTDATA_ITEM(158, 211, 211, fontpage_158_211_211), // '体' -- '体' + FONTDATA_ITEM(158, 217, 217, fontpage_158_217_217), // '余' -- '余' FONTDATA_ITEM(158, 220, 220, fontpage_158_220_220), // '作' -- '作' + FONTDATA_ITEM(158, 255, 255, fontpage_158_255_255), // '使' -- '使' FONTDATA_ITEM(159, 155, 155, fontpage_159_155_155), // '供' -- '供' + FONTDATA_ITEM(159, 181, 181, fontpage_159_181_181), // '侵' -- '侵' FONTDATA_ITEM(159, 221, 221, fontpage_159_221_221), // '保' -- '保' FONTDATA_ITEM(159, 225, 225, fontpage_159_225_225), // '信' -- '信' FONTDATA_ITEM(160, 188, 188, fontpage_160_188_188), // '值' -- '值' + FONTDATA_ITEM(160, 190, 190, fontpage_160_190_190), // '倾' -- '倾' FONTDATA_ITEM(160, 207, 207, fontpage_160_207_207), // '偏' -- '偏' FONTDATA_ITEM(160, 220, 220, fontpage_160_220_220), // '停' -- '停' FONTDATA_ITEM(161, 168, 168, fontpage_161_168_168), // '储' -- '储' + FONTDATA_ITEM(161, 207, 207, fontpage_161_207_207), // '像' -- '像' FONTDATA_ITEM(162, 197, 197, fontpage_162_197_197), // '充' -- '充' - FONTDATA_ITEM(162, 200, 200, fontpage_162_200_200), // '先' -- '先' + FONTDATA_ITEM(162, 200, 201, fontpage_162_200_201), // '先' -- '光' FONTDATA_ITEM(162, 229, 229, fontpage_162_229_229), // '入' -- '入' FONTDATA_ITEM(162, 232, 232, fontpage_162_232_232), // '全' -- '全' FONTDATA_ITEM(162, 241, 241, fontpage_162_241_241), // '共' -- '共' FONTDATA_ITEM(162, 243, 243, fontpage_162_243_243), // '关' -- '关' FONTDATA_ITEM(162, 247, 247, fontpage_162_247_247), // '具' -- '具' + FONTDATA_ITEM(163, 151, 151, fontpage_163_151_151), // '冗' -- '冗' FONTDATA_ITEM(163, 183, 183, fontpage_163_183_183), // '冷' -- '冷' FONTDATA_ITEM(163, 198, 198, fontpage_163_198_198), // '准' -- '准' FONTDATA_ITEM(163, 201, 201, fontpage_163_201_201), // '凉' -- '凉' FONTDATA_ITEM(163, 250, 251, fontpage_163_250_251), // '出' -- '击' - FONTDATA_ITEM(164, 134, 134, fontpage_164_134_134), // '分' -- '分' + FONTDATA_ITEM(164, 134, 135, fontpage_164_134_135), // '分' -- '切' FONTDATA_ITEM(164, 155, 155, fontpage_164_155_155), // '创' -- '创' FONTDATA_ITEM(164, 157, 157, fontpage_164_157_157), // '初' -- '初' + FONTDATA_ITEM(164, 171, 171, fontpage_164_171_171), // '别' -- '别' FONTDATA_ITEM(164, 176, 176, fontpage_164_176_176), // '到' -- '到' FONTDATA_ITEM(164, 182, 183, fontpage_164_182_183), // '制' -- '刷' + FONTDATA_ITEM(164, 242, 242, fontpage_164_242_242), // '割' -- '割' FONTDATA_ITEM(165, 155, 155, fontpage_165_155_155), // '力' -- '力' FONTDATA_ITEM(165, 160, 160, fontpage_165_160_160), // '加' -- '加' FONTDATA_ITEM(165, 168, 168, fontpage_165_168_168), // '动' -- '动' FONTDATA_ITEM(166, 150, 150, fontpage_166_150_150), // '化' -- '化' + FONTDATA_ITEM(166, 199, 199, fontpage_166_199_199), // '升' -- '升' FONTDATA_ITEM(166, 202, 202, fontpage_166_202_202), // '半' -- '半' FONTDATA_ITEM(166, 207, 207, fontpage_166_207_207), // '协' -- '协' FONTDATA_ITEM(166, 213, 213, fontpage_166_213_213), // '单' -- '单' FONTDATA_ITEM(166, 225, 225, fontpage_166_225_225), // '卡' -- '卡' - FONTDATA_ITEM(166, 240, 240, fontpage_166_240_240), // '印' -- '印' + FONTDATA_ITEM(166, 240, 241, fontpage_166_240_241), // '印' -- '危' + FONTDATA_ITEM(166, 244, 244, fontpage_166_244_244), // '却' -- '却' FONTDATA_ITEM(166, 248, 248, fontpage_166_248_248), // '卸' -- '卸' FONTDATA_ITEM(167, 159, 159, fontpage_167_159_159), // '原' -- '原' - FONTDATA_ITEM(167, 204, 204, fontpage_167_204_204), // '双' -- '双' + FONTDATA_ITEM(167, 204, 205, fontpage_167_204_205), // '双' -- '反' FONTDATA_ITEM(167, 214, 214, fontpage_167_214_214), // '取' -- '取' FONTDATA_ITEM(167, 216, 216, fontpage_167_216_216), // '变' -- '变' FONTDATA_ITEM(167, 240, 240, fontpage_167_240_240), // '台' -- '台' + FONTDATA_ITEM(168, 131, 131, fontpage_168_131_131), // '吃' -- '吃' FONTDATA_ITEM(168, 136, 136, fontpage_168_136_136), // '合' -- '合' - FONTDATA_ITEM(168, 142, 142, fontpage_168_142_142), // '后' -- '后' + FONTDATA_ITEM(168, 141, 142, fontpage_168_141_142), // '名' -- '后' + FONTDATA_ITEM(168, 145, 145, fontpage_168_145_145), // '向' -- '向' + FONTDATA_ITEM(168, 166, 166, fontpage_168_166_166), // '否' -- '否' FONTDATA_ITEM(168, 175, 175, fontpage_168_175_175), // '启' -- '启' + FONTDATA_ITEM(168, 202, 202, fontpage_168_202_202), // '告' -- '告' + FONTDATA_ITEM(168, 232, 232, fontpage_168_232_232), // '周' -- '周' FONTDATA_ITEM(168, 253, 253, fontpage_168_253_253), // '命' -- '命' FONTDATA_ITEM(169, 140, 140, fontpage_169_140_140), // '和' -- '和' + FONTDATA_ITEM(169, 205, 205, fontpage_169_205_205), // '响' -- '响' FONTDATA_ITEM(171, 183, 183, fontpage_171_183_183), // '喷' -- '喷' FONTDATA_ITEM(172, 180, 180, fontpage_172_180_180), // '嘴' -- '嘴' + FONTDATA_ITEM(172, 232, 232, fontpage_172_232_232), // '器' -- '器' + FONTDATA_ITEM(172, 244, 244, fontpage_172_244_244), // '噴' -- '噴' FONTDATA_ITEM(173, 222, 222, fontpage_173_222_222), // '回' -- '回' FONTDATA_ITEM(173, 224, 224, fontpage_173_224_224), // '因' -- '因' + FONTDATA_ITEM(173, 250, 250, fontpage_173_250_250), // '固' -- '固' FONTDATA_ITEM(173, 254, 254, fontpage_173_254_254), // '图' -- '图' FONTDATA_ITEM(174, 168, 168, fontpage_174_168_168), // '在' -- '在' + FONTDATA_ITEM(174, 207, 207, fontpage_174_207_207), // '坏' -- '坏' FONTDATA_ITEM(174, 215, 215, fontpage_174_215_215), // '块' -- '块' FONTDATA_ITEM(175, 139, 139, fontpage_175_139_139), // '型' -- '型' FONTDATA_ITEM(175, 171, 171, fontpage_175_171_171), // '垫' -- '垫' @@ -1118,6 +1557,8 @@ static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(178, 167, 167, fontpage_178_167_167), // '大' -- '大' FONTDATA_ITEM(178, 169, 170, fontpage_178_169_170), // '天' -- '太' FONTDATA_ITEM(178, 177, 177, fontpage_178_177_177), // '失' -- '失' + FONTDATA_ITEM(178, 180, 180, fontpage_178_180_180), // '头' -- '头' + FONTDATA_ITEM(178, 253, 253, fontpage_178_253_253), // '好' -- '好' FONTDATA_ITEM(179, 203, 203, fontpage_179_203_203), // '始' -- '始' FONTDATA_ITEM(182, 208, 208, fontpage_182_208_208), // '子' -- '子' FONTDATA_ITEM(182, 216, 216, fontpage_182_216_216), // '存' -- '存' @@ -1125,12 +1566,15 @@ static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(183, 140, 140, fontpage_183_140_140), // '完' -- '完' FONTDATA_ITEM(183, 154, 154, fontpage_183_154_154), // '定' -- '定' FONTDATA_ITEM(183, 162, 162, fontpage_183_162_162), // '客' -- '客' + FONTDATA_ITEM(183, 171, 171, fontpage_183_171_171), // '宫' -- '宫' FONTDATA_ITEM(183, 185, 185, fontpage_183_185_185), // '容' -- '容' FONTDATA_ITEM(183, 249, 249, fontpage_183_249_249), // '对' -- '对' + FONTDATA_ITEM(184, 134, 134, fontpage_184_134_134), // '将' -- '将' FONTDATA_ITEM(184, 143, 143, fontpage_184_143_143), // '小' -- '小' FONTDATA_ITEM(184, 177, 177, fontpage_184_177_177), // '就' -- '就' FONTDATA_ITEM(184, 207, 207, fontpage_184_207_207), // '屏' -- '屏' FONTDATA_ITEM(187, 229, 229, fontpage_187_229_229), // '工' -- '工' + FONTDATA_ITEM(187, 238, 238, fontpage_187_238_238), // '差' -- '差' FONTDATA_ITEM(187, 242, 242, fontpage_187_242_242), // '已' -- '已' FONTDATA_ITEM(188, 243, 243, fontpage_188_243_243), // '平' -- '平' FONTDATA_ITEM(188, 246, 246, fontpage_188_246_246), // '并' -- '并' @@ -1139,15 +1583,22 @@ static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(189, 159, 159, fontpage_189_159_159), // '废' -- '废' FONTDATA_ITEM(189, 166, 166, fontpage_189_166_166), // '度' -- '度' FONTDATA_ITEM(190, 128, 128, fontpage_190_128_128), // '开' -- '开' + FONTDATA_ITEM(190, 131, 131, fontpage_190_131_131), // '弃' -- '弃' + FONTDATA_ITEM(190, 143, 143, fontpage_190_143_143), // '式' -- '式' + FONTDATA_ITEM(190, 149, 149, fontpage_190_149_149), // '引' -- '引' + FONTDATA_ITEM(190, 185, 185, fontpage_190_185_185), // '弹' -- '弹' FONTDATA_ITEM(190, 210, 210, fontpage_190_210_210), // '归' -- '归' FONTDATA_ITEM(191, 132, 133, fontpage_191_132_133), // '径' -- '待' + FONTDATA_ITEM(191, 170, 170, fontpage_191_170_170), // '循' -- '循' FONTDATA_ITEM(191, 174, 174, fontpage_191_174_174), // '微' -- '微' FONTDATA_ITEM(191, 195, 195, fontpage_191_195_195), // '心' -- '心' + FONTDATA_ITEM(191, 253, 253, fontpage_191_253_253), // '忽' -- '忽' FONTDATA_ITEM(192, 167, 167, fontpage_192_167_167), // '性' -- '性' FONTDATA_ITEM(192, 187, 187, fontpage_192_187_187), // '总' -- '总' FONTDATA_ITEM(192, 226, 226, fontpage_192_226_226), // '恢' -- '恢' FONTDATA_ITEM(192, 239, 239, fontpage_192_239_239), // '息' -- '息' - FONTDATA_ITEM(196, 144, 144, fontpage_196_144_144), // '成' -- '成' + FONTDATA_ITEM(194, 159, 159, fontpage_194_159_159), // '感' -- '感' + FONTDATA_ITEM(196, 143, 144, fontpage_196_143_144), // '戏' -- '成' FONTDATA_ITEM(196, 183, 183, fontpage_196_183_183), // '户' -- '户' FONTDATA_ITEM(196, 192, 192, fontpage_196_192_192), // '所' -- '所' FONTDATA_ITEM(196, 199, 199, fontpage_196_199_199), // '扇' -- '扇' @@ -1156,81 +1607,115 @@ static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(196, 231, 231, fontpage_196_231_231), // '执' -- '执' FONTDATA_ITEM(196, 249, 249, fontpage_196_249_249), // '批' -- '批' FONTDATA_ITEM(197, 150, 150, fontpage_197_150_150), // '抖' -- '抖' + FONTDATA_ITEM(197, 165, 165, fontpage_197_165_165), // '报' -- '报' + FONTDATA_ITEM(197, 172, 172, fontpage_197_172_172), // '抬' -- '抬' FONTDATA_ITEM(197, 189, 189, fontpage_197_189_189), // '抽' -- '抽' FONTDATA_ITEM(197, 212, 212, fontpage_197_212_212), // '拔' -- '拔' FONTDATA_ITEM(197, 233, 233, fontpage_197_233_233), // '择' -- '择' FONTDATA_ITEM(198, 137, 137, fontpage_198_137_137), // '按' -- '按' FONTDATA_ITEM(198, 161, 161, fontpage_198_161_161), // '挡' -- '挡' FONTDATA_ITEM(198, 164, 164, fontpage_198_164_164), // '挤' -- '挤' + FONTDATA_ITEM(198, 223, 223, fontpage_198_223_223), // '损' -- '损' FONTDATA_ITEM(198, 226, 226, fontpage_198_226_226), // '换' -- '换' FONTDATA_ITEM(199, 137, 137, fontpage_199_137_137), // '掉' -- '掉' FONTDATA_ITEM(199, 162, 162, fontpage_199_162_162), // '探' -- '探' + FONTDATA_ITEM(199, 165, 165, fontpage_199_165_165), // '接' -- '接' FONTDATA_ITEM(199, 167, 167, fontpage_199_167_167), // '控' -- '控' + FONTDATA_ITEM(199, 208, 208, fontpage_199_208_208), // '提' -- '提' FONTDATA_ITEM(199, 210, 210, fontpage_199_210_210), // '插' -- '插' FONTDATA_ITEM(202, 182, 182, fontpage_202_182_182), // '收' -- '收' FONTDATA_ITEM(202, 190, 190, fontpage_202_190_190), // '放' -- '放' FONTDATA_ITEM(202, 240, 240, fontpage_202_240_240), // '数' -- '数' + FONTDATA_ITEM(202, 242, 242, fontpage_202_242_242), // '敲' -- '敲' FONTDATA_ITEM(202, 244, 244, fontpage_202_244_244), // '整' -- '整' + FONTDATA_ITEM(203, 135, 135, fontpage_203_135_135), // '文' -- '文' FONTDATA_ITEM(203, 153, 153, fontpage_203_153_153), // '料' -- '料' FONTDATA_ITEM(203, 156, 156, fontpage_203_156_156), // '斜' -- '斜' + FONTDATA_ITEM(203, 173, 173, fontpage_203_173_173), // '断' -- '断' FONTDATA_ITEM(203, 176, 176, fontpage_203_176_176), // '新' -- '新' + FONTDATA_ITEM(203, 185, 185, fontpage_203_185_185), // '方' -- '方' FONTDATA_ITEM(203, 224, 224, fontpage_203_224_224), // '无' -- '无' FONTDATA_ITEM(203, 246, 246, fontpage_203_246_246), // '时' -- '时' FONTDATA_ITEM(204, 142, 142, fontpage_204_142_142), // '明' -- '明' + FONTDATA_ITEM(204, 175, 175, fontpage_204_175_175), // '是' -- '是' FONTDATA_ITEM(205, 130, 130, fontpage_205_130_130), // '暂' -- '暂' FONTDATA_ITEM(205, 171, 171, fontpage_205_171_171), // '暫' -- '暫' FONTDATA_ITEM(205, 244, 244, fontpage_205_244_244), // '更' -- '更' FONTDATA_ITEM(206, 128, 128, fontpage_206_128_128), // '最' -- '最' FONTDATA_ITEM(206, 137, 137, fontpage_206_137_137), // '有' -- '有' + FONTDATA_ITEM(206, 159, 159, fontpage_206_159_159), // '期' -- '期' FONTDATA_ITEM(206, 186, 186, fontpage_206_186_186), // '机' -- '机' FONTDATA_ITEM(206, 192, 192, fontpage_206_192_192), // '杀' -- '杀' + FONTDATA_ITEM(206, 223, 223, fontpage_206_223_223), // '束' -- '束' FONTDATA_ITEM(206, 225, 225, fontpage_206_225_225), // '条' -- '条' FONTDATA_ITEM(206, 229, 229, fontpage_206_229_229), // '来' -- '来' FONTDATA_ITEM(206, 255, 255, fontpage_206_255_255), // '板' -- '板' FONTDATA_ITEM(207, 241, 241, fontpage_207_241_241), // '柱' -- '柱' FONTDATA_ITEM(208, 161, 161, fontpage_208_161_161), // '校' -- '校' FONTDATA_ITEM(208, 188, 188, fontpage_208_188_188), // '格' -- '格' + FONTDATA_ITEM(209, 175, 175, fontpage_209_175_175), // '梯' -- '梯' FONTDATA_ITEM(209, 192, 192, fontpage_209_192_192), // '检' -- '检' FONTDATA_ITEM(211, 253, 253, fontpage_211_253_253), // '槽' -- '槽' + FONTDATA_ITEM(212, 161, 161, fontpage_212_161_161), // '模' -- '模' FONTDATA_ITEM(212, 217, 217, fontpage_212_217_217), // '橙' -- '橙' FONTDATA_ITEM(214, 226, 227, fontpage_214_226_227), // '止' -- '正' FONTDATA_ITEM(214, 229, 229, fontpage_214_229_229), // '步' -- '步' FONTDATA_ITEM(215, 212, 212, fontpage_215_212_212), // '比' -- '比' FONTDATA_ITEM(217, 161, 161, fontpage_217_161_161), // '没' -- '没' FONTDATA_ITEM(217, 226, 226, fontpage_217_226_226), // '波' -- '波' + FONTDATA_ITEM(217, 232, 232, fontpage_217_232_232), // '注' -- '注' + FONTDATA_ITEM(218, 151, 151, fontpage_218_151_151), // '洗' -- '洗' FONTDATA_ITEM(218, 187, 187, fontpage_218_187_187), // '活' -- '活' + FONTDATA_ITEM(218, 193, 193, fontpage_218_193_193), // '流' -- '流' FONTDATA_ITEM(218, 203, 203, fontpage_218_203_203), // '测' -- '测' FONTDATA_ITEM(219, 136, 136, fontpage_219_136_136), // '消' -- '消' FONTDATA_ITEM(219, 225, 225, fontpage_219_225_225), // '淡' -- '淡' + FONTDATA_ITEM(219, 247, 247, fontpage_219_247_247), // '混' -- '混' FONTDATA_ITEM(220, 133, 133, fontpage_220_133_133), // '清' -- '清' FONTDATA_ITEM(220, 169, 169, fontpage_220_169_169), // '温' -- '温' + FONTDATA_ITEM(220, 184, 184, fontpage_220_184_184), // '游' -- '游' FONTDATA_ITEM(221, 144, 144, fontpage_221_144_144), // '源' -- '源' + FONTDATA_ITEM(221, 162, 162, fontpage_221_162_162), // '溢' -- '溢' + FONTDATA_ITEM(221, 209, 209, fontpage_221_209_209), // '滑' -- '滑' FONTDATA_ITEM(223, 192, 192, fontpage_223_192_192), // '激' -- '激' FONTDATA_ITEM(224, 239, 239, fontpage_224_239_239), // '灯' -- '灯' FONTDATA_ITEM(225, 185, 185, fontpage_225_185_185), // '点' -- '点' FONTDATA_ITEM(225, 237, 237, fontpage_225_237_237), // '热' -- '热' FONTDATA_ITEM(228, 199, 199, fontpage_228_199_199), // '片' -- '片' + FONTDATA_ITEM(228, 233, 233, fontpage_228_233_233), // '物' -- '物' FONTDATA_ITEM(228, 249, 249, fontpage_228_249_249), // '特' -- '特' FONTDATA_ITEM(231, 135, 135, fontpage_231_135_135), // '率' -- '率' + FONTDATA_ITEM(231, 175, 175, fontpage_231_175_175), // '环' -- '环' FONTDATA_ITEM(234, 168, 168, fontpage_234_168_168), // '用' -- '用' FONTDATA_ITEM(234, 181, 181, fontpage_234_181_181), // '电' -- '电' + FONTDATA_ITEM(234, 229, 229, fontpage_234_229_229), // '略' -- '略' FONTDATA_ITEM(236, 253, 253, fontpage_236_253_253), // '白' -- '白' FONTDATA_ITEM(237, 132, 132, fontpage_237_132_132), // '的' -- '的' + FONTDATA_ITEM(237, 209, 209, fontpage_237_209_209), // '监' -- '监' FONTDATA_ITEM(237, 244, 244, fontpage_237_244_244), // '直' -- '直' FONTDATA_ITEM(238, 129, 129, fontpage_238_129_129), // '省' -- '省' FONTDATA_ITEM(238, 160, 160, fontpage_238_160_160), // '眠' -- '眠' FONTDATA_ITEM(240, 238, 238, fontpage_240_238_238), // '确' -- '确' + FONTDATA_ITEM(243, 187, 187, fontpage_243_187_187), // '离' -- '离' FONTDATA_ITEM(243, 239, 239, fontpage_243_239_239), // '积' -- '积' FONTDATA_ITEM(243, 251, 251, fontpage_243_251_251), // '移' -- '移' + FONTDATA_ITEM(244, 250, 250, fontpage_244_250_250), // '空' -- '空' FONTDATA_ITEM(245, 239, 239, fontpage_245_239_239), // '端' -- '端' + FONTDATA_ITEM(246, 172, 172, fontpage_246_172_172), // '第' -- '第' FONTDATA_ITEM(246, 201, 201, fontpage_246_201_201), // '等' -- '等' + FONTDATA_ITEM(247, 128, 128, fontpage_247_128_128), // '简' -- '简' FONTDATA_ITEM(247, 161, 161, fontpage_247_161_161), // '管' -- '管' + FONTDATA_ITEM(247, 177, 177, fontpage_247_177_177), // '箱' -- '箱' FONTDATA_ITEM(248, 251, 251, fontpage_248_251_251), // '类' -- '类' + FONTDATA_ITEM(250, 162, 162, fontpage_250_162_162), // '索' -- '索' FONTDATA_ITEM(250, 171, 171, fontpage_250_171_171), // '紫' -- '紫' FONTDATA_ITEM(253, 162, 162, fontpage_253_162_162), // '红' -- '红' + FONTDATA_ITEM(253, 167, 167, fontpage_253_167_167), // '级' -- '级' FONTDATA_ITEM(253, 191, 191, fontpage_253_191_191), // '线' -- '线' FONTDATA_ITEM(253, 198, 198, fontpage_253_198_198), // '细' -- '细' FONTDATA_ITEM(253, 200, 200, fontpage_253_200_200), // '终' -- '终' + FONTDATA_ITEM(253, 211, 211, fontpage_253_211_211), // '结' -- '结' + FONTDATA_ITEM(253, 217, 217, fontpage_253_217_217), // '给' -- '给' FONTDATA_ITEM(253, 223, 223, fontpage_253_223_223), // '统' -- '统' FONTDATA_ITEM(253, 231, 231, fontpage_253_231_231), // '继' -- '继' FONTDATA_ITEM(253, 234, 234, fontpage_253_234_234), // '绪' -- '绪' @@ -1241,13 +1726,17 @@ static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(254, 209, 209, fontpage_254_209_209), // '网' -- '网' FONTDATA_ITEM(254, 238, 238, fontpage_254_238_238), // '置' -- '置' FONTDATA_ITEM(254, 242, 242, fontpage_254_242_242), // '署' -- '署' + FONTDATA_ITEM(256, 133, 133, fontpage_256_133_133), // '者' -- '者' FONTDATA_ITEM(256, 234, 234, fontpage_256_234_234), // '聪' -- '聪' + FONTDATA_ITEM(257, 253, 253, fontpage_257_253_253), // '能' -- '能' FONTDATA_ITEM(259, 234, 234, fontpage_259_234_234), // '自' -- '自' FONTDATA_ITEM(263, 220, 220, fontpage_263_220_220), // '菜' -- '菜' FONTDATA_ITEM(265, 221, 221, fontpage_265_221_221), // '蓝' -- '蓝' + FONTDATA_ITEM(269, 199, 199, fontpage_269_199_199), // '蛇' -- '蛇' FONTDATA_ITEM(272, 204, 204, fontpage_272_204_204), // '行' -- '行' FONTDATA_ITEM(273, 171, 171, fontpage_273_171_171), // '被' -- '被' FONTDATA_ITEM(273, 197, 197, fontpage_273_197_197), // '装' -- '装' + FONTDATA_ITEM(275, 129, 129, fontpage_275_129_129), // '要' -- '要' FONTDATA_ITEM(275, 210, 210, fontpage_275_210_210), // '角' -- '角' FONTDATA_ITEM(279, 161, 161, fontpage_279_161_161), // '计' -- '计' FONTDATA_ITEM(279, 174, 174, fontpage_279_174_174), // '议' -- '议' @@ -1255,8 +1744,15 @@ static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(279, 213, 213, fontpage_279_213_213), // '试' -- '试' FONTDATA_ITEM(279, 239, 239, fontpage_279_239_239), // '误' -- '误' FONTDATA_ITEM(279, 247, 247, fontpage_279_247_247), // '请' -- '请' + FONTDATA_ITEM(279, 251, 251, fontpage_279_251_251), // '读' -- '读' FONTDATA_ITEM(280, 131, 131, fontpage_280_131_131), // '调' -- '调' FONTDATA_ITEM(282, 165, 165, fontpage_282_165_165), // '败' -- '败' + FONTDATA_ITEM(282, 170, 170, fontpage_282_170_170), // '贪' -- '贪' + FONTDATA_ITEM(282, 247, 247, fontpage_282_247_247), // '起' -- '起' + FONTDATA_ITEM(283, 133, 133, fontpage_283_133_133), // '超' -- '超' + FONTDATA_ITEM(283, 221, 221, fontpage_283_221_221), // '距' -- '距' + FONTDATA_ITEM(286, 236, 236, fontpage_286_236_236), // '转' -- '转' + FONTDATA_ITEM(286, 239, 239, fontpage_286_239_239), // '软' -- '软' FONTDATA_ITEM(286, 244, 244, fontpage_286_244_244), // '轴' -- '轴' FONTDATA_ITEM(286, 253, 253, fontpage_286_253_253), // '载' -- '载' FONTDATA_ITEM(287, 145, 145, fontpage_287_145_145), // '辑' -- '辑' @@ -1266,31 +1762,45 @@ static const uxg_fontinfo_t g_fontinfo[] PROGMEM = { FONTDATA_ITEM(287, 212, 212, fontpage_287_212_212), // '返' -- '返' FONTDATA_ITEM(287, 216, 216, fontpage_287_216_216), // '还' -- '还' FONTDATA_ITEM(287, 219, 219, fontpage_287_219_219), // '进' -- '进' + FONTDATA_ITEM(287, 222, 222, fontpage_287_222_222), // '连' -- '连' + FONTDATA_ITEM(287, 247, 247, fontpage_287_247_247), // '迷' -- '迷' FONTDATA_ITEM(288, 128, 128, fontpage_288_128_128), // '退' -- '退' FONTDATA_ITEM(288, 137, 137, fontpage_288_137_137), // '选' -- '选' FONTDATA_ITEM(288, 159, 159, fontpage_288_159_159), // '速' -- '速' FONTDATA_ITEM(289, 232, 232, fontpage_289_232_232), // '部' -- '部' + FONTDATA_ITEM(290, 205, 205, fontpage_290_205_205), // '配' -- '配' FONTDATA_ITEM(291, 202, 202, fontpage_291_202_202), // '释' -- '释' FONTDATA_ITEM(291, 205, 205, fontpage_291_205_205), // '重' -- '重' FONTDATA_ITEM(291, 207, 207, fontpage_291_207_207), // '量' -- '量' FONTDATA_ITEM(297, 136, 136, fontpage_297_136_136), // '针' -- '针' FONTDATA_ITEM(297, 174, 174, fontpage_297_174_174), // '钮' -- '钮' FONTDATA_ITEM(298, 153, 153, fontpage_298_153_153), // '错' -- '错' - FONTDATA_ITEM(298, 174, 174, fontpage_298_174_174), // '键' -- '键' + FONTDATA_ITEM(298, 220, 220, fontpage_298_220_220), // '镜' -- '镜' FONTDATA_ITEM(298, 255, 255, fontpage_298_255_255), // '长' -- '长' FONTDATA_ITEM(299, 237, 237, fontpage_299_237_237), // '闭' -- '闭' + FONTDATA_ITEM(299, 242, 242, fontpage_299_242_242), // '闲' -- '闲' FONTDATA_ITEM(299, 244, 244, fontpage_299_244_244), // '间' -- '间' + FONTDATA_ITEM(300, 136, 136, fontpage_300_136_136), // '阈' -- '阈' FONTDATA_ITEM(300, 205, 205, fontpage_300_205_205), // '降' -- '降' FONTDATA_ITEM(300, 228, 228, fontpage_300_228_228), // '除' -- '除' + FONTDATA_ITEM(300, 233, 233, fontpage_300_233_233), // '险' -- '险' + FONTDATA_ITEM(301, 246, 246, fontpage_301_246_246), // '零' -- '零' + FONTDATA_ITEM(302, 128, 128, fontpage_302_128_128), // '需' -- '需' FONTDATA_ITEM(302, 210, 210, fontpage_302_210_210), // '青' -- '青' FONTDATA_ITEM(302, 222, 222, fontpage_302_222_222), // '非' -- '非' + FONTDATA_ITEM(302, 224, 224, fontpage_302_224_224), // '靠' -- '靠' + FONTDATA_ITEM(302, 226, 226, fontpage_302_226_226), // '面' -- '面' + FONTDATA_ITEM(304, 245, 245, fontpage_304_245_245), // '页' -- '页' FONTDATA_ITEM(304, 249, 249, fontpage_304_249_249), // '项' -- '项' FONTDATA_ITEM(305, 132, 132, fontpage_305_132_132), // '预' -- '预' + FONTDATA_ITEM(305, 145, 145, fontpage_305_145_145), // '频' -- '频' FONTDATA_ITEM(305, 157, 157, fontpage_305_157_157), // '额' -- '额' FONTDATA_ITEM(305, 206, 206, fontpage_305_206_206), // '风' -- '风' FONTDATA_ITEM(306, 241, 241, fontpage_306_241_241), // '饱' -- '饱' FONTDATA_ITEM(308, 241, 241, fontpage_308_241_241), // '驱' -- '驱' FONTDATA_ITEM(309, 216, 216, fontpage_309_216_216), // '高' -- '高' FONTDATA_ITEM(317, 196, 196, fontpage_317_196_196), // '黄' -- '黄' + FONTDATA_ITEM(317, 222, 222, fontpage_317_222_222), // '點' -- '點' + FONTDATA_ITEM(318, 208, 208, fontpage_318_208_208), // '齐' -- '齐' FONTDATA_ITEM(510, 154, 154, fontpage_510_154_154), // ':' -- ':' }; diff --git a/Marlin/src/lcd/dogm/u8g_dev_tft_320x240_upscale_from_128x64.cpp b/Marlin/src/lcd/dogm/u8g_dev_tft_320x240_upscale_from_128x64.cpp index 20fd44f5801f..0f602246b42f 100644 --- a/Marlin/src/lcd/dogm/u8g_dev_tft_320x240_upscale_from_128x64.cpp +++ b/Marlin/src/lcd/dogm/u8g_dev_tft_320x240_upscale_from_128x64.cpp @@ -64,7 +64,7 @@ #include -#if ENABLED(LCD_USE_DMA_FSMC) +#ifdef LCD_USE_DMA_FSMC extern void LCD_IO_WriteReg(uint16_t Reg); extern void LCD_IO_WriteData(uint16_t RegValue); extern void LCD_IO_WriteSequence(uint16_t *data, uint16_t length); diff --git a/Marlin/src/lcd/extui/lib/mks_ui/W25Qxx.cpp b/Marlin/src/lcd/extui/lib/mks_ui/W25Qxx.cpp index 21ed3f999cb6..2ad14357a143 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/W25Qxx.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/W25Qxx.cpp @@ -22,7 +22,7 @@ #include "../../../../inc/MarlinConfigPre.h" #if 1 // ENABLED(SPI_FLASH) -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include #include "../../../../inc/MarlinConfig.h" @@ -391,5 +391,5 @@ void ext_FLASH::SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16 void ext_FLASH::lv_pic_read(uint8_t *P_Rbuff, uint32_t addr, uint32_t size) {SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, addr, size);} -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI #endif // 1 ... SPI_FLASH diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp index 8193563e41f7..a65bf818ec1b 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_about.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -99,29 +99,28 @@ void lv_draw_about(void) { fw_version = lv_label_create(scr, NULL); lv_obj_set_style(fw_version, &tft_style_lable_rel); - lv_label_set_text(fw_version, "Version: V_2.0.5.3"); + lv_label_set_text(fw_version, SHORT_BUILD_VERSION); lv_obj_align(fw_version, NULL, LV_ALIGN_CENTER, 0, -60); fw_type = lv_label_create(scr, NULL); lv_obj_set_style(fw_type, &tft_style_lable_rel); - #if (MOTHERBOARD == BOARD_MKS_ROBIN_PRO) - lv_label_set_text(fw_type, "Firmware: Robin_Pro35"); - #elif (MOTHERBOARD == BOARD_MKS_ROBIN_NANO) - lv_label_set_text(fw_type, "Firmware: Robin_Nano35"); - #endif + lv_label_set_text(fw_type, + #if MB(MKS_ROBIN_PRO) + "Firmware: Robin_Pro35" + #elif MB(MKS_ROBIN_NANO) + "Firmware: Robin_Nano35" + #else + CUSTOM_MACHINE_NAME + #endif + ); lv_obj_align(fw_type, NULL, LV_ALIGN_CENTER, 0, -20); board = lv_label_create(scr, NULL); lv_obj_set_style(board, &tft_style_lable_rel); - #if (MOTHERBOARD == BOARD_MKS_ROBIN_PRO) - lv_label_set_text(board, "Board: MKS Robin pro"); - #elif (MOTHERBOARD == BOARD_MKS_ROBIN_NANO) - lv_label_set_text(board, "Board: MKS Robin nano"); - #endif - + lv_label_set_text(board, "Board: " BOARD_INFO_NAME); lv_obj_align(board, NULL, LV_ALIGN_CENTER, 0, 20); } void lv_clear_about() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp index 6d44ecb71c1c..864b5781b443 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_change_speed.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -310,13 +310,13 @@ void disp_print_speed() { void disp_speed_type() { switch (speedType) { case 1: - lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_Extruct_speed_sel.bin", 0); - lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_Mov_speed.bin", 0); + lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_extruct_sel.bin", 0); + lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_mov_changespeed.bin", 0); break; default: - lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_Extruct_speed.bin", 0); - lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_Mov_speed_sel.bin", 0); + lv_obj_set_event_cb_mks(buttonExt, event_handler, ID_C_EXT, "bmp_Extruct.bin", 0); + lv_obj_set_event_cb_mks(buttonMov, event_handler, ID_C_MOVE, "bmp_mov_sel.bin", 0); break; } lv_obj_refresh_ext_draw_pad(buttonExt); @@ -333,4 +333,4 @@ void disp_speed_type() { void lv_clear_change_speed() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp index 5620af8c99fa..c87df26b1d37 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_dialog.cpp @@ -26,7 +26,7 @@ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -61,7 +61,9 @@ static void btn_ok_event_cb(lv_obj_t * btn, lv_event_t event) { } else if (event == LV_EVENT_RELEASED) { if (DialogType == DIALOG_TYPE_PRINT_FILE) { - preview_gcode_prehandle(list_file.file_name[sel_id]); + #if HAS_GCODE_PREVIEW + preview_gcode_prehandle(list_file.file_name[sel_id]); + #endif reset_print_time(); start_print_time(); @@ -202,7 +204,7 @@ void lv_draw_dialog(uint8_t type) { style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM; style_btn_rel.body.radius = LV_RADIUS_CIRCLE; style_btn_rel.text.color = lv_color_hex3(0xDEF); - style_btn_rel.text.font = &gb2312_puhui32; + style_btn_rel.text.font = &lv_font_roboto_22; static lv_style_t style_btn_pr; // A variable to store the pressed style lv_style_copy(&style_btn_pr, &style_btn_rel); // Initialize from the released style @@ -211,7 +213,7 @@ void lv_draw_dialog(uint8_t type) { style_btn_pr.body.grad_color = lv_color_hex3(0x24A); style_btn_pr.body.shadow.width = 2; style_btn_pr.text.color = lv_color_hex3(0xBCD); - style_btn_pr.text.font = &gb2312_puhui32; + style_btn_pr.text.font = &lv_font_roboto_22; lv_obj_t * labelDialog = lv_label_create(scr, NULL); lv_obj_set_style(labelDialog, &tft_style_lable_rel); @@ -340,4 +342,4 @@ void lv_draw_dialog(uint8_t type) { void lv_clear_dialog() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_error_message.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_error_message.cpp index de57804c2d41..6c7a73d8cfb1 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_error_message.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_error_message.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -81,4 +81,4 @@ void lv_draw_error_message(PGM_P const msg) { void lv_clear_error_message() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp index 14d7ed0410ed..a8290d39fe1b 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_extrusion.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -375,4 +375,4 @@ void disp_ext_step() { void lv_clear_extrusion() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp index d5bf62ab3e33..0d907fea3d57 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_fan.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" #include "lv_conf.h" @@ -244,4 +244,4 @@ void disp_fan_value() { void lv_clear_fan() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp index 79f550afefe8..87c9a35105cc 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_home.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" #include "draw_ready_print.h" @@ -190,13 +190,13 @@ void lv_draw_home(void) { lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonHomeZ, LV_BTN_STATE_REL, &tft_style_lable_rel); - lv_obj_set_event_cb_mks(buttonOffAll, event_handler, ID_H_OFF_ALL, "bmp_Motor_off.bin", 0); + lv_obj_set_event_cb_mks(buttonOffAll, event_handler, ID_H_OFF_ALL, "bmp_manual_off.bin", 0); lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonOffAll, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonOffAll, LV_BTN_STATE_REL, &tft_style_lable_rel); - lv_obj_set_event_cb_mks(buttonOffXY, event_handler, ID_H_OFF_XY, "bmp_Motor_off.bin", 0); + lv_obj_set_event_cb_mks(buttonOffXY, event_handler, ID_H_OFF_XY, "bmp_manual_off.bin", 0); lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonOffXY, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_style(buttonOffXY, LV_BTN_STATE_PR, &tft_style_lable_pre); @@ -280,4 +280,4 @@ void lv_draw_home(void) { void lv_clear_home() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp index c5c77e898572..1237c12bbe9b 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_language.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -61,7 +61,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { } else if (event == LV_EVENT_RELEASED) { disp_language(gCfgItems.language, UNSELECTED); - lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_Simple_cn_sel.bin", 0); + lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_simplified_cn_sel.bin", 0); gCfgItems.language = LANG_SIMPLE_CHINESE; gCfg_to_spiFlah(); disp_language_init(); @@ -73,7 +73,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { } else if (event == LV_EVENT_RELEASED) { disp_language(gCfgItems.language, UNSELECTED); - lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_Tradition_cn_sel.bin", 0); + lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_traditional_cn_sel.bin", 0); gCfgItems.language = LANG_COMPLEX_CHINESE; gCfg_to_spiFlah(); disp_language_init(); @@ -258,14 +258,14 @@ void lv_draw_language(void) { buttonBack = lv_imgbtn_create(scr, NULL); - lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_Simple_cn.bin", 0); + lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, "bmp_simplified_cn.bin", 0); lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_REL, &tft_style_lable_rel); lv_obj_clear_protect(buttonCN, LV_PROTECT_FOLLOW); #if 1 - lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_Tradition_cn.bin", 0); + lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, "bmp_traditional_cn.bin", 0); lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_PR, &tft_style_lable_pre); @@ -367,4 +367,4 @@ void lv_draw_language(void) { void lv_clear_language() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp index b97483ec9daa..d4e6fa81cbb4 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_manuaLevel.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" #include "lv_conf.h" @@ -281,4 +281,4 @@ void lv_draw_manualLevel(void) { void lv_clear_manualLevel() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp index 71d5d7427a14..ed5af48b90e3 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_move_motor.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" #include "lv_conf.h" @@ -326,4 +326,4 @@ void disp_move_dist() { void lv_clear_move_motor() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_opration.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_opration.cpp index 483de3fcc8d5..1fbaf056e223 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_opration.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_opration.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -116,7 +116,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { else if (event == LV_EVENT_RELEASED) { if (gCfgItems.finish_power_off == 1) { gCfgItems.finish_power_off = 0; - lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_Mamual.bin", 0); + lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_manual_off.bin", 0); //dindt find bmp_Mamual... lv_label_set_text(label_PowerOff, printing_more_menu.manual); lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); lv_obj_refresh_ext_draw_pad(label_PowerOff); @@ -124,7 +124,7 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { } else { gCfgItems.finish_power_off = 1; - lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_Auto.bin", 0); + lv_obj_set_event_cb_mks(obj, event_handler, ID_O_POWER_OFF, "bmp_auto_off.bin", 0); lv_label_set_text(label_PowerOff, printing_more_menu.auto_close); lv_obj_align(label_PowerOff, buttonPowerOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); lv_obj_refresh_ext_draw_pad(label_PowerOff); @@ -218,9 +218,9 @@ void lv_draw_opration(void) { lv_imgbtn_set_style(buttonMove, LV_BTN_STATE_REL, &tft_style_lable_rel); } if (gCfgItems.finish_power_off == 1) - lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_Auto.bin", 0); + lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_auto_off.bin", 0); else - lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_Mamual.bin", 0); + lv_obj_set_event_cb_mks(buttonPowerOff, event_handler, ID_O_POWER_OFF, "bmp_manual_off.bin", 0); lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonPowerOff, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_style(buttonPowerOff, LV_BTN_STATE_PR, &tft_style_lable_pre); @@ -319,4 +319,4 @@ void lv_draw_opration(void) { void lv_clear_opration() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_message.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_message.cpp index cf477ec10400..f66c2bde9916 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_message.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_pause_message.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if BOTH(TFT_LITTLE_VGL_UI, ADVANCED_PAUSE_FEATURE) +#if BOTH(TFT_LVGL_UI, ADVANCED_PAUSE_FEATURE) #include "draw_ui.h" #include "lv_conf.h" @@ -52,4 +52,4 @@ void lv_draw_pause_message(const PauseMessage msg) { } } -#endif // TFT_LITTLE_VGL_UI && ADVANCED_PAUSE_FEATURE +#endif // TFT_LVGL_UI && ADVANCED_PAUSE_FEATURE diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp index beea30018c3d..27d011e00095 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_preHeat.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -389,4 +389,4 @@ void disp_step_heat() { void lv_clear_preHeat() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp index cc9fa0e04dfe..e8647aaa3719 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_print_file.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" #include "lv_conf.h" @@ -324,7 +324,7 @@ void disp_gcode_icon(uint8_t file_num) { lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buttonPageDown, LV_BTN_STATE_REL, &tft_style_lable_rel); - lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, "bmp_Back.bin", 0); + lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_P_RETURN, "bmp_Return.bin", 0); lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic_117x92); lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, &bmp_pic_117x92); lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_lable_pre); @@ -445,21 +445,9 @@ void disp_gcode_icon(uint8_t file_num) { void lv_open_gcode_file(char *path) { #if ENABLED(SDSUPPORT) - //uint32_t read; - uint32_t *ps4; - int pre_sread_cnt; char *cur_name; - cur_name = strrchr(path, '/'); - card.openFileRead(cur_name); - card.read(public_buf, 512); - ps4 = (uint32_t *)strstr((char *)public_buf, ";simage:"); - - if (ps4) { - pre_sread_cnt = (uint32_t)ps4 - (uint32_t)((uint32_t *)(&public_buf[0])); - card.setIndex(pre_sread_cnt + 8); - } #endif } @@ -480,30 +468,64 @@ int ascii2dec_test(char *ascii) { return result; } -void lv_gcode_file_read(uint8_t *data_buf) { - #if ENABLED(SDSUPPORT) - uint16_t i = 0, j = 0, k = 0; - //uint32_t read; - uint16_t row_1 = 0; +void lv_gcode_file_read(uint8_t *data_buf) +{ + #if ENABLED (SDSUPPORT) + uint16_t i=0,j=0,k=0; + uint16_t row_1=0; + bool ignore_start = true; char temp_test[200]; + volatile uint16_t *p_index; + + memset(public_buf, 0, 200); - while (1) { - card.read(temp_test, 200); - for (i = 0; i < 200;) { - public_buf[row_1 * 200 + 100 * k + j] = (char)(ascii2dec_test(&temp_test[i]) << 4 | ascii2dec_test(&temp_test[i + 1])); + while(card.isFileOpen()) + { + if (ignore_start) card.read(temp_test, 8); //line start -> ignore + card.read(temp_test, 200); //data + //\r;;gimage: we got the bit img, so stop here + if (temp_test[1] == ';') { + card.closefile(); + break; + } + for(i=0;i<200;) { + public_buf[row_1*200+100*k+j] = (char)(ascii2dec_test(&temp_test[i])<<4|ascii2dec_test(&temp_test[i+1])); j++; - i += 2; + i+=2; } - k++; - j = 0; - if (k >= 2) { - k = 0; - card.read(temp_test, 9); + + uint16_t c = card.get(); + //check if we have more data or finished the line (CR) + if (c == '\r') { break; } + card.setIndex(card.getIndex()); + k++; + j=0; + ignore_start = false; } - memcpy(data_buf, public_buf, 200); - #endif + #if ENABLED(SPI_GRAPHICAL_TFT) + for(i=0;i<200;) + { + p_index = (uint16_t *)(&public_buf[i]); + + //Color = (*p_index >> 8); + //*p_index = Color | ((*p_index & 0xff) << 8); + i+=2; + if(*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full; + } + #else + for(i=0;i<200;) + { + p_index = (uint16_t *)(&public_buf[i]); + //Color = (*p_index >> 8); + //*p_index = Color | ((*p_index & 0xff) << 8); + i+=2; + if(*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full; // 0x18C3; // + } + #endif + memcpy(data_buf,public_buf,200); + #endif } void lv_close_gcode_file() {TERN_(SDSUPPORT, card.closefile());} @@ -592,4 +614,4 @@ void cutFileName(char *path, int len, int bytePerLine, char *outStr) { void lv_clear_print_file() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp index 6580cc9e4321..e15de7021f1c 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_printing.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -308,13 +308,13 @@ void lv_draw_printing(void) { lv_label_set_text(labelPause, printing_menu.pause); else lv_label_set_text(labelPause, printing_menu.resume); - lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 30, 0); + lv_obj_align(labelPause, buttonPause, LV_ALIGN_CENTER, 20, 0); lv_label_set_text(labelStop, printing_menu.stop); - lv_obj_align(labelStop, buttonStop, LV_ALIGN_CENTER, 30, 0); + lv_obj_align(labelStop, buttonStop, LV_ALIGN_CENTER, 20, 0); lv_label_set_text(labelOperat, printing_menu.option); - lv_obj_align(labelOperat, buttonOperat, LV_ALIGN_CENTER, 30, 0); + lv_obj_align(labelOperat, buttonOperat, LV_ALIGN_CENTER, 20, 0); } lv_style_copy(&lv_bar_style_indic, &lv_style_pretty_color); @@ -440,4 +440,4 @@ void setProBarRate() { void lv_clear_printing() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp index a3708ef3cc19..1551705704c1 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_ready_print.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "draw_ready_print.h" #include "draw_tool.h" @@ -260,7 +260,7 @@ void lv_draw_ready_print(void) { buttonTool = lv_imgbtn_create(scr, NULL); buttonSet = lv_imgbtn_create(scr, NULL); - lv_obj_set_event_cb_mks(buttonPrint, event_handler, ID_PRINT, "bmp_Print.bin", 0); + lv_obj_set_event_cb_mks(buttonPrint, event_handler, ID_PRINT, "bmp_printing.bin", 0); //lv_imgbtn_set_src_mks(buttonPrint, LV_BTN_STATE_REL, &bmp_pic,(uint8_t *)"bmp_printing.bin"); lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buttonPrint, LV_BTN_STATE_PR, &bmp_pic); @@ -316,4 +316,4 @@ void lv_draw_ready_print(void) { void lv_clear_ready_print() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp index e41e943e8cb1..45354def6562 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_set.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" #include "draw_ready_print.h" @@ -33,6 +33,7 @@ //#include "../lvgl/src/lv_core/lv_refr.h" #include "draw_ui.h" #include "../../../../gcode/queue.h" +#include "pic_manager.h" static lv_obj_t * scr; @@ -110,7 +111,10 @@ static void event_handler(lv_obj_t * obj, lv_event_t event) { void lv_draw_set(void) { lv_obj_t *buttonFan, *buttonAbout; - lv_obj_t *buMotorOff, *buttonLanguage, *buttonBack; + lv_obj_t *buMotorOff, *buttonBack; + #if HAS_LANG_SELECT_SCREEN + lv_obj_t *buttonLanguage; + #endif if (disp_state_stack._disp_state[disp_state_stack._disp_index] != SET_UI) { disp_state_stack._disp_index++; @@ -141,7 +145,9 @@ void lv_draw_set(void) { buttonAbout = lv_imgbtn_create(scr, NULL); //buttonContinue = lv_imgbtn_create(scr, NULL); buMotorOff = lv_imgbtn_create(scr, NULL); - buttonLanguage = lv_imgbtn_create(scr, NULL); + #if HAS_LANG_SELECT_SCREEN + buttonLanguage = lv_imgbtn_create(scr, NULL); + #endif buttonBack = lv_imgbtn_create(scr, NULL); @@ -170,20 +176,22 @@ void lv_draw_set(void) { //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_PR, &tft_style_lable_pre); //lv_imgbtn_set_style(buttonContinue, LV_BTN_STATE_REL, &tft_style_lable_rel); #if HAS_SUICIDE - lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_Mamual.bin", 0); + lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_manual_off.bin", 0); #else - lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_Motor_off.bin", 0); + lv_obj_set_event_cb_mks(buMotorOff, event_handler, ID_S_MOTOR_OFF, "bmp_manual_off.bin", 0); #endif lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_REL, &bmp_pic); lv_imgbtn_set_src(buMotorOff, LV_BTN_STATE_PR, &bmp_pic); lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_PR, &tft_style_lable_pre); lv_imgbtn_set_style(buMotorOff, LV_BTN_STATE_REL, &tft_style_lable_rel); - lv_obj_set_event_cb_mks(buttonLanguage, event_handler, ID_S_LANGUAGE, "bmp_Language.bin", 0); - lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_REL, &bmp_pic); - lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_PR, &bmp_pic); - lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_PR, &tft_style_lable_pre); - lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_REL, &tft_style_lable_rel); + #if HAS_LANG_SELECT_SCREEN + lv_obj_set_event_cb_mks(buttonLanguage, event_handler, ID_S_LANGUAGE, "bmp_Language.bin", 0); + lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_REL, &bmp_pic); + lv_imgbtn_set_src(buttonLanguage, LV_BTN_STATE_PR, &bmp_pic); + lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_PR, &tft_style_lable_pre); + lv_imgbtn_set_style(buttonLanguage, LV_BTN_STATE_REL, &tft_style_lable_rel); + #endif lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_S_RETURN, "bmp_Return.bin", 0); lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, &bmp_pic); @@ -205,7 +213,9 @@ void lv_draw_set(void) { lv_obj_set_pos(buttonAbout, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight); //lv_obj_set_pos(buttonContinue,BTN_X_PIXEL*3+INTERVAL_V*4,titleHeight); lv_obj_set_pos(buMotorOff, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight); - lv_obj_set_pos(buttonLanguage, INTERVAL_V, titleHeight); + #if HAS_LANG_SELECT_SCREEN + lv_obj_set_pos(buttonLanguage, INTERVAL_V, titleHeight); + #endif lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight); /*Create a label on the Image button*/ @@ -214,7 +224,9 @@ void lv_draw_set(void) { lv_btn_set_layout(buttonAbout, LV_LAYOUT_OFF); //lv_btn_set_layout(buttonContinue, LV_LAYOUT_OFF); lv_btn_set_layout(buMotorOff, LV_LAYOUT_OFF); - lv_btn_set_layout(buttonLanguage, LV_LAYOUT_OFF); + #if HAS_LANG_SELECT_SCREEN + lv_btn_set_layout(buttonLanguage, LV_LAYOUT_OFF); + #endif lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF); //lv_obj_t * labelWifi= lv_label_create(buttonWifi, NULL); @@ -222,7 +234,9 @@ void lv_draw_set(void) { lv_obj_t * label_About = lv_label_create(buttonAbout, NULL); //lv_obj_t * label_Continue = lv_label_create(buttonContinue, NULL); lv_obj_t * label_MotorOff = lv_label_create(buMotorOff, NULL); - lv_obj_t * label_Language = lv_label_create(buttonLanguage, NULL); + #if HAS_LANG_SELECT_SCREEN + lv_obj_t * label_Language = lv_label_create(buttonLanguage, NULL); + #endif lv_obj_t * label_Back = lv_label_create(buttonBack, NULL); @@ -245,8 +259,10 @@ void lv_draw_set(void) { #endif lv_obj_align(label_MotorOff, buMotorOff, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); - lv_label_set_text(label_Language, set_menu.language); - lv_obj_align(label_Language, buttonLanguage, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); + #if HAS_LANG_SELECT_SCREEN + lv_label_set_text(label_Language, set_menu.language); + lv_obj_align(label_Language, buttonLanguage, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); + #endif lv_label_set_text(label_Back, common_menu.text_back); lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET); @@ -255,4 +271,4 @@ void lv_draw_set(void) { void lv_clear_set() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp index dc87ec57173f..d980d4c08da0 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_tool.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "lv_conf.h" #include "draw_ui.h" @@ -267,4 +267,4 @@ void lv_draw_tool(void) { void lv_clear_tool() { lv_obj_del(scr); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp index c8df85203ecb..52e83204e980 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.cpp @@ -21,11 +21,10 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "W25Qxx.h" #include "tft_lvgl_configuration.h" -#include "pic_manager.h" #include @@ -38,6 +37,8 @@ #include "../../../../module/motion.h" #include "../../../../module/planner.h" +#include "pic_manager.h" + #if ENABLED(POWER_LOSS_RECOVERY) #include "../../../../feature/powerloss.h" #endif @@ -73,7 +74,33 @@ extern void LCD_IO_WriteData(uint16_t RegValue); void gCfgItems_init() { gCfgItems.multiple_language = MULTI_LANGUAGE_ENABLE; - gCfgItems.language = LANG_ENGLISH; + #if 1 //LCD_LANGUAGE == en + gCfgItems.language = LANG_ENGLISH; + #elif LCD_LANGUAGE == zh_CN + gCfgItems.language = LANG_SIMPLE_CHINESE; + #elif LCD_LANGUAGE == zh_TW + gCfgItems.language = LANG_COMPLEX_CHINESE; + #elif LCD_LANGUAGE == jp_kana + gCfgItems.language = LANG_JAPAN; + #elif LCD_LANGUAGE == de + gCfgItems.language = LANG_GERMAN; + #elif LCD_LANGUAGE == fr + gCfgItems.language = LANG_FRENCH; + #elif LCD_LANGUAGE == ru + gCfgItems.language = LANG_RUSSIAN; + #elif LCD_LANGUAGE == ko_KR + gCfgItems.language = LANG_KOREAN; + #elif LCD_LANGUAGE == tr + gCfgItems.language = LANG_TURKISH; + #elif LCD_LANGUAGE == es + gCfgItems.language = LANG_SPANISH; + #elif LCD_LANGUAGE == el + gCfgItems.language = LANG_GREEK; + #elif LCD_LANGUAGE == it + gCfgItems.language = LANG_ITALY; + #elif LCD_LANGUAGE == pt + gCfgItems.language = LANG_PORTUGUESE; + #endif gCfgItems.leveling_mode = 0; gCfgItems.from_flash_pic = 0; gCfgItems.curFilesize = 0; @@ -139,8 +166,13 @@ void tft_style_init() { tft_style_lable_rel.body.grad_color = LV_COLOR_BACKGROUND; tft_style_lable_rel.text.color = LV_COLOR_TEXT; tft_style_lable_rel.text.sel_color = LV_COLOR_TEXT; - tft_style_lable_pre.text.font = &gb2312_puhui32; - tft_style_lable_rel.text.font = &gb2312_puhui32; + #if HAS_SPI_FLASH_FONT + tft_style_lable_pre.text.font = &gb2312_puhui32; + tft_style_lable_rel.text.font = &gb2312_puhui32; + #else + tft_style_lable_pre.text.font = LV_FONT_DEFAULT; + tft_style_lable_rel.text.font = LV_FONT_DEFAULT; + #endif tft_style_lable_pre.line.width = 0; tft_style_lable_rel.line.width = 0; tft_style_lable_pre.text.letter_space = 0; @@ -325,6 +357,9 @@ char *creat_title_text() { return public_buf_m; } +#if HAS_GCODE_PREVIEW +uint32_t gPicturePreviewStart = 0; + void preview_gcode_prehandle(char *path) { #if ENABLED(SDSUPPORT) //uint8_t re; @@ -333,6 +368,7 @@ void preview_gcode_prehandle(char *path) { uint32_t *p1; char *cur_name; + gPicturePreviewStart = 0; cur_name = strrchr(path, '/'); card.openFileRead(cur_name); card.read(public_buf, 512); @@ -369,7 +405,24 @@ void gcode_preview(char *path, int xpos_pixel, int ypos_pixel) { cur_name = strrchr(path, '/'); card.openFileRead(cur_name); - card.setIndex((PREVIEW_LITTLE_PIC_SIZE + To_pre_view) + size * row + 8); + if (gPicturePreviewStart <= 0) { + while (1) { + uint32_t br = card.read(public_buf, 400); + uint32_t* p1 = (uint32_t *)strstr((char *)public_buf, ";gimage:"); + if (p1) { + gPicturePreviewStart += (uint32_t)p1 - (uint32_t)((uint32_t *)(&public_buf[0])); + break; + } + else { + gPicturePreviewStart += br; + } + if (br < 400) break; + } + } + + // SERIAL_ECHOLNPAIR("gPicturePreviewStart: ", gPicturePreviewStart, " PREVIEW_LITTLE_PIC_SIZE: ", PREVIEW_LITTLE_PIC_SIZE); + + card.setIndex((gPicturePreviewStart + To_pre_view) + size * row + 8); #if ENABLED(SPI_GRAPHICAL_TFT) SPI_TFT.spi_init(SPI_FULL_SPEED); //SPI_TFT.SetCursor(0,0); @@ -417,14 +470,16 @@ void gcode_preview(char *path, int xpos_pixel, int ypos_pixel) { #else for (i = 0; i < 400;) { p_index = (uint16_t *)(&bmp_public_buf[i]); - //if (*p_index == 0x0000)*p_index=gCfgItems.preview_bk_color; + if (*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full; //gCfgItems.preview_bk_color; LCD_IO_WriteData(*p_index); i += 2; } #endif - W25QXX.init(SPI_QUARTER_SPEED); - if (row < 20) W25QXX.SPI_FLASH_SectorErase(BAK_VIEW_ADDR_TFT35 + row * 4096); - W25QXX.SPI_FLASH_BufferWrite(bmp_public_buf, BAK_VIEW_ADDR_TFT35 + row * 400, 400); + #if HAS_BAK_VIEW_IN_FLASH + W25QXX.init(SPI_QUARTER_SPEED); + if (row < 20) W25QXX.SPI_FLASH_SectorErase(BAK_VIEW_ADDR_TFT35 + row * 4096); + W25QXX.SPI_FLASH_BufferWrite(bmp_public_buf, BAK_VIEW_ADDR_TFT35 + row * 400, 400); + #endif row++; if (row >= 200) { size = 809; @@ -489,15 +544,19 @@ void Draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) { int x_off = 0, y_off = 0; int _y; uint16_t *p_index; - int i, j; - uint16_t temp_p, Color; + int i; + uint16_t temp_p; for (index = 0; index < 10; index++) { // 200*200 - if (sel == 1) flash_view_Read(bmp_public_buf, 8000); //20k - //memset(bmp_public_buf,0x1f,8000); - else + #if HAS_BAK_VIEW_IN_FLASH + if (sel == 1) flash_view_Read(bmp_public_buf, 8000); //20k //memset(bmp_public_buf,0x1f,8000); - default_view_Read(bmp_public_buf, 8000); //20k + else + //memset(bmp_public_buf,0x1f,8000); + default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); //20k + #else + default_view_Read(bmp_public_buf, DEFAULT_VIEW_MAX_SIZE / 10); //20k + #endif i = 0; #if ENABLED(SPI_GRAPHICAL_TFT) @@ -534,6 +593,7 @@ void Draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) { else { p_index = (uint16_t *)(&bmp_public_buf[i]); } + if (*p_index == 0x0000)*p_index=LV_COLOR_BACKGROUND.full; //gCfgItems.preview_bk_color; LCD_IO_WriteData(*p_index); i += 2; } @@ -547,15 +607,20 @@ void Draw_default_preview(int xpos_pixel, int ypos_pixel, uint8_t sel) { void disp_pre_gcode(int xpos_pixel, int ypos_pixel) { if (gcode_preview_over == 1) gcode_preview(list_file.file_name[sel_id], xpos_pixel, ypos_pixel); - if (flash_preview_begin == 1) { - flash_preview_begin = 0; - Draw_default_preview(xpos_pixel, ypos_pixel, 1); - } - if (default_preview_flg == 1) { - Draw_default_preview(xpos_pixel, ypos_pixel, 0); - default_preview_flg = 0; - } + #if HAS_BAK_VIEW_IN_FLASH + if (flash_preview_begin == 1) { + flash_preview_begin = 0; + Draw_default_preview(xpos_pixel, ypos_pixel, 1); + } + #endif + #if HAS_GCODE_DEFAULT_VIEW_IN_FLASH + if (default_preview_flg == 1) { + Draw_default_preview(xpos_pixel, ypos_pixel, 0); + default_preview_flg = 0; + } + #endif } +#endif void print_time_run() { static uint8_t lastSec = 0; @@ -1175,9 +1240,11 @@ void LV_TASK_HANDLER() { //lv_tick_inc(1); lv_task_handler(); TERN_(MKS_TEST, mks_test()); - disp_pre_gcode(2, 36); + #if HAS_GCODE_PREVIEW + disp_pre_gcode(2, 36); + #endif GUI_RefreshPage(); //sd_detection(); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h index 796c94ab2d30..924c131018ca 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h +++ b/Marlin/src/lcd/extui/lib/mks_ui/draw_ui.h @@ -28,6 +28,11 @@ extern "C" { /* C-declarations for C++ */ #include #include #include "lvgl.h" + +//the colors of the last MKS Ui +#undef LV_COLOR_BACKGROUND +#define LV_COLOR_BACKGROUND LV_COLOR_MAKE(0x1A, 0x1A, 0x1A) //LV_COLOR_MAKE(0x00, 0x00, 0x00) + #include "tft_multi_language.h" #include "draw_ready_print.h" #include "draw_language.h" @@ -214,7 +219,9 @@ extern void tft_style_init(); extern char *creat_title_text(void); extern void preview_gcode_prehandle(char *path); extern void update_spi_flash(); -extern void disp_pre_gcode(int xpos_pixel, int ypos_pixel); +#if HAS_GCODE_PREVIEW + extern void disp_pre_gcode(int xpos_pixel, int ypos_pixel); +#endif extern void GUI_RefreshPage(); extern void clear_cur_ui(); extern void draw_return_ui(); diff --git a/Marlin/src/lcd/extui/lib/mks_ui/gb2312_puhui16.cpp b/Marlin/src/lcd/extui/lib/mks_ui/gb2312_puhui16.cpp index 39fb836b6054..312229a16cad 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/gb2312_puhui16.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/gb2312_puhui16.cpp @@ -21,12 +21,14 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" #include "lvgl.h" #include "pic_manager.h" +#if HAS_SPI_FLASH_FONT + typedef struct { uint16_t min; uint16_t max; @@ -108,4 +110,6 @@ void init_gb2312_font() { gb2312_puhui32.base_line = 0; } -#endif // TFT_LITTLE_VGL_UI +#endif // HAS_SPI_FLASH_FONT + +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp b/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp index 08ce13c8aa80..913b67ab258b 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/mks_hardware_test.cpp @@ -21,19 +21,20 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "tft_lvgl_configuration.h" #include "lvgl.h" #include "draw_ready_print.h" #include "W25Qxx.h" -#include "pic_manager.h" #include "mks_hardware_test.h" #include "../../../../MarlinCore.h" #include "../../../../module/temperature.h" #include "../../../../feature/touch/xpt2046.h" +#include "pic_manager.h" + #if ENABLED(MKS_TEST) extern uint8_t curent_disp_ui; @@ -591,4 +592,4 @@ void disp_font_update() { disp_string(120, 150, "FONT Updating...", 0xFFFF, 0x0000); } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp index 85049ed3a19c..4e9eee892953 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.cpp @@ -21,11 +21,10 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" -//#include "type_define.h" #include "string.h" #include "pic_manager.h" @@ -34,10 +33,6 @@ #include "draw_ready_print.h" #include "mks_hardware_test.h" -//#include "gui.h" -//#include "spi_flash.h" - -//uint8_t DMA_ERRO_FLAG; extern uint16_t DeviceCode; extern unsigned char bmp_public_buf[17 * 1024]; @@ -45,7 +40,158 @@ extern unsigned char bmp_public_buf[17 * 1024]; extern char *createFilename(char * const buffer, const dir_t &p); #endif -/*void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead) {}*/ +static char assets[][30] = { + //homing screen + "bmp_Zero.bin", + "bmp_zeroX.bin", + "bmp_zeroY.bin", + "bmp_zeroZ.bin", + "bmp_manual_off.bin", + + //tool screen + "bmp_PreHeat.bin", + "bmp_Extruct.bin", + "bmp_Mov.bin", + // "bmp_Zero.bin", + "bmp_Leveling.bin", + + //fan screen + "bmp_Add.bin", + "bmp_Dec.bin", + "bmp_Speed255.bin", + "bmp_Speed127.bin", + "bmp_Speed0.bin", + + //preheat screen + // "bmp_Add.bin", + // "bmp_Dec.bin", + "bmp_Speed0.bin", + // "bmp_Extru2.bin", + // "bmp_Extru1.bin", + "bmp_Bed.bin", + "bmp_Step1_degree.bin", + "bmp_Step5_degree.bin", + "bmp_Step10_degree.bin", + + //extrusion screen + "bmp_In.bin", + "bmp_Out.bin", + "bmp_Extru1.bin", + #if EXTRUDERS > 1 + "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", + + //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", + + //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", + + //operation screen + "bmp_auto_off.bin", + "bmp_Speed.bin", + //"bmp_Mamual.bin", //TODO: didn't find it.. changed to bmp_manual_off.bin + "bmp_Fan.bin", + //"bmp_PreHeat.bin", + //"bmp_Extruct.bin", + // "bmp_Mov.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_extrude_opr.bin", equal to "bmp_Extruct.bin" + "bmp_mov_sel.bin", + + //printing screen + "bmp_Pause.bin", + "bmp_Resume.bin", + "bmp_Stop.bin", + "bmp_Ext1_state.bin", + #if EXTRUDERS > 1 + "bmp_Ext2_state.bin", + #endif + "bmp_Bed_state.bin", + "bmp_Fan_state.bin", + "bmp_Time_state.bin", + "bmp_Zpos_state.bin", + "bmp_Operate.bin", + + //manual leval screen (only if disabled auto level) + #if DISABLED(AUTO_BED_LEVELING_BILINEAR) + "bmp_Leveling1.bin", + "bmp_Leveling2.bin", + "bmp_Leveling3.bin", + "bmp_Leveling4.bin", + "bmp_Leveling5.bin", + #endif + + //lang 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", + #endif //HAS_LANG_SELECT_SCREEN + + //gcode preview + #if HAS_GCODE_DEFAULT_VIEW_IN_FLASH + "bmp_preview.bin", + #endif + + //settings screen + "bmp_About.bin", + //"bmp_Language.bin", + //"bmp_Fan.bin", + //"bmp_manual_off.bin", + + //start screen + "bmp_printing.bin", + "bmp_Set.bin", + "bmp_Tool.bin", + + //base icons + "bmp_Return.bin" +}; + +#if HAS_SPI_FLASH_FONT + static char fonts[][50] = { + "GBK16.bin", + "UNIGBK.bin", + }; +#endif uint32_t lv_get_pic_addr(uint8_t *Pname) { uint8_t Pic_cnt; @@ -54,21 +200,22 @@ uint32_t lv_get_pic_addr(uint8_t *Pname) { uint32_t tmp_cnt = 0; uint32_t addr = 0; + #if ENABLED(MARLIN_DEV_MODE) + SERIAL_ECHOLNPAIR("Getting picture SPI Flash Address: ", (const char*)Pname); + #endif + W25QXX.init(SPI_QUARTER_SPEED); W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1); - if (Pic_cnt == 0xff) - Pic_cnt = 0; + if (Pic_cnt == 0xFF) Pic_cnt = 0; for (i = 0; i < Pic_cnt; i++) { j = 0; - do - { + do { W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1); tmp_cnt++; - }while (PIC.name[j++] != '\0'); - - if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) { + } while (PIC.name[j++] != '\0'); + if ((strcasecmp((char*)Pname, (char*)PIC.name)) == 0) { if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) addr = PIC_DATA_ADDR_TFT35 + i * PER_PIC_MAX_SPACE_TFT35; else @@ -86,111 +233,40 @@ const char *bakPath = "bak_pic"; const char *fontPath = "mks_font"; const char *bakFont = "bak_font"; -#if 1 - void spiFlashErase_PIC() { - #if 1 - volatile uint32_t pic_sectorcnt = 0; - - //LCD_Clear(BACK_COLOR); - //LCD_DisplayString(90,80,"SPI Flash"); - //LCD_DisplayString(120,90,"PIC Erasing..."); - if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) { - //LCD_ShowString(180,100,200,24,24,"SPI Flash"); - //LCD_ShowString(170,130,200,24,24,"PIC Erasing..."); - } - else { - //LCD_ShowString(100,90,200,24,24,"SPI Flash"); - //LCD_ShowString(100,120,200,24,24,"PIC Erasing..."); - } - #if ENABLED(MKS_TEST) - for (pic_sectorcnt = 0; pic_sectorcnt < 2; pic_sectorcnt++) - W25QXX.SPI_FLASH_BlockErase(PICINFOADDR + pic_sectorcnt * 64 * 1024); - - #else - for (pic_sectorcnt = 0; pic_sectorcnt < PIC_SIZE_xM * 1024 / 64; pic_sectorcnt++) - W25QXX.SPI_FLASH_BlockErase(PICINFOADDR + pic_sectorcnt * 64 * 1024); - - #endif - /* - FLASH_Unlock(); - spiFlashEraseFlag = SPI_FLASH_ERASE_FLAG_DATA; - FLASH_ProgramHalfWord(SPI_FLASH_ERASE_FLAG_ADDR,spiFlashEraseFlag); - FLASH_Lock(); - */ - #if 0 - if (DeviceCode == 0x9488) - LCD_ShowString(170, 130, 200, 24, 24, "PIC Erase Done"); - else - LCD_ShowString(100, 120, 200, 24, 24, "PIC Erase Done"); - - #endif - //spiFlashEraseFlag = 1; - #endif + volatile uint32_t pic_sectorcnt = 0; + for (pic_sectorcnt = 0; pic_sectorcnt < TERN(MKS_TEST, 2, PIC_SIZE_xM * 1024 / 64); pic_sectorcnt++) + W25QXX.SPI_FLASH_BlockErase(PICINFOADDR + pic_sectorcnt * 64 * 1024); } -void spiFlashErase_FONT() { - volatile uint32_t Font_sectorcnt = 0; - - //LCD_Clear(BACK_COLOR); - if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) { - //LCD_ShowString(180,100,200,24,24,"SPI Flash"); - //LCD_ShowString(170,130,200,24,24,"FONT Erasing..."); +#if HAS_SPI_FLASH_FONT + void spiFlashErase_FONT() { + volatile uint32_t Font_sectorcnt = 0; + for (Font_sectorcnt = 0; Font_sectorcnt < FONT_SIZE_xM * 1024 / 64; Font_sectorcnt++) + W25QXX.SPI_FLASH_BlockErase(FONTINFOADDR + Font_sectorcnt * 64 * 1024); } - else { - //LCD_ShowString(100,90,200,24,24,"SPI Flash"); - //LCD_ShowString(90,120,200,24,24,"FONT Erasing..."); - } - - for (Font_sectorcnt = 0; Font_sectorcnt < FONT_SIZE_xM * 1024 / 64; Font_sectorcnt++) - W25QXX.SPI_FLASH_BlockErase(FONTINFOADDR + Font_sectorcnt * 64 * 1024); - - /* - FLASH_Unlock(); - spiFlashEraseFlag = SPI_FLASH_ERASE_FLAG_DATA; - FLASH_ProgramHalfWord(SPI_FLASH_ERASE_FLAG_ADDR,spiFlashEraseFlag); - FLASH_Lock(); - */ - #if 0 - if (DeviceCode == 0x9488) - LCD_ShowString(170, 130, 200, 24, 24, "FONT Erase Done"); - else - LCD_ShowString(90, 120, 200, 24, 24, "FONT Erase Done"); - //LCD_DisplayString(120,90,"FONT Erase Done"); - #endif - //spiFlashEraseFlag = 1; -} +#endif uint32_t LogoWrite_Addroffset = 0; uint8_t Pic_Logo_Write(uint8_t *LogoName, uint8_t *Logo_Wbuff, uint32_t LogoWriteSize) { - //uint16_t n; - uint32_t i; - uint8_t temp1; - static uint32_t logo_maxsize; - if (LogoWriteSize <= 0) return 0; W25QXX.SPI_FLASH_BufferWrite(Logo_Wbuff, PIC_LOGO_ADDR + LogoWrite_Addroffset, LogoWriteSize); - for (i = 0; i < LogoWriteSize; i++) { + for (uint32_t i = 0; i < LogoWriteSize; i++) { + uint8_t temp1; W25QXX.SPI_FLASH_BufferRead(&temp1, PIC_LOGO_ADDR + LogoWrite_Addroffset + i, 1); if (*(Logo_Wbuff + i) != temp1) return 0; } LogoWrite_Addroffset += LogoWriteSize; - if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) - logo_maxsize = LOGO_MAX_SIZE_TFT35; - else - logo_maxsize = LOGO_MAX_SIZE_TFT32; - if (LogoWrite_Addroffset >= logo_maxsize) - LogoWrite_Addroffset = 0; + const uint32_t logo_maxsize = DeviceCode == 0x9488 || DeviceCode == 0x5761 ? LOGO_MAX_SIZE_TFT35 : LOGO_MAX_SIZE_TFT32; + if (LogoWrite_Addroffset >= logo_maxsize) LogoWrite_Addroffset = 0; return 1; } uint32_t TitleLogoWrite_Addroffset = 0; uint8_t Pic_TitleLogo_Write(uint8_t *TitleLogoName, uint8_t *TitleLogo_Wbuff, uint32_t TitleLogoWriteSize) { - //uint32_t i; - //uint8_t temp1; if (TitleLogoWriteSize <= 0) return 0; if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) @@ -216,18 +292,11 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) { uint32_t Pic_SaveAddr; uint32_t Pic_SizeSaveAddr; uint32_t Pic_NameSaveAddr; - //uint8_t temp; uint8_t Pname_temp; uint32_t i, j; uint32_t name_len = 0; uint32_t SaveName_len = 0; union union32 size_tmp; - //union union32 size1; - //uint8_t Pn[PIC_NAME_MAX_LEN]; - //uint8_t cnt_temp; - //uint16_t n0; - //uint32_t Name_saveAddr = 0; - //uint8_t pic_position; W25QXX.SPI_FLASH_BufferRead(&pic_counter, PIC_COUNTER_ADDR, 1); @@ -266,386 +335,182 @@ uint32_t Pic_Info_Write(uint8_t *P_name, uint32_t P_size) { uint8_t public_buf[512]; -//uint8_t public_buf_test[512]; - #if ENABLED(SDSUPPORT) -void UpdatePic() { - //int r; - //unsigned char *p; - //char rootPath[10]={0}; - char *fn; - unsigned char logoFlag; - uint16_t pbr; - uint32_t pfileSize; - uint32_t Pic_Write_Addr; - /*----------------------------------*/ - - // FILINFO fno; - //DIR dir; - //char tmp[30]; - #if 0//_USE_LFN - static char lfn[_MAX_LFN + 1]; - finfo.lfname = lfn; - finfo.lfsize = sizeof(lfn); - #endif - //SdFile curDir; - //if (f_opendir(&dirs, picPath) == FR_OK) - //card.cd(picPath); - - //const uint16_t fileCnt = card.get_num_Files(); - - //SdFile *curDir; - //SdFile dir; - //dir.open(picPath, O_READ); - //const char * const fname = card.diveToFile(true, curDir, picPath); - //if (!fname) return; - - SdFile dir, root = card.getroot(); - if (dir.open(&root, picPath, O_RDONLY)) { - - disp_pic_update(); - spiFlashErase_PIC(); - - dir_t d; - while (dir.readDir(&d, card.longFilename) > 0) { - #if 1 - /* - if (power_det == 0) { - PW_DET_ON; - power_det=0; - } - SPI_FLASH_Init(); - */ +#if ENABLED(SDSUPPORT) - //for (uint16_t i = 0; i < fileCnt; i++) { - //res = f_readdir(&dirs, &finfo); - //card.getfilename_sorted(i); + static void dosName2LongName(const char dosName[11], char* longName) { + uint8_t j = 0; + LOOP_L_N(i, 11) { + if (i == 8) longName[j++] = '.'; + if (dosName[i] == '\0' || dosName[i] == ' ') continue; + longName[j++] = dosName[i]; + } + longName[j] = '\0'; + } + + void UpdatePic() { + char *fn; + unsigned char logoFlag; + uint16_t pbr; + uint32_t pfileSize; + uint32_t totalSizeLoaded = 0; + uint32_t Pic_Write_Addr; + + SdFile dir, root = card.getroot(); + if (dir.open(&root, picPath, O_RDONLY)) { + + disp_pic_update(); + spiFlashErase_PIC(); + + dir_t d; + while (dir.readDir(&d, card.longFilename) > 0) { + // if we dont get a long name, but gets a short one, try it + if (card.longFilename[0] == 0 && d.name[0] != 0) { + dosName2LongName((const char*)d.name, card.longFilename); + } if (card.longFilename[0] == 0) - break; - /*if ( card.filename[0] == '.') - continue; - */ + continue; if (card.longFilename[0] == '.') continue; - fn = card.longFilename; + uint8_t a = -1; + for(a = 0; a < COUNT(assets); a++) { + if (strcasecmp(assets[a], card.longFilename) == 0) { + break; + } + } + if (a < 0 || a >= COUNT(assets)) continue; - /*if ((finfo.lfname[0] == 0) || (finfo.lfname == 0)) - fn = finfo.fname; - else - fn = finfo.lfname;*/ + fn = assets[a]; + char dosFilename[FILENAME_LENGTH]; + createFilename(dosFilename, d); - /* if (fno.fattrib & AM_DIR) - { + SdFile file; + if (!file.open(&dir, dosFilename, O_READ)) { + #if ENABLED(MARLIN_DEV_MODE) + SERIAL_ECHOLNPAIR("Error opening Asset: ", fn); + #endif continue; } - else */ - //{ - //if ((strstr(fn, ".gco")) || (strstr(fn, ".GCO")) || (fno.fattrib & AM_DIR)) - if (strstr(fn, ".bin")) { - if (strstr(fn, "_logo")) - logoFlag = 1; - else if (strstr(fn, "_titlelogo")) - logoFlag = 2; - else if (strstr(fn, "_preview")) - logoFlag = 3; - else - logoFlag = 0; - - //public_buf[0] = '\0'; - //strcat(public_buf, picPath); - //strcat(public_buf, "/"); - char dosFilename[FILENAME_LENGTH]; - createFilename(dosFilename, d); - //strcat(public_buf, dosFilename); - - SdFile file; - if (file.open(&dir, dosFilename, O_READ)) { - #if 1 - /*LCD_Clear(BACK_COLOR); - - if ((DeviceCode==0x9488)||(DeviceCode==0x5761)) { - LCD_ShowString(170,100,200,24,24,(u8 *)fn); - LCD_ShowString(180,130,200,24,24,"Updating..."); - } - else { - LCD_ShowString(90,90,200,24,24,(u8 *)fn); - LCD_ShowString(90,120,200,24,24,"Updating..."); - } - */ - if (logoFlag == 1) { - while (1) { - pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); - Pic_Logo_Write((uint8_t *)fn, public_buf, pbr); // - if (pbr < BMP_WRITE_BUF_LEN) break; - } - } - else if (logoFlag == 2) { - while (1) { - pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); - Pic_TitleLogo_Write((uint8_t *)fn, public_buf, pbr); // - if (pbr < BMP_WRITE_BUF_LEN) break; - } - } - else if (logoFlag == 3) { - while (1) - { - pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); - default_view_Write(public_buf, pbr); // - if (pbr < BMP_WRITE_BUF_LEN) break; - } - } - else { - pfileSize = file.fileSize(); - Pic_Write_Addr = Pic_Info_Write((uint8_t *)fn, pfileSize); - //uint32_t addr_test = Pic_Write_Addr; - //memset(bmp_public_buf, 0xff, BMP_WRITE_BUF_LEN); - while (1) - { - pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); - W25QXX.SPI_FLASH_BufferWrite(public_buf, Pic_Write_Addr, pbr); - Pic_Write_Addr += pbr; - if (pbr < BMP_WRITE_BUF_LEN) break; - } - //W25QXX.SPI_FLASH_BufferRead(public_buf_test,addr_test,BMP_WRITE_BUF_LEN); - } - /*--------------read test--------------------*/ - /* - BufferSet(picBuffer, 0xff, PICTURE_MAX_SIZE); - if (logoFlag == 0) - { - PicMsg_Init(); - Pic_Read(fn,picBuffer); - } - else - Pic_Logo_Read(fn,picBuffer,PICTURE_MAX_SIZE); - */ - /*--------------read test--------------------*/ - - file.close(); - #endif + if (strstr(fn, "_logo")) + logoFlag = 1; + else if (strstr(fn, "_titlelogo")) + logoFlag = 2; + else if (strstr(fn, "_preview")) + logoFlag = 3; + else + logoFlag = 0; + + pfileSize = file.fileSize(); + totalSizeLoaded += pfileSize; + if (logoFlag == 1) { + while (1) { + pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); + Pic_Logo_Write((uint8_t *)fn, public_buf, pbr); // + if (pbr < BMP_WRITE_BUF_LEN) + break; } - } - //} - //} - /* - LCD_Clear(LCD_COLOR_BLACK); - //LCD_ShowString(110,100,200,24,24,"Complete"); - LCD_DisplayString(110,80,"Complete"); - delay(0xfffff); - */ - //r = f_chdir("/"); - #if 1 - //SdFile dir, root = card.getroot(); - /*if (dir.open(&root, bakPath, O_RDONLY)) - { - dir.remove(); - }*/ - - //r = f_rename(picPath, bakPath); - - - //update_flag_ok = 1; + else if (logoFlag == 2) { + while (1) { + pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); + Pic_TitleLogo_Write((uint8_t *)fn, public_buf, pbr); // + if (pbr < BMP_WRITE_BUF_LEN) + break; + } + } + else if (logoFlag == 3) { + while (1) { + pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); + default_view_Write(public_buf, pbr); // + if (pbr < BMP_WRITE_BUF_LEN) + break; + } + } + else { + Pic_Write_Addr = Pic_Info_Write((uint8_t *)fn, pfileSize); + while (1) { + pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); + W25QXX.SPI_FLASH_BufferWrite(public_buf, Pic_Write_Addr, pbr); + Pic_Write_Addr += pbr; + if (pbr < BMP_WRITE_BUF_LEN) + break; + } + } + + #if ENABLED(MARLIN_DEV_MODE) + SERIAL_ECHOLNPAIR("Asset added: ", fn); #endif - #endif + + file.close(); + } + dir.rename(&root, bakPath); } - dir.rename(&root, bakPath); + dir.close(); + + #if ENABLED(MARLIN_DEV_MODE) + uint8_t pic_counter = 0; + W25QXX.SPI_FLASH_BufferRead(&pic_counter, PIC_COUNTER_ADDR, 1); + SERIAL_ECHOLNPAIR("Total assets loaded: ", pic_counter, ", Total size: ", totalSizeLoaded); + #endif } -} + #if HAS_SPI_FLASH_FONT -void spi_flash_read_test() {W25QXX.SPI_FLASH_BufferRead(public_buf, UNIGBK_FLASH_ADDR, BMP_WRITE_BUF_LEN);} - -void UpdateFont() { - //int r; - //unsigned char *p; - //char rootPath[10]={0}; - char *fn; - //unsigned char logoFlag; - uint16_t pbr; - uint32_t flashaddr = 0; - //uint32_t pfileSize; - //uint32_t Pic_Write_Addr; - /*----------------------------------*/ - - // FILINFO fno; - //DIR dir; - //char tmp[30]; - #if 0//_USE_LFN - static char lfn[_MAX_LFN + 1]; - finfo.lfname = lfn; - finfo.lfsize = sizeof(lfn); - #endif - //SdFile curDir; - //if (f_opendir(&dirs, picPath) == FR_OK) - //card.cd(picPath); - - //const uint16_t fileCnt = card.get_num_Files(); - - //SdFile *curDir; - //SdFile dir; - //dir.open(picPath, O_READ); - //const char * const fname = card.diveToFile(true, curDir, picPath); - //if (!fname) return; - - SdFile dir, root = card.getroot(); - if (dir.open(&root, fontPath, O_RDONLY)) { - - disp_font_update(); - spiFlashErase_FONT(); - - dir_t d; - while (dir.readDir(&d, card.longFilename) > 0) - { - #if 1 - /*if (power_det == 0) - { - PW_DET_ON; - power_det=0; - } - SPI_FLASH_Init();*/ + void spi_flash_read_test() { W25QXX.SPI_FLASH_BufferRead(public_buf, UNIGBK_FLASH_ADDR, BMP_WRITE_BUF_LEN); } + void UpdateFont() { + char *fn; + uint16_t pbr; + uint32_t flashaddr = 0; - //for (uint16_t i = 0; i < fileCnt; i++) - //{ - //res = f_readdir(&dirs, &finfo); - //card.getfilename_sorted(i); + SdFile dir, root = card.getroot(); + if (dir.open(&root, fontPath, O_RDONLY)) { - if (card.longFilename[0] == 0) - break; - /*if ( card.filename[0] == '.') - continue; - */ - if (card.longFilename[0] == '.') - continue; + disp_font_update(); + spiFlashErase_FONT(); - fn = card.longFilename; + dir_t d; + while (dir.readDir(&d, card.longFilename) > 0) { + if (card.longFilename[0] == 0) + break; - /*if ((finfo.lfname[0] == 0) || (finfo.lfname == 0)) - fn = finfo.fname; - else - fn = finfo.lfname;*/ + if (card.longFilename[0] == '.') + continue; + + fn = card.longFilename; + + if (strstr(fn, ".bin")) { + char dosFilename[FILENAME_LENGTH]; + createFilename(dosFilename, d); + //strcat(public_buf, dosFilename); + + SdFile file; + if (file.open(&dir, dosFilename, O_READ)) { - /* if (fno.fattrib & AM_DIR) - { - continue; - } - else */ - //{ - //if ((strstr(fn, ".gco")) || (strstr(fn, ".GCO")) || (fno.fattrib & AM_DIR)) - if (strstr(fn, ".bin")) { - char dosFilename[FILENAME_LENGTH]; - createFilename(dosFilename, d); - //strcat(public_buf, dosFilename); - - SdFile file; - if (file.open(&dir, dosFilename, O_READ)) { - - #if 1 - /*LCD_Clear(BACK_COLOR); - - if ((DeviceCode==0x9488)||(DeviceCode==0x5761)) - { - LCD_ShowString(170,100,200,24,24,(u8 *)fn); - LCD_ShowString(180,130,200,24,24,"Updating..."); - } - else - { - LCD_ShowString(90,90,200,24,24,(u8 *)fn); - LCD_ShowString(90,120,200,24,24,"Updating..."); - } - */ flashaddr = UNIGBK_FLASH_ADDR; pbr = 0; - while (1) - { + while (1) { flashaddr += pbr; pbr = file.read(public_buf, BMP_WRITE_BUF_LEN); W25QXX.SPI_FLASH_BufferWrite(public_buf, flashaddr, pbr); - //W25QXX.SPI_FLASH_BufferRead(public_buf_test,flashaddr,pbr); - /*if (UNIGBKFlag == 1) - { - fontrate = (uint16_t)(((float)(flashaddr - UNIGBK_FLASH_ADDR)/(float)(psrc.fsize))*100); - } - else - { - fontrate = (uint16_t)(((float)(flashaddr - GBK_FLASH_ADDR)/(float)(psrc.fsize))*100); - } - - if (fontrate > 99) fontrate=99; - - if (fontrate < 10) - { - fontString[0] = fontrate%10 + 0x30; - fontString[1] = '%'; - fontString[2] = '\0'; - } - else - { - fontString[0] = fontrate/10 + 0x30; - fontString[1] = fontrate%10 + 0x30; - fontString[2] = '%'; - fontString[3] = '\0'; - }*/ - //LCD_DisplayString(140,130,fontString); - if ((DeviceCode == 0x9488) || (DeviceCode == 0x5761)) { - //LCD_ShowString(200,160,200,24,24,fontString); - } - else { - //LCD_ShowString(140,150,200,24,24,fontString); - } if (pbr < BMP_WRITE_BUF_LEN) break; } - /*--------------read test--------------------*/ - /* - BufferSet(picBuffer, 0xff, PICTURE_MAX_SIZE); - if (logoFlag == 0) - { - PicMsg_Init(); - Pic_Read(fn,picBuffer); - } - else - Pic_Logo_Read(fn,picBuffer,PICTURE_MAX_SIZE); - */ - /*--------------read test--------------------*/ - file.close(); - #endif - } + } + } } - //} - //} - /* - LCD_Clear(LCD_COLOR_BLACK); - //LCD_ShowString(110,100,200,24,24,"Complete"); - LCD_DisplayString(110,80,"Complete"); - delay(0xfffff); - */ - //r = f_chdir("/"); - #if 1 - //SdFile dir, root = card.getroot(); - /*if (dir.open(&root, bakPath, O_RDONLY)) - { - dir.remove(); - }*/ - dir.rename(&root, bakFont); - //r = f_rename(picPath, bakPath); - - - //update_flag_ok = 1; - #endif - #endif + + dir.rename(&root, bakFont); + dir.close(); + } } - } -} - #endif // SDSUPPORT -#endif + #endif // HAS_SPI_FLASH_FONT -#if 1 +#endif // SDSUPPORT void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) { uint8_t i, j; @@ -653,30 +518,21 @@ void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) { uint32_t tmp_cnt = 0; PIC_MSG PIC; - //void SPI_FLASH_BufferRead(u8* pBuffer, u32 ReadAddr, u16 NumByteToRead); - W25QXX.SPI_FLASH_BufferRead(&Pic_cnt, PIC_COUNTER_ADDR, 1); if (Pic_cnt == 0xff) Pic_cnt = 0; for (i = 0; i < Pic_cnt; i++) { - //pic name j = 0; - do - { + do { W25QXX.SPI_FLASH_BufferRead(&PIC.name[j], PIC_NAME_ADDR + tmp_cnt, 1); tmp_cnt++; - }while (PIC.name[j++] != '\0'); + } while (PIC.name[j++] != '\0'); //pic size W25QXX.SPI_FLASH_BufferRead(PIC.size.bytes, PIC_SIZE_ADDR + i * 4, 4); if ((strcmp((char*)Pname, (char*)PIC.name)) == 0) { W25QXX.SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, PIC_DATA_ADDR_TFT35 + i * PER_PIC_MAX_SPACE_TFT35, PIC.size.dwords); - /*if (DMA_ERRO_FLAG) - { - DMA_ERRO_FLAG = 0; - SPI_FLASH_BufferRead((uint8_t *)P_Rbuff,PIC_DATA_ADDR+i*PER_PIC_MAX_SPACE,PIC.size.dwords); - }*/ break; } } @@ -685,41 +541,34 @@ void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff) { void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size) { W25QXX.init(SPI_QUARTER_SPEED); W25QXX.SPI_FLASH_BufferRead((uint8_t *)P_Rbuff, addr, size); - /*if (DMA_ERRO_FLAG) { - DMA_ERRO_FLAG = 0; - SPI_FLASH_BufferRead((uint8_t *)P_Rbuff,addr,size); - }*/ - } -void get_spi_flash_data(const char *rec_buf, int addr, int size) { - W25QXX.init(SPI_QUARTER_SPEED); - W25QXX.SPI_FLASH_BufferRead((uint8_t *)rec_buf, UNIGBK_FLASH_ADDR + addr, size); -} - -#endif - -#if 1 - - uint32_t logo_addroffset = 0; - void Pic_Logo_Read(uint8_t *LogoName, uint8_t *Logo_Rbuff, uint32_t LogoReadsize) { - W25QXX.SPI_FLASH_BufferRead(Logo_Rbuff, PIC_LOGO_ADDR + logo_addroffset, LogoReadsize); - logo_addroffset += LogoReadsize; - if (logo_addroffset >= LOGO_MAX_SIZE_TFT35) - logo_addroffset = 0; +#if HAS_SPI_FLASH_FONT + void get_spi_flash_data(const char *rec_buf, int addr, int size) { + W25QXX.init(SPI_QUARTER_SPEED); + W25QXX.SPI_FLASH_BufferRead((uint8_t *)rec_buf, UNIGBK_FLASH_ADDR + addr, size); } +#endif - uint32_t default_view_addroffset = 0; - void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize) { - W25QXX.init(SPI_QUARTER_SPEED); +uint32_t logo_addroffset = 0; +void Pic_Logo_Read(uint8_t *LogoName, uint8_t *Logo_Rbuff, uint32_t LogoReadsize) { + W25QXX.SPI_FLASH_BufferRead(Logo_Rbuff, PIC_LOGO_ADDR + logo_addroffset, LogoReadsize); + logo_addroffset += LogoReadsize; + if (logo_addroffset >= LOGO_MAX_SIZE_TFT35) + logo_addroffset = 0; +} - W25QXX.SPI_FLASH_BufferRead(default_view_Rbuff, DEFAULT_VIEW_ADDR_TFT35 + default_view_addroffset + 4, default_view_Readsize); - default_view_addroffset += default_view_Readsize; - if (default_view_addroffset >= DEFAULT_VIEW_MAX_SIZE) - default_view_addroffset = 0; +uint32_t default_view_addroffset = 0; +void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize) { + W25QXX.init(SPI_QUARTER_SPEED); - } + W25QXX.SPI_FLASH_BufferRead(default_view_Rbuff, DEFAULT_VIEW_ADDR_TFT35 + default_view_addroffset, default_view_Readsize); + default_view_addroffset += default_view_Readsize; + if (default_view_addroffset >= DEFAULT_VIEW_MAX_SIZE) + default_view_addroffset = 0; +} +#if HAS_BAK_VIEW_IN_FLASH uint32_t flash_view_addroffset = 0; void flash_view_Read(uint8_t *flash_view_Rbuff, uint32_t flash_view_Readsize) { W25QXX.init(SPI_QUARTER_SPEED); @@ -728,9 +577,7 @@ void get_spi_flash_data(const char *rec_buf, int addr, int size) { flash_view_addroffset += flash_view_Readsize; if (flash_view_addroffset >= FLASH_VIEW_MAX_SIZE) flash_view_addroffset = 0; - } - #endif -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h index b307cc8dba0f..4176ee023005 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h +++ b/Marlin/src/lcd/extui/lib/mks_ui/pic_manager.h @@ -29,21 +29,61 @@ extern "C" { /* C-declarations for C++ */ #include #include "lvgl.h" -#if 1 +#include "../../inc/MarlinConfigPre.h" - #define PIC_MAX_CN 100 // Maximum number of pictures - #define PIC_NAME_MAX_LEN 50 // Picture name maximum length +#ifndef HAS_SPI_FLASH_FONT + #define HAS_SPI_FLASH_FONT 0 //disabled until fix the font load code +#endif +#ifndef HAS_GCODE_PREVIEW + #define HAS_GCODE_PREVIEW 1 +#endif +#ifndef HAS_LANG_SELECT_SCREEN + #define HAS_LANG_SELECT_SCREEN 0 +#endif +#ifndef HAS_BAK_VIEW_IN_FLASH + #define HAS_BAK_VIEW_IN_FLASH 1 +#endif +#ifndef HAS_GCODE_DEFAULT_VIEW_IN_FLASH + #define HAS_GCODE_DEFAULT_VIEW_IN_FLASH 1 +#endif +#ifndef SPI_FLASH_SIZE + #define SPI_FLASH_SIZE 0x1000000 // 16MB +#endif - #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 PIC_MAX_CN 100 // Maximum number of pictures +#define PIC_NAME_MAX_LEN 50 // Picture name maximum length - #define PER_PIC_MAX_SPACE_TFT35 (32*1024) - #define PER_PIC_MAX_SPACE_TFT32 (16*1024) - #define PER_FONT_MAX_SPACE (16*1024) +#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 (32*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 + #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 + #define PER_PIC_SAVE_ADDR 0x000000 // Storage address of each picture + #define PIC_LOGO_ADDR 0x000000 // Logo addr + #define PIC_DATA_ADDR 0x003000 // + + // 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 PIC_DATA_ADDR_TFT35 0x003000 // (PIC_ICON_LOGO_ADDR_TFT35+350*1024) //0xC5800 + + #define PIC_DATA_ADDR_TFT32 0x00F000 + #define PIC_ICON_LOGO_ADDR_TFT32 0x5D8000 + #define PIC_OTHER_SIZE_ADDR_TFT32 0x5EE000 + +#else //pic //Robin_pro pic addr #define PIC_NAME_ADDR 0x003000 // Pic information addr @@ -51,13 +91,13 @@ extern "C" { /* C-declarations for C++ */ #define PIC_COUNTER_ADDR 0x008000 // Pic total number #define PER_PIC_SAVE_ADDR 0x009000 // Storage address of each picture #define PIC_LOGO_ADDR 0x00A000 // Logo addr - //#define PIC_DATA_ADDR 0x02F000 // + //#define PIC_DATA_ADDR 0x02F000 // // 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 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 // TFT32 #define PIC_DATA_ADDR_TFT32 0x02F000 @@ -69,48 +109,37 @@ extern "C" { /* C-declarations for C++ */ #define UNIGBK_FLASH_ADDR (FONTINFOADDR+4096) // 4*1024 #define GBK_FLASH_ADDR (UNIGBK_FLASH_ADDR+180224) // 176*1024 - // Flash flag - #define FLASH_INF_VALID_FLAG 0xAA558761 - // SD card information first addr - #define VAR_INF_ADDR 0x000000 - - union union32 { - uint8_t bytes[4]; - uint32_t dwords; - }; - - // pic information - struct pic_msg { - uint8_t name[PIC_NAME_MAX_LEN]; - union union32 size; - }; +#endif - typedef struct pic_msg PIC_MSG; +// Flash flag +#define FLASH_INF_VALID_FLAG 0xAA558761 +// SD card information first addr +#define VAR_INF_ADDR 0x000000 - #define BMP_WRITE_BUF_LEN 512 +union union32 { + uint8_t bytes[4]; + uint32_t dwords; +}; - #define PICINFOADDR 0 +// pic information +struct pic_msg { + uint8_t name[PIC_NAME_MAX_LEN]; + union union32 size; +}; - #define PIC_SIZE_xM 6 - #define FONT_SIZE_xM 2 +typedef struct pic_msg PIC_MSG; - //extern void PicMsg_Init(void); - extern void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff); - //extern void bindBmpFileData(const uint8_t **pBuf, uint8_t *pName); - //extern void Pic_Logo_Read(uint8_t *LogoName,uint8_t *Logo_Rbuff,uint32_t LogoReadsize); - //extern void default_view_Read(uint8_t *default_view_Rbuff,uint32_t default_view_Readsize); - //extern void flash_view_Read(uint8_t *flash_view_Rbuff,uint32_t flash_view_Readsize); +#define BMP_WRITE_BUF_LEN 512 - //extern void lv_Pic_Read(uint8_t *Pname,uint8_t *P_Rbuff,uint32_t addr,uint32_t size); - extern void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size); +#define PICINFOADDR 0 -#endif +#define PIC_SIZE_xM 6 +#define FONT_SIZE_xM 2 +extern void Pic_Read(uint8_t *Pname, uint8_t *P_Rbuff); +extern void lv_pic_test(uint8_t *P_Rbuff, uint32_t addr, uint32_t size); extern uint32_t lv_get_pic_addr(uint8_t *Pname); - extern void get_spi_flash_data(const char *rec_buf, int offset, int size); -//extern void SPI_FLASH_BufferRead(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead); - extern void spi_flash_read_test(); extern void default_view_Read(uint8_t *default_view_Rbuff, uint32_t default_view_Readsize); extern void flash_view_Read(uint8_t *flash_view_Rbuff, uint32_t flash_view_Readsize); diff --git a/Marlin/src/lcd/extui/lib/mks_ui/printer_opration.cpp b/Marlin/src/lcd/extui/lib/mks_ui/printer_opration.cpp index 584a009badfb..ac876bb16a43 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/printer_opration.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/printer_opration.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" @@ -215,4 +215,4 @@ } } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_fsmc.cpp b/Marlin/src/lcd/extui/lib/mks_ui/tft_fsmc.cpp index 25fd7082d9c5..7e782c3fefd0 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/tft_fsmc.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_fsmc.cpp @@ -22,7 +22,7 @@ #include "../../../../inc/MarlinConfig.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #if defined(ARDUINO_ARCH_STM32F1) && PIN_EXISTS(FSMC_CS) // FSMC on 100/144 pins SoCs @@ -230,7 +230,7 @@ return uint32_t(data); } - #if ENABLED(LCD_USE_DMA_FSMC) + #ifdef LCD_USE_DMA_FSMC void LCD_IO_WriteMultiple(uint16_t color, uint32_t count) { while (count > 0) { @@ -270,4 +270,4 @@ #endif // LCD_USE_DMA_FSMC #endif // ARDUINO_ARCH_STM32F1 && FSMC_CS_PIN -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp b/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp index a34b1ff4709b..54c030f96711 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_lvgl_configuration.cpp @@ -27,765 +27,751 @@ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) - #include "../../../../MarlinCore.h" +#include "../../../../MarlinCore.h" - #include "tft_lvgl_configuration.h" - #include "lvgl.h" - #include "../../../../feature/touch/xpt2046.h" - #include "draw_ready_print.h" - #include "W25Qxx.h" - #include "pic_manager.h" +#include "tft_lvgl_configuration.h" +#include "lvgl.h" +#include "../../../../feature/touch/xpt2046.h" +#include "draw_ready_print.h" +#include "W25Qxx.h" +#include "pic_manager.h" - #include "mks_hardware_test.h" - #include "draw_ui.h" +#include "mks_hardware_test.h" +#include "draw_ui.h" - #if ENABLED(POWER_LOSS_RECOVERY) - #include "../../../../feature/powerloss.h" - #endif - - #include - - #if ENABLED(SPI_GRAPHICAL_TFT) - #include "SPI_TFT.h" - #endif +#if ENABLED(POWER_LOSS_RECOVERY) + #include "../../../../feature/powerloss.h" +#endif -//#include "../../Configuration.h" -//#include "../../src/core/macros.h" +#include - extern void LCD_IO_Init(uint8_t cs, uint8_t rs); - extern void LCD_IO_WriteData(uint16_t RegValue); - extern void LCD_IO_WriteReg(uint16_t Reg); +#if ENABLED(SPI_GRAPHICAL_TFT) + #include "SPI_TFT.h" +#endif - extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count); +extern void LCD_IO_Init(uint8_t cs, uint8_t rs); +extern void LCD_IO_WriteData(uint16_t RegValue); +extern void LCD_IO_WriteReg(uint16_t Reg); +extern void LCD_IO_WriteSequence(uint16_t *data, uint16_t length); +extern void LCD_IO_WriteMultiple(uint16_t color, uint32_t count); +#if HAS_SPI_FLASH_FONT extern void init_gb2312_font(); +#endif - static lv_disp_buf_t disp_buf; -//static lv_color_t buf[LV_HOR_RES_MAX * 18]; -//static lv_color_t buf[10*5]; -//extern lv_obj_t * scr; - #if ENABLED(SDSUPPORT) - extern void UpdatePic(); +static lv_disp_buf_t disp_buf; +#if ENABLED(SDSUPPORT) + extern void UpdatePic(); + #if HAS_SPI_FLASH_FONT extern void UpdateFont(); #endif - uint16_t DeviceCode = 0x9488; - extern uint8_t sel_id; +#endif +uint16_t DeviceCode = 0x9488; +extern uint8_t sel_id; + +#define SetCs +#define ClrCs + +#define HDP 799 // Horizontal Display Period +#define HT 1000 // Horizontal Total +#define HPS 51 // LLINE Pulse Start Position +#define LPS 3 // Horizontal Display Period Start Position +#define HPW 8 // LLINE Pulse Width + +#define VDP 479 // Vertical Display Period +#define VT 530 // Vertical Total +#define VPS 24 // LFRAME Pulse Start Position +#define FPS 23 // Vertical Display Period Start Positio +#define VPW 3 // LFRAME Pulse Width + +#define MAX_HZ_POSX HDP+1 +#define MAX_HZ_POSY VDP+1 + +extern uint8_t gcode_preview_over, flash_preview_begin, default_preview_flg; + +void SysTick_Callback() { + lv_tick_inc(1); + print_time_count(); +} + +void tft_set_cursor(uint16_t x, uint16_t y) { + LCD_IO_WriteReg(0x002A); + LCD_IO_WriteData(x >> 8); + LCD_IO_WriteData(x & 0x00FF); + LCD_IO_WriteData(x >> 8); + LCD_IO_WriteData(x & 0x00FF); + //ILI9488_WriteData(0x01); + //ILI9488_WriteData(0xDF); + LCD_IO_WriteReg(0x002B); + LCD_IO_WriteData(y >> 8); + LCD_IO_WriteData(y & 0x00FF); + LCD_IO_WriteData(y >> 8); + LCD_IO_WriteData(y & 0x00FF); + //ILI9488_WriteData(0x01); + //ILI9488_WriteData(0x3F); +} + +void LCD_WriteRAM_Prepare(void) { + #if 0 + if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x8989)) { + ClrCs + LCD->LCD_REG = R34; + SetCs + } + else { + LCD_WrtReg(0x002C); + } + #else + LCD_IO_WriteReg(0x002C); + #endif +} + +void tft_set_point(uint16_t x, uint16_t y, uint16_t point) { + //if (DeviceCode == 0x9488) { + if ((x > 480) || (y > 320)) return; + //} + //**if ( (x>320)||(y>240) ) return; + tft_set_cursor(x, y); /*设置光标位置*/ + + LCD_WriteRAM_Prepare(); /* 开始写入GRAM*/ + //LCD_WriteRAM(point); + LCD_IO_WriteData(point); +} + +void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) { + /* Write 16-bit Index, then Write Reg */ + ClrCs + LCD_IO_WriteReg(LCD_Reg); + /* Write 16-bit Reg */ + LCD_IO_WriteData(LCD_RegValue); + SetCs +} + +void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh) { + uint16_t s_h, s_l, e_h, e_l; + uint16_t xEnd, yEnd; + xEnd = StartX + width; + yEnd = StartY + heigh - 1; + if (DeviceCode == 0x8989) { + /*LCD_WriteReg(0x0044, (StartX & 0xFF) | (xEnd << 8)); + LCD_WriteReg(0x0045, StartY); + LCD_WriteReg(0x0046, yEnd);*/ + LCD_WriteReg(0x0044, (StartY & 0xFF) | (yEnd << 8)); + LCD_WriteReg(0x0045, StartX); + LCD_WriteReg(0x0046, xEnd); + } + else if (DeviceCode == 0x9488) { + s_h = (StartX >> 8) & 0x00ff; + s_l = StartX & 0x00ff; + e_h = ((StartX + width - 1) >> 8) & 0x00ff; + e_l = (StartX + width - 1) & 0x00ff; + + LCD_IO_WriteReg(0x002A); + LCD_IO_WriteData(s_h); + LCD_IO_WriteData(s_l); + LCD_IO_WriteData(e_h); + LCD_IO_WriteData(e_l); + + s_h = (StartY >> 8) & 0x00ff; + s_l = StartY & 0x00ff; + e_h = ((StartY + heigh - 1) >> 8) & 0x00ff; + e_l = (StartY + heigh - 1) & 0x00ff; + + LCD_IO_WriteReg(0x002B); + LCD_IO_WriteData(s_h); + LCD_IO_WriteData(s_l); + LCD_IO_WriteData(e_h); + LCD_IO_WriteData(e_l); + } + else if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x1505)) { + /* LCD_WriteReg(0x0050, StartX); + LCD_WriteReg(0x0052, StartY); + LCD_WriteReg(0x0051, xEnd); + LCD_WriteReg(0x0053, yEnd);*/ + LCD_WriteReg(0x0050, StartY); //Specify the start/end positions of the window address in the horizontal direction by an address unit + LCD_WriteReg(0x0051, yEnd); //Specify the start positions of the window address in the vertical direction by an address unit + LCD_WriteReg(0x0052, 320 - xEnd); + LCD_WriteReg(0x0053, 320 - StartX - 1); //Specify the end positions of the window address in the vertical direction by an address unit - #define SetCs - #define ClrCs + } + else { + s_h = (StartX >> 8) & 0xFF; + s_l = StartX & 0xFF; + e_h = ((StartX + width - 1) >> 8) & 0xFF; + e_l = (StartX + width - 1) & 0xFF; + + LCD_IO_WriteReg(0x2A); + LCD_IO_WriteData(s_h); + LCD_IO_WriteData(s_l); + LCD_IO_WriteData(e_h); + LCD_IO_WriteData(e_l); + + s_h = (StartY >> 8) & 0xFF; + s_l = StartY & 0xFF; + e_h = ((StartY + heigh - 1) >> 8) & 0xFF; + e_l = (StartY + heigh - 1) & 0xFF; + + LCD_IO_WriteReg(0x2B); + LCD_IO_WriteData(s_h); + LCD_IO_WriteData(s_l); + LCD_IO_WriteData(e_h); + LCD_IO_WriteData(e_l); + } +} + +void LCD_Clear(uint16_t Color) { + uint32_t index = 0; + unsigned int count; + + if (DeviceCode == 0x9488) { + tft_set_cursor(0, 0); + ili9320_SetWindows(0, 0, 480, 320); + LCD_WriteRAM_Prepare(); + #ifdef LCD_USE_DMA_FSMC + LCD_IO_WriteMultiple(Color, LCD_FULL_PIXEL_WIDTH * LCD_FULL_PIXEL_HEIGHT); + #else + //index = (160*480); + for (index = 0; index < 320 * 480; index++) + LCD_IO_WriteData(Color); + #endif + //LCD_IO_WriteMultiple(Color, (480*320)); + //while(index --) LCD_IO_WriteData(Color); + } + else if (DeviceCode == 0x5761) { + LCD_IO_WriteReg(0x002a); + LCD_IO_WriteData(0); + LCD_IO_WriteData(0); + LCD_IO_WriteData(HDP >> 8); + LCD_IO_WriteData(HDP & 0x00ff); + LCD_IO_WriteReg(0x002b); + LCD_IO_WriteData(0); + LCD_IO_WriteData(0); + LCD_IO_WriteData(VDP >> 8); + LCD_IO_WriteData(VDP & 0x00ff); + LCD_IO_WriteReg(0x002c); + LCD_IO_WriteReg(0x002c); + for (count = 0; count < (HDP + 1) * (VDP + 1); count++) + LCD_IO_WriteData(Color); + } + else { + tft_set_cursor(0, 0); + LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ + for (index = 0; index < 76800; index++) + LCD_IO_WriteData(Color); + } +} - #define HDP 799//Horizontal Display Period //** - #define HT 1000//Horizontal Total - #define HPS 51//LLINE Pulse Start Position - #define LPS 3 // Horizontal Display Period Start Position - #define HPW 8 // LLINE Pulse Width +extern uint16_t ILI9488_ReadRAM(); - #define VDP 479//Vertical Display Period - #define VT 530//Vertical Total - #define VPS 24// LFRAME Pulse Start Position - #define FPS 23//Vertical Display Period Start Positio - #define VPW 3 // LFRAME Pulse Width //** +#if DISABLED(SPI_GRAPHICAL_TFT) - #define MAX_HZ_POSX HDP+1 - #define MAX_HZ_POSY VDP+1 +void init_tft() { + uint16_t i; + //************* Start Initial Sequence **********// - extern uint8_t gcode_preview_over, flash_preview_begin, default_preview_flg; + //start lcd pins and dma + #if PIN_EXISTS(LCD_BACKLIGHT) + OUT_WRITE(LCD_BACKLIGHT_PIN, DISABLED(DELAYED_BACKLIGHT_INIT)); // Illuminate after reset or right away + #endif - void SysTick_Callback() { - lv_tick_inc(1); - print_time_count(); - } + #if PIN_EXISTS(LCD_RESET) + // Perform a clean hardware reset with needed delays + OUT_WRITE(LCD_RESET_PIN, LOW); + _delay_ms(5); + WRITE(LCD_RESET_PIN, HIGH); + _delay_ms(5); + #endif - void tft_set_cursor(uint16_t x, uint16_t y) { - #if 0 - if (DeviceCode == 0x8989) { - LCD_WriteReg(0x004E, y); //行 - LCD_WriteReg(0x004F, x); //列 - } - else if ((DeviceCode == 0x9919)) { - LCD_WriteReg(0x004E, x); // 行 - LCD_WriteReg(0x004F, y); // 列 - } - else if ((DeviceCode == 0x5761)) { //SSD1963 - LCD_WrtReg(0x002A); - LCD_WrtRAM(x >> 8); - LCD_WrtRAM(x & 0x00FF); - LCD_WrtRAM(HDP >> 8); - LCD_WrtRAM(HDP & 0x00FF); - LCD_WrtReg(0x002B); - LCD_WrtRAM(y >> 8); - LCD_WrtRAM(y & 0x00FF); - LCD_WrtRAM(VDP >> 8); - LCD_WrtRAM(VDP & 0x00FF); - } - else if (DeviceCode == 0x9488) { - ILI9488_WriteCmd(0x002A); - ILI9488_WriteData(x >> 8); - ILI9488_WriteData(x & 0x00FF); - ILI9488_WriteData(x >> 8); - ILI9488_WriteData(x & 0x00FF); - //ILI9488_WriteData(0x01); - //ILI9488_WriteData(0xDF); - ILI9488_WriteCmd(0x002B); - ILI9488_WriteData(y >> 8); - ILI9488_WriteData(y & 0x00FF); - ILI9488_WriteData(y >> 8); - ILI9488_WriteData(y & 0x00FF); - //ILI9488_WriteData(0x01); - //ILI9488_WriteData(0x3F); - } - else { - LCD_WriteReg(0x0020, y); // 行 - LCD_WriteReg(0x0021, 0x13f - x); // 列 - } - #else // if 0 - LCD_IO_WriteReg(0x002A); - LCD_IO_WriteData(x >> 8); - LCD_IO_WriteData(x & 0x00FF); - LCD_IO_WriteData(x >> 8); - LCD_IO_WriteData(x & 0x00FF); - //ILI9488_WriteData(0x01); - //ILI9488_WriteData(0xDF); - LCD_IO_WriteReg(0x002B); - LCD_IO_WriteData(y >> 8); - LCD_IO_WriteData(y & 0x00FF); - LCD_IO_WriteData(y >> 8); - LCD_IO_WriteData(y & 0x00FF); - //ILI9488_WriteData(0x01); - //ILI9488_WriteData(0x3F); - #endif // if 0 - } + #if PIN_EXISTS(LCD_BACKLIGHT) && ENABLED(DELAYED_BACKLIGHT_INIT) + WRITE(LCD_BACKLIGHT_PIN, HIGH); + #endif - void LCD_WriteRAM_Prepare(void) { - #if 0 - if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x8989)) { - ClrCs - LCD->LCD_REG = R34; - SetCs - } - else { - LCD_WrtReg(0x002C); - } - #else - LCD_IO_WriteReg(0x002C); - #endif - } + TERN_(HAS_LCD_CONTRAST, refresh_contrast()); - void tft_set_point(uint16_t x, uint16_t y, uint16_t point) { - //if (DeviceCode == 0x9488) { - if ((x > 480) || (y > 320)) return; - //} - //**if ( (x>320)||(y>240) ) return; - tft_set_cursor(x, y); /*设置光标位置*/ + #ifdef LCD_USE_DMA_FSMC + dma_init(FSMC_DMA_DEV); + dma_disable(FSMC_DMA_DEV, FSMC_DMA_CHANNEL); + dma_set_priority(FSMC_DMA_DEV, FSMC_DMA_CHANNEL, DMA_PRIORITY_MEDIUM); + #endif - LCD_WriteRAM_Prepare(); /* 开始写入GRAM*/ - //LCD_WriteRAM(point); - LCD_IO_WriteData(point); - } + LCD_IO_Init(FSMC_CS_PIN, FSMC_RS_PIN); + + _delay_ms(5); + + LCD_IO_WriteReg(0x00D3); + DeviceCode = ILI9488_ReadRAM(); //dummy read + DeviceCode = ILI9488_ReadRAM(); + DeviceCode = ILI9488_ReadRAM(); + DeviceCode <<= 8; + DeviceCode |= ILI9488_ReadRAM(); + + if (DeviceCode == 0x9488) { + LCD_IO_WriteReg(0x00E0); + LCD_IO_WriteData(0x0000); + LCD_IO_WriteData(0x0007); + LCD_IO_WriteData(0x000f); + LCD_IO_WriteData(0x000D); + LCD_IO_WriteData(0x001B); + LCD_IO_WriteData(0x000A); + LCD_IO_WriteData(0x003c); + LCD_IO_WriteData(0x0078); + LCD_IO_WriteData(0x004A); + LCD_IO_WriteData(0x0007); + LCD_IO_WriteData(0x000E); + LCD_IO_WriteData(0x0009); + LCD_IO_WriteData(0x001B); + LCD_IO_WriteData(0x001e); + LCD_IO_WriteData(0x000f); + + LCD_IO_WriteReg(0x00E1); + LCD_IO_WriteData(0x0000); + LCD_IO_WriteData(0x0022); + LCD_IO_WriteData(0x0024); + LCD_IO_WriteData(0x0006); + LCD_IO_WriteData(0x0012); + LCD_IO_WriteData(0x0007); + LCD_IO_WriteData(0x0036); + LCD_IO_WriteData(0x0047); + LCD_IO_WriteData(0x0047); + LCD_IO_WriteData(0x0006); + LCD_IO_WriteData(0x000a); + LCD_IO_WriteData(0x0007); + LCD_IO_WriteData(0x0030); + LCD_IO_WriteData(0x0037); + LCD_IO_WriteData(0x000f); + + LCD_IO_WriteReg(0x00C0); + LCD_IO_WriteData(0x0010); + LCD_IO_WriteData(0x0010); + + LCD_IO_WriteReg(0x00C1); + LCD_IO_WriteData(0x0041); + + LCD_IO_WriteReg(0x00C5); + LCD_IO_WriteData(0x0000); + LCD_IO_WriteData(0x0022); + LCD_IO_WriteData(0x0080); + + LCD_IO_WriteReg(0x0036); + //ILI9488_WriteData(0x0068); + //if (gCfgItems.overturn_180 != 0xEE) + //{ + LCD_IO_WriteData(0x0068); + //} + //else + //{ + //ILI9488_WriteData(0x00A8); + //} - void LCD_WriteReg(uint16_t LCD_Reg, uint16_t LCD_RegValue) { - /* Write 16-bit Index, then Write Reg */ - ClrCs - LCD_IO_WriteReg(LCD_Reg); - /* Write 16-bit Reg */ - LCD_IO_WriteData(LCD_RegValue); - SetCs - } + LCD_IO_WriteReg(0x003A); //Interface Mode Control + LCD_IO_WriteData(0x0055); - void ili9320_SetWindows(uint16_t StartX, uint16_t StartY, uint16_t width, uint16_t heigh) { - uint16_t s_h, s_l, e_h, e_l; - - uint16_t xEnd, yEnd; - xEnd = StartX + width; - yEnd = StartY + heigh - 1; - if (DeviceCode == 0x8989) { - /*LCD_WriteReg(0x0044, (StartX & 0xFF) | (xEnd << 8)); - LCD_WriteReg(0x0045, StartY); - LCD_WriteReg(0x0046, yEnd);*/ - LCD_WriteReg(0x0044, (StartY & 0xFF) | (yEnd << 8)); - LCD_WriteReg(0x0045, StartX); - LCD_WriteReg(0x0046, xEnd); - } - else if (DeviceCode == 0x9488) { - s_h = (StartX >> 8) & 0x00ff; - s_l = StartX & 0x00ff; - e_h = ((StartX + width - 1) >> 8) & 0x00ff; - e_l = (StartX + width - 1) & 0x00ff; - - LCD_IO_WriteReg(0x002A); - LCD_IO_WriteData(s_h); - LCD_IO_WriteData(s_l); - LCD_IO_WriteData(e_h); - LCD_IO_WriteData(e_l); - - s_h = (StartY >> 8) & 0x00ff; - s_l = StartY & 0x00ff; - e_h = ((StartY + heigh - 1) >> 8) & 0x00ff; - e_l = (StartY + heigh - 1) & 0x00ff; - - LCD_IO_WriteReg(0x002B); - LCD_IO_WriteData(s_h); - LCD_IO_WriteData(s_l); - LCD_IO_WriteData(e_h); - LCD_IO_WriteData(e_l); - } - else if ((DeviceCode == 0x9325) || (DeviceCode == 0x9328) || (DeviceCode == 0x1505)) { - /* LCD_WriteReg(0x0050, StartX); - LCD_WriteReg(0x0052, StartY); - LCD_WriteReg(0x0051, xEnd); - LCD_WriteReg(0x0053, yEnd);*/ - LCD_WriteReg(0x0050, StartY); //Specify the start/end positions of the window address in the horizontal direction by an address unit - LCD_WriteReg(0x0051, yEnd); //Specify the start positions of the window address in the vertical direction by an address unit - LCD_WriteReg(0x0052, 320 - xEnd); - LCD_WriteReg(0x0053, 320 - StartX - 1); //Specify the end positions of the window address in the vertical direction by an address unit + LCD_IO_WriteReg(0x00B0); //Interface Mode Control + LCD_IO_WriteData(0x0000); + LCD_IO_WriteReg(0x00B1); //Frame rate 70HZ + LCD_IO_WriteData(0x00B0); + LCD_IO_WriteData(0x0011); + LCD_IO_WriteReg(0x00B4); + LCD_IO_WriteData(0x0002); + LCD_IO_WriteReg(0x00B6); //RGB/MCU Interface Control + LCD_IO_WriteData(0x0002); + LCD_IO_WriteData(0x0042); - } - else { - s_h = (StartX >> 8) & 0xFF; - s_l = StartX & 0xFF; - e_h = ((StartX + width - 1) >> 8) & 0xFF; - e_l = (StartX + width - 1) & 0xFF; - - LCD_IO_WriteReg(0x2A); - LCD_IO_WriteData(s_h); - LCD_IO_WriteData(s_l); - LCD_IO_WriteData(e_h); - LCD_IO_WriteData(e_l); - - s_h = (StartY >> 8) & 0xFF; - s_l = StartY & 0xFF; - e_h = ((StartY + heigh - 1) >> 8) & 0xFF; - e_l = (StartY + heigh - 1) & 0xFF; - - LCD_IO_WriteReg(0x2B); - LCD_IO_WriteData(s_h); - LCD_IO_WriteData(s_l); - LCD_IO_WriteData(e_h); - LCD_IO_WriteData(e_l); - } - } + LCD_IO_WriteReg(0x00B7); + LCD_IO_WriteData(0x00C6); - void LCD_Clear(uint16_t Color) { - uint32_t index = 0; - unsigned int count; + //WriteComm(0xBE); + //WriteData(0x00); + //WriteData(0x04); - if (DeviceCode == 0x9488) { - tft_set_cursor(0, 0); - ili9320_SetWindows(0, 0, 480, 320); - LCD_WriteRAM_Prepare(); - //index = (160*480); - for (index = 0; index < 320 * 480; index++) - LCD_IO_WriteData(Color); - //LCD_IO_WriteMultiple(Color, (480*320)); - //while(index --) LCD_IO_WriteData(Color); - } - else if (DeviceCode == 0x5761) { - LCD_IO_WriteReg(0x002a); - LCD_IO_WriteData(0); - LCD_IO_WriteData(0); - LCD_IO_WriteData(HDP >> 8); - LCD_IO_WriteData(HDP & 0x00ff); - LCD_IO_WriteReg(0x002b); - LCD_IO_WriteData(0); - LCD_IO_WriteData(0); - LCD_IO_WriteData(VDP >> 8); - LCD_IO_WriteData(VDP & 0x00ff); - LCD_IO_WriteReg(0x002c); - LCD_IO_WriteReg(0x002c); - for (count = 0; count < (HDP + 1) * (VDP + 1); count++) - LCD_IO_WriteData(Color); - } - else { - tft_set_cursor(0, 0); - LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */ - for (index = 0; index < 76800; index++) - LCD_IO_WriteData(Color); - } - } + LCD_IO_WriteReg(0x00E9); + LCD_IO_WriteData(0x0000); - extern uint16_t ILI9488_ReadRAM(); + LCD_IO_WriteReg(0x00F7); + LCD_IO_WriteData(0x00A9); + LCD_IO_WriteData(0x0051); + LCD_IO_WriteData(0x002C); + LCD_IO_WriteData(0x0082); - #if DISABLED(SPI_GRAPHICAL_TFT) + LCD_IO_WriteReg(0x0011); + for (i = 0; i < 65535; i++); + LCD_IO_WriteReg(0x0029); - void init_tft() { - uint16_t i; - //************* Start Initial Sequence **********// + ili9320_SetWindows(0, 0, 480, 320); + LCD_Clear(0x0000); - LCD_IO_Init(FSMC_CS_PIN, FSMC_RS_PIN); + OUT_WRITE(LCD_BACKLIGHT_PIN, HIGH); + } +} - _delay_ms(5); +#endif // if DISABLED(SPI_GRAPHICAL_TFT) - LCD_IO_WriteReg(0x00D3); - DeviceCode = ILI9488_ReadRAM(); //dummy read - DeviceCode = ILI9488_ReadRAM(); - DeviceCode = ILI9488_ReadRAM(); - DeviceCode <<= 8; - DeviceCode |= ILI9488_ReadRAM(); - - if (DeviceCode == 0x9488) { - LCD_IO_WriteReg(0x00E0); - LCD_IO_WriteData(0x0000); - LCD_IO_WriteData(0x0007); - LCD_IO_WriteData(0x000f); - LCD_IO_WriteData(0x000D); - LCD_IO_WriteData(0x001B); - LCD_IO_WriteData(0x000A); - LCD_IO_WriteData(0x003c); - LCD_IO_WriteData(0x0078); - LCD_IO_WriteData(0x004A); - LCD_IO_WriteData(0x0007); - LCD_IO_WriteData(0x000E); - LCD_IO_WriteData(0x0009); - LCD_IO_WriteData(0x001B); - LCD_IO_WriteData(0x001e); - LCD_IO_WriteData(0x000f); - - LCD_IO_WriteReg(0x00E1); - LCD_IO_WriteData(0x0000); - LCD_IO_WriteData(0x0022); - LCD_IO_WriteData(0x0024); - LCD_IO_WriteData(0x0006); - LCD_IO_WriteData(0x0012); - LCD_IO_WriteData(0x0007); - LCD_IO_WriteData(0x0036); - LCD_IO_WriteData(0x0047); - LCD_IO_WriteData(0x0047); - LCD_IO_WriteData(0x0006); - LCD_IO_WriteData(0x000a); - LCD_IO_WriteData(0x0007); - LCD_IO_WriteData(0x0030); - LCD_IO_WriteData(0x0037); - LCD_IO_WriteData(0x000f); - - LCD_IO_WriteReg(0x00C0); - LCD_IO_WriteData(0x0010); - LCD_IO_WriteData(0x0010); - - LCD_IO_WriteReg(0x00C1); - LCD_IO_WriteData(0x0041); - - LCD_IO_WriteReg(0x00C5); - LCD_IO_WriteData(0x0000); - LCD_IO_WriteData(0x0022); - LCD_IO_WriteData(0x0080); - - LCD_IO_WriteReg(0x0036); - //ILI9488_WriteData(0x0068); - //if (gCfgItems.overturn_180 != 0xEE) - //{ - LCD_IO_WriteData(0x0068); - //} - //else - //{ - //ILI9488_WriteData(0x00A8); - //} - - LCD_IO_WriteReg(0x003A); //Interface Mode Control - LCD_IO_WriteData(0x0055); - - LCD_IO_WriteReg(0x00B0); //Interface Mode Control - LCD_IO_WriteData(0x0000); - LCD_IO_WriteReg(0x00B1); //Frame rate 70HZ - LCD_IO_WriteData(0x00B0); - LCD_IO_WriteData(0x0011); - LCD_IO_WriteReg(0x00B4); - LCD_IO_WriteData(0x0002); - LCD_IO_WriteReg(0x00B6); //RGB/MCU Interface Control - LCD_IO_WriteData(0x0002); - LCD_IO_WriteData(0x0042); - - LCD_IO_WriteReg(0x00B7); - LCD_IO_WriteData(0x00C6); - - //WriteComm(0xBE); - //WriteData(0x00); - //WriteData(0x04); - - LCD_IO_WriteReg(0x00E9); - LCD_IO_WriteData(0x0000); - - LCD_IO_WriteReg(0x00F7); - LCD_IO_WriteData(0x00A9); - LCD_IO_WriteData(0x0051); - LCD_IO_WriteData(0x002C); - LCD_IO_WriteData(0x0082); - - LCD_IO_WriteReg(0x0011); - for (i = 0; i < 65535; i++); - LCD_IO_WriteReg(0x0029); - - ili9320_SetWindows(0, 0, 480, 320); - LCD_Clear(0x0000); - - OUT_WRITE(LCD_BACKLIGHT_PIN, HIGH); - } - } +extern uint8_t bmp_public_buf[17 * 1024]; +void tft_lvgl_init() { + //uint16_t test_id=0; + W25QXX.init(SPI_QUARTER_SPEED); + //test_id=W25QXX.W25QXX_ReadID(); - #endif // if DISABLED(SPI_GRAPHICAL_TFT) + //init tft first! + #if ENABLED(SPI_GRAPHICAL_TFT) + SPI_TFT.spi_init(SPI_FULL_SPEED); + SPI_TFT.LCD_init(); + #else + init_tft(); + #endif - extern uint8_t bmp_public_buf[17 * 1024]; - void tft_lvgl_init() { - //uint16_t test_id=0; - W25QXX.init(SPI_QUARTER_SPEED); - //test_id=W25QXX.W25QXX_ReadID(); - #if ENABLED(SDSUPPORT) - UpdatePic(); + #if ENABLED(SDSUPPORT) + UpdatePic(); + #if HAS_SPI_FLASH_FONT UpdateFont(); #endif + #endif - gCfgItems_init(); - ui_cfg_init(); - disp_language_init(); - //spi_flash_read_test(); + gCfgItems_init(); + ui_cfg_init(); + disp_language_init(); + //spi_flash_read_test(); - #if ENABLED(SPI_GRAPHICAL_TFT) - SPI_TFT.spi_init(SPI_FULL_SPEED); - SPI_TFT.LCD_init(); - #else - init_tft(); - #endif + #if ENABLED(TOUCH_BUTTONS) + touch.init(); + #endif - lv_init(); + lv_init(); - lv_disp_buf_init(&disp_buf, bmp_public_buf, NULL, LV_HOR_RES_MAX * 18); /*Initialize the display buffer*/ + lv_disp_buf_init(&disp_buf, bmp_public_buf, NULL, LV_HOR_RES_MAX * 18); /*Initialize the display buffer*/ - lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/ - lv_disp_drv_init(&disp_drv); /*Basic initialization*/ - disp_drv.flush_cb = my_disp_flush; /*Set your driver function*/ - disp_drv.buffer = &disp_buf; /*Assign the buffer to the display*/ - lv_disp_drv_register(&disp_drv); /*Finally register the driver*/ + lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/ + lv_disp_drv_init(&disp_drv); /*Basic initialization*/ + disp_drv.flush_cb = my_disp_flush; /*Set your driver function*/ + disp_drv.buffer = &disp_buf; /*Assign the buffer to the display*/ + lv_disp_drv_register(&disp_drv); /*Finally register the driver*/ - lv_indev_drv_t indev_drv; - lv_indev_drv_init(&indev_drv); /*Descriptor of a input device driver*/ - indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/ - indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/ - lv_indev_drv_register(&indev_drv); /*Finally register the driver*/ + lv_indev_drv_t indev_drv; + lv_indev_drv_init(&indev_drv); /*Descriptor of a input device driver*/ + indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/ + indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/ + lv_indev_drv_register(&indev_drv); /*Finally register the driver*/ - systick_attach_callback(SysTick_Callback); + systick_attach_callback(SysTick_Callback); + #if HAS_SPI_FLASH_FONT init_gb2312_font(); + #endif - tft_style_init(); - - filament_pin_setup(); + tft_style_init(); - #if ENABLED(POWER_LOSS_RECOVERY) - if (recovery.valid()) { - if (gCfgItems.from_flash_pic == 1) - flash_preview_begin = 1; - else - default_preview_flg = 1; + filament_pin_setup(); - uiCfg.print_state = REPRINTING; + #if ENABLED(POWER_LOSS_RECOVERY) + if (recovery.valid()) { + if (gCfgItems.from_flash_pic == 1) + flash_preview_begin = 1; + else + default_preview_flg = 1; - memset(public_buf_m, 0, sizeof(public_buf_m)); - strncpy(public_buf_m, recovery.info.sd_filename, sizeof(public_buf_m)); - card.printLongPath(public_buf_m); + uiCfg.print_state = REPRINTING; - strncpy(list_file.long_name[sel_id], card.longFilename, sizeof(list_file.long_name[sel_id])); + memset(public_buf_m, 0, sizeof(public_buf_m)); + strncpy(public_buf_m, recovery.info.sd_filename, sizeof(public_buf_m)); + card.printLongPath(public_buf_m); - lv_draw_printing(); - } - else - #endif - lv_draw_ready_print(); + strncpy(list_file.long_name[sel_id], card.longFilename, sizeof(list_file.long_name[sel_id])); - #if ENABLED(MKS_TEST) - Test_GPIO(); - #endif + lv_draw_printing(); } + else + #endif + lv_draw_ready_print(); - #if 0 - void LCD_WriteRAM(uint16_t RGB_Code) { - #if 0 - ClrCs - /* Write 16-bit GRAM Reg */ - LCD->LCD_RAM = RGB_Code; - SetCs - #else - LCD_IO_WriteData(RGB_Code); - #endif - } + #if ENABLED(MKS_TEST) + Test_GPIO(); #endif +} - void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p) { - #if ENABLED(SPI_GRAPHICAL_TFT) - uint16_t i, width, height; - uint16_t clr_temp; - uint8_t tbuf[480 * 2]; +void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p) { + #if ENABLED(SPI_GRAPHICAL_TFT) + uint16_t i, width, height; + uint16_t clr_temp; + uint8_t tbuf[480 * 2]; + + SPI_TFT.spi_init(SPI_FULL_SPEED); + + width = area->x2 - area->x1 + 1; + height = area->y2 - area->y1 + 1; + + for (int j = 0; j < height; j++) { + SPI_TFT.SetCursor(0, 0); + SPI_TFT.SetWindows((uint16_t)area->x1, (uint16_t)area->y1 + j, width, 1); + SPI_TFT.LCD_WriteRAM_Prepare(); + + for (i = 0; i < width * 2;) { + clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11) + | ((uint16_t)color_p->ch.green << 5) + | ((uint16_t)color_p->ch.blue)); - SPI_TFT.spi_init(SPI_FULL_SPEED); + tbuf[i] = clr_temp >> 8; + tbuf[i + 1] = clr_temp; + i += 2; + color_p++; + } + SPI_TFT_CS_L; + SPI_TFT_DC_H; + SPI.dmaSend(tbuf, width * 2, true); + SPI_TFT_CS_H; + } + + lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/ + W25QXX.init(SPI_QUARTER_SPEED); + #else + #if 1 + uint16_t i, width, height; + uint16_t clr_temp; width = area->x2 - area->x1 + 1; height = area->y2 - area->y1 + 1; - - for (int j = 0; j < height; j++) { - SPI_TFT.SetCursor(0, 0); - SPI_TFT.SetWindows((uint16_t)area->x1, (uint16_t)area->y1 + j, width, 1); - SPI_TFT.LCD_WriteRAM_Prepare(); - - for (i = 0; i < width * 2;) { - clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11) - | ((uint16_t)color_p->ch.green << 5) - | ((uint16_t)color_p->ch.blue)); - - tbuf[i] = clr_temp >> 8; - tbuf[i + 1] = clr_temp; - i += 2; - color_p++; - } - SPI_TFT_CS_L; - SPI_TFT_DC_H; - SPI.dmaSend(tbuf, width * 2, true); - SPI_TFT_CS_H; + ili9320_SetWindows((uint16_t)area->x1, (uint16_t)area->y1, width, height); + LCD_WriteRAM_Prepare(); + for (i = 0; i < width * height - 2; i++) { + clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11) + | ((uint16_t)color_p->ch.green << 5) + | ((uint16_t)color_p->ch.blue)); + LCD_IO_WriteData(clr_temp); + color_p++; } lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/ + #endif + #endif // SPI_GRAPHICAL_TFT +} - W25QXX.init(SPI_QUARTER_SPEED); - #else - #if 1 - uint16_t i, width, height; - uint16_t clr_temp; - #if 0 - int32_t x, y; - for (y = area->y1; y <= area->y2; y++) - for (x = area->x1; x <= area->x2; x++) { - //set_pixel(x, y, *color_p); /* Put a pixel to the display.*/ - clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11) - | ((uint16_t)color_p->ch.green << 5) - | ((uint16_t)color_p->ch.blue)); - tft_set_point(x, y, clr_temp); - color_p++; - } - - #else - width = area->x2 - area->x1 + 1; - height = area->y2 - area->y1 + 1; - //tft_set_cursor((uint16_t)area->x1,(uint16_t)area->y1); - ili9320_SetWindows((uint16_t)area->x1, (uint16_t)area->y1, width, height); - LCD_WriteRAM_Prepare(); - for (i = 0; i < width * height; i++) { - clr_temp = (uint16_t)(((uint16_t)color_p->ch.red << 11) - | ((uint16_t)color_p->ch.green << 5) - | ((uint16_t)color_p->ch.blue)); - LCD_IO_WriteData(clr_temp); - color_p++; - } - #endif - - lv_disp_flush_ready(disp); /* Indicate you are ready with the flushing*/ - #endif - #endif // SPI_GRAPHICAL_TFT - } - - #define TICK_CYCLE 1 +#define TICK_CYCLE 1 - static int32_t touch_time1 = 0; +static int32_t touch_time1 = 0; - unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) { - if (lastTick <= curTick) - return (curTick - lastTick) * TICK_CYCLE; - else - return (0xFFFFFFFF - lastTick + curTick) * TICK_CYCLE; - } +unsigned int getTickDiff(unsigned int curTick, unsigned int lastTick) { + return TICK_CYCLE * (lastTick <= curTick ? (curTick - lastTick) : (0xFFFFFFFF - lastTick + curTick)); +} - #if ENABLED(SPI_GRAPHICAL_TFT) +#if ENABLED(SPI_GRAPHICAL_TFT) - #ifndef USE_XPT2046 - #define USE_XPT2046 1 - #define XPT2046_XY_SWAP 1 - #define XPT2046_X_INV 1 - #define XPT2046_Y_INV 0 - #endif + #ifndef USE_XPT2046 + #define USE_XPT2046 1 + #define XPT2046_XY_SWAP 1 + #define XPT2046_X_INV 1 + #define XPT2046_Y_INV 0 + #endif - #if USE_XPT2046 - #define XPT2046_HOR_RES 480 - #define XPT2046_VER_RES 320 - #define XPT2046_X_MIN 201 - #define XPT2046_Y_MIN 164 - #define XPT2046_X_MAX 3919 - #define XPT2046_Y_MAX 3776 - #define XPT2046_AVG 4 - #define XPT2046_INV 1 - #endif + #if USE_XPT2046 + #define XPT2046_HOR_RES 480 + #define XPT2046_VER_RES 320 + #define XPT2046_X_MIN 201 + #define XPT2046_Y_MIN 164 + #define XPT2046_X_MAX 3919 + #define XPT2046_Y_MAX 3776 + #define XPT2046_AVG 4 + #define XPT2046_INV 1 + #endif - #else +#else - #ifndef USE_XPT2046 - #define USE_XPT2046 1 + #ifndef USE_XPT2046 + #define USE_XPT2046 1 + #ifndef XPT2046_XY_SWAP #define XPT2046_XY_SWAP 1 + #endif + #ifndef XPT2046_X_INV #define XPT2046_X_INV 0 + #endif + #ifndef XPT2046_Y_INV #define XPT2046_Y_INV 1 #endif + #endif - #if USE_XPT2046 + #if USE_XPT2046 + #ifndef XPT2046_HOR_RES 480 #define XPT2046_HOR_RES 480 + #endif + #ifndef XPT2046_VER_RES #define XPT2046_VER_RES 320 + #endif + #ifndef XPT2046_X_MIN #define XPT2046_X_MIN 201 + #endif + #ifndef XPT2046_Y_MIN #define XPT2046_Y_MIN 164 + #endif + #ifndef XPT2046_X_MAX #define XPT2046_X_MAX 3919 + #endif + #ifndef XPT2046_Y_MAX #define XPT2046_Y_MAX 3776 + #endif + #ifndef XPT2046_AVG #define XPT2046_AVG 4 + #endif + #ifndef XPT2046_INV #define XPT2046_INV 0 #endif + #endif +#endif + +static void xpt2046_corr(uint16_t *x, uint16_t *y) { + #if XPT2046_XY_SWAP + int16_t swap_tmp; + swap_tmp = *x; + *x = *y; + *y = swap_tmp; + #endif + if ((*x) > XPT2046_X_MIN) (*x) -= XPT2046_X_MIN; else (*x) = 0; + if ((*y) > XPT2046_Y_MIN) (*y) -= XPT2046_Y_MIN; else (*y) = 0; + (*x) = uint32_t(uint32_t(*x) * XPT2046_HOR_RES) / (XPT2046_X_MAX - XPT2046_X_MIN); + (*y) = uint32_t(uint32_t(*y) * XPT2046_VER_RES) / (XPT2046_Y_MAX - XPT2046_Y_MIN); + #if XPT2046_X_INV + (*x) = XPT2046_HOR_RES - (*x); #endif + #if XPT2046_Y_INV + (*y) = XPT2046_VER_RES - (*y); + #endif +} - static void xpt2046_corr(uint16_t *x, uint16_t *y) { - #if XPT2046_XY_SWAP - int16_t swap_tmp; - swap_tmp = *x; - *x = *y; - *y = swap_tmp; - #endif - if ((*x) > XPT2046_X_MIN) (*x) -= XPT2046_X_MIN; else (*x) = 0; - if ((*y) > XPT2046_Y_MIN) (*y) -= XPT2046_Y_MIN; else (*y) = 0; - (*x) = uint32_t(uint32_t(*x) * XPT2046_HOR_RES) / (XPT2046_X_MAX - XPT2046_X_MIN); - (*y) = uint32_t(uint32_t(*y) * XPT2046_VER_RES) / (XPT2046_Y_MAX - XPT2046_Y_MIN); - #if XPT2046_X_INV - (*x) = XPT2046_HOR_RES - (*x); - #endif - #if XPT2046_Y_INV - (*y) = XPT2046_VER_RES - (*y); - #endif - } +#define times 4 +#define CHX 0x90 +#define CHY 0xD0 - #define times 4 - #define CHX 0x90// 0x90 - #define CHY 0xD0// 0xD0 +int SPI2_ReadWrite2Bytes(void) { + volatile uint16_t ans = 0; + uint16_t temp = 0; + #if ENABLED(SPI_GRAPHICAL_TFT) + temp = SPI_TFT.spi_read_write_byte(0xFF); + ans = temp << 8; + temp = SPI_TFT.spi_read_write_byte(0xFF); + ans |= temp; + ans >>= 3; + #else + temp = W25QXX.spi_flash_read_write_byte(0xFF); + ans = temp << 8; + temp = W25QXX.spi_flash_read_write_byte(0xFF); + ans |= temp; + ans >>= 3; + #endif + return ans & 0x0FFF; +} - int SPI2_ReadWrite2Bytes(void) { - volatile uint16_t ans = 0; - uint16_t temp = 0; - #if ENABLED(SPI_GRAPHICAL_TFT) - temp = SPI_TFT.spi_read_write_byte(0xFF); - ans = temp << 8; - temp = SPI_TFT.spi_read_write_byte(0xFF); - ans |= temp; - ans >>= 3; - #else - temp = W25QXX.spi_flash_read_write_byte(0xFF); - ans = temp << 8; - temp = W25QXX.spi_flash_read_write_byte(0xFF); - ans |= temp; - ans >>= 3; - #endif - return ans & 0x0FFF; - } +uint16_t x_addata[times], y_addata[times]; +void XPT2046_Rd_Addata(uint16_t *X_Addata, uint16_t *Y_Addata) { + uint16_t i, j, k; - uint16_t x_addata[times], y_addata[times]; - void XPT2046_Rd_Addata(uint16_t *X_Addata, uint16_t *Y_Addata) { - uint16_t i, j, k; - //int result; - //#if ENABLED(TOUCH_BUTTONS) + #if ENABLED(SPI_GRAPHICAL_TFT) + SPI_TFT.spi_init(SPI_QUARTER_SPEED); + #endif + for (i = 0; i < times; i++) { #if ENABLED(SPI_GRAPHICAL_TFT) - SPI_TFT.spi_init(SPI_QUARTER_SPEED); + OUT_WRITE(TOUCH_CS_PIN, LOW); + SPI_TFT.spi_read_write_byte(CHX); + y_addata[i] = SPI2_ReadWrite2Bytes(); + WRITE(TOUCH_CS_PIN, HIGH); + + OUT_WRITE(TOUCH_CS_PIN, LOW); + SPI_TFT.spi_read_write_byte(CHY); + x_addata[i] = SPI2_ReadWrite2Bytes(); + WRITE(TOUCH_CS_PIN, HIGH); + #else // #if ENABLED(TOUCH_BUTTONS) + OUT_WRITE(TOUCH_CS_PIN, LOW); + W25QXX.spi_flash_read_write_byte(CHX); + y_addata[i] = SPI2_ReadWrite2Bytes(); + WRITE(TOUCH_CS_PIN, HIGH); + + OUT_WRITE(TOUCH_CS_PIN, LOW); + W25QXX.spi_flash_read_write_byte(CHY); + x_addata[i] = SPI2_ReadWrite2Bytes(); + WRITE(TOUCH_CS_PIN, HIGH); #endif - for (i = 0; i < times; i++) { - #if ENABLED(SPI_GRAPHICAL_TFT) - OUT_WRITE(TOUCH_CS_PIN, LOW); - SPI_TFT.spi_read_write_byte(CHX); - y_addata[i] = SPI2_ReadWrite2Bytes(); - WRITE(TOUCH_CS_PIN, HIGH); - - OUT_WRITE(TOUCH_CS_PIN, LOW); - SPI_TFT.spi_read_write_byte(CHY); - x_addata[i] = SPI2_ReadWrite2Bytes(); - WRITE(TOUCH_CS_PIN, HIGH); - #else // #if ENABLED(TOUCH_BUTTONS) - OUT_WRITE(TOUCH_CS_PIN, LOW); - W25QXX.spi_flash_read_write_byte(CHX); - y_addata[i] = SPI2_ReadWrite2Bytes(); - WRITE(TOUCH_CS_PIN, HIGH); - - OUT_WRITE(TOUCH_CS_PIN, LOW); - W25QXX.spi_flash_read_write_byte(CHY); - x_addata[i] = SPI2_ReadWrite2Bytes(); - WRITE(TOUCH_CS_PIN, HIGH); - #endif - - } - //#endif - //result = x_addata[0]; - for (i = 0; i < times; i++) - for (j = i + 1; j < times; j++) - if (x_addata[j] > x_addata[i]) { - k = x_addata[j]; - x_addata[j] = x_addata[i]; - x_addata[i] = k; - } - if (x_addata[times / 2 - 1] - x_addata[times / 2] > 50) { - *X_Addata = *Y_Addata = 0; - return; - } + } - *X_Addata = (x_addata[times / 2 - 1] + x_addata[times / 2]) / 2; + for (i = 0; i < times; i++) + for (j = i + 1; j < times; j++) + if (x_addata[j] > x_addata[i]) { + k = x_addata[j]; + x_addata[j] = x_addata[i]; + x_addata[i] = k; + } + if (x_addata[times / 2 - 1] - x_addata[times / 2] > 50) { + *X_Addata = *Y_Addata = 0; + return; + } - //result = y_addata[0]; - for (i = 0; i < times; i++) - for (j = i + 1; j < times; j++) - if (y_addata[j] > y_addata[i]) { - k = y_addata[j]; - y_addata[j] = y_addata[i]; - y_addata[i] = k; - } + *X_Addata = (x_addata[times / 2 - 1] + x_addata[times / 2]) / 2; - if (y_addata[times / 2 - 1] - y_addata[times / 2] > 50) { - *X_Addata = *Y_Addata = 0; - return; - } + for (i = 0; i < times; i++) + for (j = i + 1; j < times; j++) + if (y_addata[j] > y_addata[i]) { + k = y_addata[j]; + y_addata[j] = y_addata[i]; + y_addata[i] = k; + } - *Y_Addata = (y_addata[times / 2 - 1] + y_addata[times / 2]) / 2; + if (y_addata[times / 2 - 1] - y_addata[times / 2] > 50) { + *X_Addata = *Y_Addata = 0; + return; } - #define ADC_VALID_OFFSET 10 + *Y_Addata = (y_addata[times / 2 - 1] + y_addata[times / 2]) / 2; +} + +#define ADC_VALID_OFFSET 10 + +uint8_t TOUCH_PressValid(uint16_t _usX, uint16_t _usY) { + if ( (_usX <= ADC_VALID_OFFSET) || (_usY <= ADC_VALID_OFFSET) + || (_usX >= 4095 - ADC_VALID_OFFSET) || (_usY >= 4095 - ADC_VALID_OFFSET) + ) return 0; + return 1; +} + +static lv_coord_t last_x = 0, last_y = 0; +bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) { + uint32_t tmpTime, diffTime = 0; + + tmpTime = millis(); + diffTime = getTickDiff(tmpTime, touch_time1); + /*Save the state and save the pressed coordinate*/ + //data->state = TOUCH_PressValid(last_x, last_y) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; + //if (data->state == LV_INDEV_STATE_PR) ADS7843_Rd_Addata((u16 *)&last_x, (u16 *)&last_y); + //touchpad_get_xy(&last_x, &last_y); + /*Save the pressed coordinates and the state*/ + if (diffTime > 10) { + //use marlin touch code if enabled + #if ENABLED(TOUCH_BUTTONS) + touch.getTouchPoint(reinterpret_cast(last_x), reinterpret_cast(last_y)); + #else + XPT2046_Rd_Addata((uint16_t *)&last_x, (uint16_t *)&last_y); + #endif + if (TOUCH_PressValid(last_x, last_y)) { - uint8_t TOUCH_PressValid(uint16_t _usX, uint16_t _usY) { - if ((_usX <= ADC_VALID_OFFSET) || (_usY <= ADC_VALID_OFFSET) - || (_usX >= 4095 - ADC_VALID_OFFSET) || (_usY >= 4095 - ADC_VALID_OFFSET) - ) return 0; + data->state = LV_INDEV_STATE_PR; - return 1; - } + /*Set the coordinates (if released use the last pressed coordinates)*/ - static lv_coord_t last_x = 0, last_y = 0; - bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data) { - #if 1 - uint32_t tmpTime, diffTime = 0; - - tmpTime = millis(); - diffTime = getTickDiff(tmpTime, touch_time1); - /*Save the state and save the pressed coordinate*/ - //data->state = TOUCH_PressValid(last_x, last_y) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL; - //if (data->state == LV_INDEV_STATE_PR) ADS7843_Rd_Addata((u16 *)&last_x, (u16 *)&last_y); - //touchpad_get_xy(&last_x, &last_y); - /*Save the pressed coordinates and the state*/ - if (diffTime > 10) { - XPT2046_Rd_Addata((uint16_t *)&last_x, (uint16_t *)&last_y); - if (TOUCH_PressValid(last_x, last_y)) { - - data->state = LV_INDEV_STATE_PR; - - /*Set the coordinates (if released use the last pressed coordinates)*/ - - xpt2046_corr((uint16_t *)&last_x, (uint16_t *)&last_y); - data->point.x = last_x; - data->point.y = last_y; - - } - else { - data->state = LV_INDEV_STATE_REL; - } - touch_time1 = tmpTime; - } + // SERIAL_ECHOLNPAIR("antes X: ", last_x, ", y: ", last_y); + xpt2046_corr((uint16_t *)&last_x, (uint16_t *)&last_y); + // SERIAL_ECHOLNPAIR("X: ", last_x, ", y: ", last_y); + data->point.x = last_x; + data->point.y = last_y; - return false; /*Return `false` because we are not buffering and no more data to read*/ - #endif + last_x = 0; + last_y = 0; + } + else { + data->state = LV_INDEV_STATE_REL; + } + touch_time1 = tmpTime; } -#endif // TFT_LITTLE_VGL_UI + return false; /*Return `false` because we are not buffering and no more data to read*/ +} + +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp b/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp index 8fe6c8cbf829..7e29714443ac 100644 --- a/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp +++ b/Marlin/src/lcd/extui/lib/mks_ui/tft_multi_language.cpp @@ -21,7 +21,7 @@ */ #include "../../../../inc/MarlinConfigPre.h" -#if ENABLED(TFT_LITTLE_VGL_UI) +#if ENABLED(TFT_LVGL_UI) #include "../../../../MarlinCore.h" @@ -1900,4 +1900,4 @@ void disp_language_init() { } } -#endif // TFT_LITTLE_VGL_UI +#endif // TFT_LVGL_UI diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index 65518908cb3d..5e1f2cfacf2f 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -590,6 +590,8 @@ namespace ExtUI { #if HAS_FILAMENT_SENSOR bool getFilamentRunoutEnabled() { return runout.enabled; } void setFilamentRunoutEnabled(const bool value) { runout.enabled = value; } + bool getFilamentRunoutState() { return runout.filament_ran_out; } + void setFilamentRunoutState(const bool value) { runout.filament_ran_out = value; } #if HAS_FILAMENT_RUNOUT_DISTANCE float getFilamentRunoutDistance_mm() { return runout.runout_distance(); } @@ -884,6 +886,7 @@ namespace ExtUI { #endif void injectCommands_P(PGM_P const gcode) { queue.inject_P(gcode); } + void injectCommands(char * const gcode) { queue.inject(gcode); } bool commandsInQueue() { return (planner.movesplanned() || queue.has_commands_queued()); } diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 0f9c6ff48eec..103cf6c1047f 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -74,6 +74,7 @@ namespace ExtUI { bool canMove(const axis_t); bool canMove(const extruder_t); void injectCommands_P(PGM_P const); + void injectCommands(char * const); bool commandsInQueue(); bool isHeaterIdle(const heater_t); @@ -236,6 +237,8 @@ namespace ExtUI { #if HAS_FILAMENT_SENSOR bool getFilamentRunoutEnabled(); void setFilamentRunoutEnabled(const bool); + bool getFilamentRunoutState(); + void setFilamentRunoutState(const bool); #if HAS_FILAMENT_RUNOUT_DISTANCE float getFilamentRunoutDistance_mm(); diff --git a/Marlin/src/lcd/language/language_ro.h b/Marlin/src/lcd/language/language_ro.h new file mode 100644 index 000000000000..643589f1bddd --- /dev/null +++ b/Marlin/src/lcd/language/language_ro.h @@ -0,0 +1,643 @@ +/** + * 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 + + /** + * Romanian + * + * LCD Menu Messages + * See also https://marlinfw.org/docs/development/lcd_language.html + * + * Translation by cristyanul + */ +namespace Language_ro { + using namespace Language_en; // Inherit undefined strings from English + + constexpr uint8_t CHARSIZE = 2; + PROGMEM Language_Str 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_AUTOSTART = _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"); + 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"); + PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Preincalzeste ") PREHEAT_2_LABEL; + PROGMEM Language_Str MSG_PREHEAT_2_H = _UxGT("Preincalzeste ") PREHEAT_2_LABEL " ~"; + PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Preincalzeste ") PREHEAT_2_LABEL _UxGT(" Capatul"); + PROGMEM Language_Str MSG_PREHEAT_2_END_E = _UxGT("Preincalzeste ") PREHEAT_2_LABEL _UxGT(" Capatul ~"); + PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Preincalzeste ") PREHEAT_2_LABEL _UxGT(" Tot"); + PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Preincalzeste ") PREHEAT_2_LABEL _UxGT(" Patul"); + PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Preincalzeste ") PREHEAT_2_LABEL _UxGT(" Conf"); + 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_OFF = _UxGT("Laser Oprit"); + PROGMEM Language_Str MSG_LASER_ON = _UxGT("Laser Pornit"); + PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Puterea Laserului"); + PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Controlul Spindle"); + PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Spindle Oprit"); + PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Spindle Pornit"); + 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_LEVEL_CORNERS = _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_MESH = _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_USER_MENU = _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"); + PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Build Mesh (") PREHEAT_1_LABEL _UxGT(")"); + PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Build Mesh (") PREHEAT_2_LABEL _UxGT(")"); + 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_M1 = _UxGT("Validate Mesh (") PREHEAT_1_LABEL _UxGT(")"); + PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Validate Mesh (") PREHEAT_2_LABEL _UxGT(")"); + 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"); + + 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"); + + 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_Z_DIST = _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_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_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("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_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_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_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_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³"); + PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E Limit in mm³"); + 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("UnRet mm"); + PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("S UnRet mm"); + PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("UnRet V"); + PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("S UnRet V"); + PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("AutoRetr."); + 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("Cmd: Self-Test"); + PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Cmd: Reset"); + PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Stow"); + PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Deploy"); + PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: SW-Mode"); + PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: 5V-Mode"); + PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: OD-Mode"); + PROGMEM Language_Str MSG_BLTOUCH_MODE_STORE = _UxGT("Cmd: 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_HEATING_FAILED_LCD_BED = _UxGT("Bed Heating Failed"); + PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _UxGT("Chamber Heating Fail"); + 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_ERR_MAXTEMP_BED = _UxGT("Err: MAXTEMP BED"); + PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Err: MINTEMP BED"); + PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Err: MAXTEMP CHAMBER"); + PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Err: MINTEMP CHAMBER"); + PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Home XY First"); + 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"); + + 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"); + +#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"); +#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"); +#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_X = _UxGT("X Driver %"); + PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y Driver %"); + PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z 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"); + PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Too Cold"); + + 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"); + + 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:"); + + 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"); + + PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Bad page index"); + PROGMEM Language_Str 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...")); +#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...")); +#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_CORRECTION = _UxGT("Corectare"); + PROGMEM Language_Str 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..."); +} + +#if FAN_COUNT == 1 + #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED + #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED +#else + #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N + #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED_N +#endif diff --git a/Marlin/src/lcd/language/language_ru.h b/Marlin/src/lcd/language/language_ru.h index b559acad4633..229e8199375a 100644 --- a/Marlin/src/lcd/language/language_ru.h +++ b/Marlin/src/lcd/language/language_ru.h @@ -36,15 +36,27 @@ namespace Language_ru { constexpr uint8_t CHARSIZE = 2; PROGMEM Language_Str LANGUAGE = _UxGT("Russian"); - PROGMEM Language_Str WELCOME_MSG = MACHINE_NAME _UxGT(" готов."); + 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_INSERTED = _UxGT("Карта вставлена"); - PROGMEM Language_Str MSG_MEDIA_REMOVED = _UxGT("Карта извлечена"); - PROGMEM Language_Str MSG_LCD_ENDSTOPS = _UxGT("Эндстопы"); // Max length 8 characters + 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-карту"); + 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 диска"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполнение вызова"); + #else + PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переполн. вызова"); + #endif PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Прогр. эндстопы"); - PROGMEM Language_Str MSG_MAIN = _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_CONFIGURATION = _UxGT("Конфигурация"); PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт"); PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Выключить двигатели"); PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню отладки"); @@ -53,14 +65,19 @@ namespace Language_ru { 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_Z_ALIGN = _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_Z_FADE_HEIGHT = _UxGT("Высота спада"); - PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Запомнить парковку"); - PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Коррекции применены"); - PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Запомнить ноль"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Установ. смещения дома"); + #else + PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Установ.смещ.дома"); + #endif + PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Смещения применены"); + PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Установить ноль"); 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(" сопло"); @@ -75,38 +92,55 @@ namespace Language_ru { PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Нагрев ") PREHEAT_2_LABEL _UxGT(" всё"); PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Нагрев ") PREHEAT_2_LABEL _UxGT(" стол"); PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Нагрев ") PREHEAT_2_LABEL _UxGT(" правка"); + 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("Управление лазером"); PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Выключить лазер"); PROGMEM Language_Str MSG_LASER_ON = _UxGT("Включить лазер"); PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Мощность лазера"); - PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Шпиндель управление"); + PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Управление шпинделем"); PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Выключить шпиндель"); PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Включить шпиндель"); - PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Мощность шпинделя"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Мощность шпинделя"); + #else + PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Мощн.шпинделя"); + #endif PROGMEM Language_Str 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_LEVELING = _UxGT("Выравнивание стола"); + PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Выровнять стол"); PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Выровнять углы"); PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Следующий угол"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Смещение по Z"); + PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Правка сетки окончена"); + #else + PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Смещение Z"); + PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Правка окончена"); + #endif PROGMEM Language_Str MSG_EDIT_MESH = _UxGT("Редактировать сетку"); - PROGMEM Language_Str MSG_EDITING_STOPPED = _UxGT("Правка сетки окончена"); - PROGMEM Language_Str MSG_PROBING_MESH = _UxGT("Точка сетки:"); + PROGMEM Language_Str MSG_PROBING_MESH = _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_USER_MENU = _UxGT("Свои команды"); - PROGMEM Language_Str MSG_M48_TEST = _UxGT("Проверка Z-датчика"); + PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 тест Z-зонда"); PROGMEM Language_Str MSG_M48_DEVIATION = _UxGT("Отклонение"); - PROGMEM Language_Str MSG_M48_POINT = _UxGT("Измерение"); + PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 точка"); + + PROGMEM Language_Str MSG_IDEX_MENU = _UxGT("Меню IDEX"); + 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("Полный контроль"); - // TODO: IDEX Menu PROGMEM Language_Str MSG_OFFSETS_MENU = _UxGT("Размещение сопел"); PROGMEM Language_Str MSG_HOTEND_OFFSET_X = _UxGT("2-е сопло X"); @@ -114,72 +148,115 @@ namespace Language_ru { PROGMEM Language_Str MSG_HOTEND_OFFSET_Z = _UxGT("2-е сопло Z"); 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_UBL_MANUAL_MESH = _UxGT("Правка сетки вручную"); - PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Z-пробник и замеры"); + 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("Ручной ввод сетки"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Разместить шайбу и измерить"); + PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Убрать и замерить стол"); + #else + PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Разм.шайбу,измерить"); + PROGMEM Language_Str MSG_UBL_BC_REMOVE = _UxGT("Убрать, измер. стол"); + #endif PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Измерение"); - PROGMEM Language_Str MSG_UBL_BC_REMOVE = _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_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_MESH_EDIT = _UxGT("Редактор сеток"); PROGMEM Language_Str 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("Правка сетки завершена"); + #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 = 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 = 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("Правка завершена"); + #endif PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точная правка сетки"); - PROGMEM Language_Str MSG_UBL_DONE_EDITING_MESH = _UxGT("Правка сетки завершена"); - PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_MESH = _UxGT("Построить свою сетку"); PROGMEM Language_Str MSG_UBL_BUILD_MESH_MENU = _UxGT("Построить сетку"); PROGMEM Language_Str MSG_UBL_BUILD_MESH_M1 = _UxGT("Построить сетку ") PREHEAT_1_LABEL; PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Построить сетку ") PREHEAT_2_LABEL; - PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить хол. сетку"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_BUILD_COLD_MESH = _UxGT("Построить холодную сетку"); + #else + PROGMEM Language_Str 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("Проверить сетку"); - PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Проверить сетку ") PREHEAT_1_LABEL; - PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Проверить сетку ") PREHEAT_2_LABEL; - PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Проверить сетку ") PREHEAT_1_LABEL; + PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Проверить сетку ") PREHEAT_2_LABEL; + PROGMEM Language_Str MSG_UBL_VALIDATE_CUSTOM_MESH = _UxGT("Проверить свою сетку"); + #else + PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M1 = _UxGT("Провер. сетку ") PREHEAT_1_LABEL; + PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Провер. сетку ") PREHEAT_2_LABEL; + PROGMEM Language_Str 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("Калибровка сетки"); - PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("Калибровка 3-х точек"); + PROGMEM Language_Str MSG_UBL_MESH_LEVELING = _UxGT("Выравнивание сетки"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_3POINT_MESH_LEVELING = _UxGT("3-х точечное выравнивание"); + #else + PROGMEM Language_Str 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_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"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить сетку снаружи"); + PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Вывод информации UBL"); + #else + PROGMEM Language_Str MSG_UBL_OUTPUT_MAP_BACKUP = _UxGT("Сохранить снаружи"); + PROGMEM Language_Str MSG_UBL_INFO_UBL = _UxGT("Информация UBL"); + #endif PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Кол-во заполнителя"); 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_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_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_RESTORE_ERROR = _UxGT("Ошибка: Восстан.UBL"); 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_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_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.Сохранить сетку стола"); + PROGMEM Language_Str MSG_UBL_6_FINE_TUNE_ALL = _UxGT("6.Точно настр. всё"); + PROGMEM Language_Str MSG_UBL_7_SAVE_MESH = _UxGT("7.Сохранить сетку"); PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Настройка подсветки"); PROGMEM Language_Str MSG_LEDS = _UxGT("Подсветка"); @@ -201,7 +278,7 @@ namespace Language_ru { PROGMEM Language_Str MSG_LED_BRIGHTNESS = _UxGT("Яркость"); PROGMEM Language_Str MSG_MOVING = _UxGT("Движемся..."); - PROGMEM Language_Str MSG_FREE_XY = _UxGT("Освобождаем XY"); + 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"); @@ -214,29 +291,39 @@ namespace Language_ru { PROGMEM Language_Str MSG_MOVE_10MM = _UxGT("Движение 10мм"); 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 = _UxGT("Сопло, ") LCD_STR_DEGREE "C"; PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Сопло ~"); - PROGMEM Language_Str MSG_BED = _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"; 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_CONTROLLER_FAN = _UxGT("Обдув платы"); - PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _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_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 _UxGT(" Мин"); - PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _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_AUTOTEMP = _UxGT("Автотемпер."); PROGMEM Language_Str MSG_LCD_ON = _UxGT("Вкл"); PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Выкл"); - PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("Автонастройка"); - PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _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("Сбой автоподбора! Завершение времени."); + PROGMEM Language_Str MSG_SELECT = _UxGT("Выбор"); PROGMEM Language_Str MSG_SELECT_E = _UxGT("Выбор *"); PROGMEM Language_Str MSG_ACC = _UxGT("Ускорение"); @@ -245,126 +332,210 @@ namespace Language_ru { 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_VE_JERK = _UxGT("Ve-рывок"); - PROGMEM Language_Str MSG_VELOCITY = _UxGT("Быстрота"); - 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_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("Ускорение"); - 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_E = _UxGT("Aмакс ") LCD_STR_E; - PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Aмакс *"); - PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-втягивание"); - PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-путеш."); - 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_E_STEPS = _UxGT("Eшаг/мм"); - PROGMEM Language_Str MSG_EN_STEPS = _UxGT("*шаг/мм"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Отклонение узла"); + #else + PROGMEM Language_Str 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_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_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_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 в мм³"); - 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("Контраст LCD"); + PROGMEM Language_Str MSG_VOLUMETRIC_LIMIT = _UxGT("E огран.,мм³"); + PROGMEM Language_Str 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("Диам. филамента *"); + #else + PROGMEM Language_Str MSG_FILAMENT_DIAM = _UxGT("Диам. филам."); + PROGMEM Language_Str 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("Загрузить настройки"); - PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("Вернуть настройки"); - PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Изначальный EEPROM"); + PROGMEM Language_Str MSG_RESTORE_DEFAULTS = _UxGT("На базовые параметры"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Инициализация EEPROM"); + #else + PROGMEM Language_Str 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_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("Начало печати"); - 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_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_PAUSE_PRINT = _UxGT("Пауза печати"); PROGMEM Language_Str MSG_RESUME_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("ОСТАНОВЛЕНО. "); - PROGMEM Language_Str MSG_CONTROL_RETRACT = _UxGT("Втягивание мм"); - PROGMEM Language_Str MSG_CONTROL_RETRACT_SWAP = _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("Автовтягивание"); + #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("Автовтягив."); + #endif + PROGMEM Language_Str MSG_CONTROL_RETRACT_ZHOP = _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("Возврат мм"); - PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAP = _UxGT("Возврат смены мм"); + PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER = _UxGT("Возврат, мм"); PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVERF = _UxGT("Возврат V"); - PROGMEM Language_Str MSG_CONTROL_RETRACT_RECOVER_SWAPF = _UxGT("Возврат смены V"); - PROGMEM Language_Str MSG_AUTORETRACT = _UxGT("Автовтягивание"); - // TODO: Filament Change Swap / Purge Length + PROGMEM Language_Str MSG_FILAMENT_SWAP_LENGTH = _UxGT("Поменять длины"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнительно"); + #else + PROGMEM Language_Str MSG_FILAMENT_SWAP_EXTRA = _UxGT("Поменять дополнит."); + #endif + PROGMEM Language_Str MSG_FILAMENT_PURGE_LENGTH = _UxGT("Очистить длину"); PROGMEM Language_Str MSG_TOOL_CHANGE = _UxGT("Смена сопел"); PROGMEM Language_Str MSG_TOOL_CHANGE_ZLIFT = _UxGT("Поднятие по Z"); - - // TODO: Singlenozzle, nozzle standby - + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Начальная скор."); + PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Скорость втягив."); + #else + PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Началь.скор."); + PROGMEM Language_Str 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("Загрузка филамента"); - PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Загрузка филамента *"); - PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Выгрузка филамента *"); + PROGMEM Language_Str MSG_FILAMENTLOAD = _UxGT("Загрузить филамент"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Загрузить филамент *"); + PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Выгрузить филамент *"); + #else + PROGMEM Language_Str MSG_FILAMENTLOAD_E = _UxGT("Подать филамент *"); + PROGMEM Language_Str MSG_FILAMENTUNLOAD_E = _UxGT("Убрать филамент *"); + #endif PROGMEM Language_Str MSG_FILAMENTUNLOAD_ALL = _UxGT("Выгрузить всё"); - PROGMEM Language_Str MSG_ATTACH_MEDIA = _UxGT("Активировать SD"); + 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_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 = _UxGT("Z-зонд BLTouch"); PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Тестирование BLTouch"); PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Сброс BLTouch"); - PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Опустить BLTouch"); PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Поднять BLTouch"); - - // TODO: TouchMI Probe, Manual deploy/stow - - PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Паркуй %s%s%s сначала"); - PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Отступы Z-датчика"); + 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"); 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_TOTAL = _UxGT("Сумарно"); PROGMEM Language_Str MSG_ENDSTOP_ABORT = _UxGT("Сработал концевик"); PROGMEM Language_Str MSG_HEATING_FAILED_LCD = _UxGT("Разогрев не удался"); - PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Неудача нагрева стола"); - PROGMEM Language_Str MSG_ERR_REDUNDANT_TEMP = _UxGT("Ошибка: Избыточная Т"); - PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("УБЕГАНИЕ ТЕПЛА"); - PROGMEM Language_Str MSG_THERMAL_RUNAWAY_BED = _UxGT("УБЕГАНИЕ ТЕПЛА СТОЛА"); - // TODO: Heated chamber + PROGMEM Language_Str MSG_HEATING_FAILED_LCD_BED = _UxGT("Сбой нагрева стола"); + PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _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_ERR_MAXTEMP = _UxGT("Ошибка: Т макс."); PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("Ошибка: Т мин."); PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("Ошибка: Т стола макс"); PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("Ошибка: Т стола мин."); - // TODO: Heated chamber + PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("Ошибка:Т камеры макс"); + PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("Ошибка:Т камеры мин."); PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Паркуй XY сначала"); PROGMEM Language_Str MSG_HALTED = _UxGT("ПРИНТЕР ОСТАНОВЛЕН"); PROGMEM Language_Str MSG_PLEASE_RESET = _UxGT("Сделайте сброс"); @@ -374,8 +545,9 @@ namespace Language_ru { PROGMEM Language_Str MSG_HEATING = _UxGT("Нагрев..."); PROGMEM Language_Str MSG_COOLING = _UxGT("Охлаждение..."); PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Нагрев стола..."); + PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Нагрев камеры..."); PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охлаждение стола..."); - // TODO: Heated chamber + PROGMEM Language_Str MSG_CHAMBER_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"); @@ -383,67 +555,151 @@ namespace Language_ru { 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_CALIBRATE = _UxGT("Высота Delta"); + #if LCD_WIDTH >= 20 + PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондировать Z-смещение"); + PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стержень диагонали"); + #else + PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондир. Z-смещения"); + PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стержень диаг."); + #endif 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("Данные принтера"); - PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("Калибровка 3-х точек"); - PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Калибровка линейная"); - PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Калибровка билинейная"); - PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Калибровка UBL"); - PROGMEM Language_Str MSG_MESH_LEVELING = _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("Билинейное выравнивание"); + #else + PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-точ. выравнив."); + PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Линейное выравн."); + PROGMEM Language_Str MSG_BILINEAR_LEVELING = _UxGT("Билин. выравнив."); + #endif + PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Управление UBL"); + PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Выравнивание сетки"); + 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_BAUDRATE = _UxGT("Скорость,БОД"); PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Протокол"); - PROGMEM Language_Str MSG_INFO_RUNAWAY_OFF = _UxGT("Контроль темп.: Выкл"); - PROGMEM Language_Str MSG_INFO_RUNAWAY_ON = _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("Время простоя хотенда"); + #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("Время прост.хот-а"); + #endif PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Подсветка корпуса"); PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яркость подсветки"); PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("Неверный принтер"); #if LCD_WIDTH >= 20 PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Счётчик печати"); - PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _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("Длина филамента"); #else PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Отпечатков"); - PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _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("Выдавлено"); #endif - PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Температура мин."); - PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Температура макс"); + PROGMEM Language_Str 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_X = _UxGT("X Привод %"); - PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y Привод %"); - PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z Привод %"); - PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E Привод %"); - PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запись DAC EEPROM"); + PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("X Привод, %"); + PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y Привод, %"); + PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z Привод, %"); + 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_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(" Сопла: "); - PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Возврат не удался"); - PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Не удалось прощупать"); - PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Низкая Т"); - - // TODO: MMU2 + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Датчик оконч. филамента"); + #else + PROGMEM Language_Str 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("Ошибка зондирования"); + PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: Низкая Т") LCD_STR_DEGREE; - // TODO: Mixing + PROGMEM Language_Str MSG_MMU2_CHOOSE_FILAMENT_HEADER = _UxGT("ВЫБИРЕТЕ ФИЛАМЕНТ"); + PROGMEM Language_Str MSG_MMU2_MENU = _UxGT("Настройки MMU"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_KILL_MMU2_FIRMWARE = _UxGT("Обновить прошивку MMU!"); + #else + PROGMEM Language_Str 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..."); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_MMU2_EJECTING_FILAMENT = _UxGT("Извлечение филамента..."); + #else + PROGMEM Language_Str 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("Удалите и нажмите"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_MIX = _UxGT("Смешивание"); + #else + PROGMEM Language_Str 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("Сменить градиент"); + #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_VTOOLS_RESET = _UxGT("В-инструменти сброшены"); + PROGMEM Language_Str MSG_COMMIT_VTOOL = _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_VTOOLS_RESET = _UxGT("В-инструм. сброшены"); + PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Смешать В-инструм."); + #endif + PROGMEM Language_Str MSG_START_Z = _UxGT("Начало Z"); + PROGMEM Language_Str MSG_END_Z = _UxGT(" Конец Z"); PROGMEM Language_Str MSG_GAMES = _UxGT("Игры"); PROGMEM Language_Str MSG_BRICKOUT = _UxGT("Кирпичи"); @@ -451,26 +707,40 @@ namespace Language_ru { PROGMEM Language_Str MSG_SNAKE = _UxGT("Змейка"); PROGMEM Language_Str MSG_MAZE = _UxGT("Лабиринт"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Плохой индекс страницы"); + PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Полохая скорость страницы"); + #else + PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Полохая страница"); + PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Полохая скор.стран."); + #endif + + PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Парковка...")); // // 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("Ожидайте", "начала смены", "филамента")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _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_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_LOAD = _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("Ожидайте", "возобновления", "печати")); #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_UNLOAD = _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("Возобновление...")); #endif @@ -481,7 +751,27 @@ namespace Language_ru { PROGMEM Language_Str MSG_TMC_STEPPING_MODE = _UxGT("Режим шага"); PROGMEM Language_Str MSG_TMC_STEALTH_ENABLED = _UxGT("Тихий режим вкл"); - // TODO: Service + 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("Сглаживание"); - // TODO: Backlash + PROGMEM Language_Str MSG_LEVEL_X_AXIS = _UxGT("Уровень оси X"); + PROGMEM Language_Str MSG_AUTO_CALIBRATE = _UxGT("Авто калибровка"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Время нагревателя вышло"); + #else + PROGMEM Language_Str MSG_HEATER_TIMEOUT = _UxGT("Время нагрев. вышло"); + #endif + PROGMEM Language_Str MSG_REHEAT = _UxGT("Возобновить нагрев"); + PROGMEM Language_Str MSG_REHEATING = _UxGT("Нагрев..."); } + +#if FAN_COUNT == 1 + #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED + #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED +#else + #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N + #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED_N +#endif diff --git a/Marlin/src/lcd/language/language_uk.h b/Marlin/src/lcd/language/language_uk.h index c5d85fe6bf98..2572d1b0ae11 100644 --- a/Marlin/src/lcd/language/language_uk.h +++ b/Marlin/src/lcd/language/language_uk.h @@ -37,205 +37,739 @@ namespace Language_uk { constexpr uint8_t CHARSIZE = 2; PROGMEM Language_Str LANGUAGE = _UxGT("Ukranian"); - 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 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-картку"); + 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 диску"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповнення виклику"); + PROGMEM Language_Str MSG_LCD_SOFT_ENDSTOPS = _UxGT("Програмні кінцевики"); + #else + PROGMEM Language_Str MSG_KILL_SUBCALL_OVERFLOW = _UxGT("Переповн. виклику"); + PROGMEM Language_Str 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_MAIN = _UxGT("Основне меню"); + PROGMEM Language_Str MSG_ADVANCED_SETTINGS = _UxGT("Інші налаштування"); + PROGMEM Language_Str MSG_CONFIGURATION = _UxGT("Конфігурація"); PROGMEM Language_Str MSG_AUTOSTART = _UxGT("Автостарт"); - PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Вимк. двигуни"); + PROGMEM Language_Str MSG_DISABLE_STEPPERS = _UxGT("Вимкнути двигуни"); + PROGMEM Language_Str MSG_DEBUG_MENU = _UxGT("Меню Debug"); + PROGMEM Language_Str MSG_PROGRESS_BAR_TEST = _UxGT("Тест Progress Bar"); 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_Z_ALIGN = _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("Слідуюча Точка"); + 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("Встанов. початок"); + PROGMEM Language_Str MSG_Z_FADE_HEIGHT = _UxGT("Висота спаду"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Встанов. зміщення дому"); + #else + PROGMEM Language_Str MSG_SET_HOME_OFFSETS = _UxGT("Встанов.зміщ.дому"); + #endif + PROGMEM Language_Str MSG_HOME_OFFSETS_APPLIED = _UxGT("Зміщення прийняті"); + PROGMEM Language_Str MSG_SET_ORIGIN = _UxGT("Встановити ноль"); 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(" нал."); + 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(" налашт"); PROGMEM Language_Str MSG_PREHEAT_2 = _UxGT("Нагрів ") PREHEAT_2_LABEL; PROGMEM Language_Str MSG_PREHEAT_2_H = _UxGT("Нагрів ") PREHEAT_2_LABEL " ~"; - PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло"); - PROGMEM Language_Str MSG_PREHEAT_2_END_E = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Сопло ~"); - PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Все"); - PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" Стіл"); - PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" нал."); - PROGMEM Language_Str MSG_COOLDOWN = _UxGT("Охолодження"); + PROGMEM Language_Str MSG_PREHEAT_2_END = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" сопло"); + PROGMEM Language_Str MSG_PREHEAT_2_END_E = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" сопло ~"); + PROGMEM Language_Str MSG_PREHEAT_2_ALL = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" все"); + PROGMEM Language_Str MSG_PREHEAT_2_BEDONLY = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" стіл"); + PROGMEM Language_Str MSG_PREHEAT_2_SETTINGS = _UxGT("Нагрів ") PREHEAT_2_LABEL _UxGT(" налашт"); + 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("Керування лазером"); + PROGMEM Language_Str MSG_LASER_OFF = _UxGT("Вимкнути лазер"); + PROGMEM Language_Str MSG_LASER_ON = _UxGT("Увімкнути лазер"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Потужність лазера"); + PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Керування шпінделем"); + #else + PROGMEM Language_Str MSG_LASER_POWER = _UxGT("Потуж.лазера"); + PROGMEM Language_Str MSG_SPINDLE_MENU = _UxGT("Керув. шпінделем"); + #endif + PROGMEM Language_Str MSG_SPINDLE_OFF = _UxGT("Вимкнути шпіндель"); + PROGMEM Language_Str MSG_SPINDLE_ON = _UxGT("Увімкнути шпіндель"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Потуж. шпінделя"); + #else + PROGMEM Language_Str MSG_SPINDLE_POWER = _UxGT("Потуж. шпінд."); + #endif + PROGMEM Language_Str 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_LEVELING = _UxGT("Вирівнювання столу"); + PROGMEM Language_Str MSG_LEVEL_BED = _UxGT("Вирівняти стіл"); + PROGMEM Language_Str MSG_LEVEL_CORNERS = _UxGT("Вирівняти кути"); + PROGMEM Language_Str MSG_NEXT_CORNER = _UxGT("Наступний кут"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_MESH_EDITOR = _UxGT("Зміщення по Z"); + #else + PROGMEM Language_Str 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_MESH = _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_USER_MENU = _UxGT("Власні команди"); + PROGMEM Language_Str MSG_M48_TEST = _UxGT("M48 тест зонду"); + PROGMEM Language_Str MSG_M48_POINT = _UxGT("M48 точка"); + PROGMEM Language_Str 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_FU1L_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"); + 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("Точка розвороту"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ручне введення сітки"); + PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Розмістити шайбу і вимір."); + #else + PROGMEM Language_Str MSG_UBL_MANUAL_MESH = _UxGT("Ручне введ. сітки"); + PROGMEM Language_Str MSG_UBL_BC_INSERT = _UxGT("Розм. шайбу і вимір."); + #endif + PROGMEM Language_Str MSG_UBL_BC_INSERT2 = _UxGT("Вимірювання"); + PROGMEM Language_Str MSG_UBL_BC_REMOVE = _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"); + #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_EDIT_CUSTOM_MESH = _UxGT("Редагувати свою сітку"); + PROGMEM Language_Str MSG_UBL_FINE_TUNE_MESH = _UxGT("Точне редагування сітки"); + PROGMEM Language_Str MSG_UBL_BUILD_CUSTOM_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 = 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 = LCD_STR_THERMOMETER _UxGT(" сопла, ") LCD_STR_DEGREE "C"; + 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("Будувати свою"); + #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_M1 = _UxGT("Будувати сітку ") PREHEAT_1_LABEL; + PROGMEM Language_Str MSG_UBL_BUILD_MESH_M2 = _UxGT("Будувати сітку ") PREHEAT_2_LABEL; + 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_MESH_M1 = _UxGT("Підтвердити ") PREHEAT_1_LABEL; + PROGMEM Language_Str MSG_UBL_VALIDATE_MESH_M2 = _UxGT("Підтвердити ") PREHEAT_2_LABEL; + PROGMEM Language_Str 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-точкове вирівн."); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_GRID_MESH_LEVELING = _UxGT("Вирівнювання растру"); + #else + PROGMEM Language_Str 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"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_FILLIN_AMOUNT = _UxGT("Обсяг заповнювача"); + #else + PROGMEM Language_Str 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("Точно налашт. все"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_UBL_FINE_TUNE_CLOSEST = _UxGT("Точно налашт.найближчу"); + #else + PROGMEM Language_Str 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.Зберегти сітку"); + + PROGMEM Language_Str MSG_LED_CONTROL = _UxGT("Керування світлом"); + PROGMEM Language_Str MSG_LEDS = _UxGT("Підсвітка"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_LED_PRESETS = _UxGT("Передустановки світла"); + #else + PROGMEM Language_Str 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_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("Яскравість"); + + 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_E = _UxGT("Екструдер"); PROGMEM Language_Str MSG_MOVE_EN = _UxGT("Екструдер *"); - PROGMEM Language_Str MSG_MOVE_Z_DIST = _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_HOTEND_TOO_COLD = _UxGT("Сопло дуже холодне"); + PROGMEM Language_Str MSG_MOVE_Z_DIST = _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_SPEED = _UxGT("Швидкість"); PROGMEM Language_Str MSG_BED_Z = _UxGT("Z Столу"); - PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло"); + PROGMEM Language_Str MSG_NOZZLE = _UxGT("Сопло, ") LCD_STR_DEGREE "C"; 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_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"; + PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Охолодження"); + PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Охолодження ~"); + #if LCD_WIDTH > 21 + 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("Контролер охолодження"); + #else + 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("Контролер охолодж."); + #endif + PROGMEM Language_Str MSG_CONTROLLER_FAN_IDLE_SPEED = _UxGT("Холості оберти"); + PROGMEM Language_Str MSG_CONTROLLER_FAN_SPEED = _UxGT("Робочі оберти"); + PROGMEM Language_Str MSG_CONTROLLER_FAN_AUTO_ON = _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 _UxGT(" Мін"); - PROGMEM Language_Str MSG_MAX = " " LCD_STR_THERMOMETER _UxGT(" Макс"); - PROGMEM Language_Str MSG_FACTOR = " " LCD_STR_THERMOMETER _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_ON = _UxGT("Увімк"); PROGMEM Language_Str 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("Збій автопідбору! Завершення часу."); + PROGMEM Language_Str MSG_SELECT = _UxGT("Вибрати"); PROGMEM Language_Str MSG_SELECT_E = _UxGT("Вибрати *"); - PROGMEM Language_Str MSG_ACC = _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_VE_JERK = _UxGT("Ve-ривок"); - 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_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_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_E = _UxGT("Aмакс ") LCD_STR_E; - PROGMEM Language_Str MSG_AMAX_EN = _UxGT("Aмакс *"); - PROGMEM Language_Str MSG_A_RETRACT = _UxGT("A-втягув."); - PROGMEM Language_Str MSG_A_TRAVEL = _UxGT("A-руху"); - 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_E_STEPS = _UxGT("Eкроків/мм"); - PROGMEM Language_Str MSG_EN_STEPS = _UxGT("*кроків/мм"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_JUNCTION_DEVIATION = _UxGT("Відхилення вузла"); + #else + PROGMEM Language_Str 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_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_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_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_FILAMENT = _UxGT("Пруток"); PROGMEM Language_Str MSG_VOLUMETRIC_ENABLED = _UxGT("E в мм³"); - 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_VOLUMETRIC_LIMIT = _UxGT("E обмеж.,мм³"); + 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("На базові параметри"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_INIT_EEPROM = _UxGT("Ініціалізація EEPROM"); + #else + PROGMEM Language_Str 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("Почати друк"); + + 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_PAUSING = _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_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_NO_MEDIA = _UxGT("SD-картки немає"); PROGMEM Language_Str MSG_DWELL = _UxGT("Сплячка..."); - PROGMEM Language_Str MSG_USERWAIT = _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("ЗУПИНЕНО. "); - 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 дет. не в межах"); + #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("Автовтягування"); + #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("Автовтягув."); + #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"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидкість"); + PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидкість втягув."); + #else + PROGMEM Language_Str MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Початк.швидк."); + PROGMEM Language_Str MSG_SINGLENOZZLE_RETRACT_SPEED = _UxGT("Швидк.втягув."); + #endif + PROGMEM Language_Str MSG_FILAMENT_PARK_ENABLED = _UxGT("Паркувати голову"); + PROGMEM Language_Str 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("Час охолодження"); + #else + PROGMEM Language_Str MSG_SINGLENOZZLE_FAN_SPEED = _UxGT("Оберти охолодж."); + PROGMEM Language_Str 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("Z-зонд BLTouch"); PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("BLTouch Само-Тест"); - PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Скинути BLTouch"); + PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Зкинути BLTouch"); + 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("Встановити на 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_ZOFFSET = _UxGT("Зміщення Z"); + 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_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_HEATING_FAILED_LCD = _UxGT("Невдалий нагрів"); - PROGMEM Language_Str MSG_THERMAL_RUNAWAY = _UxGT("ЗБІЙ ТЕМПЕРАТУРИ"); - PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Дім XY перший"); + 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_HEATING_FAILED_LCD_BED = _UxGT("Збій нагріву столу"); + PROGMEM Language_Str MSG_HEATING_FAILED_LCD_CHAMBER = _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_ERR_MAXTEMP = _UxGT("ПЕРЕГРІВ"); + PROGMEM Language_Str MSG_ERR_MINTEMP = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE; + PROGMEM Language_Str MSG_ERR_MAXTEMP_BED = _UxGT("ПЕРЕГРІВ СТОЛУ"); + PROGMEM Language_Str MSG_ERR_MINTEMP_BED = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE _UxGT(" СТОЛУ"); + PROGMEM Language_Str MSG_ERR_MAXTEMP_CHAMBER = _UxGT("ПЕРЕГРІВ КАМЕРИ"); + PROGMEM Language_Str MSG_ERR_MINTEMP_CHAMBER = _UxGT("МІНІМАЛЬНА Т") LCD_STR_DEGREE _UxGT(" КАМЕРИ"); + PROGMEM Language_Str MSG_ERR_Z_HOMING = _UxGT("Першим дім по XY"); 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_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("Калібр. Центру"); + PROGMEM Language_Str MSG_COOLING = _UxGT("Охолодження..."); + PROGMEM Language_Str MSG_BED_HEATING = _UxGT("Нагрів столу..."); + PROGMEM Language_Str MSG_CHAMBER_HEATING = _UxGT("Нагрів камери..."); + #if LCD_WIDTH >= 20 + PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охолодження столу..."); + PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охолодження камери..."); + PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калібрування Delta"); + #else + PROGMEM Language_Str MSG_BED_COOLING = _UxGT("Охол. столу..."); + PROGMEM Language_Str MSG_CHAMBER_COOLING = _UxGT("Охол. камери..."); + PROGMEM Language_Str MSG_DELTA_CALIBRATE = _UxGT("Калібрув. Delta"); + #endif + 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"); + #if LCD_WIDTH >= 20 + PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондування Z-зміщ."); + PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стрижень діагоналі"); + #else + PROGMEM Language_Str MSG_DELTA_Z_OFFSET_CALIBRATE = _UxGT("Зондув. Z-зміщ."); + PROGMEM Language_Str MSG_DELTA_DIAG_ROD = _UxGT("Стрижень діаг."); + #endif + 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("Інформація"); - PROGMEM Language_Str MSG_INFO_STATS_MENU = _UxGT("Статистика"); + PROGMEM Language_Str 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("Білінійне вирівнювання"); + #elif LCD_WIDTH == 20 + PROGMEM Language_Str MSG_3POINT_LEVELING = _UxGT("3-точкове вирівнюв."); + PROGMEM Language_Str MSG_LINEAR_LEVELING = _UxGT("Лінійне вирівнюван."); + PROGMEM Language_Str 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("Білін. вирівнюв."); + #endif + PROGMEM Language_Str MSG_UBL_LEVELING = _UxGT("Керування UBL"); + PROGMEM Language_Str MSG_MESH_LEVELING = _UxGT("Вирівнювання сітки"); + + 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_BAUDRATE = _UxGT("Біт/секунду"); PROGMEM Language_Str MSG_INFO_PROTOCOL = _UxGT("Протокол"); - PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Підсвітка"); - - PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _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("Час простою хотенду"); + #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("Час прост. хот-у"); + #endif + PROGMEM Language_Str MSG_CASE_LIGHT = _UxGT("Підсвітка"); + PROGMEM Language_Str MSG_CASE_LIGHT_BRIGHTNESS = _UxGT("Яскравість світла"); + PROGMEM Language_Str MSG_KILL_EXPECTED_PRINTER = _UxGT("НЕ ТОЙ ПРИНТЕР"); + PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено"); + PROGMEM Language_Str MSG_INFO_PRINT_FILAMENT = _UxGT("Екструдовано"); #if LCD_WIDTH >= 20 - PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("К-сть друків"); - PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _UxGT("Завершено"); + 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("Екструдовано"); #else PROGMEM Language_Str MSG_INFO_PRINT_COUNT = _UxGT("Друків"); - PROGMEM Language_Str MSG_INFO_COMPLETED_PRINTS = _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("Ексдруд."); + PROGMEM Language_Str MSG_INFO_PRINT_LONGEST = _UxGT("Найдовше"); #endif - PROGMEM Language_Str MSG_INFO_MIN_TEMP = _UxGT("Мін Темп."); - PROGMEM Language_Str MSG_INFO_MAX_TEMP = _UxGT("Макс Темп."); - PROGMEM Language_Str MSG_INFO_PSU = _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_X = _UxGT("X % мотору"); - PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Y % мотору"); - PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Z % мотору"); - PROGMEM Language_Str MSG_DAC_PERCENT_E = _UxGT("E % мотору"); - PROGMEM Language_Str MSG_DAC_EEPROM_WRITE = _UxGT("Запис ЦАП на ПЗП"); - + PROGMEM Language_Str MSG_DAC_PERCENT_X = _UxGT("Драйвер X, %"); + PROGMEM Language_Str MSG_DAC_PERCENT_Y = _UxGT("Драйвер Y, %"); + PROGMEM Language_Str MSG_DAC_PERCENT_Z = _UxGT("Драйвер Z, %"); + 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("ВИВАНТАЖИТИ ПРУТОК"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_FILAMENT_CHANGE_OPTION_HEADER = _UxGT("ПАРАМЕТРИ ПРОДОВЖЕННЯ:"); + #else + PROGMEM Language_Str 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(" Сопло: "); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Датчик закінчення прутка"); + PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("Відстань закінч.,мм"); + #else + PROGMEM Language_Str MSG_RUNOUT_SENSOR = _UxGT("Датчик закінч.прутка"); + PROGMEM Language_Str MSG_RUNOUT_DISTANCE_MM = _UxGT("До закінч.,мм"); + #endif + PROGMEM Language_Str MSG_KILL_HOMING_FAILED = _UxGT("Помилка паркування"); + PROGMEM Language_Str MSG_LCD_PROBING_FAILED = _UxGT("Помилка зондування"); + PROGMEM Language_Str MSG_M600_TOO_COLD = _UxGT("M600: низька Т") LCD_STR_DEGREE; + + 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("Продовжити друк"); + 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..."); + 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("Видаліть, натисніть"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_MIX = _UxGT("Змішування"); + #else + PROGMEM Language_Str 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("Змінити градієнт"); + #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_VTOOLS_RESET = _UxGT("В-інструменти зкинуті"); + PROGMEM Language_Str MSG_COMMIT_VTOOL = _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_VTOOLS_RESET = _UxGT("В-інструм. зкинуті"); + PROGMEM Language_Str MSG_COMMIT_VTOOL = _UxGT("Змішати В-інструм."); + #endif + PROGMEM Language_Str MSG_START_Z = _UxGT("Початок Z"); + PROGMEM Language_Str 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("Лабіринт"); + #if LCD_WIDTH > 21 + PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Поганий індекс сторінки"); + PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Погана швидкість сторінки"); + #else + PROGMEM Language_Str MSG_BAD_PAGE = _UxGT("Погана сторінка"); + PROGMEM Language_Str MSG_BAD_PAGE_SPEED = _UxGT("Погана швидк.стор"); + #endif + + PROGMEM Language_Str MSG_PAUSE_PRINT_PARKING = _UxGT(MSG_1_LINE("Паркування...")); #if LCD_HEIGHT >= 4 // Up to 3 lines allowed - PROGMEM Language_Str MSG_FILAMENT_CHANGE_INIT = _UxGT(MSG_3_LINE("Зачекайте на", "початок заміни", "волокна")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_UNLOAD = _UxGT(MSG_2_LINE("Зачекайте на", "вивід волокна")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_3_LINE("Вставте волокно", "та натисніть для", "продовження...")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_2_LINE("Зачекайте на", "ввід волокна")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _UxGT(MSG_3_LINE("Зачекайте на", "відновлення", "друку")); + 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("Зачекайте", "на відновлення", "друку")); #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_UNLOAD = _UxGT(MSG_1_LINE("Вивід...")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_INSERT = _UxGT(MSG_1_LINE("Вставте і нат.")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_LOAD = _UxGT(MSG_1_LINE("Ввід...")); - PROGMEM Language_Str MSG_FILAMENT_CHANGE_RESUME = _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("Поновлення друку...")); #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("Зглажування"); + + 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("Нагрівання..."); } + +#if FAN_COUNT == 1 + #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED + #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED +#else + #define MSG_FIRST_FAN_SPEED MSG_FAN_SPEED_N + #define MSG_FIRST_EXTRA_FAN_SPEED MSG_EXTRA_FAN_SPEED_N +#endif diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp index 9e4653cf3553..457f3dd174b7 100644 --- a/Marlin/src/lcd/menu/menu_configuration.cpp +++ b/Marlin/src/lcd/menu/menu_configuration.cpp @@ -307,8 +307,10 @@ void menu_advanced_settings(); #define MAXTEMP_ALL _MAX(REPEAT(HOTENDS, _MAXTEMP_ITEM) 0) START_MENU(); BACK_ITEM(MSG_CONFIGURATION); - editable.uint8 = uint8_t(ui.material_preset[m].fan_speed); - EDIT_ITEM_N(percent, m, MSG_FAN_SPEED, &editable.uint8, 0, 255, []{ ui.material_preset[MenuItemBase::itemIndex].fan_speed = editable.uint8; }); + #if HAS_FAN + editable.uint8 = uint8_t(ui.material_preset[m].fan_speed); + EDIT_ITEM_N(percent, m, MSG_FAN_SPEED, &editable.uint8, 0, 255, []{ ui.material_preset[MenuItemBase::itemIndex].fan_speed = editable.uint8; }); + #endif #if HAS_TEMP_HOTEND EDIT_ITEM(uint16_3, MSG_NOZZLE, &ui.material_preset[m].hotend_temp, MINTEMP_ALL, MAXTEMP_ALL - HOTEND_OVERSHOOT); #endif diff --git a/Marlin/src/lcd/menu/menu_temperature.cpp b/Marlin/src/lcd/menu/menu_temperature.cpp index 58ba8ae608f1..a94e79062793 100644 --- a/Marlin/src/lcd/menu/menu_temperature.cpp +++ b/Marlin/src/lcd/menu/menu_temperature.cpp @@ -97,7 +97,9 @@ void Temperature::lcd_preheat(const int16_t e, const int8_t indh, const int8_t i #if HOTENDS == 1 PGM_P msg_preheat[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1), GET_TEXT(MSG_PREHEAT_2), GET_TEXT(MSG_PREHEAT_3), GET_TEXT(MSG_PREHEAT_4), GET_TEXT(MSG_PREHEAT_5)); - PGM_P msg_preheat_end[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_END), GET_TEXT(MSG_PREHEAT_2_END), GET_TEXT(MSG_PREHEAT_3_END), GET_TEXT(MSG_PREHEAT_4_END), GET_TEXT(MSG_PREHEAT_5_END)); + #if HAS_HEATED_BED + PGM_P msg_preheat_end[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_END), GET_TEXT(MSG_PREHEAT_2_END), GET_TEXT(MSG_PREHEAT_3_END), GET_TEXT(MSG_PREHEAT_4_END), GET_TEXT(MSG_PREHEAT_5_END)); + #endif #elif HAS_MULTI_HOTEND PGM_P msg_preheat_all[] = ARRAY_N(PREHEAT_COUNT, GET_TEXT(MSG_PREHEAT_1_ALL), GET_TEXT(MSG_PREHEAT_2_ALL), GET_TEXT(MSG_PREHEAT_3_ALL), GET_TEXT(MSG_PREHEAT_4_ALL), GET_TEXT(MSG_PREHEAT_5_ALL)); #endif diff --git a/Marlin/src/libs/buzzer.cpp b/Marlin/src/libs/buzzer.cpp index 3b0a23917871..d684dce81625 100644 --- a/Marlin/src/libs/buzzer.cpp +++ b/Marlin/src/libs/buzzer.cpp @@ -66,7 +66,8 @@ void Buzzer::tick() { CRITICAL_SECTION_START(); ExtUI::onPlayTone(state.tone.frequency, state.tone.duration); CRITICAL_SECTION_END(); - #elif ENABLED(SPEAKER) + #endif + #if ENABLED(SPEAKER) && (DISABLED(EXTENSIBLE_UI) || ENABLED(EXTUI_LOCAL_BEEPER)) CRITICAL_SECTION_START(); ::tone(BEEPER_PIN, state.tone.frequency, state.tone.duration); CRITICAL_SECTION_END(); diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index e7de76000e0a..41ce618a0432 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -257,11 +257,12 @@ typedef struct SettingsDataStruct { // #if ENABLED(DELTA) float delta_height; // M666 H - abc_float_t delta_endstop_adj; // M666 XYZ + abc_float_t delta_endstop_adj; // M666 X Y Z float delta_radius, // M665 R delta_diagonal_rod, // M665 L delta_segments_per_second; // M665 S - abc_float_t delta_tower_angle_trim; // M665 XYZ + abc_float_t delta_tower_angle_trim, // M665 X Y Z + delta_diagonal_rod_trim; // M665 A B C #elif HAS_EXTRA_ENDSTOPS float x2_endstop_adj, // M666 X y2_endstop_adj, // M666 Y @@ -775,6 +776,7 @@ void MarlinSettings::postprocess() { EEPROM_WRITE(delta_diagonal_rod); // 1 float EEPROM_WRITE(delta_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 @@ -1638,6 +1640,7 @@ void MarlinSettings::postprocess() { EEPROM_READ(delta_diagonal_rod); // 1 float EEPROM_READ(delta_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 @@ -2510,13 +2513,14 @@ void MarlinSettings::reset() { // #if ENABLED(DELTA) - const abc_float_t adj = DELTA_ENDSTOP_ADJ, dta = DELTA_TOWER_ANGLE_TRIM; + 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_segments_per_second = DELTA_SEGMENTS_PER_SECOND; delta_tower_angle_trim = dta; + delta_diagonal_rod_trim = ddr; #endif #if ENABLED(X_DUAL_ENDSTOPS) @@ -3065,7 +3069,7 @@ void MarlinSettings::reset() { , SP_Z_STR, LINEAR_UNIT(delta_endstop_adj.c) ); - CONFIG_ECHO_HEADING("Delta settings: L R H S XYZ"); + CONFIG_ECHO_HEADING("Delta settings: L R H S XYZ ABC"); CONFIG_ECHO_START(); SERIAL_ECHOLNPAIR_P( PSTR(" M665 L"), LINEAR_UNIT(delta_diagonal_rod) @@ -3075,6 +3079,9 @@ void MarlinSettings::reset() { , SP_X_STR, LINEAR_UNIT(delta_tower_angle_trim.a) , SP_Y_STR, LINEAR_UNIT(delta_tower_angle_trim.b) , SP_Z_STR, LINEAR_UNIT(delta_tower_angle_trim.c) + , PSTR(" A"), LINEAR_UNIT(delta_diagonal_rod_trim.a) + , PSTR(" B"), LINEAR_UNIT(delta_diagonal_rod_trim.b) + , PSTR(" C"), LINEAR_UNIT(delta_diagonal_rod_trim.c) ); #elif HAS_EXTRA_ENDSTOPS diff --git a/Marlin/src/module/delta.cpp b/Marlin/src/module/delta.cpp index 56b9e0a11e19..84293936ea6b 100644 --- a/Marlin/src/module/delta.cpp +++ b/Marlin/src/module/delta.cpp @@ -59,6 +59,7 @@ abc_float_t delta_tower_angle_trim; xy_float_t delta_tower[ABC]; abc_float_t delta_diagonal_rod_2_tower; float delta_clip_start_height = Z_MAX_POS; +abc_float_t delta_diagonal_rod_trim; float delta_safe_distance_from_top(); @@ -67,17 +68,16 @@ float delta_safe_distance_from_top(); * settings have been changed (e.g., by M665). */ void recalc_delta_settings() { - constexpr abc_float_t trt = DELTA_RADIUS_TRIM_TOWER, - drt = DELTA_DIAGONAL_ROD_TRIM_TOWER; + constexpr abc_float_t trt = DELTA_RADIUS_TRIM_TOWER; delta_tower[A_AXIS].set(cos(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a), // front left tower sin(RADIANS(210 + delta_tower_angle_trim.a)) * (delta_radius + trt.a)); delta_tower[B_AXIS].set(cos(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b), // front right tower sin(RADIANS(330 + delta_tower_angle_trim.b)) * (delta_radius + trt.b)); delta_tower[C_AXIS].set(cos(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c), // back middle tower sin(RADIANS( 90 + delta_tower_angle_trim.c)) * (delta_radius + trt.c)); - delta_diagonal_rod_2_tower.set(sq(delta_diagonal_rod + drt.a), - sq(delta_diagonal_rod + drt.b), - sq(delta_diagonal_rod + drt.c)); + delta_diagonal_rod_2_tower.set(sq(delta_diagonal_rod + delta_diagonal_rod_trim.a), + sq(delta_diagonal_rod + delta_diagonal_rod_trim.b), + sq(delta_diagonal_rod + delta_diagonal_rod_trim.c)); update_software_endstops(Z_AXIS); set_all_unhomed(); } diff --git a/Marlin/src/module/delta.h b/Marlin/src/module/delta.h index f263a28ddd31..ff18e74c71c5 100644 --- a/Marlin/src/module/delta.h +++ b/Marlin/src/module/delta.h @@ -37,6 +37,7 @@ extern abc_float_t delta_tower_angle_trim; extern xy_float_t delta_tower[ABC]; extern abc_float_t delta_diagonal_rod_2_tower; extern float delta_clip_start_height; +extern abc_float_t delta_diagonal_rod_trim; /** * Recalculate factors used for delta kinematics whenever diff --git a/Marlin/src/module/planner.cpp b/Marlin/src/module/planner.cpp index 5715399e496c..1beb63c1a4ee 100644 --- a/Marlin/src/module/planner.cpp +++ b/Marlin/src/module/planner.cpp @@ -91,6 +91,10 @@ #include "../feature/power.h" #endif +#if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) + #include "../feature/closedloop.h" +#endif + #if ENABLED(BACKLASH_COMPENSATION) #include "../feature/backlash.h" #endif @@ -1634,11 +1638,8 @@ float Planner::get_axis_position_mm(const AxisEnum axis) { * Block until all buffered steps are executed / cleaned */ void Planner::synchronize() { - while ( - has_blocks_queued() || cleaning_buffer_counter - #if ENABLED(EXTERNAL_CLOSED_LOOP_CONTROLLER) - || (READ(CLOSED_LOOP_ENABLE_PIN) && !READ(CLOSED_LOOP_MOVE_COMPLETE_PIN)) - #endif + while (has_blocks_queued() || cleaning_buffer_counter + || TERN0(EXTERNAL_CLOSED_LOOP_CONTROLLER, CLOSED_LOOP_WAITING()) ) idle(); } diff --git a/Marlin/src/module/probe.cpp b/Marlin/src/module/probe.cpp index 08aa53fc9676..b077b3a0e397 100644 --- a/Marlin/src/module/probe.cpp +++ b/Marlin/src/module/probe.cpp @@ -544,7 +544,7 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/) { // Do a first probe at the fast speed if (try_to_probe(PSTR("FAST"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_SPEED_FAST), - sanity_check, _MAX(Z_CLEARANCE_BETWEEN_PROBES, 4) / 2) ) return NAN; + sanity_check, Z_CLEARANCE_BETWEEN_PROBES) ) return NAN; const float first_probe_z = current_position.z; @@ -582,7 +582,7 @@ float Probe::run_z_probe(const bool sanity_check/*=true*/) { { // Probe downward slowly to find the bed if (try_to_probe(PSTR("SLOW"), z_probe_low_point, MMM_TO_MMS(Z_PROBE_SPEED_SLOW), - sanity_check, _MAX(Z_CLEARANCE_MULTI_PROBE, 4) / 2) ) return NAN; + sanity_check, Z_CLEARANCE_MULTI_PROBE) ) return NAN; TERN_(MEASURE_BACKLASH_WHEN_PROBING, backlash.measure_with_probe()); diff --git a/Marlin/src/module/tool_change.cpp b/Marlin/src/module/tool_change.cpp index 8aa367555dc3..3a283f8357da 100644 --- a/Marlin/src/module/tool_change.cpp +++ b/Marlin/src/module/tool_change.cpp @@ -1222,16 +1222,27 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE) - void extruder_migration() { + bool extruder_migration() { #if ENABLED(PREVENT_COLD_EXTRUSION) - if (thermalManager.targetTooColdToExtrude(active_extruder)) return; + if (thermalManager.targetTooColdToExtrude(active_extruder)) { + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHOLN("Migration Source Too Cold"); + #endif + return false; + } #endif // No auto-migration or specified target? if (!migration.target && active_extruder >= migration.last) { + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHO_MSG("No Migration Target"); + SERIAL_ECHO_MSG("Target: ", migration.target, + " Last: ", migration.last, + " Active: ", active_extruder); + #endif migration.automode = false; - return; + return false; } // Migrate to a target or the next extruder @@ -1239,6 +1250,9 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { uint8_t migration_extruder = active_extruder; if (migration.target) { + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHOLN("Migration using fixed target"); + #endif // Specified target ok? const int16_t t = migration.target - 1; if (t != active_extruder) migration_extruder = t; @@ -1246,9 +1260,17 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { else if (migration.automode && migration_extruder < migration.last && migration_extruder < EXTRUDERS - 1) migration_extruder++; - if (migration_extruder == active_extruder) return; + if (migration_extruder == active_extruder) { + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHOLN("Migration source matches active"); + #endif + return false; + } // Migration begins + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHOLN("Beginning migration"); + #endif migration.in_progress = true; // Prevent runout script planner.synchronize(); @@ -1294,6 +1316,10 @@ void tool_change(const uint8_t new_tool, bool no_move/*=false*/) { planner.synchronize(); planner.set_e_position_mm(current_position.e); // New extruder primed and ready + #if ENABLED(DEBUG_TOOLCHANGE_MIGRATION_FEATURE) + SERIAL_ECHOLN("Migration Complete"); + #endif + return true; } #endif // TOOLCHANGE_MIGRATION_FEATURE diff --git a/Marlin/src/module/tool_change.h b/Marlin/src/module/tool_change.h index 4b004950ab75..d39d7bc7833f 100644 --- a/Marlin/src/module/tool_change.h +++ b/Marlin/src/module/tool_change.h @@ -59,7 +59,7 @@ } migration_settings_t; constexpr migration_settings_t migration_defaults = { 0, 0, false, false }; extern migration_settings_t migration; - void extruder_migration(); + bool extruder_migration(); #endif #endif diff --git a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h index 9a7441936387..596c40540198 100644 --- a/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h +++ b/Marlin/src/pins/lpc1768/pins_RAMPS_RE_ARM.h @@ -171,7 +171,7 @@ #define TEMP_2_PIN P0_26_A3 // A3 - (63) - J5-3 & AUX-2 #define TEMP_3_PIN P1_30_A4 // A4 - (37) - BUZZER_PIN //#define TEMP_4_PIN P1_31_A5 // A5 - (49) - SD_DETECT_PIN -//#define ?? P0_03_A6 // A6 - ( 0) - RXD0 - J4-4 & AUX-1 +//#define ?? P0_03_A6 // A6 - ( 0) - RXD0 - J4-4 & AUX-1 #define FILWIDTH_PIN P0_02_A7 // A7 - ( 1) - TXD0 - J4-5 & AUX-1 // diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h index d8933fe03914..6b06bda88719 100644 --- a/Marlin/src/pins/pins.h +++ b/Marlin/src/pins/pins.h @@ -541,9 +541,9 @@ #elif MB(CCROBOT_MEEB_3DP) #include "stm32f1/pins_CCROBOT_MEEB_3DP.h" // STM32F1 env:STM32F103RC_meeb #elif MB(CHITU3D_V5) - #include "stm32f1/pins_CHITU3D_V5.h" // STM32F1 env:chitu_f103 env:chitu_v5_gpio_init + #include "stm32f1/pins_CHITU3D_V5.h" // STM32F1 env:chitu_f103 env:chitu_v5_gpio_init env:chitu_f103_lvgl #elif MB(CHITU3D_V6) - #include "stm32f1/pins_CHITU3D_V6.h" // STM32F1 env:chitu_f103 + #include "stm32f1/pins_CHITU3D_V6.h" // STM32F1 env:chitu_f103 env:chitu_f103_lvgl #elif MB(CREALITY_V4) #include "stm32f1/pins_CREALITY_V4.h" // STM32F1 env:STM32F103RET6_creality diff --git a/Marlin/src/pins/rambo/pins_RAMBO.h b/Marlin/src/pins/rambo/pins_RAMBO.h index 7a61053069f5..fecbb2620dea 100644 --- a/Marlin/src/pins/rambo/pins_RAMBO.h +++ b/Marlin/src/pins/rambo/pins_RAMBO.h @@ -112,7 +112,7 @@ #define E1_MS2_PIN 64 #define DIGIPOTSS_PIN 38 -#define DIGIPOT_CHANNELS { 4,5,3,0,1 } // X Y Z E0 E1 digipot channels to stepper driver mapping +#define DIGIPOT_CHANNELS { 4,5,3,0,1 } // X Y Z E0 E1 digipot channels to stepper driver mapping #ifndef DIGIPOT_MOTOR_CURRENT #define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A) #endif diff --git a/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h b/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h index 49237c706247..5439929ba7cd 100644 --- a/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h +++ b/Marlin/src/pins/rambo/pins_SCOOVO_X9H.h @@ -92,7 +92,7 @@ #define E1_MS2_PIN 64 #define DIGIPOTSS_PIN 38 -#define DIGIPOT_CHANNELS {4,5,3,0,1} // X Y Z E0 E1 digipot channels to stepper driver mapping +#define DIGIPOT_CHANNELS {4,5,3,0,1} // X Y Z E0 E1 digipot channels to stepper driver mapping // // Temperature Sensors diff --git a/Marlin/src/pins/sam/pins_ADSK.h b/Marlin/src/pins/sam/pins_ADSK.h index 61c2e1b494e6..116a6b87eecc 100644 --- a/Marlin/src/pins/sam/pins_ADSK.h +++ b/Marlin/src/pins/sam/pins_ADSK.h @@ -175,12 +175,12 @@ A stepper for E0 extruder #define ADC_BUTTONS_VALUE_SCALE (5.0/AREF_VOLTS) // The LCD module pullup voltage is 5.0V but ADC reference voltage is 3.3V - #define ADC_BUTTONS_R_PULLDOWN 4.7 // Moves voltage down to be bellow 3.3V instead of 5V + #define ADC_BUTTONS_R_PULLDOWN 4.7 // Moves voltage down to be bellow 3.3V instead of 5V // the resistors values will be scaled because of 4.7K pulldown parallel resistor #define _ADC_BUTTONS_R_SCALED(R) ((R) * (ADC_BUTTONS_R_PULLDOWN) / ((R) + ADC_BUTTONS_R_PULLDOWN)) // buttons pullup resistor - #define ADC_BUTTONS_R_PULLUP 4.7 // the resistor on the 2004 LCD panel + #define ADC_BUTTONS_R_PULLUP 4.7 // the resistor on the 2004 LCD panel // buttons resistors with scaled values because of parallel pulldown resistor #define ADC_BUTTONS_LEFT_R_PULLDOWN _ADC_BUTTONS_R_SCALED(0.47) #define ADC_BUTTONS_RIGHT_R_PULLDOWN _ADC_BUTTONS_R_SCALED(4.7) diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h index 92feef321833..7aa02eb3e7c7 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_E3_DIP.h @@ -35,7 +35,7 @@ #if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) #define FLASH_EEPROM_EMULATION - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif diff --git a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h index 6d8100e5d143..c1b2f3624997 100644 --- a/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_BTT_SKR_MINI_E3_common.h @@ -33,7 +33,7 @@ #if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) #define FLASH_EEPROM_EMULATION - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif 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 661fbdb5e84d..5066fc04f522 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 @@ -35,7 +35,7 @@ #if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) #define FLASH_EEPROM_EMULATION - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif diff --git a/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h b/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h index a835f69ea9bc..d99bba8369ab 100644 --- a/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h +++ b/Marlin/src/pins/stm32f1/pins_CHITU3D_V5.h @@ -41,7 +41,7 @@ #if ENABLED(FLASH_EEPROM_EMULATION) // SoC Flash (framework-arduinoststm32-maple/STM32F1/libraries/EEPROM/EEPROM.h) #define EEPROM_START_ADDRESS (0x8000000UL + (512 * 1024) - 2 * EEPROM_PAGE_SIZE) - #define EEPROM_PAGE_SIZE (0x800U) // 2KB, but will use 2x more (4KB) + #define EEPROM_PAGE_SIZE (0x800U) // 2KB, but will use 2x more (4KB) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE #else #define MARLIN_EEPROM_SIZE 0x800U // On SD, Limit to 2KB, require this amount of RAM @@ -142,6 +142,71 @@ #endif #endif +#define SPI_FLASH_SIZE 0x200000 // 2MB + +#if ENABLED(TFT_LVGL_UI) + #define HAS_SPI_FLASH_FONT 0 + #define HAS_GCODE_PREVIEW 1 + #define HAS_GCODE_DEFAULT_VIEW_IN_FLASH 0 + #define HAS_LANG_SELECT_SCREEN 0 + #define HAS_BAK_VIEW_IN_FLASH 0 + + //SPI 2 + #define W25QXX_CS_PIN PB12 + #define W25QXX_MOSI_PIN PB15 + #define W25QXX_MISO_PIN PB14 + #define W25QXX_SCK_PIN PB13 + + #define TOUCH_CS_PIN PB7 // SPI1_NSS + #define TOUCH_SCK_PIN PA5 // SPI1_SCK + #define TOUCH_MISO_PIN PA6 // SPI1_MISO + #define TOUCH_MOSI_PIN PA7 // SPI1_MOSI + // #define TOUCH_INT_PIN PB6 + + #define SPI_TFT_CS_PIN TOUCH_CS_PIN + #define SPI_TFT_SCK_PIN TOUCH_SCK_PIN + #define SPI_TFT_MISO_PIN TOUCH_MISO_PIN + #define SPI_TFT_MOSI_PIN TOUCH_MOSI_PIN + #define SPI_TFT_DC_PIN PB6 + #define SPI_TFT_RST_PIN PF11 + + #define LCD_RESET_PIN PF11 + #define LCD_BACKLIGHT_PIN PD13 + #define FSMC_CS_PIN PD7 + #define FSMC_RS_PIN PD11 + + #define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT + #define FSMC_DMA_DEV DMA2 + #define FSMC_DMA_CHANNEL DMA_CH5 + + #define LCD_FULL_PIXEL_WIDTH 480 + #define LCD_PIXEL_OFFSET_X 48 + #define LCD_FULL_PIXEL_HEIGHT 320 + #define LCD_PIXEL_OFFSET_Y 48 + + #define LCD_PIXEL_HEIGHT 320 + #define LCD_PIXEL_WIDTH 480 + + #define XPT2046_X_CALIBRATION -12316 + #define XPT2046_Y_CALIBRATION 8981 + #define XPT2046_X_OFFSET 340 + #define XPT2046_Y_OFFSET -20 + + #define USE_XPT2046 1 + #define XPT2046_XY_SWAP 0 + #define XPT2046_X_INV 1 + #define XPT2046_Y_INV 0 + + #define XPT2046_HOR_RES 480 + #define XPT2046_VER_RES 320 + #define XPT2046_X_MIN 140 + #define XPT2046_Y_MIN 200 + #define XPT2046_X_MAX 1900 + #define XPT2046_Y_MAX 1900 + #define XPT2046_AVG 4 + #define XPT2046_INV 0 +#endif + // SPI1(PA7)=LCD & SPI3(PB5)=STUFF, are not available // We nee to use the SPI2 #define ENABLE_SPI2 diff --git a/Marlin/src/pins/stm32f1/pins_CHITU3D_V6.h b/Marlin/src/pins/stm32f1/pins_CHITU3D_V6.h index e659dadb0967..6d668bf0c58a 100644 --- a/Marlin/src/pins/stm32f1/pins_CHITU3D_V6.h +++ b/Marlin/src/pins/stm32f1/pins_CHITU3D_V6.h @@ -45,7 +45,7 @@ #if ENABLED(FLASH_EEPROM_EMULATION) // SoC Flash (framework-arduinoststm32-maple/STM32F1/libraries/EEPROM/EEPROM.h) #define EEPROM_START_ADDRESS (0x8000000UL + (512 * 1024) - 2 * EEPROM_PAGE_SIZE) - #define EEPROM_PAGE_SIZE (0x800U) // 2KB, but will use 2x more (4KB) + #define EEPROM_PAGE_SIZE (0x800U) // 2KB, but will use 2x more (4KB) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE #else #define MARLIN_EEPROM_SIZE 0x800U // On SD, Limit to 2KB, require this amount of RAM @@ -147,6 +147,71 @@ #endif #endif +#define SPI_FLASH_SIZE 0x200000 // 2MB + +#if ENABLED(TFT_LVGL_UI) + #define HAS_SPI_FLASH_FONT 0 + #define HAS_GCODE_PREVIEW 1 + #define HAS_GCODE_DEFAULT_VIEW_IN_FLASH 0 + #define HAS_LANG_SELECT_SCREEN 0 + #define HAS_BAK_VIEW_IN_FLASH 0 + + //SPI 2 + #define W25QXX_CS_PIN PB12 + #define W25QXX_MOSI_PIN PB15 + #define W25QXX_MISO_PIN PB14 + #define W25QXX_SCK_PIN PB13 + + #define TOUCH_CS_PIN PB7 // SPI1_NSS + #define TOUCH_SCK_PIN PA5 // SPI1_SCK + #define TOUCH_MISO_PIN PA6 // SPI1_MISO + #define TOUCH_MOSI_PIN PA7 // SPI1_MOSI + // #define TOUCH_INT_PIN PB6 + + #define SPI_TFT_CS_PIN TOUCH_CS_PIN + #define SPI_TFT_SCK_PIN TOUCH_SCK_PIN + #define SPI_TFT_MISO_PIN TOUCH_MISO_PIN + #define SPI_TFT_MOSI_PIN TOUCH_MOSI_PIN + #define SPI_TFT_DC_PIN PB6 + #define SPI_TFT_RST_PIN PF11 + + #define LCD_RESET_PIN PF11 + #define LCD_BACKLIGHT_PIN PD13 + #define FSMC_CS_PIN PD7 + #define FSMC_RS_PIN PD11 + + #define LCD_USE_DMA_FSMC // Use DMA transfers to send data to the TFT + #define FSMC_DMA_DEV DMA2 + #define FSMC_DMA_CHANNEL DMA_CH5 + + #define LCD_FULL_PIXEL_WIDTH 480 + #define LCD_PIXEL_OFFSET_X 48 + #define LCD_FULL_PIXEL_HEIGHT 320 + #define LCD_PIXEL_OFFSET_Y 48 + + #define LCD_PIXEL_HEIGHT 320 + #define LCD_PIXEL_WIDTH 480 + + #define XPT2046_X_CALIBRATION -12316 + #define XPT2046_Y_CALIBRATION 8981 + #define XPT2046_X_OFFSET 340 + #define XPT2046_Y_OFFSET -20 + + #define USE_XPT2046 1 + #define XPT2046_XY_SWAP 0 + #define XPT2046_X_INV 1 + #define XPT2046_Y_INV 0 + + #define XPT2046_HOR_RES 480 + #define XPT2046_VER_RES 320 + #define XPT2046_X_MIN 140 + #define XPT2046_Y_MIN 200 + #define XPT2046_X_MAX 1900 + #define XPT2046_Y_MAX 1900 + #define XPT2046_AVG 4 + #define XPT2046_INV 0 +#endif + // SPI1(PA7)=LCD & SPI3(PB5)=STUFF, are not available // so SPI2 is required. #define ENABLE_SPI2 diff --git a/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h b/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h index fc9cfd6a7ca2..a39635b91160 100644 --- a/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h +++ b/Marlin/src/pins/stm32f1/pins_FYSETC_AIO_II.h @@ -30,7 +30,7 @@ #define DISABLE_JTAG -#define pins_v2_20190128 // new pins define +#define pins_v2_20190128 // new pins define // Ignore temp readings during development. //#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000 @@ -40,7 +40,7 @@ // #if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) #define FLASH_EEPROM_EMULATION - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif diff --git a/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h b/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h index e45059eab767..500a420babba 100644 --- a/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h +++ b/Marlin/src/pins/stm32f1/pins_FYSETC_CHEETAH.h @@ -38,7 +38,7 @@ #if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) #define FLASH_EEPROM_EMULATION - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif diff --git a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h index aea7cedce718..87f1695b238b 100644 --- a/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h +++ b/Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h @@ -163,7 +163,7 @@ #define MARLIN_EEPROM_SIZE 16UL * (EEPROM_PAGE_SIZE) // Limit to 64KB for now... #elif ENABLED(FLASH_EEPROM_EMULATION) // SoC Flash (framework-arduinoststm32-maple/STM32F1/libraries/EEPROM/EEPROM.h) - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE (EEPROM_PAGE_SIZE) #else 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 6d09b09aabbb..155db5a2238d 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_E3_common.h @@ -40,7 +40,7 @@ // #if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) #define FLASH_EEPROM_EMULATION - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h index 674deb6d5dbb..163d3e41e9f7 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_MINI.h @@ -41,7 +41,7 @@ #if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) #define FLASH_EEPROM_EMULATION // 2K in a AT24C16N - #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_PAGE_SIZE (0x800U) // 2KB #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif diff --git a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h index fc9fa8721253..a86a4d0719a8 100644 --- a/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h +++ b/Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h @@ -31,7 +31,7 @@ #error "MKS Robin nano supports up to 2 hotends / E-steppers. Comment out this line to continue." #endif -#define BOARD_INFO_NAME "MKS Robin nano" +#define BOARD_INFO_NAME "MKS Robin Nano" // // Release PB4 (Y_ENABLE_PIN) from JTAG NRST role @@ -41,10 +41,13 @@ // // EEPROM // -#if NO_EEPROM_SELECTED - //#define FLASH_EEPROM_EMULATION - #define SDCARD_EEPROM_EMULATION +#if EITHER(NO_EEPROM_SELECTED, FLASH_EEPROM_EMULATION) + #define FLASH_EEPROM_EMULATION + #define EEPROM_PAGE_SIZE (0x800U) // 2KB + #define EEPROM_START_ADDRESS (0x8000000UL + (STM32_FLASH_SIZE) * 1024UL - (EEPROM_PAGE_SIZE) * 2UL) + #define MARLIN_EEPROM_SIZE EEPROM_PAGE_SIZE // 2KB #endif + #define ENABLE_SPI2 // @@ -144,7 +147,7 @@ #endif #define SDIO_SUPPORT -#define SDIO_CLOCK 4500000 // 4.5 MHz +#define SDIO_CLOCK 4500000 // 4.5 MHz #define SD_DETECT_PIN PD12 #define ONBOARD_SD_CS_PIN PC11 @@ -228,7 +231,7 @@ #endif // HAS_SPI_LCD -#elif ENABLED(TFT_LITTLE_VGL_UI) +#elif ENABLED(TFT_LVGL_UI) #define FSMC_CS_PIN PD7 // NE4 #define FSMC_RS_PIN PD11 // A0 diff --git a/Marlin/src/sd/cardreader.cpp b/Marlin/src/sd/cardreader.cpp index 2631edf4812e..53ba537311af 100644 --- a/Marlin/src/sd/cardreader.cpp +++ b/Marlin/src/sd/cardreader.cpp @@ -37,6 +37,7 @@ #include "../module/printcounter.h" #include "../gcode/queue.h" #include "../module/configuration_store.h" +#include "../module/stepper/indirection.h" #if ENABLED(EMERGENCY_PARSER) #include "../feature/e_parser.h" @@ -402,7 +403,7 @@ void CardReader::manage_media() { if (stat) { // Media Inserted safe_delay(500); // Some boards need a delay to get settled mount(); // Try to mount the media - #if MB(FYSETC_CHEETAH, FYSETC_AIO_II) + #if MB(FYSETC_CHEETAH, FYSETC_CHEETAH_V12, FYSETC_AIO_II) reset_stepper_drivers(); // Workaround for Cheetah bug #endif if (!isMounted()) stat = 0; // Not mounted? diff --git a/buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld b/buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld index 785345543c0c..d8a138ca2e25 100755 --- a/buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld +++ b/buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld @@ -1,7 +1,7 @@ MEMORY { ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40 - rom (rx) : ORIGIN = 0x08007000, LENGTH = 512K - 28K + rom (rx) : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K } /* Provide memory region aliases for common.inc */ diff --git a/buildroot/share/fonts/genallfont.sh b/buildroot/share/fonts/genallfont.sh index e41baac263a5..84f7bb92aa7f 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 ru sk tr uk vi zh_CN zh_TW test" +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 tr uk vi zh_CN zh_TW test" # # Generate data for language list MARLIN_LANGS or all if not provided diff --git a/buildroot/tests/mega1280-tests b/buildroot/tests/mega1280-tests index 7f2872a0b46d..c9caf7d8525b 100644 --- a/buildroot/tests/mega1280-tests +++ b/buildroot/tests/mega1280-tests @@ -20,8 +20,11 @@ opt_set LCD_LANGUAGE an opt_enable SPINDLE_FEATURE ULTIMAKERCONTROLLER LCD_BED_LEVELING \ SENSORLESS_BACKOFF_MM HOMING_BACKOFF_POST_MM HOME_Y_BEFORE_X CODEPENDENT_XY_HOMING \ MESH_BED_LEVELING ENABLE_LEVELING_FADE_HEIGHT MESH_G28_REST_ORIGIN \ - G26_MESH_VALIDATION MESH_EDIT_MENU GCODE_QUOTED_STRINGS -exec_test $1 $2 "Spindle, MESH_BED_LEVELING, and LCD" + G26_MESH_VALIDATION MESH_EDIT_MENU GCODE_QUOTED_STRINGS \ + EXTERNAL_CLOSED_LOOP_CONTROLLER +opt_set CLOSED_LOOP_ENABLE_PIN 44 +opt_set CLOSED_LOOP_MOVE_COMPLETE_PIN 45 +exec_test $1 $2 "Spindle, MESH_BED_LEVELING, closed loop, and LCD" # # Test DUAL_X_CARRIAGE diff --git a/buildroot/tests/mega2560-tests b/buildroot/tests/mega2560-tests index 32be906c9e5e..1c299ad30755 100755 --- a/buildroot/tests/mega2560-tests +++ b/buildroot/tests/mega2560-tests @@ -234,11 +234,11 @@ exec_test $1 $2 "Mightyboard Rev. E | CoreXY, Gradient Mix | Endstop Int. | Home # #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 ru sk tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; done +#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 tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; 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 ru sk tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; done +#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 tr uk vi zh_CN zh_TW test; do opt_set LCD_LANGUAGE $lang; echo "compile with language $lang ..."; exec_test $1 $2 "Stuff"; done ######## Example Configurations ############## # diff --git a/platformio.ini b/platformio.ini index 1f5385ca5149..f0b71d439e31 100644 --- a/platformio.ini +++ b/platformio.ini @@ -267,7 +267,7 @@ build_flags = ${common.build_flags} -std=gnu++17 -Wno-register build_unflags = -std=gnu++11 src_filter = ${common.default_src_filter} + lib_deps = ${common.lib_deps} - SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip + SoftwareSerialM Adafruit_SPIFlash=https://github.com/adafruit/Adafruit_SPIFlash/archive/master.zip debug_tool = jlink @@ -346,7 +346,7 @@ lib_ignore = Adafruit NeoPixel SPI lib_deps = ${common.lib_deps} - SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip + SoftwareSerialM # # STM32F103RC @@ -385,7 +385,7 @@ lib_deps = LiquidTWI2@1.2.7 Adafruit NeoPixel=https://github.com/ccccmagicboy/Adafruit_NeoPixel#meeb_3dp_use SailfishLCD=https://github.com/mikeshub/SailfishLCD/archive/master.zip - SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip + SoftwareSerialM USBComposite for STM32F1@0.91 lib_ignore = SPI debug_tool = stlink @@ -640,7 +640,7 @@ build_unflags = -std=gnu++11 extra_scripts = buildroot/share/PlatformIO/scripts/mks_robin_nano35.py src_filter = ${common.default_src_filter} + lib_deps = ${common.lib_deps} - SoftwareSerialM=https://github.com/FYSETC/SoftwareSerialM/archive/master.zip + SoftwareSerialM MKS-LittlevGL=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip lib_ignore = Adafruit NeoPixel, SPI @@ -691,6 +691,17 @@ platform = ${common_stm32f1.platform} extends = env:chitu_f103 build_flags = ${env:chitu_f103.build_flags} -DCHITU_V5_Z_MIN_BUGFIX +# +# Chitu boards like Tronxy X5SA (STM32F103ZET6) using TFT LVGL UI +# +[env:chitu_f103_lvgl] +platform = ${common_stm32f1.platform} +extends = env:chitu_f103 +src_filter = ${common.default_src_filter} + +lib_deps = ${common.lib_deps} + SoftwareSerialM + MKS-LittlevGL=https://github.com/makerbase-mks/MKS-LittlevGL/archive/master.zip + # # Creality (STM32F103RET6) #