Merge pull request #5288 from thinkyhead/rc_selective_rendering
Optimize graphical display with selective rendering
This commit is contained in:
		
						commit
						668e737893
					
				| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   #define USE_SMALL_INFOFONT |   #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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -473,15 +473,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -468,15 +468,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -462,15 +462,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -462,15 +462,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -462,15 +462,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -467,15 +467,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -462,15 +462,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -460,15 +460,19 @@ | |||||||
| 
 | 
 | ||||||
| #endif // SDSUPPORT
 | #endif // SDSUPPORT
 | ||||||
| 
 | 
 | ||||||
| // for dogm lcd displays you can choose some additional fonts:
 | // Some additional options are available for graphical displays:
 | ||||||
| #if ENABLED(DOGLCD) | #if ENABLED(DOGLCD) | ||||||
|   // save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
 |   // A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
 | ||||||
|   // we don't have a big font for Cyrillic, Kana
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_BIG_EDIT_FONT
 |   //#define USE_BIG_EDIT_FONT
 | ||||||
| 
 | 
 | ||||||
|   // If you have spare 2300Byte of progmem and want to use a
 |   // A smaller font may be used on the Info Screen. Costs 2300 bytes of PROGMEM.
 | ||||||
|   // smaller font on the Info-screen uncomment the next line.
 |   // Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
 | ||||||
|   //#define USE_SMALL_INFOFONT
 |   //#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
 | #endif // DOGLCD
 | ||||||
| 
 | 
 | ||||||
| // @section safety
 | // @section safety
 | ||||||
|  | |||||||
| @ -276,7 +276,13 @@ | |||||||
| 
 | 
 | ||||||
| #include INCLUDE_LANGUAGE | #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.
 |   #define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -2250,7 +2250,7 @@ void kill_screen(const char* lcd_msg) { | |||||||
