@ -193,12 +193,18 @@ extern volatile uint8_t buttons; //an extended version of the last checked butt
static void lcd_implementation_update_indicators ( ) ;
# endif
static void lcd_set_custom_characters (
# if ENABLED(LCD_PROGRESS_BAR)
const bool info_screen_charset = true
# endif
) {
static byte bedTemp [ 8 ] = {
static void createChar_P ( char c , PROGMEM byte * ptr ) {
byte temp [ 8 ] ;
int8_t i ;
for ( i = 0 ; i < 8 ; i + + ) {
temp [ i ] = pgm_read_byte ( & ptr [ i ] ) ;
}
lcd . createChar ( c , temp ) ;
}
const static PROGMEM byte bedTemp [ 8 ] = {
B00000 ,
B11111 ,
B10101 ,
@ -207,8 +213,9 @@ static void lcd_set_custom_characters(
B11111 ,
B00000 ,
B00000
} ; //thanks Sonny Mounicou
static byte degree [ 8 ] = {
} ;
const static PROGMEM byte degree [ 8 ] = {
B01100 ,
B10010 ,
B10010 ,
@ -218,7 +225,8 @@ static void lcd_set_custom_characters(
B00000 ,
B00000
} ;
static byte thermometer [ 8 ] = {
const static PROGMEM byte thermometer [ 8 ] = {
B00100 ,
B01010 ,
B01010 ,
@ -228,7 +236,8 @@ static void lcd_set_custom_characters(
B10001 ,
B01110
} ;
static byte uplevel [ 8 ] = {
const static PROGMEM byte uplevel [ 8 ] = {
B00100 ,
B01110 ,
B11111 ,
@ -237,8 +246,9 @@ static void lcd_set_custom_characters(
B00000 ,
B00000 ,
B00000
} ; //thanks joris
static byte feedrate [ 8 ] = {
} ;
const static PROGMEM byte feedrate [ 8 ] = {
B11100 ,
B10000 ,
B11000 ,
@ -247,8 +257,9 @@ static void lcd_set_custom_characters(
B00110 ,
B00101 ,
B00000
} ; //thanks Sonny Mounicou
static byte clock [ 8 ] = {
} ;
const static PROGMEM byte clock [ 8 ] = {
B00000 ,
B01110 ,
B10011 ,
@ -257,16 +268,10 @@ static void lcd_set_custom_characters(
B01110 ,
B00000 ,
B00000
} ; //thanks Sonny Mounicou
} ;
lcd . createChar ( LCD_STR_BEDTEMP [ 0 ] , bedTemp ) ;
lcd . createChar ( LCD_STR_DEGREE [ 0 ] , degree ) ;
lcd . createChar ( LCD_STR_THERMOMETER [ 0 ] , thermometer ) ;
lcd . createChar ( LCD_STR_FEEDRATE [ 0 ] , feedrate ) ;
lcd . createChar ( LCD_STR_CLOCK [ 0 ] , clock ) ;
# if ENABLED(SDSUPPORT)
static byte refresh [ 8 ] = {
# if ENABLED(SDSUPPORT)
const static PROGMEM byte refresh [ 8 ] = {
B00000 ,
B00110 ,
B11001 ,
@ -275,8 +280,8 @@ static void lcd_set_custom_characters(
B10011 ,
B01100 ,
B00000 ,
} ; //thanks joris
static byte folder [ 8 ] = {
} ;
const static PROGMEM byte folder [ 8 ] = {
B00000 ,
B11100 ,
B11111 ,
@ -285,10 +290,10 @@ static void lcd_set_custom_characters(
B11111 ,
B00000 ,
B00000
} ; //thanks joris
} ;
# if ENABLED(LCD_PROGRESS_BAR)
static byte progress [ 3 ] [ 8 ] = { {
# if ENABLED(LCD_PROGRESS_BAR)
const static PROGMEM byte progress [ 3 ] [ 8 ] = { {
B00000 ,
B10000 ,
B10000 ,
@ -316,26 +321,43 @@ static void lcd_set_custom_characters(
B10101 ,
B00000
} } ;
# endif
# endif
static void lcd_set_custom_characters (
# if ENABLED(LCD_PROGRESS_BAR)
const bool info_screen_charset = true
# endif
) {
createChar_P ( LCD_BEDTEMP_CHAR , bedTemp ) ;
createChar_P ( LCD_DEGREE_CHAR , degree ) ;
createChar_P ( LCD_STR_THERMOMETER [ 0 ] , thermometer ) ;
createChar_P ( LCD_FEEDRATE_CHAR , feedrate ) ;
createChar_P ( LCD_CLOCK_CHAR , clock ) ;
# if ENABLED(SDSUPPORT)
# if ENABLED(LCD_PROGRESS_BAR)
static bool char_mode = false ;
if ( info_screen_charset ! = char_mode ) {
char_mode = info_screen_charset ;
if ( info_screen_charset ) { // Progress bar characters for info screen
for ( int i = 3 ; i - - ; ) lcd . createChar ( LCD_STR_PROGRESS [ i ] , progress [ i ] ) ;
for ( int i = 3 ; i - - ; ) createChar _P ( LCD_STR_PROGRESS [ i ] , progress [ i ] ) ;
}
else { // Custom characters for submenus
lcd . createChar ( LCD_STR_UPLEVEL [ 0 ] , uplevel ) ;
lcd . createChar ( LCD_STR_REFRESH [ 0 ] , refresh ) ;
lcd . createChar ( LCD_STR_FOLDER [ 0 ] , folder ) ;
createChar_P ( LCD_UPLEVEL_CHAR , uplevel ) ;
createChar_P ( LCD_REFRESH_CHAR , refresh ) ;
createChar _P ( LCD_STR_FOLDER [ 0 ] , folder ) ;
}
}
# else
lcd . createChar ( LCD_STR_UPLEVEL [ 0 ] , uplevel ) ;
lcd . createChar ( LCD_STR_REFRESH [ 0 ] , refresh ) ;
lcd . createChar ( LCD_STR_FOLDER [ 0 ] , folder ) ;
createChar_P ( LCD_UPLEVEL_CHAR , uplevel ) ;
createChar_P ( LCD_REFRESH_CHAR , refresh ) ;
createChar _P ( LCD_STR_FOLDER [ 0 ] , folder ) ;
# endif
# else
lcd . createChar ( LCD_STR_UPLEVEL [ 0 ] , uplevel ) ;
createChar_P ( LCD_UPLEVEL_CHAR , uplevel ) ;
# endif
}
@ -607,7 +629,8 @@ FORCE_INLINE void _draw_heater_status(const int8_t heater, const char prefix, co
lcd . print ( itostr3left ( t2 + 0.5 ) ) ;
if ( prefix > = 0 ) {
lcd_printPGM ( PSTR ( LCD_STR_DEGREE " " ) ) ;
lcd . print ( ( char ) LCD_DEGREE_CHAR ) ;
lcd . print ( ' ' ) ;
if ( t2 < 10 ) lcd . print ( ' ' ) ;
}
}
@ -677,10 +700,10 @@ static void lcd_implementation_status_screen() {
lcd . setCursor ( 8 , 0 ) ;
# if HOTENDS > 1
lcd . print ( LCD_STR_THERMOMETER [ 0 ] ) ;
lcd . print ( ( CHAR ) LCD_STR_THERMOMETER [ 0 ] ) ;
_draw_heater_status ( 1 , - 1 , blink ) ;
# else
lcd . print ( LCD_STR_BEDTEMP [ 0 ] ) ;
lcd . print ( ( CHAR ) LCD_BEDTEMP_CHAR ) ;
_draw_heater_status ( - 1 , - 1 , blink ) ;
# endif
@ -701,7 +724,7 @@ static void lcd_implementation_status_screen() {
# if HOTENDS > 1
_draw_heater_status ( 1 , LCD_STR_THERMOMETER [ 0 ] , blink ) ;
# else
_draw_heater_status ( - 1 , LCD_ STR_BEDTEMP[ 0 ] , blink ) ;
_draw_heater_status ( - 1 , LCD_ BEDTEMP_CHAR , blink ) ;
# endif
# endif // HOTENDS > 1 || TEMP_SENSOR_BED != 0
@ -735,7 +758,7 @@ static void lcd_implementation_status_screen() {
// If we both have a 2nd extruder and a heated bed,
// show the heated bed temp on the left,
// since the first line is filled with extruder temps
_draw_heater_status ( - 1 , LCD_ STR_BEDTEMP[ 0 ] , blink ) ;
_draw_heater_status ( - 1 , LCD_ BEDTEMP_CHAR , blink ) ;
# else
// Before homing the axis letters are blinking 'X' <-> '?'.
@ -767,7 +790,7 @@ static void lcd_implementation_status_screen() {
# if LCD_HEIGHT > 3
lcd . setCursor ( 0 , 2 ) ;
lcd . print ( LCD_STR_FEEDRATE [ 0 ] ) ;
lcd . print ( ( char ) LCD_FEEDRATE_CHAR ) ;
lcd . print ( itostr3 ( feedrate_percentage ) ) ;
lcd . print ( ' % ' ) ;
@ -788,7 +811,7 @@ static void lcd_implementation_status_screen() {
uint8_t len = elapsed . toDigital ( buffer ) ;
lcd . setCursor ( LCD_WIDTH - len - 1 , 2 ) ;
lcd . print ( LCD_STR_CLOCK [ 0 ] ) ;
lcd . print ( ( char ) LCD_CLOCK_CHAR ) ;
lcd_print ( buffer ) ;
# endif // LCD_HEIGHT > 3
@ -980,7 +1003,7 @@ static void lcd_implementation_status_screen() {
# endif // SDSUPPORT
# define lcd_implementation_drawmenu_back(sel, row, pstr, dummy) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_ STR_UPLEVEL[0], LCD_STR_UPLEVEL[0] )
# define lcd_implementation_drawmenu_back(sel, row, pstr, dummy) lcd_implementation_drawmenu_generic(sel, row, pstr, LCD_ UPLEVEL_CHAR,LCD_UPLEVEL_CHAR )
# define lcd_implementation_drawmenu_submenu(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', LCD_STR_ARROW_RIGHT[0])
# define lcd_implementation_drawmenu_gcode(sel, row, pstr, gcode) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')
# define lcd_implementation_drawmenu_function(sel, row, pstr, data) lcd_implementation_drawmenu_generic(sel, row, pstr, '>', ' ')