diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 39f531fff..2538128d3 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/Cartesio/Configuration_adv.h b/Marlin/example_configurations/Cartesio/Configuration_adv.h index 6b46093f0..5aede9304 100644 --- a/Marlin/example_configurations/Cartesio/Configuration_adv.h +++ b/Marlin/example_configurations/Cartesio/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/Felix/Configuration_adv.h b/Marlin/example_configurations/Felix/Configuration_adv.h index ddd143d6f..90076a1ff 100644 --- a/Marlin/example_configurations/Felix/Configuration_adv.h +++ b/Marlin/example_configurations/Felix/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/Hephestos/Configuration_adv.h b/Marlin/example_configurations/Hephestos/Configuration_adv.h index c0a7ea3e3..79c5ab87f 100644 --- a/Marlin/example_configurations/Hephestos/Configuration_adv.h +++ b/Marlin/example_configurations/Hephestos/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h index 165dc5562..ee2c63fcb 100644 --- a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h +++ b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. #define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/K8200/Configuration_adv.h b/Marlin/example_configurations/K8200/Configuration_adv.h index a73020fb3..0cb7199be 100644 --- a/Marlin/example_configurations/K8200/Configuration_adv.h +++ b/Marlin/example_configurations/K8200/Configuration_adv.h @@ -473,15 +473,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/K8400/Configuration_adv.h b/Marlin/example_configurations/K8400/Configuration_adv.h index 286641939..d5be523ab 100644 --- a/Marlin/example_configurations/K8400/Configuration_adv.h +++ b/Marlin/example_configurations/K8400/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/RigidBot/Configuration_adv.h b/Marlin/example_configurations/RigidBot/Configuration_adv.h index df3265ea1..c71179460 100644 --- a/Marlin/example_configurations/RigidBot/Configuration_adv.h +++ b/Marlin/example_configurations/RigidBot/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/SCARA/Configuration_adv.h b/Marlin/example_configurations/SCARA/Configuration_adv.h index 0921b8ccd..63cc1bc4e 100644 --- a/Marlin/example_configurations/SCARA/Configuration_adv.h +++ b/Marlin/example_configurations/SCARA/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/TAZ4/Configuration_adv.h b/Marlin/example_configurations/TAZ4/Configuration_adv.h index 3611baff0..3163bebea 100644 --- a/Marlin/example_configurations/TAZ4/Configuration_adv.h +++ b/Marlin/example_configurations/TAZ4/Configuration_adv.h @@ -468,15 +468,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/WITBOX/Configuration_adv.h b/Marlin/example_configurations/WITBOX/Configuration_adv.h index 1d2677bf3..c04fe9202 100644 --- a/Marlin/example_configurations/WITBOX/Configuration_adv.h +++ b/Marlin/example_configurations/WITBOX/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h b/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h index 3946242f3..1617cbb68 100644 --- a/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h +++ b/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h @@ -462,15 +462,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/delta/generic/Configuration_adv.h b/Marlin/example_configurations/delta/generic/Configuration_adv.h index 2d7bca0db..0cc37d591 100644 --- a/Marlin/example_configurations/delta/generic/Configuration_adv.h +++ b/Marlin/example_configurations/delta/generic/Configuration_adv.h @@ -462,15 +462,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h index 2d7bca0db..0cc37d591 100644 --- a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h +++ b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h @@ -462,15 +462,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h index 91c389f1d..14cf0fa5f 100644 --- a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h +++ b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h @@ -467,15 +467,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h index a76c1fc98..45d077bf9 100644 --- a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h +++ b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h @@ -462,15 +462,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/makibox/Configuration_adv.h b/Marlin/example_configurations/makibox/Configuration_adv.h index a72f7ff50..cf3a92626 100644 --- a/Marlin/example_configurations/makibox/Configuration_adv.h +++ b/Marlin/example_configurations/makibox/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h index 63c0913f1..312f4bdab 100644 --- a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h +++ b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h @@ -460,15 +460,19 @@ #endif // SDSUPPORT -// for dogm lcd displays you can choose some additional fonts: +// Some additional options are available for graphical displays: #if ENABLED(DOGLCD) - // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT - // we don't have a big font for Cyrillic, Kana + // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_BIG_EDIT_FONT - // If you have spare 2300Byte of progmem and want to use a - // smaller font on the Info-screen uncomment the next line. + // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM. + // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese. //#define USE_SMALL_INFOFONT + + // Enable this option and reduce the value to optimize screen updates. + // The normal delay is 10µs. Use the lowest value that still gives a reliable display. + //#define DOGM_SPI_DELAY_US 5 #endif // DOGLCD // @section safety diff --git a/Marlin/language.h b/Marlin/language.h index ef89f89db..a2b2b5c0f 100644 --- a/Marlin/language.h +++ b/Marlin/language.h @@ -276,7 +276,13 @@ #include INCLUDE_LANGUAGE -#if DISABLED(SIMULATE_ROMFONT) && DISABLED(DISPLAY_CHARSET_ISO10646_1) && DISABLED(DISPLAY_CHARSET_ISO10646_5) && DISABLED(DISPLAY_CHARSET_ISO10646_KANA) && DISABLED(DISPLAY_CHARSET_ISO10646_GREEK) && DISABLED(DISPLAY_CHARSET_ISO10646_CN) && DISABLED(DISPLAY_CHARSET_ISO10646_TR) +#if DISABLED(SIMULATE_ROMFONT) \ + && DISABLED(DISPLAY_CHARSET_ISO10646_1) \ + && DISABLED(DISPLAY_CHARSET_ISO10646_5) \ + && DISABLED(DISPLAY_CHARSET_ISO10646_KANA) \ + && DISABLED(DISPLAY_CHARSET_ISO10646_GREEK) \ + && DISABLED(DISPLAY_CHARSET_ISO10646_CN) \ + && DISABLED(DISPLAY_CHARSET_ISO10646_TR) #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays. #endif diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 066215f72..c4fcf65e6 100755 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -2250,7 +2250,7 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } - void lcd_filament_change_show_message(FilamentChangeMessage message) { + void lcd_filament_change_show_message(const FilamentChangeMessage message) { switch (message) { case FILAMENT_CHANGE_MESSAGE_INIT: defer_return_to_status = true; @@ -2849,20 +2849,20 @@ void lcd_finishstatus(bool persist=false) { bool lcd_hasstatus() { return (lcd_status_message[0] != '\0'); } -void lcd_setstatus(const char* message, bool persist) { +void lcd_setstatus(const char* const message, bool persist) { if (lcd_status_message_level > 0) return; strncpy(lcd_status_message, message, 3 * (LCD_WIDTH)); lcd_finishstatus(persist); } -void lcd_setstatuspgm(const char* message, uint8_t level) { +void lcd_setstatuspgm(const char* const message, uint8_t level) { if (level < lcd_status_message_level) return; lcd_status_message_level = level; strncpy_P(lcd_status_message, message, 3 * (LCD_WIDTH)); lcd_finishstatus(level > 0); } -void lcd_setalertstatuspgm(const char* message) { +void lcd_setalertstatuspgm(const char* const message) { lcd_setstatuspgm(message, 1); #if ENABLED(ULTIPANEL) lcd_return_to_status(); @@ -2872,7 +2872,7 @@ void lcd_setalertstatuspgm(const char* message) { void lcd_reset_alert_level() { lcd_status_message_level = 0; } #if HAS_LCD_CONTRAST - void set_lcd_contrast(int value) { + void set_lcd_contrast(const int value) { lcd_contrast = constrain(value, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); u8g.setContrast(lcd_contrast); } diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 3cd071114..f0d0a4284 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -88,7 +88,7 @@ void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual #if ENABLED(FILAMENT_CHANGE_FEATURE) - void lcd_filament_change_show_message(FilamentChangeMessage message); + void lcd_filament_change_show_message(const FilamentChangeMessage message); #endif // FILAMENT_CHANGE_FEATURE #else @@ -156,8 +156,8 @@ inline void lcd_update() {} inline void lcd_init() {} inline bool lcd_hasstatus() { return false; } - inline void lcd_setstatus(const char* message, const bool persist=false) { UNUSED(message); UNUSED(persist); } - inline void lcd_setstatuspgm(const char* message, const uint8_t level=0) { UNUSED(message); UNUSED(level); } + inline void lcd_setstatus(const char* const message, const bool persist=false) { UNUSED(message); UNUSED(persist); } + inline void lcd_setstatuspgm(const char* const message, const uint8_t level=0) { UNUSED(message); UNUSED(level); } inline void lcd_buttons_update() {} inline void lcd_reset_alert_level() {} inline bool lcd_detected() { return true; } diff --git a/Marlin/ultralcd_impl_DOGM.h b/Marlin/ultralcd_impl_DOGM.h index a1a8c2c66..ffbcb3c16 100644 --- a/Marlin/ultralcd_impl_DOGM.h +++ b/Marlin/ultralcd_impl_DOGM.h @@ -54,6 +54,7 @@ #include "_Bootscreen.h" #endif +// Only Western languages support big / small fonts #if DISABLED(DISPLAY_CHARSET_ISO10646_1) #undef USE_BIG_EDIT_FONT #undef USE_SMALL_INFOFONT @@ -122,7 +123,7 @@ #if ENABLED(USE_BIG_EDIT_FONT) #define FONT_MENU_EDIT_NAME u8g_font_9x18 #define DOG_CHAR_WIDTH_EDIT 9 - #define DOG_CHAR_HEIGHT_EDIT 18 + #define DOG_CHAR_HEIGHT_EDIT 13 #define LCD_WIDTH_EDIT 14 #else #define FONT_MENU_EDIT_NAME FONT_MENU_NAME @@ -183,8 +184,15 @@ int lcd_contrast; static char currentfont = 0; -static void lcd_setFont(char font_nr) { - switch(font_nr) { +// The current graphical page being rendered +u8g_page_t &page = ((u8g_pb_t *)((u8g.getU8g())->dev->dev_mem))->p; + +// For selective rendering within a Y range +#define PAGE_UNDER(yb) (u8g.getU8g()->current_page.y0 <= (yb)) +#define PAGE_CONTAINS(ya, yb) (PAGE_UNDER(yb) && u8g.getU8g()->current_page.y1 >= (ya)) + +static void lcd_setFont(const char font_nr) { + switch (font_nr) { case FONT_STATUSMENU : {u8g.setFont(FONT_STATUSMENU_NAME); currentfont = FONT_STATUSMENU;}; break; case FONT_MENU : {u8g.setFont(FONT_MENU_NAME); currentfont = FONT_MENU;}; break; case FONT_SPECIAL : {u8g.setFont(FONT_SPECIAL_NAME); currentfont = FONT_SPECIAL;}; break; @@ -193,7 +201,7 @@ static void lcd_setFont(char font_nr) { } } -void lcd_print(char c) { +void lcd_print(const char c) { if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) { u8g.setFont(FONT_SPECIAL_NAME); u8g.print(c); @@ -202,7 +210,7 @@ void lcd_print(char c) { else charset_mapper(c); } -char lcd_print_and_count(char c) { +char lcd_print_and_count(const char c) { if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) { u8g.setFont(FONT_SPECIAL_NAME); u8g.print(c); @@ -212,7 +220,7 @@ char lcd_print_and_count(char c) { else return charset_mapper(c); } -void lcd_print(const char* str) { +void lcd_print(const char* const str) { for (uint8_t i = 0; char c = str[i]; ++i) lcd_print(c); } @@ -260,15 +268,15 @@ static void lcd_implementation_init() { } #endif // SHOW_CUSTOM_BOOTSCREEN - int offx = (u8g.getWidth() - (START_BMPWIDTH)) / 2; + const uint8_t offx = (u8g.getWidth() - (START_BMPWIDTH)) / 2; #if ENABLED(START_BMPHIGH) - int offy = 0; + constexpr uint8_t offy = 0; #else - int offy = DOG_CHAR_HEIGHT; + constexpr uint8_t offy = DOG_CHAR_HEIGHT; #endif - int txt1X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE1) - 1) * (DOG_CHAR_WIDTH)) / 2; + const uint8_t txt1X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE1) - 1) * (DOG_CHAR_WIDTH)) / 2; if (show_bootscreen) { u8g.firstPage(); @@ -278,7 +286,7 @@ static void lcd_implementation_init() { #ifndef STRING_SPLASH_LINE2 u8g.drawStr(txt1X, u8g.getHeight() - (DOG_CHAR_HEIGHT), STRING_SPLASH_LINE1); #else - int txt2X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE2) - 1) * (DOG_CHAR_WIDTH)) / 2; + const uint8_t txt2X = (u8g.getWidth() - (sizeof(STRING_SPLASH_LINE2) - 1) * (DOG_CHAR_WIDTH)) / 2; u8g.drawStr(txt1X, u8g.getHeight() - (DOG_CHAR_HEIGHT) * 3 / 2, STRING_SPLASH_LINE1); u8g.drawStr(txt2X, u8g.getHeight() - (DOG_CHAR_HEIGHT) * 1 / 2, STRING_SPLASH_LINE2); #endif @@ -307,37 +315,41 @@ static void lcd_implementation_clear() { } // Automatically cleared by Picture L // Status Screen // -FORCE_INLINE void _draw_centered_temp(int temp, int x, int y) { - int degsize = 6 * (temp >= 100 ? 3 : temp >= 10 ? 2 : 1); // number's pixel width +FORCE_INLINE void _draw_centered_temp(const int temp, const uint8_t x, const uint8_t y) { + const uint8_t degsize = 6 * (temp >= 100 ? 3 : temp >= 10 ? 2 : 1); // number's pixel width u8g.setPrintPos(x - (18 - degsize) / 2, y); // move left if shorter lcd_print(itostr3(temp)); lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); } -FORCE_INLINE void _draw_heater_status(int x, int heater) { +FORCE_INLINE void _draw_heater_status(const uint8_t x, const int8_t heater) { #if HAS_TEMP_BED bool isBed = heater < 0; #else const bool isBed = false; #endif - _draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7); + if (PAGE_UNDER(7)) + _draw_centered_temp((isBed ? thermalManager.degTargetBed() : thermalManager.degTargetHotend(heater)) + 0.5, x, 7); - _draw_centered_temp((isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)) + 0.5, x, 28); + if (PAGE_CONTAINS(21, 28)) + _draw_centered_temp((isBed ? thermalManager.degBed() : thermalManager.degHotend(heater)) + 0.5, x, 28); - int h = isBed ? 7 : 8, - y = isBed ? 18 : 17; - if (isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater)) { - u8g.setColorIndex(0); // white on black - u8g.drawBox(x + h, y, 2, 2); - u8g.setColorIndex(1); // black on white - } - else { - u8g.drawBox(x + h, y, 2, 2); + if (PAGE_CONTAINS(17, 20)) { + const uint8_t h = isBed ? 7 : 8, + y = isBed ? 18 : 17; + if (isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater)) { + u8g.setColorIndex(0); // white on black + u8g.drawBox(x + h, y, 2, 2); + u8g.setColorIndex(1); // black on white + } + else { + u8g.drawBox(x + h, y, 2, 2); + } } } -FORCE_INLINE void _draw_axis_label(AxisEnum axis, const char *pstr, bool blink) { +FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr, const bool blink) { if (blink) lcd_printPGM(pstr); else { @@ -357,49 +369,107 @@ FORCE_INLINE void _draw_axis_label(AxisEnum axis, const char *pstr, bool blink) //#define DOGM_SD_PERCENT static void lcd_implementation_status_screen() { - u8g.setColorIndex(1); // black on white bool blink = lcd_blink(); - // Symbols menu graphics, animated fan - u8g.drawBitmapP(9, 1, STATUS_SCREENBYTEWIDTH, STATUS_SCREENHEIGHT, - #if HAS_FAN0 - blink && fanSpeeds[0] ? status_screen0_bmp : status_screen1_bmp - #else - status_screen0_bmp - #endif - ); + // Black color, white background + u8g.setColorIndex(1); - // Status Menu Font for SD info, Heater status, Fan, XYZ + // Status Menu Font lcd_setFont(FONT_STATUSMENU); + // + // Fan Animation + // + + if (PAGE_UNDER(STATUS_SCREENHEIGHT + 1)) { + + u8g.drawBitmapP(9, 1, STATUS_SCREENBYTEWIDTH, STATUS_SCREENHEIGHT, + #if HAS_FAN0 + blink && fanSpeeds[0] ? status_screen0_bmp : status_screen1_bmp + #else + status_screen0_bmp + #endif + ); + + } + + // + // Temperature Graphics and Info + // + + if (PAGE_UNDER(28)) { + // Extruders + HOTEND_LOOP() _draw_heater_status(5 + e * 25, e); + + // Heated bed + #if HOTENDS < 4 && HAS_TEMP_BED + _draw_heater_status(81, -1); + #endif + + if (PAGE_CONTAINS(20, 27)) { + // Fan + u8g.setPrintPos(104, 27); + #if HAS_FAN0 + int per = ((fanSpeeds[0] + 1) * 100) / 256; + if (per) { + lcd_print(itostr3(per)); + u8g.print('%'); + } + #endif + } + } + #if ENABLED(SDSUPPORT) + + // // SD Card Symbol - u8g.drawBox(42, 42 - (TALL_FONT_CORRECTION), 8, 7); - u8g.drawBox(50, 44 - (TALL_FONT_CORRECTION), 2, 5); - u8g.drawFrame(42, 49 - (TALL_FONT_CORRECTION), 10, 4); - u8g.drawPixel(50, 43 - (TALL_FONT_CORRECTION)); + // + + if (PAGE_CONTAINS(42 - (TALL_FONT_CORRECTION), 51 - (TALL_FONT_CORRECTION))) { + // Upper box + u8g.drawBox(42, 42 - (TALL_FONT_CORRECTION), 8, 7); // 42-48 (or 41-47) + // Right edge + u8g.drawBox(50, 44 - (TALL_FONT_CORRECTION), 2, 5); // 44-48 (or 43-47) + // Bottom hollow box + u8g.drawFrame(42, 49 - (TALL_FONT_CORRECTION), 10, 4); // 49-52 (or 48-51) + // Corner pixel + u8g.drawPixel(50, 43 - (TALL_FONT_CORRECTION)); // 43 (or 42) + } + // // Progress bar frame - u8g.drawFrame(54, 49, 73, 4 - (TALL_FONT_CORRECTION)); + // + + if (PAGE_CONTAINS(49, 52 - (TALL_FONT_CORRECTION))) + u8g.drawFrame(54, 49, 73, 4 - (TALL_FONT_CORRECTION)); // 49-52 (or 49-51) - // SD Card Progress bar and clock if (IS_SD_PRINTING) { + + // // Progress bar solid part - u8g.drawBox(55, 50, (unsigned int)(71 * card.percentDone() * 0.01), 2 - (TALL_FONT_CORRECTION)); - + // + + if (PAGE_CONTAINS(50, 51 - (TALL_FONT_CORRECTION))) + u8g.drawBox(55, 50, (unsigned int)(71 * card.percentDone() * 0.01), 2 - (TALL_FONT_CORRECTION)); + + // + // SD Percent Complete + // + #if ENABLED(DOGM_SD_PERCENT) - // Percent complete - u8g.setPrintPos(55, 48); - u8g.print(itostr3(card.percentDone())); - u8g.print('%'); + if (PAGE_CONTAINS(41, 48)) { + // Percent complete + u8g.setPrintPos(55, 48); + u8g.print(itostr3(card.percentDone())); + u8g.print('%'); + } #endif } - char buffer[10]; - duration_t elapsed = print_job_timer.duration(); - bool has_days = (elapsed.value > 60*60*24L); - elapsed.toDigital(buffer, has_days); + // + // Elapsed Time + // #if DISABLED(DOGM_SD_PERCENT) #define SD_DURATION_X 71 @@ -407,113 +477,167 @@ static void lcd_implementation_status_screen() { #define SD_DURATION_X 89 #endif - u8g.setPrintPos(SD_DURATION_X + (has_days ? 0 : 9), 48); - lcd_print(buffer); + if (PAGE_CONTAINS(41, 48)) { + + char buffer[10]; + duration_t elapsed = print_job_timer.duration(); + bool has_days = (elapsed.value > 60*60*24L); + elapsed.toDigital(buffer, has_days); + + u8g.setPrintPos(SD_DURATION_X + (has_days ? 0 : 9), 48); + lcd_print(buffer); + } #endif - // Extruders - HOTEND_LOOP() _draw_heater_status(5 + e * 25, e); + // + // XYZ Coordinates + // - // Heated bed - #if HOTENDS < 4 && HAS_TEMP_BED - _draw_heater_status(81, -1); + #if ENABLED(USE_SMALL_INFOFONT) + #define INFO_FONT_HEIGHT 7 + #else + #define INFO_FONT_HEIGHT 8 #endif - // Fan - u8g.setPrintPos(104, 27); - #if HAS_FAN0 - int per = ((fanSpeeds[0] + 1) * 100) / 256; - if (per) { - lcd_print(itostr3(per)); - u8g.print('%'); - } + #define XYZ_BASELINE (30 + INFO_FONT_HEIGHT) + + #define X_LABEL_POS 3 + #define X_VALUE_POS 11 + #define XYZ_SPACING 40 + + // Enable to save many cycles by drawing a hollow frame + #define XYZ_HOLLOW_FRAME + + #if ENABLED(XYZ_HOLLOW_FRAME) + #define XYZ_FRAME_TOP 29 + #define XYZ_FRAME_HEIGHT INFO_FONT_HEIGHT + 3 + #else + #define XYZ_FRAME_TOP 30 + #define XYZ_FRAME_HEIGHT INFO_FONT_HEIGHT + 2 #endif - // X, Y, Z-Coordinates // Before homing the axis letters are blinking 'X' <-> '?'. // When axis is homed but axis_known_position is false the axis letters are blinking 'X' <-> ' '. // When everything is ok you see a constant 'X'. - #define XYZ_BASELINE 38 - #if ENABLED(USE_SMALL_INFOFONT) - u8g.drawBox(0, 30, LCD_PIXEL_WIDTH, 10); - #else - u8g.drawBox(0, 30, LCD_PIXEL_WIDTH, 9); - #endif - u8g.setColorIndex(0); // white on black + static char xstring[5], ystring[5], zstring[7]; - u8g.setPrintPos(2, XYZ_BASELINE); - _draw_axis_label(X_AXIS, PSTR(MSG_X), blink); - u8g.setPrintPos(10, XYZ_BASELINE); - lcd_print(ftostr4sign(current_position[X_AXIS])); + // At the first page, regenerate the XYZ strings + if (page.page == 0) { + strcpy(xstring, ftostr4sign(current_position[X_AXIS])); + strcpy(ystring, ftostr4sign(current_position[Y_AXIS])); + strcpy(zstring, ftostr52sp(current_position[Z_AXIS] + 0.00001)); + } - u8g.setPrintPos(43, XYZ_BASELINE); - _draw_axis_label(Y_AXIS, PSTR(MSG_Y), blink); - u8g.setPrintPos(51, XYZ_BASELINE); - lcd_print(ftostr4sign(current_position[Y_AXIS])); + if (PAGE_CONTAINS(XYZ_FRAME_TOP, XYZ_FRAME_TOP + XYZ_FRAME_HEIGHT - 1)) { - u8g.setPrintPos(83, XYZ_BASELINE); - _draw_axis_label(Z_AXIS, PSTR(MSG_Z), blink); - u8g.setPrintPos(91, XYZ_BASELINE); - lcd_print(ftostr52sp(current_position[Z_AXIS] + 0.00001)); + #if ENABLED(XYZ_HOLLOW_FRAME) + u8g.drawFrame(0, XYZ_FRAME_TOP, LCD_PIXEL_WIDTH, XYZ_FRAME_HEIGHT); // 8: 29-40 7: 29-39 + #else + u8g.drawBox(0, XYZ_FRAME_TOP, LCD_PIXEL_WIDTH, XYZ_FRAME_HEIGHT); // 8: 30-39 7: 30-37 + #endif - u8g.setColorIndex(1); // black on white + if (PAGE_CONTAINS(XYZ_BASELINE - (INFO_FONT_HEIGHT - 1), XYZ_BASELINE)) { + #if DISABLED(XYZ_HOLLOW_FRAME) + u8g.setColorIndex(0); // white on black + #endif + + u8g.setPrintPos(0 * XYZ_SPACING + X_LABEL_POS, XYZ_BASELINE); + _draw_axis_label(X_AXIS, PSTR(MSG_X), blink); + u8g.setPrintPos(0 * XYZ_SPACING + X_VALUE_POS, XYZ_BASELINE); + lcd_print(xstring); + + u8g.setPrintPos(1 * XYZ_SPACING + X_LABEL_POS, XYZ_BASELINE); + _draw_axis_label(Y_AXIS, PSTR(MSG_Y), blink); + u8g.setPrintPos(1 * XYZ_SPACING + X_VALUE_POS, XYZ_BASELINE); + lcd_print(ystring); + + u8g.setPrintPos(2 * XYZ_SPACING + X_LABEL_POS, XYZ_BASELINE); + _draw_axis_label(Z_AXIS, PSTR(MSG_Z), blink); + u8g.setPrintPos(2 * XYZ_SPACING + X_VALUE_POS, XYZ_BASELINE); + lcd_print(zstring); + + #if DISABLED(XYZ_HOLLOW_FRAME) + u8g.setColorIndex(1); // black on white + #endif + } + } + + // // Feedrate - lcd_setFont(FONT_MENU); - u8g.setPrintPos(3, 49); - lcd_print(LCD_STR_FEEDRATE[0]); + // - lcd_setFont(FONT_STATUSMENU); - u8g.setPrintPos(12, 49); - lcd_print(itostr3(feedrate_percentage)); - u8g.print('%'); + if (PAGE_CONTAINS(50 - INFO_FONT_HEIGHT, 49)) { + lcd_setFont(FONT_MENU); + u8g.setPrintPos(3, 49); + lcd_print(LCD_STR_FEEDRATE[0]); + lcd_setFont(FONT_STATUSMENU); + u8g.setPrintPos(12, 49); + lcd_print(itostr3(feedrate_percentage)); + u8g.print('%'); + } + + // // Status line - #if ENABLED(USE_SMALL_INFOFONT) - u8g.setPrintPos(0, 62); - #else - u8g.setPrintPos(0, 63); - #endif - #if DISABLED(FILAMENT_LCD_DISPLAY) - lcd_print(lcd_status_message); - #else - if (PENDING(millis(), previous_lcd_status_ms + 5000UL)) { //Display both Status message line and Filament display on the last line + // + + #define STATUS_BASELINE (54 + INFO_FONT_HEIGHT) + + if (PAGE_CONTAINS(STATUS_BASELINE + 1 - INFO_FONT_HEIGHT, STATUS_BASELINE)) { + u8g.setPrintPos(0, STATUS_BASELINE); + + #if DISABLED(FILAMENT_LCD_DISPLAY) lcd_print(lcd_status_message); - } - else { - lcd_printPGM(PSTR("dia:")); - lcd_print(ftostr12ns(filament_width_meas)); - lcd_printPGM(PSTR(" factor:")); - lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); - u8g.print('%'); - } - #endif + #else + if (PENDING(millis(), previous_lcd_status_ms + 5000UL)) { //Display both Status message line and Filament display on the last line + lcd_print(lcd_status_message); + } + else { + lcd_printPGM(PSTR("dia:")); + lcd_print(ftostr12ns(filament_width_meas)); + lcd_printPGM(PSTR(" factor:")); + lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); + u8g.print('%'); + } + #endif + } } #if ENABLED(ULTIPANEL) + uint8_t row_y1, row_y2; + // Set the colors for a menu item based on whether it is selected - static void lcd_implementation_mark_as_selected(uint8_t row, bool isSelected) { + static void lcd_implementation_mark_as_selected(const uint8_t row, const bool isSelected) { + + row_y1 = row * (DOG_CHAR_HEIGHT) + 1; + row_y2 = row_y1 + (DOG_CHAR_HEIGHT) - 1; + + if (!PAGE_CONTAINS(row_y1 + 2 - (TALL_FONT_CORRECTION), row_y2 + 2 - (TALL_FONT_CORRECTION))) return; + if (isSelected) { u8g.setColorIndex(1); // black on white - u8g.drawBox(0, row * (DOG_CHAR_HEIGHT) + 3 - (TALL_FONT_CORRECTION), LCD_PIXEL_WIDTH, DOG_CHAR_HEIGHT); + u8g.drawBox(0, row_y1 + 2 - (TALL_FONT_CORRECTION), LCD_PIXEL_WIDTH, DOG_CHAR_HEIGHT); u8g.setColorIndex(0); // following text must be white on black } else { u8g.setColorIndex(1); // unmarked text is black on white } - u8g.setPrintPos((START_COL) * (DOG_CHAR_WIDTH), (row + 1) * (DOG_CHAR_HEIGHT)); + u8g.setPrintPos((START_COL) * (DOG_CHAR_WIDTH), row_y2); } #if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE) // Draw a static line of text in the same idiom as a menu item - static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, bool center=true, bool invert=false, const char* valstr=NULL) { + static void lcd_implementation_drawmenu_static(const uint8_t row, const char* pstr, const bool center=true, const bool invert=false, const char* valstr=NULL) { lcd_implementation_mark_as_selected(row, invert); + if (!PAGE_CONTAINS(row_y1, row_y2)) return; + char c; int8_t n = LCD_WIDTH - (START_COL); @@ -535,20 +659,20 @@ static void lcd_implementation_status_screen() { #endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE // Draw a generic menu item - static void lcd_implementation_drawmenu_generic(bool isSelected, uint8_t row, const char* pstr, char pre_char, char post_char) { + static void lcd_implementation_drawmenu_generic(const bool isSelected, const uint8_t row, const char* pstr, const char pre_char, const char post_char) { UNUSED(pre_char); - char c; - uint8_t n = LCD_WIDTH - (START_COL) - 2; - lcd_implementation_mark_as_selected(row, isSelected); - while (c = pgm_read_byte(pstr)) { + if (!PAGE_CONTAINS(row_y1, row_y2)) return; + + uint8_t n = LCD_WIDTH - (START_COL) - 2; + while (char c = pgm_read_byte(pstr)) { n -= lcd_print_and_count(c); pstr++; } while (n--) u8g.print(' '); - u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH), (row + 1) * (DOG_CHAR_HEIGHT)); + u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH), row_y2); lcd_print(post_char); u8g.print(' '); } @@ -560,20 +684,22 @@ static void lcd_implementation_status_screen() { #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ') // Draw a menu item with an editable value - static void _drawmenu_setting_edit_generic(bool isSelected, uint8_t row, const char* pstr, const char* data, bool pgm) { - char c; - uint8_t vallen = (pgm ? lcd_strlen_P(data) : (lcd_strlen((char*)data))); - uint8_t n = LCD_WIDTH - (START_COL) - 2 - vallen; + static void _drawmenu_setting_edit_generic(const bool isSelected, const uint8_t row, const char* pstr, const char* const data, const bool pgm) { lcd_implementation_mark_as_selected(row, isSelected); - while (c = pgm_read_byte(pstr)) { + if (!PAGE_CONTAINS(row_y1, row_y2)) return; + + const uint8_t vallen = (pgm ? lcd_strlen_P(data) : (lcd_strlen((char*)data))); + uint8_t n = LCD_WIDTH - (START_COL) - 2 - vallen; + + while (char c = pgm_read_byte(pstr)) { n -= lcd_print_and_count(c); pstr++; } u8g.print(':'); while (n--) u8g.print(' '); - u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH) * vallen, (row + 1) * (DOG_CHAR_HEIGHT)); + u8g.setPrintPos(LCD_PIXEL_WIDTH - (DOG_CHAR_WIDTH) * vallen, row_y2); if (pgm) lcd_printPGM(data); else lcd_print((char*)data); } @@ -603,53 +729,65 @@ static void lcd_implementation_status_screen() { #define lcd_implementation_drawmenu_setting_edit_callback_long5(sel, row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, ftostr5rj(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_bool(sel, row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(sel, row, pstr, (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF)) - void lcd_implementation_drawedit(const char* pstr, const char* value=NULL) { - uint8_t rows = 1; - uint8_t lcd_width = LCD_WIDTH - (START_COL), char_width = DOG_CHAR_WIDTH; - uint8_t vallen = lcd_strlen(value); + void lcd_implementation_drawedit(const char* const pstr, const char* const value=NULL) { + const uint8_t labellen = lcd_strlen_P(pstr), vallen = lcd_strlen(value); + uint8_t lcd_width, char_width, + rows = (labellen > LCD_WIDTH - 2 - vallen) ? 2 : 1; #if ENABLED(USE_BIG_EDIT_FONT) - if (lcd_strlen_P(pstr) <= LCD_WIDTH_EDIT - 1) { - lcd_setFont(FONT_MENU_EDIT); + if (labellen <= LCD_WIDTH_EDIT - 1) { + if (labellen >= LCD_WIDTH_EDIT - vallen) rows = 2; lcd_width = LCD_WIDTH_EDIT + 1; char_width = DOG_CHAR_WIDTH_EDIT; - if (lcd_strlen_P(pstr) >= LCD_WIDTH_EDIT - vallen) rows = 2; + lcd_setFont(FONT_MENU_EDIT); } else { + lcd_width = LCD_WIDTH - (START_COL); + char_width = DOG_CHAR_WIDTH; lcd_setFont(FONT_MENU); } + #else + lcd_width = LCD_WIDTH - (START_COL); + char_width = DOG_CHAR_WIDTH; #endif - if (lcd_strlen_P(pstr) > LCD_WIDTH - 2 - vallen) rows = 2; + // Center either one or two rows + const uint8_t segmentHeight = u8g.getHeight() / (rows + 1); // 1 / (rows+1) = 1/2 or 1/3 + uint8_t baseline = segmentHeight + (DOG_CHAR_HEIGHT_EDIT + 1) / 2; - const float kHalfChar = (DOG_CHAR_HEIGHT_EDIT) / 2; - float rowHeight = u8g.getHeight() / (rows + 1); // 1/(rows+1) = 1/2 or 1/3 + if (PAGE_CONTAINS(baseline + 1 - (DOG_CHAR_HEIGHT_EDIT), baseline)) { + u8g.setPrintPos(0, baseline); + lcd_printPGM(pstr); + } - u8g.setPrintPos(0, rowHeight + kHalfChar); - lcd_printPGM(pstr); if (value != NULL) { - u8g.print(':'); - u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, rows * rowHeight + kHalfChar); - lcd_print(value); + baseline += (rows - 1) * segmentHeight; + if (PAGE_CONTAINS(baseline + 1 - (DOG_CHAR_HEIGHT_EDIT), baseline)) { + u8g.print(':'); + u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, baseline); + lcd_print(value); + } } } #if ENABLED(SDSUPPORT) - static void _drawmenu_sd(bool isSelected, uint8_t row, const char* pstr, const char* filename, char* const longFilename, bool isDir) { + static void _drawmenu_sd(const bool isSelected, const uint8_t row, const char* const pstr, const char* filename, char* const longFilename, const bool isDir) { UNUSED(pstr); - char c; - uint8_t n = LCD_WIDTH - (START_COL) - 1; + lcd_implementation_mark_as_selected(row, isSelected); + + if (!PAGE_CONTAINS(row_y1, row_y2)) return; + + uint8_t n = LCD_WIDTH - (START_COL) - 1; if (longFilename[0]) { filename = longFilename; longFilename[n] = '\0'; } - lcd_implementation_mark_as_selected(row, isSelected); - if (isDir) lcd_print(LCD_STR_FOLDER[0]); - while ((c = *filename)) { + + while (char c = *filename) { n -= lcd_print_and_count(c); filename++; } diff --git a/Marlin/ultralcd_impl_HD44780.h b/Marlin/ultralcd_impl_HD44780.h index 87a595052..8f97b28cf 100644 --- a/Marlin/ultralcd_impl_HD44780.h +++ b/Marlin/ultralcd_impl_HD44780.h @@ -195,7 +195,7 @@ extern volatile uint8_t buttons; //an extended version of the last checked butt static void lcd_set_custom_characters( #if ENABLED(LCD_PROGRESS_BAR) - bool info_screen_charset = true + const bool info_screen_charset = true #endif ) { static byte bedTemp[8] = { @@ -341,7 +341,7 @@ static void lcd_set_custom_characters( static void lcd_implementation_init( #if ENABLED(LCD_PROGRESS_BAR) - bool info_screen_charset = true + const bool info_screen_charset = true #endif ) { @@ -385,7 +385,7 @@ void lcd_printPGM(const char *str) { for (; char c = pgm_read_byte(str); ++str) charset_mapper(c); } -void lcd_print(const char* str) { +void lcd_print(const char* const str) { for (uint8_t i = 0; char c = str[i]; ++i) charset_mapper(c); } @@ -393,14 +393,14 @@ void lcd_print(char c) { charset_mapper(c); } #if ENABLED(SHOW_BOOTSCREEN) - void lcd_erase_line(int line) { + void lcd_erase_line(const int line) { lcd.setCursor(0, line); - for (int i = 0; i < LCD_WIDTH; i++) + for (uint8_t i = LCD_WIDTH + 1; --i;) lcd_print(' '); } // Scroll the PSTR 'text' in a 'len' wide field for 'time' milliseconds at position col,line - void lcd_scroll(int col, int line, const char* text, int len, int time) { + void lcd_scroll(const int col, const int line, const char* const text, const int len, const int time) { char tmp[LCD_WIDTH + 1] = {0}; int n = max(lcd_strlen_P(text) - len, 0); for (int i = 0; i <= n; i++) { @@ -411,7 +411,7 @@ void lcd_print(char c) { charset_mapper(c); } } } - static void logo_lines(const char *extra) { + static void logo_lines(const char* const extra) { int indent = (LCD_WIDTH - 8 - lcd_strlen_P(extra)) / 2; lcd.setCursor(indent, 0); lcd.print('\x00'); lcd_printPGM(PSTR( "------" )); lcd.print('\x01'); lcd.setCursor(indent, 1); lcd_printPGM(PSTR("|Marlin|")); lcd_printPGM(extra); @@ -552,7 +552,7 @@ void lcd_kill_screen() { lcd_printPGM(PSTR(MSG_PLEASE_RESET)); } -FORCE_INLINE void _draw_axis_label(AxisEnum axis, const char *pstr, bool blink) { +FORCE_INLINE void _draw_axis_label(const AxisEnum axis, const char* const pstr, const bool blink) { if (blink) lcd_printPGM(pstr); else { @@ -794,7 +794,7 @@ static void lcd_implementation_status_screen() { #if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE) - static void lcd_implementation_drawmenu_static(uint8_t row, const char* pstr, bool center=true, bool invert=false, const char *valstr=NULL) { + static void lcd_implementation_drawmenu_static(const uint8_t row, const char* pstr, const bool center=true, const bool invert=false, const char *valstr=NULL) { UNUSED(invert); char c; int8_t n = LCD_WIDTH; @@ -816,7 +816,7 @@ static void lcd_implementation_status_screen() { #endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE - static void lcd_implementation_drawmenu_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char post_char) { + static void lcd_implementation_drawmenu_generic(const bool sel, const uint8_t row, const char* pstr, const char pre_char, const char post_char) { char c; uint8_t n = LCD_WIDTH - 2; lcd.setCursor(0, row); @@ -829,7 +829,7 @@ static void lcd_implementation_status_screen() { lcd.print(post_char); } - static void lcd_implementation_drawmenu_setting_edit_generic(bool sel, uint8_t row, const char* pstr, char pre_char, char* data) { + static void lcd_implementation_drawmenu_setting_edit_generic(const bool sel, const uint8_t row, const char* pstr, const char pre_char, const char* const data) { char c; uint8_t n = LCD_WIDTH - 2 - lcd_strlen(data); lcd.setCursor(0, row); @@ -842,7 +842,7 @@ static void lcd_implementation_status_screen() { while (n--) lcd.print(' '); lcd_print(data); } - static void lcd_implementation_drawmenu_setting_edit_generic_P(bool sel, uint8_t row, const char* pstr, char pre_char, const char* data) { + static void lcd_implementation_drawmenu_setting_edit_generic_P(const bool sel, const uint8_t row, const char* pstr, const char pre_char, const char* const data) { char c; uint8_t n = LCD_WIDTH - 2 - lcd_strlen_P(data); lcd.setCursor(0, row); @@ -879,7 +879,7 @@ static void lcd_implementation_status_screen() { #define lcd_implementation_drawmenu_setting_edit_callback_long5(sel, row, pstr, pstr2, data, minValue, maxValue, callback) lcd_implementation_drawmenu_setting_edit_generic(sel, row, pstr, '>', ftostr5rj(*(data))) #define lcd_implementation_drawmenu_setting_edit_callback_bool(sel, row, pstr, pstr2, data, callback) lcd_implementation_drawmenu_setting_edit_generic_P(sel, row, pstr, '>', (*(data))?PSTR(MSG_ON):PSTR(MSG_OFF)) - void lcd_implementation_drawedit(const char* pstr, const char* value=NULL) { + void lcd_implementation_drawedit(const char* pstr, const char* const value=NULL) { lcd.setCursor(1, 1); lcd_printPGM(pstr); if (value != NULL) { @@ -891,7 +891,7 @@ static void lcd_implementation_status_screen() { #if ENABLED(SDSUPPORT) - static void lcd_implementation_drawmenu_sd(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename, uint8_t concat, char post_char) { + static void lcd_implementation_drawmenu_sd(const bool sel, const uint8_t row, const char* const pstr, const char* filename, char* const longFilename, const uint8_t concat, const char post_char) { UNUSED(pstr); char c; uint8_t n = LCD_WIDTH - concat; @@ -909,11 +909,11 @@ static void lcd_implementation_status_screen() { lcd.print(post_char); } - static void lcd_implementation_drawmenu_sdfile(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) { + static void lcd_implementation_drawmenu_sdfile(const bool sel, const uint8_t row, const char* pstr, const char* filename, char* const longFilename) { lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2, ' '); } - static void lcd_implementation_drawmenu_sddirectory(bool sel, uint8_t row, const char* pstr, const char* filename, char* longFilename) { + static void lcd_implementation_drawmenu_sddirectory(const bool sel, const uint8_t row, const char* pstr, const char* filename, char* const longFilename) { lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2, LCD_STR_FOLDER[0]); } diff --git a/Marlin/ultralcd_st7920_u8glib_rrd.h b/Marlin/ultralcd_st7920_u8glib_rrd.h index 7226f55c9..1dc39360f 100644 --- a/Marlin/ultralcd_st7920_u8glib_rrd.h +++ b/Marlin/ultralcd_st7920_u8glib_rrd.h @@ -106,12 +106,18 @@ static void ST7920_SWSPI_SND_8BIT(uint8_t val) { ST7920_SND_BIT; // 8 } -#define ST7920_CS() {WRITE(ST7920_CS_PIN,1);u8g_10MicroDelay();} -#define ST7920_NCS() {WRITE(ST7920_CS_PIN,0);} -#define ST7920_SET_CMD() {ST7920_SWSPI_SND_8BIT(0xf8);u8g_10MicroDelay();} -#define ST7920_SET_DAT() {ST7920_SWSPI_SND_8BIT(0xfa);u8g_10MicroDelay();} -#define ST7920_WRITE_BYTE(a) {ST7920_SWSPI_SND_8BIT((uint8_t)((a)&0xf0u));ST7920_SWSPI_SND_8BIT((uint8_t)((a)<<4u));u8g_10MicroDelay();} -#define ST7920_WRITE_BYTES(p,l) {uint8_t i;for(i=0;i 0 + #define U8G_DELAY() delayMicroseconds(DOGM_SPI_DELAY_US) +#else + #define U8G_DELAY() u8g_10MicroDelay() +#endif + +#define ST7920_CS() { WRITE(ST7920_CS_PIN,1); U8G_DELAY(); } +#define ST7920_NCS() { WRITE(ST7920_CS_PIN,0); } +#define ST7920_SET_CMD() { ST7920_SWSPI_SND_8BIT(0xf8); U8G_DELAY(); } +#define ST7920_SET_DAT() { ST7920_SWSPI_SND_8BIT(0xfa); U8G_DELAY(); } +#define ST7920_WRITE_BYTE(a) { ST7920_SWSPI_SND_8BIT((uint8_t)((a)&0xf0u)); ST7920_SWSPI_SND_8BIT((uint8_t)((a)<<4u)); U8G_DELAY(); } +#define ST7920_WRITE_BYTES(p,l) { for (uint8_t i = l + 1; --i;) { ST7920_SWSPI_SND_8BIT(*p&0xf0); ST7920_SWSPI_SND_8BIT(*p<<4); p++; } U8G_DELAY(); } uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { uint8_t i, y; @@ -167,13 +173,13 @@ uint8_t u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, vo } break; } -#if PAGE_HEIGHT == 8 - return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg); -#elif PAGE_HEIGHT == 16 - return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg); -#else - return u8g_dev_pb32h1_base_fn(u8g, dev, msg, arg); -#endif + #if PAGE_HEIGHT == 8 + return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg); + #elif PAGE_HEIGHT == 16 + return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg); + #else + return u8g_dev_pb32h1_base_fn(u8g, dev, msg, arg); + #endif } uint8_t u8g_dev_st7920_128x64_rrd_buf[(LCD_PIXEL_WIDTH) * (PAGE_HEIGHT) / 8] U8G_NOCOMMON; diff --git a/Marlin/utf_mapper.h b/Marlin/utf_mapper.h index d814e4671..6bb2d732d 100644 --- a/Marlin/utf_mapper.h +++ b/Marlin/utf_mapper.h @@ -48,34 +48,34 @@ #if ENABLED(MAPPER_C2C3) const PROGMEM uint8_t utf_recode[] = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f This is fair for symbols - 0x20,0x3f,0xec,0xed,0x3f,0x5c,0x7c,0x3f,0x22,0x63,0x61,0x7f,0x3f,0x3f,0x52,0xb0, // c2a - // ' ' ¢ £ ­ l " c a « R - 0xdf,0x3f,0x32,0x33,0x27,0xe4,0xf1,0xa5,0x2c,0x31,0xdf,0x7e,0x3f,0x3f,0x3f,0x3f, // c2b but relatively bad for letters. - // ° 2 3 ` N p . , 1 ° » - 0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, // c38 - // ä - 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xef,0x78,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0xe2, // c39 missing characters display as '?' - // ö x ü ß - 0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, // c3a - // ä - 0x3f,0xee,0x3f,0x3f,0x3f,0x3f,0xef,0xfd,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0x3f // c3b - // n ö ÷ ü + 0x20,0x3f,0xec,0xed,0x3f,0x5c,0x7c,0x3f,0x22,0x63,0x61,0x7f,0x3f,0x3f,0x52,0xb0, // c2a + //' ' ¢ £ ­ l " c a « R + 0xdf,0x3f,0x32,0x33,0x27,0xe4,0xf1,0xa5,0x2c,0x31,0xdf,0x7e,0x3f,0x3f,0x3f,0x3f, // c2b but relatively bad for letters. + // ° 2 3 ` N p . , 1 ° » + 0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, // c38 + // ä + 0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xef,0x78,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0xe2, // c39 missing characters display as '?' + // ö x ü ß + 0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, // c3a + // ä + 0x3f,0xee,0x3f,0x3f,0x3f,0x3f,0xef,0xfd,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0x3f // c3b + // n ö ÷ ü }; #elif ENABLED(MAPPER_E382E383) const PROGMEM uint8_t utf_recode[] = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f - 0x3d,0xb1,0xb1,0xa8,0xb2,0xa9,0xb3,0xaa,0xb4,0xab,0xb5,0xb6,0xb6,0xb7,0xb7,0xb8, // e382a Please test and correct - // = ア ア ィ イ ゥ ウ ェ エ ォ オ ガ ガ キ キ ク - 0xb8,0xb9,0xb9,0xba,0xba,0xbb,0xbb,0xbc,0xbc,0xbd,0xbd,0xbe,0xbe,0xbf,0xbf,0xc0, // e382b - // ク ケ ケ コ コ サ サ シ シ ス ス セ セ ソ ソ タ - 0xc0,0xc1,0xc1,0xc2,0xc2,0xc2,0xc3,0xc3,0xc4,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca, // e3838 - // タ チ チ ッ ッ ッ テ テ ト ト ナ ニ ヌ ネ ノ ハ - 0xca,0xca,0xcb,0xcb,0xcb,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,0xce,0xce,0xcf,0xd0, // e3839 - // ハ ハ ヒ ヒ ヒ フ フ フ ヘ ヘ ヘ ホ ホ ホ マ ミ - 0xd1,0xd2,0xd3,0xd4,0xd4,0xd5,0xd5,0xae,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdc, // e383a - // ム メ モ ャ ャ ユ ユ ョ ヨ ラ リ ル レ ロ ワ ワ - 0xec,0xa7,0xa6,0xdd,0xcc,0x3f,0x3f,0x3f,0x3f,0x3f,0xa6,0xa5,0xb0,0xa4,0xa4,0x3f // e383b - // ヰ ヱ ヲ ン フ ? ? ? ? ? ヲ ・ ー ヽ ヽ ? + 0x3d,0xb1,0xb1,0xa8,0xb2,0xa9,0xb3,0xaa,0xb4,0xab,0xb5,0xb6,0xb6,0xb7,0xb7,0xb8, // e382a Please test and correct + // = ア ア ィ イ ゥ ウ ェ エ ォ オ ガ ガ キ キ ク + 0xb8,0xb9,0xb9,0xba,0xba,0xbb,0xbb,0xbc,0xbc,0xbd,0xbd,0xbe,0xbe,0xbf,0xbf,0xc0, // e382b + // ク ケ ケ コ コ サ サ シ シ ス ス セ セ ソ ソ タ + 0xc0,0xc1,0xc1,0xc2,0xc2,0xc2,0xc3,0xc3,0xc4,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca, // e3838 + // タ チ チ ッ ッ ッ テ テ ト ト ナ ニ ヌ ネ ノ ハ + 0xca,0xca,0xcb,0xcb,0xcb,0xcc,0xcc,0xcc,0xcd,0xcd,0xcd,0xce,0xce,0xce,0xcf,0xd0, // e3839 + // ハ ハ ヒ ヒ ヒ フ フ フ ヘ ヘ ヘ ホ ホ ホ マ ミ + 0xd1,0xd2,0xd3,0xd4,0xd4,0xd5,0xd5,0xae,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdc, // e383a + // ム メ モ ャ ャ ユ ユ ョ ヨ ラ リ ル レ ロ ワ ワ + 0xec,0xa7,0xa6,0xdd,0xcc,0x3f,0x3f,0x3f,0x3f,0x3f,0xa6,0xa5,0xb0,0xa4,0xa4,0x3f // e383b + // ヰ ヱ ヲ ン フ ? ? ? ? ? ヲ ・ ー ヽ ヽ ? }; #elif ENABLED(MAPPER_D0D1) #error "Cyrillic on a JAPANESE display makes no sense. There are no matching symbols." @@ -85,31 +85,31 @@ #if ENABLED(MAPPER_C2C3) const PROGMEM uint8_t utf_recode[] = { // 0 1 2 3 4 5 6 7 8 9 a b c d e f This is relative complete. - 0x20,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0x22,0xa9,0xaa,0xab,0x3f,0x3f,0xae,0x3f, // c2a ¡¢£¤¥¦§¨©ª«¬­®¯ - // ' ' ¡ ¢ £ ¤ ¥ ¦ § " © ª « ? ? ® ? - 0xb0,0xb1,0xb2,0xb3,0x27,0xb5,0xb6,0xb7,0x2c,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, // c2b °±²³´µ¶·¸¹º»¼½¾¿ - // ° ± ³ ² ? µ ¶ · , ¹ º » ¼ ½ ¾ ¿ - 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, // c38 ÀÁÃÄÅÆÇÈÉÊËÌÍÎÏ - // À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï - 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, // c39 ÐÑÓÔÕÖ×ØÙÚÛÜÝÞß - // Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß - 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, // c3a àáãäåæçèéêëìíîï - // à á â ã ä å æ ç è é ê ë ì í î ï - 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff // c3b ðñóôõö÷øùúûüýþÿ - // ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ + 0x20,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0x22,0xa9,0xaa,0xab,0x3f,0x3f,0xae,0x3f, // c2a ¡¢£¤¥¦§¨©ª«¬­®¯ + //' ' ¡ ¢ £ ¤ ¥ ¦ § " © ª « ? ? ® ? + 0xb0,0xb1,0xb2,0xb3,0x27,0xb5,0xb6,0xb7,0x2c,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, // c2b °±²³´µ¶·¸¹º»¼½¾¿ + // ° ± ³ ² ? µ ¶ · , ¹ º » ¼ ½ ¾ ¿ + 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, // c38 ÀÁÃÄÅÆÇÈÉÊËÌÍÎÏ + // À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï + 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, // c39 ÐÑÓÔÕÖ×ØÙÚÛÜÝÞß + // Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß + 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, // c3a àáãäåæçèéêëìíîï + // à á â ã ä å æ ç è é ê ë ì í î ï + 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff // c3b ðñóôõö÷øùúûüýþÿ + // ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ }; #elif ENABLED(MAPPER_D0D1) #define MAPPER_D0D1_MOD const PROGMEM uint8_t utf_recode[] = {//0 1 2 3 4 5 6 7 8 9 a b c d e f - 0x41,0x80,0x42,0x92,0x81,0x45,0x82,0x83,0x84,0x85,0x4b,0x86,0x4d,0x48,0x4f,0x87, // d0a - // A Б B Г Д E Ж З И Й K Л M H O П - 0x50,0x43,0x54,0x88,0xd8,0x58,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad, // d0b - // P C T У Ф X Ч ч Ш Щ Ъ Ы b Э Ю Я - 0x61,0x36,0x42,0x92,0x81,0x65,0x82,0xb3,0x84,0x85,0x6b,0x86,0x4d,0x48,0x6f,0x87, // d18 - // a 6 B Г Д e Ж ³ И Й k Л M H o П - 0x70,0x63,0x54,0x79,0xd8,0x78,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad // d19 - // p c T y Ф x Ч ч Ш Щ Ъ Ы b Э Ю Я + 0x41,0x80,0x42,0x92,0x81,0x45,0x82,0x83,0x84,0x85,0x4b,0x86,0x4d,0x48,0x4f,0x87, // d0a + // A Б B Г Д E Ж З И Й K Л M H O П + 0x50,0x43,0x54,0x88,0xd8,0x58,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad, // d0b + // P C T У Ф X Ч ч Ш Щ Ъ Ы b Э Ю Я + 0x61,0x36,0x42,0x92,0x81,0x65,0x82,0xb3,0x84,0x85,0x6b,0x86,0x4d,0x48,0x6f,0x87, // d18 + // a 6 B Г Д e Ж ³ И Й k Л M H o П + 0x70,0x63,0x54,0x79,0xd8,0x78,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad // d19 + // p c T y Ф x Ч ч Ш Щ Ъ Ы b Э Ю Я }; #elif ENABLED(MAPPER_E382E383) #error "Katakana on a WESTERN display makes no sense. There are no matching symbols." @@ -121,23 +121,23 @@ // it is a Russian alphabet translation // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё const PROGMEM uint8_t utf_recode[] = - { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4, // unicode U+0400 to U+047f - // A Б->Ё B Г Д E Ж З // 0 Ѐ Ё Ђ Ѓ Є Ѕ І Ї - 0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8, // Ј Љ Њ Ћ Ќ Ѝ Ў Џ - // И Й K Л M H O П // 1 А Б В Г Д Е Ж З - 0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab, // И Й К Л М Н О П - // P C T У Ф X Ч ч // 2 Р С Т У Ф Х Г Ч - 0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1, // Ш Щ Ъ Ы Ь Э Ю Я - // Ш Щ Ъ Ы b Э Ю Я // 3 а б в г д е ж з - 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7, // и й к л м н о п - // a б->ё в г д e ж з // 4 р с т у ф х ц ч - 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe, // ш щ ъ ы ь э ю я - // и й к л м н o п // 5 ѐ ё ђ ѓ є ѕ і ї - 0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0, // ј љ њ ћ ќ ѝ ў џ - // p c т y ф x ц ч // 6 Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ - 0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7 // Ѫ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ - // ш щ ъ ы ь э ю я // 7 Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ - }; // ѻ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ + { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4, // unicode U+0400 to U+047f + // A Б->Ё B Г Д E Ж З // 0 Ѐ Ё Ђ Ѓ Є Ѕ І Ї + 0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8, // Ј Љ Њ Ћ Ќ Ѝ Ў Џ + // И Й K Л M H O П // 1 А Б В Г Д Е Ж З + 0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab, // И Й К Л М Н О П + // P C T У Ф X Ч ч // 2 Р С Т У Ф Х Г Ч + 0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1, // Ш Щ Ъ Ы Ь Э Ю Я + // Ш Щ Ъ Ы b Э Ю Я // 3 а б в г д е ж з + 0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7, // и й к л м н о п + // a б->ё в г д e ж з // 4 р с т у ф х ц ч + 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe, // ш щ ъ ы ь э ю я + // и й к л м н o п // 5 ѐ ё ђ ѓ є ѕ і ї + 0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0, // ј љ њ ћ ќ ѝ ў џ + // p c т y ф x ц ч // 6 Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ + 0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7 // Ѫ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ + // ш щ ъ ы ь э ю я // 7 Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ + }; // ѻ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ #elif ENABLED(MAPPER_C2C3) #error "Western languages on a CYRILLIC display makes no sense. There are no matching symbols." #elif ENABLED(MAPPER_E382E383) @@ -150,7 +150,7 @@ #if ENABLED(MAPPER_C2C3) - char charset_mapper(char c) { + char charset_mapper(const char c) { static uint8_t utf_hi_char; // UTF-8 high part static bool seen_c2 = false; uint8_t d = c; @@ -181,7 +181,7 @@ #elif ENABLED(MAPPER_CECF) - char charset_mapper(char c) { + char charset_mapper(const char c) { static uint8_t utf_hi_char; // UTF-8 high part static bool seen_ce = false; uint8_t d = c; @@ -212,7 +212,7 @@ #elif ENABLED(MAPPER_CECF) - char charset_mapper(char c) { + char charset_mapper(const char c) { static uint8_t utf_hi_char; // UTF-8 high part static bool seen_ce = false; uint8_t d = c; @@ -243,7 +243,7 @@ #elif ENABLED(MAPPER_D0D1_MOD) - char charset_mapper(char c) { + char charset_mapper(const char c) { // it is a Russian alphabet translation // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё static uint8_t utf_hi_char; // UTF-8 high part @@ -280,7 +280,7 @@ #elif ENABLED(MAPPER_D0D1) - char charset_mapper(char c) { + char charset_mapper(const char c) { static uint8_t utf_hi_char; // UTF-8 high part static bool seen_d5 = false; uint8_t d = c; @@ -311,7 +311,7 @@ #elif ENABLED(MAPPER_E382E383) - char charset_mapper(char c) { + char charset_mapper(const char c) { static uint8_t utf_hi_char; // UTF-8 high part static bool seen_e3 = false; static bool seen_82_83 = false; @@ -350,7 +350,7 @@ #define MAPPER_NON - char charset_mapper(char c) { + char charset_mapper(const char c) { HARDWARE_CHAR_OUT( c ); return 1; }