|       END_SCREEN(); |       END_SCREEN(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void lcd_filament_change_show_message(FilamentChangeMessage message) { |     void lcd_filament_change_show_message(const FilamentChangeMessage message) { | ||||||
|       switch (message) { |       switch (message) { | ||||||
|         case FILAMENT_CHANGE_MESSAGE_INIT: |         case FILAMENT_CHANGE_MESSAGE_INIT: | ||||||
|           defer_return_to_status = true; |           defer_return_to_status = true; | ||||||
| @ -2849,20 +2849,20 @@ void lcd_finishstatus(bool persist=false) { | |||||||
| 
 | 
 | ||||||
| bool lcd_hasstatus() { return (lcd_status_message[0] != '\0'); } | 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; |   if (lcd_status_message_level > 0) return; | ||||||
|   strncpy(lcd_status_message, message, 3 * (LCD_WIDTH)); |   strncpy(lcd_status_message, message, 3 * (LCD_WIDTH)); | ||||||
|   lcd_finishstatus(persist); |   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; |   if (level < lcd_status_message_level) return; | ||||||
|   lcd_status_message_level = level; |   lcd_status_message_level = level; | ||||||
|   strncpy_P(lcd_status_message, message, 3 * (LCD_WIDTH)); |   strncpy_P(lcd_status_message, message, 3 * (LCD_WIDTH)); | ||||||
|   lcd_finishstatus(level > 0); |   lcd_finishstatus(level > 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void lcd_setalertstatuspgm(const char* message) { | void lcd_setalertstatuspgm(const char* const message) { | ||||||
|   lcd_setstatuspgm(message, 1); |   lcd_setstatuspgm(message, 1); | ||||||
|   #if ENABLED(ULTIPANEL) |   #if ENABLED(ULTIPANEL) | ||||||
|     lcd_return_to_status(); |     lcd_return_to_status(); | ||||||
| @ -2872,7 +2872,7 @@ void lcd_setalertstatuspgm(const char* message) { | |||||||
| void lcd_reset_alert_level() { lcd_status_message_level = 0; } | void lcd_reset_alert_level() { lcd_status_message_level = 0; } | ||||||
| 
 | 
 | ||||||
| #if HAS_LCD_CONTRAST | #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); |     lcd_contrast = constrain(value, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); | ||||||
|     u8g.setContrast(lcd_contrast); |     u8g.setContrast(lcd_contrast); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -88,7 +88,7 @@ | |||||||
|     void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual
 |     void lcd_quick_feedback(); // Audible feedback for a button click - could also be visual
 | ||||||
| 
 | 
 | ||||||
|     #if ENABLED(FILAMENT_CHANGE_FEATURE) |     #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
 |     #endif // FILAMENT_CHANGE_FEATURE
 | ||||||
| 
 | 
 | ||||||
|   #else |   #else | ||||||
| @ -156,8 +156,8 @@ | |||||||
|   inline void lcd_update() {} |   inline void lcd_update() {} | ||||||
|   inline void lcd_init() {} |   inline void lcd_init() {} | ||||||
|   inline bool lcd_hasstatus() { return false; } |   inline bool lcd_hasstatus() { return false; } | ||||||
|   inline void lcd_setstatus(const char* message, const bool persist=false) { UNUSED(message); UNUSED(persist); } |   inline void lcd_setstatus(const char* const 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_setstatuspgm(const char* const message, const uint8_t level=0) { UNUSED(message); UNUSED(level); } | ||||||
|   inline void lcd_buttons_update() {} |   inline void lcd_buttons_update() {} | ||||||
|   inline void lcd_reset_alert_level() {} |   inline void lcd_reset_alert_level() {} | ||||||
|   inline bool lcd_detected() { return true; } |   inline bool lcd_detected() { return true; } | ||||||
|  | |||||||
| @ -54,6 +54,7 @@ | |||||||
|   #include "_Bootscreen.h" |   #include "_Bootscreen.h" | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | // Only Western languages support big / small fonts
 | ||||||
| #if DISABLED(DISPLAY_CHARSET_ISO10646_1) | #if DISABLED(DISPLAY_CHARSET_ISO10646_1) | ||||||
|   #undef USE_BIG_EDIT_FONT |   #undef USE_BIG_EDIT_FONT | ||||||
|   #undef USE_SMALL_INFOFONT |   #undef USE_SMALL_INFOFONT | ||||||
| @ -122,7 +123,7 @@ | |||||||
| #if ENABLED(USE_BIG_EDIT_FONT) | #if ENABLED(USE_BIG_EDIT_FONT) | ||||||
|   #define FONT_MENU_EDIT_NAME u8g_font_9x18 |   #define FONT_MENU_EDIT_NAME u8g_font_9x18 | ||||||
|   #define DOG_CHAR_WIDTH_EDIT  9 |   #define DOG_CHAR_WIDTH_EDIT  9 | ||||||
|   #define DOG_CHAR_HEIGHT_EDIT 18 |   #define DOG_CHAR_HEIGHT_EDIT 13 | ||||||
|   #define LCD_WIDTH_EDIT       14 |   #define LCD_WIDTH_EDIT       14 | ||||||
| #else | #else | ||||||
|   #define FONT_MENU_EDIT_NAME FONT_MENU_NAME |   #define FONT_MENU_EDIT_NAME FONT_MENU_NAME | ||||||
| @ -183,8 +184,15 @@ | |||||||
| int lcd_contrast; | int lcd_contrast; | ||||||
| static char currentfont = 0; | static char currentfont = 0; | ||||||
| 
 | 
 | ||||||
| static void lcd_setFont(char font_nr) { | // The current graphical page being rendered
 | ||||||
|   switch(font_nr) { | 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_STATUSMENU : {u8g.setFont(FONT_STATUSMENU_NAME); currentfont = FONT_STATUSMENU;}; break; | ||||||
|     case FONT_MENU       : {u8g.setFont(FONT_MENU_NAME); currentfont = FONT_MENU;}; 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; |     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)) { |   if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) { | ||||||
|     u8g.setFont(FONT_SPECIAL_NAME); |     u8g.setFont(FONT_SPECIAL_NAME); | ||||||
|     u8g.print(c); |     u8g.print(c); | ||||||
| @ -202,7 +210,7 @@ void lcd_print(char c) { | |||||||
|   else charset_mapper(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)) { |   if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) { | ||||||
|     u8g.setFont(FONT_SPECIAL_NAME); |     u8g.setFont(FONT_SPECIAL_NAME); | ||||||
|     u8g.print(c); |     u8g.print(c); | ||||||
| @ -212,7 +220,7 @@ char lcd_print_and_count(char c) { | |||||||
|   else return charset_mapper(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); |   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
 |     #endif // SHOW_CUSTOM_BOOTSCREEN
 | ||||||
| 
 | 
 | ||||||
|     int offx = (u8g.getWidth() - (START_BMPWIDTH)) / 2; |     const uint8_t offx = (u8g.getWidth() - (START_BMPWIDTH)) / 2; | ||||||
| 
 | 
 | ||||||
|     #if ENABLED(START_BMPHIGH) |     #if ENABLED(START_BMPHIGH) | ||||||
|       int offy = 0; |       constexpr uint8_t offy = 0; | ||||||
|     #else |     #else | ||||||
|       int offy = DOG_CHAR_HEIGHT; |       constexpr uint8_t offy = DOG_CHAR_HEIGHT; | ||||||
|     #endif |     #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) { |     if (show_bootscreen) { | ||||||
|       u8g.firstPage(); |       u8g.firstPage(); | ||||||
| @ -278,7 +286,7 @@ static void lcd_implementation_init() { | |||||||
|         #ifndef STRING_SPLASH_LINE2 |         #ifndef STRING_SPLASH_LINE2 | ||||||
|           u8g.drawStr(txt1X, u8g.getHeight() - (DOG_CHAR_HEIGHT), STRING_SPLASH_LINE1); |           u8g.drawStr(txt1X, u8g.getHeight() - (DOG_CHAR_HEIGHT), STRING_SPLASH_LINE1); | ||||||
|         #else |         #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(txt1X, u8g.getHeight() - (DOG_CHAR_HEIGHT) * 3 / 2, STRING_SPLASH_LINE1); | ||||||
|           u8g.drawStr(txt2X, u8g.getHeight() - (DOG_CHAR_HEIGHT) * 1 / 2, STRING_SPLASH_LINE2); |           u8g.drawStr(txt2X, u8g.getHeight() - (DOG_CHAR_HEIGHT) * 1 / 2, STRING_SPLASH_LINE2); | ||||||
|         #endif |         #endif | ||||||
| @ -307,37 +315,41 @@ static void lcd_implementation_clear() { } // Automatically cleared by Picture L | |||||||
| // Status Screen
 | // Status Screen
 | ||||||
| //
 | //
 | ||||||
| 
 | 
 | ||||||
| FORCE_INLINE void _draw_centered_temp(int temp, int x, int y) { | FORCE_INLINE void _draw_centered_temp(const int temp, const uint8_t x, const uint8_t y) { | ||||||
|   int degsize = 6 * (temp >= 100 ? 3 : temp >= 10 ? 2 : 1); // number's pixel width
 |   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
 |   u8g.setPrintPos(x - (18 - degsize) / 2, y); // move left if shorter
 | ||||||
|   lcd_print(itostr3(temp)); |   lcd_print(itostr3(temp)); | ||||||
|   lcd_printPGM(PSTR(LCD_STR_DEGREE " ")); |   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 |   #if HAS_TEMP_BED | ||||||
|     bool isBed = heater < 0; |     bool isBed = heater < 0; | ||||||
|   #else |   #else | ||||||
|     const bool isBed = false; |     const bool isBed = false; | ||||||
|   #endif |   #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, |   if (PAGE_CONTAINS(17, 20)) { | ||||||
|       y = isBed ? 18 : 17; |     const uint8_t h = isBed ? 7 : 8, | ||||||
|   if (isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater)) { |                   y = isBed ? 18 : 17; | ||||||
|     u8g.setColorIndex(0); // white on black
 |     if (isBed ? thermalManager.isHeatingBed() : thermalManager.isHeatingHotend(heater)) { | ||||||
|     u8g.drawBox(x + h, y, 2, 2); |       u8g.setColorIndex(0); // white on black
 | ||||||
|     u8g.setColorIndex(1); // black on white
 |       u8g.drawBox(x + h, y, 2, 2); | ||||||
|   } |       u8g.setColorIndex(1); // black on white
 | ||||||
|   else { |     } | ||||||
|     u8g.drawBox(x + h, y, 2, 2); |     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) |   if (blink) | ||||||
|     lcd_printPGM(pstr); |     lcd_printPGM(pstr); | ||||||
|   else { |   else { | ||||||
| @ -357,49 +369,107 @@ FORCE_INLINE void _draw_axis_label(AxisEnum axis, const char *pstr, bool blink) | |||||||
| //#define DOGM_SD_PERCENT
 | //#define DOGM_SD_PERCENT
 | ||||||
| 
 | 
 | ||||||
| static void lcd_implementation_status_screen() { | static void lcd_implementation_status_screen() { | ||||||
|   u8g.setColorIndex(1); // black on white
 |  | ||||||
| 
 | 
 | ||||||
|   bool blink = lcd_blink(); |   bool blink = lcd_blink(); | ||||||
| 
 | 
 | ||||||
|   // Symbols menu graphics, animated fan
 |   // Black color, white background
 | ||||||
|   u8g.drawBitmapP(9, 1, STATUS_SCREENBYTEWIDTH, STATUS_SCREENHEIGHT, |   u8g.setColorIndex(1); | ||||||
|     #if HAS_FAN0 |  | ||||||
|       blink && fanSpeeds[0] ? status_screen0_bmp : status_screen1_bmp |  | ||||||
|     #else |  | ||||||
|       status_screen0_bmp |  | ||||||
|     #endif |  | ||||||
|   ); |  | ||||||
| 
 | 
 | ||||||
|   // Status Menu Font for SD info, Heater status, Fan, XYZ
 |   // Status Menu Font
 | ||||||
|   lcd_setFont(FONT_STATUSMENU); |   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) |   #if ENABLED(SDSUPPORT) | ||||||
|  | 
 | ||||||
|  |     //
 | ||||||
|     // SD Card Symbol
 |     // 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
 |     // 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) { |     if (IS_SD_PRINTING) { | ||||||
|  | 
 | ||||||
|  |       //
 | ||||||
|       // Progress bar solid part
 |       // 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) |       #if ENABLED(DOGM_SD_PERCENT) | ||||||
|         // Percent complete
 |         if (PAGE_CONTAINS(41, 48)) { | ||||||
|         u8g.setPrintPos(55, 48); |           // Percent complete
 | ||||||
|         u8g.print(itostr3(card.percentDone())); |           u8g.setPrintPos(55, 48); | ||||||
|         u8g.print('%'); |           u8g.print(itostr3(card.percentDone())); | ||||||
|  |           u8g.print('%'); | ||||||
|  |         } | ||||||
|       #endif |       #endif | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     char buffer[10]; |     //
 | ||||||
|     duration_t elapsed = print_job_timer.duration(); |     // Elapsed Time
 | ||||||
|     bool has_days = (elapsed.value > 60*60*24L); |     //
 | ||||||
|     elapsed.toDigital(buffer, has_days); |  | ||||||
| 
 | 
 | ||||||
|     #if DISABLED(DOGM_SD_PERCENT) |     #if DISABLED(DOGM_SD_PERCENT) | ||||||
|       #define SD_DURATION_X 71 |       #define SD_DURATION_X 71 | ||||||
| @ -407,113 +477,167 @@ static void lcd_implementation_status_screen() { | |||||||
|       #define SD_DURATION_X 89 |       #define SD_DURATION_X 89 | ||||||
|     #endif |     #endif | ||||||
| 
 | 
 | ||||||
|     u8g.setPrintPos(SD_DURATION_X + (has_days ? 0 : 9), 48); |     if (PAGE_CONTAINS(41, 48)) { | ||||||
|     lcd_print(buffer); |  | ||||||
| 
 | 
 | ||||||
|   #endif |       char buffer[10]; | ||||||
|  |       duration_t elapsed = print_job_timer.duration(); | ||||||
|  |       bool has_days = (elapsed.value > 60*60*24L); | ||||||
|  |       elapsed.toDigital(buffer, has_days); | ||||||
| 
 | 
 | ||||||
|   // Extruders
 |       u8g.setPrintPos(SD_DURATION_X + (has_days ? 0 : 9), 48); | ||||||
|   HOTEND_LOOP() _draw_heater_status(5 + e * 25, e); |       lcd_print(buffer); | ||||||
| 
 |  | ||||||
|   // Heated bed
 |  | ||||||
|   #if HOTENDS < 4 && HAS_TEMP_BED |  | ||||||
|     _draw_heater_status(81, -1); |  | ||||||
|   #endif |  | ||||||
| 
 |  | ||||||
|   // Fan
 |  | ||||||
|   u8g.setPrintPos(104, 27); |  | ||||||
|   #if HAS_FAN0 |  | ||||||
|     int per = ((fanSpeeds[0] + 1) * 100) / 256; |  | ||||||
|     if (per) { |  | ||||||
|       lcd_print(itostr3(per)); |  | ||||||
|       u8g.print('%'); |  | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |   #endif | ||||||
|  | 
 | ||||||
|  |   //
 | ||||||
|  |   // XYZ Coordinates
 | ||||||
|  |   //
 | ||||||
|  | 
 | ||||||
|  |   #if ENABLED(USE_SMALL_INFOFONT) | ||||||
|  |     #define INFO_FONT_HEIGHT 7 | ||||||
|  |   #else | ||||||
|  |     #define INFO_FONT_HEIGHT 8 | ||||||
|  |   #endif | ||||||
|  | 
 | ||||||
|  |   #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 |   #endif | ||||||
| 
 | 
 | ||||||
|   // X, Y, Z-Coordinates
 |  | ||||||
|   // Before homing the axis letters are blinking 'X' <-> '?'.
 |   // 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 axis is homed but axis_known_position is false the axis letters are blinking 'X' <-> ' '.
 | ||||||
|   // When everything is ok you see a constant 'X'.
 |   // When everything is ok you see a constant 'X'.
 | ||||||
|   #define XYZ_BASELINE 38 |  | ||||||
| 
 | 
 | ||||||
|   #if ENABLED(USE_SMALL_INFOFONT) |   static char xstring[5], ystring[5], zstring[7]; | ||||||
|     u8g.drawBox(0, 30, LCD_PIXEL_WIDTH, 10); |  | ||||||
|   #else |  | ||||||
|     u8g.drawBox(0, 30, LCD_PIXEL_WIDTH, 9); |  | ||||||
|   #endif |  | ||||||
|   u8g.setColorIndex(0); // white on black
 |  | ||||||
| 
 | 
 | ||||||
|   u8g.setPrintPos(2, XYZ_BASELINE); |   // At the first page, regenerate the XYZ strings
 | ||||||
|   _draw_axis_label(X_AXIS, PSTR(MSG_X), blink); |   if (page.page == 0) { | ||||||
|   u8g.setPrintPos(10, XYZ_BASELINE); |     strcpy(xstring, ftostr4sign(current_position[X_AXIS])); | ||||||
|   lcd_print(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); |   if (PAGE_CONTAINS(XYZ_FRAME_TOP, XYZ_FRAME_TOP + XYZ_FRAME_HEIGHT - 1)) { | ||||||
|   _draw_axis_label(Y_AXIS, PSTR(MSG_Y), blink); |  | ||||||
|   u8g.setPrintPos(51, XYZ_BASELINE); |  | ||||||
|   lcd_print(ftostr4sign(current_position[Y_AXIS])); |  | ||||||
| 
 | 
 | ||||||
|   u8g.setPrintPos(83, XYZ_BASELINE); |     #if ENABLED(XYZ_HOLLOW_FRAME) | ||||||
|   _draw_axis_label(Z_AXIS, PSTR(MSG_Z), blink); |       u8g.drawFrame(0, XYZ_FRAME_TOP, LCD_PIXEL_WIDTH, XYZ_FRAME_HEIGHT); // 8: 29-40  7: 29-39
 | ||||||
|   u8g.setPrintPos(91, XYZ_BASELINE); |     #else | ||||||
|   lcd_print(ftostr52sp(current_position[Z_AXIS] + 0.00001)); |       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
 |   // Feedrate
 | ||||||
|   lcd_setFont(FONT_MENU); |   //
 | ||||||
|   u8g.setPrintPos(3, 49); |  | ||||||
|   lcd_print(LCD_STR_FEEDRATE[0]); |  | ||||||
| 
 | 
 | ||||||
|   lcd_setFont(FONT_STATUSMENU); |   if (PAGE_CONTAINS(50 - INFO_FONT_HEIGHT, 49)) { | ||||||
|   u8g.setPrintPos(12, 49); |     lcd_setFont(FONT_MENU); | ||||||
|   lcd_print(itostr3(feedrate_percentage)); |     u8g.setPrintPos(3, 49); | ||||||
|   u8g.print('%'); |     lcd_print(LCD_STR_FEEDRATE[0]); | ||||||
| 
 | 
 | ||||||
|  |     lcd_setFont(FONT_STATUSMENU); | ||||||
|  |     u8g.setPrintPos(12, 49); | ||||||
|  |     lcd_print(itostr3(feedrate_percentage)); | ||||||
|  |     u8g.print('%'); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   //
 | ||||||
|   // Status line
 |   // Status line
 | ||||||
|   #if ENABLED(USE_SMALL_INFOFONT) |   //
 | ||||||
|     u8g.setPrintPos(0, 62); | 
 | ||||||
|   #else |   #define STATUS_BASELINE (54 + INFO_FONT_HEIGHT) | ||||||
|     u8g.setPrintPos(0, 63); | 
 | ||||||
|   #endif |   if (PAGE_CONTAINS(STATUS_BASELINE + 1 - INFO_FONT_HEIGHT, STATUS_BASELINE)) { | ||||||
|   #if DISABLED(FILAMENT_LCD_DISPLAY) |     u8g.setPrintPos(0, STATUS_BASELINE); | ||||||
|     lcd_print(lcd_status_message); | 
 | ||||||
|   #else |     #if DISABLED(FILAMENT_LCD_DISPLAY) | ||||||
|     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); |       lcd_print(lcd_status_message); | ||||||
|     } |     #else | ||||||
|     else { |       if (PENDING(millis(), previous_lcd_status_ms + 5000UL)) {  //Display both Status message line and Filament display on the last line
 | ||||||
|       lcd_printPGM(PSTR("dia:")); |         lcd_print(lcd_status_message); | ||||||
|       lcd_print(ftostr12ns(filament_width_meas)); |       } | ||||||
|       lcd_printPGM(PSTR(" factor:")); |       else { | ||||||
|       lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); |         lcd_printPGM(PSTR("dia:")); | ||||||
|       u8g.print('%'); |         lcd_print(ftostr12ns(filament_width_meas)); | ||||||
|     } |         lcd_printPGM(PSTR(" factor:")); | ||||||
|   #endif |         lcd_print(itostr3(100.0 * volumetric_multiplier[FILAMENT_SENSOR_EXTRUDER_NUM])); | ||||||
|  |         u8g.print('%'); | ||||||
|  |       } | ||||||
|  |     #endif | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #if ENABLED(ULTIPANEL) | #if ENABLED(ULTIPANEL) | ||||||
| 
 | 
 | ||||||
|  |   uint8_t row_y1, row_y2; | ||||||
|  | 
 | ||||||
|   // Set the colors for a menu item based on whether it is selected
 |   // 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) { |     if (isSelected) { | ||||||
|       u8g.setColorIndex(1);  // black on white
 |       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
 |       u8g.setColorIndex(0);  // following text must be white on black
 | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|       u8g.setColorIndex(1); // unmarked text is black on white
 |       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) |   #if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE) | ||||||
| 
 | 
 | ||||||
|     // Draw a static line of text in the same idiom as a menu item
 |     // 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); |       lcd_implementation_mark_as_selected(row, invert); | ||||||
| 
 | 
 | ||||||
|  |       if (!PAGE_CONTAINS(row_y1, row_y2)) return; | ||||||
|  | 
 | ||||||
|       char c; |       char c; | ||||||
|       int8_t n = LCD_WIDTH - (START_COL); |       int8_t n = LCD_WIDTH - (START_COL); | ||||||
| 
 | 
 | ||||||
| @ -535,20 +659,20 @@ static void lcd_implementation_status_screen() { | |||||||
|   #endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
 |   #endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
 | ||||||
| 
 | 
 | ||||||
|   // Draw a generic menu item
 |   // 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); |     UNUSED(pre_char); | ||||||
| 
 | 
 | ||||||
|     char c; |  | ||||||
|     uint8_t n = LCD_WIDTH - (START_COL) - 2; |  | ||||||
| 
 |  | ||||||
|     lcd_implementation_mark_as_selected(row, isSelected); |     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); |       n -= lcd_print_and_count(c); | ||||||
|       pstr++; |       pstr++; | ||||||
|     } |     } | ||||||
|     while (n--) u8g.print(' '); |     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); |     lcd_print(post_char); | ||||||
|     u8g.print(' '); |     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, '>', ' ') |   #define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ') | ||||||
| 
 | 
 | ||||||
|   // Draw a menu item with an editable value
 |   // 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) { |   static void _drawmenu_setting_edit_generic(const bool isSelected, const uint8_t row, const char* pstr, const char* const data, const 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; |  | ||||||
| 
 | 
 | ||||||
|     lcd_implementation_mark_as_selected(row, isSelected); |     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); |       n -= lcd_print_and_count(c); | ||||||
|       pstr++; |       pstr++; | ||||||
|     } |     } | ||||||
|     u8g.print(':'); |     u8g.print(':'); | ||||||
|     while (n--) 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); |     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_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)) |   #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* const pstr, const char* const value=NULL) { | ||||||
|     uint8_t rows = 1; |     const uint8_t labellen = lcd_strlen_P(pstr), vallen = lcd_strlen(value); | ||||||
|     uint8_t lcd_width = LCD_WIDTH - (START_COL), char_width = DOG_CHAR_WIDTH; |     uint8_t lcd_width, char_width, | ||||||
|     uint8_t vallen = lcd_strlen(value); |             rows = (labellen > LCD_WIDTH - 2 - vallen) ? 2 : 1; | ||||||
| 
 | 
 | ||||||
|     #if ENABLED(USE_BIG_EDIT_FONT) |     #if ENABLED(USE_BIG_EDIT_FONT) | ||||||
|       if (lcd_strlen_P(pstr) <= LCD_WIDTH_EDIT - 1) { |       if (labellen <= LCD_WIDTH_EDIT - 1) { | ||||||
|         lcd_setFont(FONT_MENU_EDIT); |         if (labellen >= LCD_WIDTH_EDIT - vallen) rows = 2; | ||||||
|         lcd_width = LCD_WIDTH_EDIT + 1; |         lcd_width = LCD_WIDTH_EDIT + 1; | ||||||
|         char_width = DOG_CHAR_WIDTH_EDIT; |         char_width = DOG_CHAR_WIDTH_EDIT; | ||||||
|         if (lcd_strlen_P(pstr) >= LCD_WIDTH_EDIT - vallen) rows = 2; |         lcd_setFont(FONT_MENU_EDIT); | ||||||
|       } |       } | ||||||
|       else { |       else { | ||||||
|  |         lcd_width = LCD_WIDTH - (START_COL); | ||||||
|  |         char_width = DOG_CHAR_WIDTH; | ||||||
|         lcd_setFont(FONT_MENU); |         lcd_setFont(FONT_MENU); | ||||||
|       } |       } | ||||||
|  |     #else | ||||||
|  |       lcd_width = LCD_WIDTH - (START_COL); | ||||||
|  |       char_width = DOG_CHAR_WIDTH; | ||||||
|     #endif |     #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; |     if (PAGE_CONTAINS(baseline + 1 - (DOG_CHAR_HEIGHT_EDIT), baseline)) { | ||||||
|     float rowHeight = u8g.getHeight() / (rows + 1); // 1/(rows+1) = 1/2 or 1/3
 |       u8g.setPrintPos(0, baseline); | ||||||
|  |       lcd_printPGM(pstr); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     u8g.setPrintPos(0, rowHeight + kHalfChar); |  | ||||||
|     lcd_printPGM(pstr); |  | ||||||
|     if (value != NULL) { |     if (value != NULL) { | ||||||
|       u8g.print(':'); |       baseline += (rows - 1) * segmentHeight; | ||||||
|       u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, rows * rowHeight + kHalfChar); |       if (PAGE_CONTAINS(baseline + 1 - (DOG_CHAR_HEIGHT_EDIT), baseline)) { | ||||||
|       lcd_print(value); |         u8g.print(':'); | ||||||
|  |         u8g.setPrintPos((lcd_width - 1 - vallen) * char_width, baseline); | ||||||
|  |         lcd_print(value); | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   #if ENABLED(SDSUPPORT) |   #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); |       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]) { |       if (longFilename[0]) { | ||||||
|         filename = longFilename; |         filename = longFilename; | ||||||
|         longFilename[n] = '\0'; |         longFilename[n] = '\0'; | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       lcd_implementation_mark_as_selected(row, isSelected); |  | ||||||
| 
 |  | ||||||
|       if (isDir) lcd_print(LCD_STR_FOLDER[0]); |       if (isDir) lcd_print(LCD_STR_FOLDER[0]); | ||||||
|       while ((c = *filename)) { | 
 | ||||||
|  |       while (char c = *filename) { | ||||||
|         n -= lcd_print_and_count(c); |         n -= lcd_print_and_count(c); | ||||||
|         filename++; |         filename++; | ||||||
|       } |       } | ||||||
|  | |||||||
| @ -195,7 +195,7 @@ extern volatile uint8_t buttons;  //an extended version of the last checked butt | |||||||
| 
 | 
 | ||||||
| static void lcd_set_custom_characters( | static void lcd_set_custom_characters( | ||||||
|   #if ENABLED(LCD_PROGRESS_BAR) |   #if ENABLED(LCD_PROGRESS_BAR) | ||||||
|     bool info_screen_charset = true |     const bool info_screen_charset = true | ||||||
|   #endif |   #endif | ||||||
| ) { | ) { | ||||||
|   static byte bedTemp[8] = { |   static byte bedTemp[8] = { | ||||||
| @ -341,7 +341,7 @@ static void lcd_set_custom_characters( | |||||||
| 
 | 
 | ||||||
| static void lcd_implementation_init( | static void lcd_implementation_init( | ||||||
|   #if ENABLED(LCD_PROGRESS_BAR) |   #if ENABLED(LCD_PROGRESS_BAR) | ||||||
|     bool info_screen_charset = true |     const bool info_screen_charset = true | ||||||
|   #endif |   #endif | ||||||
| ) { | ) { | ||||||
| 
 | 
 | ||||||
| @ -385,7 +385,7 @@ void lcd_printPGM(const char *str) { | |||||||
|   for (; char c = pgm_read_byte(str); ++str) charset_mapper(c); |   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); |   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) | #if ENABLED(SHOW_BOOTSCREEN) | ||||||
| 
 | 
 | ||||||
|   void lcd_erase_line(int line) { |   void lcd_erase_line(const int line) { | ||||||
|     lcd.setCursor(0, line); |     lcd.setCursor(0, line); | ||||||
|     for (int i = 0; i < LCD_WIDTH; i++) |     for (uint8_t i = LCD_WIDTH + 1; --i;) | ||||||
|       lcd_print(' '); |       lcd_print(' '); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   // Scroll the PSTR 'text' in a 'len' wide field for 'time' milliseconds at position col,line
 |   // 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}; |     char tmp[LCD_WIDTH + 1] = {0}; | ||||||
|     int n = max(lcd_strlen_P(text) - len, 0); |     int n = max(lcd_strlen_P(text) - len, 0); | ||||||
|     for (int i = 0; i <= n; i++) { |     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; |     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, 0); lcd.print('\x00'); lcd_printPGM(PSTR( "------" ));  lcd.print('\x01'); | ||||||
|     lcd.setCursor(indent, 1);                    lcd_printPGM(PSTR("|Marlin|"));  lcd_printPGM(extra); |     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)); |   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) |   if (blink) | ||||||
|     lcd_printPGM(pstr); |     lcd_printPGM(pstr); | ||||||
|   else { |   else { | ||||||
| @ -794,7 +794,7 @@ static void lcd_implementation_status_screen() { | |||||||
| 
 | 
 | ||||||
|   #if ENABLED(LCD_INFO_MENU) || ENABLED(FILAMENT_CHANGE_FEATURE) |   #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); |       UNUSED(invert); | ||||||
|       char c; |       char c; | ||||||
|       int8_t n = LCD_WIDTH; |       int8_t n = LCD_WIDTH; | ||||||
| @ -816,7 +816,7 @@ static void lcd_implementation_status_screen() { | |||||||
| 
 | 
 | ||||||
|   #endif // LCD_INFO_MENU || FILAMENT_CHANGE_FEATURE
 |   #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; |     char c; | ||||||
|     uint8_t n = LCD_WIDTH - 2; |     uint8_t n = LCD_WIDTH - 2; | ||||||
|     lcd.setCursor(0, row); |     lcd.setCursor(0, row); | ||||||
| @ -829,7 +829,7 @@ static void lcd_implementation_status_screen() { | |||||||
|     lcd.print(post_char); |     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; |     char c; | ||||||
|     uint8_t n = LCD_WIDTH - 2 - lcd_strlen(data); |     uint8_t n = LCD_WIDTH - 2 - lcd_strlen(data); | ||||||
|     lcd.setCursor(0, row); |     lcd.setCursor(0, row); | ||||||
| @ -842,7 +842,7 @@ static void lcd_implementation_status_screen() { | |||||||
|     while (n--) lcd.print(' '); |     while (n--) lcd.print(' '); | ||||||
|     lcd_print(data); |     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; |     char c; | ||||||
|     uint8_t n = LCD_WIDTH - 2 - lcd_strlen_P(data); |     uint8_t n = LCD_WIDTH - 2 - lcd_strlen_P(data); | ||||||
|     lcd.setCursor(0, row); |     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_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)) |   #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.setCursor(1, 1); | ||||||
|     lcd_printPGM(pstr); |     lcd_printPGM(pstr); | ||||||
|     if (value != NULL) { |     if (value != NULL) { | ||||||
| @ -891,7 +891,7 @@ static void lcd_implementation_status_screen() { | |||||||
| 
 | 
 | ||||||
|   #if ENABLED(SDSUPPORT) |   #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); |       UNUSED(pstr); | ||||||
|       char c; |       char c; | ||||||
|       uint8_t n = LCD_WIDTH - concat; |       uint8_t n = LCD_WIDTH - concat; | ||||||
| @ -909,11 +909,11 @@ static void lcd_implementation_status_screen() { | |||||||
|       lcd.print(post_char); |       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, ' '); |       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]); |       lcd_implementation_drawmenu_sd(sel, row, pstr, filename, longFilename, 2, LCD_STR_FOLDER[0]); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -106,12 +106,18 @@ static void ST7920_SWSPI_SND_8BIT(uint8_t val) { | |||||||
|   ST7920_SND_BIT; // 8
 |   ST7920_SND_BIT; // 8
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #define ST7920_CS()              {WRITE(ST7920_CS_PIN,1);u8g_10MicroDelay();} | #if defined(DOGM_SPI_DELAY_US) && DOGM_SPI_DELAY_US > 0 | ||||||
| #define ST7920_NCS()             {WRITE(ST7920_CS_PIN,0);} |   #define U8G_DELAY() delayMicroseconds(DOGM_SPI_DELAY_US) | ||||||
| #define ST7920_SET_CMD()         {ST7920_SWSPI_SND_8BIT(0xf8);u8g_10MicroDelay();} | #else | ||||||
| #define ST7920_SET_DAT()         {ST7920_SWSPI_SND_8BIT(0xfa);u8g_10MicroDelay();} |   #define U8G_DELAY() 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();} | #endif | ||||||
| #define ST7920_WRITE_BYTES(p,l)  {uint8_t i;for(i=0;i<l;i++){ST7920_SWSPI_SND_8BIT(*p&0xf0);ST7920_SWSPI_SND_8BIT(*p<<4);p++;}u8g_10MicroDelay();} | 
 | ||||||
|  | #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 u8g_dev_rrd_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { | ||||||
|   uint8_t i, y; |   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; |     break; | ||||||
|   } |   } | ||||||
| #if PAGE_HEIGHT == 8 |   #if PAGE_HEIGHT == 8 | ||||||
|   return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg); |     return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg); | ||||||
| #elif PAGE_HEIGHT == 16 |   #elif PAGE_HEIGHT == 16 | ||||||
|   return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg); |     return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg); | ||||||
| #else |   #else | ||||||
|   return u8g_dev_pb32h1_base_fn(u8g, dev, msg, arg); |     return u8g_dev_pb32h1_base_fn(u8g, dev, msg, arg); | ||||||
| #endif |   #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| uint8_t   u8g_dev_st7920_128x64_rrd_buf[(LCD_PIXEL_WIDTH) * (PAGE_HEIGHT) / 8] U8G_NOCOMMON; | uint8_t   u8g_dev_st7920_128x64_rrd_buf[(LCD_PIXEL_WIDTH) * (PAGE_HEIGHT) / 8] U8G_NOCOMMON; | ||||||
|  | |||||||
| @ -48,34 +48,34 @@ | |||||||
|     #if ENABLED(MAPPER_C2C3) |     #if ENABLED(MAPPER_C2C3) | ||||||
|       const PROGMEM uint8_t utf_recode[] = |       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
 |            { // 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
 |                0x20,0x3f,0xec,0xed,0x3f,0x5c,0x7c,0x3f,0x22,0x63,0x61,0x7f,0x3f,0x3f,0x52,0xb0,  // c2a
 | ||||||
|   //          ' '       ¢    £             l         "    c    a    «              R
 |              //' '        ¢    £              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.
 |                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    °    »
 |              // °         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,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 '?'
 |                0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0xef,0x78,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0xe2,  // c39 missing characters display as '?'
 | ||||||
|   //                                        ö     x                       ü              ß
 |              //                               ö    x                        ü              ß
 | ||||||
|              0x3f,0x3f,0x3f,0x3f,0xe1,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,  // c3a
 |                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
 |                0x3f,0xee,0x3f,0x3f,0x3f,0x3f,0xef,0xfd,0x3f,0x3f,0x3f,0x3f,0xf5,0x3f,0x3f,0x3f   // c3b
 | ||||||
|   //               n                        ö    ÷                        ü
 |              //      n                        ö    ÷                        ü
 | ||||||
|            }; |            }; | ||||||
|     #elif ENABLED(MAPPER_E382E383) |     #elif ENABLED(MAPPER_E382E383) | ||||||
|       const PROGMEM uint8_t utf_recode[] = |       const PROGMEM uint8_t utf_recode[] = | ||||||
|            { // 0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f
 |            { // 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
 |                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
 |                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
 |                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
 |                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
 |                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
 |                0xec,0xa7,0xa6,0xdd,0xcc,0x3f,0x3f,0x3f,0x3f,0x3f,0xa6,0xa5,0xb0,0xa4,0xa4,0x3f   // e383b
 | ||||||
|   //          ヰ    ヱ    ヲ    ン    フ    ?    ?   ?    ?    ?    ヲ    ・    ー    ヽ    ヽ   ?
 |              // ヰ    ヱ    ヲ    ン    フ    ?    ?   ?    ?    ?    ヲ    ・    ー    ヽ    ヽ   ?
 | ||||||
|            }; |            }; | ||||||
|     #elif ENABLED(MAPPER_D0D1) |     #elif ENABLED(MAPPER_D0D1) | ||||||
|       #error "Cyrillic on a JAPANESE display makes no sense. There are no matching symbols." |       #error "Cyrillic on a JAPANESE display makes no sense. There are no matching symbols." | ||||||
| @ -85,31 +85,31 @@ | |||||||
|     #if ENABLED(MAPPER_C2C3) |     #if ENABLED(MAPPER_C2C3) | ||||||
|       const PROGMEM uint8_t utf_recode[] = |       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.
 |            { // 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 ¡¢£¤¥¦§¨©ª«¬®¯
 |                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 °±²³´µ¶·¸¹º»¼½¾¿
 |                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 ÀÁÃÄÅÆÇÈÉÊËÌÍÎÏ
 |                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 ÐÑÓÔÕÖרÙÚÛÜÝÞß
 |                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 àáãäåæçèéêëìíîï
 |                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 ðñóôõö÷øùúûüýþÿ
 |                0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff   // c3b ðñóôõö÷øùúûüýþÿ
 | ||||||
|   //          ð    ñ    ò    ó    ô    õ    ö    ÷    ø    ù    ú    û    ü    ý    þ    ÿ
 |              // ð    ñ    ò    ó    ô    õ    ö    ÷    ø    ù    ú    û    ü    ý    þ    ÿ
 | ||||||
|            }; |            }; | ||||||
|     #elif ENABLED(MAPPER_D0D1) |     #elif ENABLED(MAPPER_D0D1) | ||||||
|       #define MAPPER_D0D1_MOD |       #define MAPPER_D0D1_MOD | ||||||
|       const PROGMEM uint8_t utf_recode[] = |       const PROGMEM uint8_t utf_recode[] = | ||||||
|            {//0    1    2    3    4    5    6    7    8    9    a    b    c    d    e    f
 |            {//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
 |                0x41,0x80,0x42,0x92,0x81,0x45,0x82,0x83,0x84,0x85,0x4b,0x86,0x4d,0x48,0x4f,0x87,  // d0a
 | ||||||
|   //          A    Б    B    Г    Д    E    Ж    З    И    Й    K    Л    M    H    O    П
 |              // A    Б    B    Г    Д    E    Ж    З    И    Й    K    Л    M    H    O    П
 | ||||||
|              0x50,0x43,0x54,0x88,0xd8,0x58,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad,  // d0b
 |                0x50,0x43,0x54,0x88,0xd8,0x58,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad,  // d0b
 | ||||||
|   //          P    C    T    У    Ф    X    Ч    ч    Ш    Щ    Ъ    Ы    b    Э    Ю    Я
 |              // P    C    T    У    Ф    X    Ч    ч    Ш    Щ    Ъ    Ы    b    Э    Ю    Я
 | ||||||
|              0x61,0x36,0x42,0x92,0x81,0x65,0x82,0xb3,0x84,0x85,0x6b,0x86,0x4d,0x48,0x6f,0x87,  // d18
 |                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    П
 |              // 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
 |                0x70,0x63,0x54,0x79,0xd8,0x78,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x62,0x8f,0xac,0xad   // d19
 | ||||||
|   //          p    c    T    y    Ф    x    Ч    ч    Ш    Щ    Ъ    Ы    b    Э    Ю    Я
 |              // p    c    T    y    Ф    x    Ч    ч    Ш    Щ    Ъ    Ы    b    Э    Ю    Я
 | ||||||
|             }; |             }; | ||||||
|     #elif ENABLED(MAPPER_E382E383) |     #elif ENABLED(MAPPER_E382E383) | ||||||
|       #error "Katakana on a WESTERN display makes no sense. There are no matching symbols." |       #error "Katakana on a WESTERN display makes no sense. There are no matching symbols." | ||||||
| @ -121,23 +121,23 @@ | |||||||
|       // it is a Russian alphabet translation
 |       // it is a Russian alphabet translation
 | ||||||
|       // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё
 |       // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё
 | ||||||
|       const PROGMEM uint8_t utf_recode[] = |       const PROGMEM uint8_t utf_recode[] = | ||||||
|              { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,   // unicode U+0400 to U+047f
 |                { 0x41,0xa0,0x42,0xa1,0xe0,0x45,0xa3,0xa4,   // unicode U+0400 to U+047f
 | ||||||
|              // A   Б->Ё  B    Г    Д    E    Ж    З      // 0  Ѐ Ё Ђ Ѓ Є Ѕ І Ї
 |                // A   Б->Ё  B    Г    Д    E    Ж    З      // 0  Ѐ Ё Ђ Ѓ Є Ѕ І Ї
 | ||||||
|                0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8,   //    Ј Љ Њ Ћ Ќ Ѝ Ў Џ
 |                  0xa5,0xa6,0x4b,0xa7,0x4d,0x48,0x4f,0xa8,   //    Ј Љ Њ Ћ Ќ Ѝ Ў Џ
 | ||||||
|              // И    Й    K    Л    M    H    O    П      // 1  А Б В Г Д Е Ж З
 |                // И    Й    K    Л    M    H    O    П      // 1  А Б В Г Д Е Ж З
 | ||||||
|                0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,   //    И Й К Л М Н О П
 |                  0x50,0x43,0x54,0xa9,0xaa,0x58,0xe1,0xab,   //    И Й К Л М Н О П
 | ||||||
|              // P    C    T    У    Ф    X    Ч    ч      // 2  Р С Т У Ф Х Г Ч
 |                // P    C    T    У    Ф    X    Ч    ч      // 2  Р С Т У Ф Х Г Ч
 | ||||||
|                0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1,   //    Ш Щ Ъ Ы Ь Э Ю Я
 |                  0xac,0xe2,0xad,0xae,0x62,0xaf,0xb0,0xb1,   //    Ш Щ Ъ Ы Ь Э Ю Я
 | ||||||
|              // Ш    Щ    Ъ    Ы    b    Э    Ю    Я      // 3  а б в г д е ж з
 |                // Ш    Щ    Ъ    Ы    b    Э    Ю    Я      // 3  а б в г д е ж з
 | ||||||
|                0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,   //    и й к л м н о п
 |                  0x61,0xb2,0xb3,0xb4,0xe3,0x65,0xb6,0xb7,   //    и й к л м н о п
 | ||||||
|              // a   б->ё  в    г    д    e    ж    з      // 4  р с т у ф х ц ч
 |                // a   б->ё  в    г    д    e    ж    з      // 4  р с т у ф х ц ч
 | ||||||
|                0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe,   //    ш щ ъ ы ь э ю я
 |                  0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0x6f,0xbe,   //    ш щ ъ ы ь э ю я
 | ||||||
|              // и    й    к    л    м    н    o    п      // 5  ѐ ё ђ ѓ є ѕ і ї
 |                // и    й    к    л    м    н    o    п      // 5  ѐ ё ђ ѓ є ѕ і ї
 | ||||||
|                0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,   //    ј љ њ ћ ќ ѝ ў џ
 |                  0x70,0x63,0xbf,0x79,0xe4,0x78,0xe5,0xc0,   //    ј љ њ ћ ќ ѝ ў џ
 | ||||||
|              // p    c    т    y    ф    x    ц    ч      // 6  Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ
 |                // p    c    т    y    ф    x    ц    ч      // 6  Ѡ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ
 | ||||||
|                0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7    //    Ѫ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ
 |                  0xc1,0xe6,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7    //    Ѫ ѩ Ѫ ѫ Ѭ ѭ Ѯ ѯ
 | ||||||
|              // ш    щ    ъ    ы    ь    э    ю    я      // 7  Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ
 |                // ш    щ    ъ    ы    ь    э    ю      я      // 7  Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ
 | ||||||
|              };                                           //    ѻ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ
 |              };                                             //    ѻ ѹ Ѻ ѻ Ѽ ѽ Ѿ ѿ
 | ||||||
|     #elif ENABLED(MAPPER_C2C3) |     #elif ENABLED(MAPPER_C2C3) | ||||||
|       #error "Western languages on a CYRILLIC display makes no sense. There are no matching symbols." |       #error "Western languages on a CYRILLIC display makes no sense. There are no matching symbols." | ||||||
|     #elif ENABLED(MAPPER_E382E383) |     #elif ENABLED(MAPPER_E382E383) | ||||||
| @ -150,7 +150,7 @@ | |||||||
| 
 | 
 | ||||||
| #if ENABLED(MAPPER_C2C3) | #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 uint8_t utf_hi_char; // UTF-8 high part
 | ||||||
|     static bool seen_c2 = false; |     static bool seen_c2 = false; | ||||||
|     uint8_t d = c; |     uint8_t d = c; | ||||||
| @ -181,7 +181,7 @@ | |||||||
| 
 | 
 | ||||||
| #elif ENABLED(MAPPER_CECF) | #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 uint8_t utf_hi_char; // UTF-8 high part
 | ||||||
|     static bool seen_ce = false; |     static bool seen_ce = false; | ||||||
|     uint8_t d = c; |     uint8_t d = c; | ||||||
| @ -212,7 +212,7 @@ | |||||||
| 
 | 
 | ||||||
| #elif ENABLED(MAPPER_CECF) | #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 uint8_t utf_hi_char; // UTF-8 high part
 | ||||||
|     static bool seen_ce = false; |     static bool seen_ce = false; | ||||||
|     uint8_t d = c; |     uint8_t d = c; | ||||||
| @ -243,7 +243,7 @@ | |||||||
| 
 | 
 | ||||||
| #elif ENABLED(MAPPER_D0D1_MOD) | #elif ENABLED(MAPPER_D0D1_MOD) | ||||||
| 
 | 
 | ||||||
|   char charset_mapper(char c) { |   char charset_mapper(const char c) { | ||||||
|     // it is a Russian alphabet translation
 |     // it is a Russian alphabet translation
 | ||||||
|     // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё
 |     // except 0401 --> 0xa2 = Ё, 0451 --> 0xb5 = ё
 | ||||||
|     static uint8_t utf_hi_char; // UTF-8 high part
 |     static uint8_t utf_hi_char; // UTF-8 high part
 | ||||||
| @ -280,7 +280,7 @@ | |||||||
| 
 | 
 | ||||||
| #elif ENABLED(MAPPER_D0D1) | #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 uint8_t utf_hi_char; // UTF-8 high part
 | ||||||
|     static bool seen_d5 = false; |     static bool seen_d5 = false; | ||||||
|     uint8_t d = c; |     uint8_t d = c; | ||||||
| @ -311,7 +311,7 @@ | |||||||
| 
 | 
 | ||||||
| #elif ENABLED(MAPPER_E382E383) | #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 uint8_t utf_hi_char; // UTF-8 high part
 | ||||||
|     static bool seen_e3 = false; |     static bool seen_e3 = false; | ||||||
|     static bool seen_82_83 = false; |     static bool seen_82_83 = false; | ||||||
| @ -350,7 +350,7 @@ | |||||||
| 
 | 
 | ||||||
|   #define MAPPER_NON |   #define MAPPER_NON | ||||||
| 
 | 
 | ||||||
|   char charset_mapper(char c) { |   char charset_mapper(const char c) { | ||||||
|     HARDWARE_CHAR_OUT( c ); |     HARDWARE_CHAR_OUT( c ); | ||||||
|     return 1; |     return 1; | ||||||
|   } |   } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user