|  |  |  | @ -254,7 +254,7 @@ static void lcd_goto_menu(menuFunc_t menu, const uint32_t encoder=0, const bool | 
			
		
	
		
			
				
					|  |  |  |  |     if (feedback) lcd_quick_feedback(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     // For LCD_PROGRESS_BAR re-initialize the custom characters
 | 
			
		
	
		
			
				
					|  |  |  |  |     #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) | 
			
		
	
		
			
				
					|  |  |  |  |     #ifdef LCD_PROGRESS_BAR | 
			
		
	
		
			
				
					|  |  |  |  |       lcd_set_custom_characters(menu == lcd_status_screen); | 
			
		
	
		
			
				
					|  |  |  |  |     #endif | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  |  | @ -264,29 +264,32 @@ static void lcd_goto_menu(menuFunc_t menu, const uint32_t encoder=0, const bool | 
			
		
	
		
			
				
					|  |  |  |  | static void lcd_status_screen() | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  | 	encoderRateMultiplierEnabled = false; | 
			
		
	
		
			
				
					|  |  |  |  |   #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) | 
			
		
	
		
			
				
					|  |  |  |  |     uint16_t mil = millis(); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   #ifdef LCD_PROGRESS_BAR | 
			
		
	
		
			
				
					|  |  |  |  |     unsigned long ms = millis(); | 
			
		
	
		
			
				
					|  |  |  |  |     #ifndef PROGRESS_MSG_ONCE | 
			
		
	
		
			
				
					|  |  |  |  |       if (mil > progressBarTick + PROGRESS_BAR_MSG_TIME + PROGRESS_BAR_BAR_TIME) { | 
			
		
	
		
			
				
					|  |  |  |  |         progressBarTick = mil; | 
			
		
	
		
			
				
					|  |  |  |  |       if (ms > progressBarTick + PROGRESS_BAR_MSG_TIME + PROGRESS_BAR_BAR_TIME) { | 
			
		
	
		
			
				
					|  |  |  |  |         progressBarTick = ms; | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  |     #endif | 
			
		
	
		
			
				
					|  |  |  |  |     #if PROGRESS_MSG_EXPIRE > 0 | 
			
		
	
		
			
				
					|  |  |  |  |       // keep the message alive if paused, count down otherwise
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (messageTick > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |       // Handle message expire
 | 
			
		
	
		
			
				
					|  |  |  |  |       if (expireStatusMillis > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |         if (card.isFileOpen()) { | 
			
		
	
		
			
				
					|  |  |  |  |           // Expire the message when printing is active
 | 
			
		
	
		
			
				
					|  |  |  |  |           if (IS_SD_PRINTING) { | 
			
		
	
		
			
				
					|  |  |  |  |             if ((mil-messageTick) >= PROGRESS_MSG_EXPIRE) { | 
			
		
	
		
			
				
					|  |  |  |  |             // Expire the message when printing is active
 | 
			
		
	
		
			
				
					|  |  |  |  |             if (ms >= expireStatusMillis) { | 
			
		
	
		
			
				
					|  |  |  |  |               lcd_status_message[0] = '\0'; | 
			
		
	
		
			
				
					|  |  |  |  |               messageTick = 0; | 
			
		
	
		
			
				
					|  |  |  |  |               expireStatusMillis = 0; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |  |           else { | 
			
		
	
		
			
				
					|  |  |  |  |             messageTick += LCD_UPDATE_INTERVAL; | 
			
		
	
		
			
				
					|  |  |  |  |             expireStatusMillis += LCD_UPDATE_INTERVAL; | 
			
		
	
		
			
				
					|  |  |  |  |           } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         else { | 
			
		
	
		
			
				
					|  |  |  |  |           messageTick = 0; | 
			
		
	
		
			
				
					|  |  |  |  |           expireStatusMillis = 0; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  |     #endif | 
			
		
	
	
		
			
				
					|  |  |  | @ -326,7 +329,7 @@ static void lcd_status_screen() | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         lcd_goto_menu(lcd_main_menu); | 
			
		
	
		
			
				
					|  |  |  |  |         lcd_implementation_init( // to maybe revive the LCD if static electricity killed it.
 | 
			
		
	
		
			
				
					|  |  |  |  |           #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) | 
			
		
	
		
			
				
					|  |  |  |  |           #ifdef LCD_PROGRESS_BAR | 
			
		
	
		
			
				
					|  |  |  |  |             currentMenu == lcd_status_screen | 
			
		
	
		
			
				
					|  |  |  |  |           #endif | 
			
		
	
		
			
				
					|  |  |  |  |         ); | 
			
		
	
	
		
			
				
					|  |  |  | @ -382,7 +385,7 @@ static void lcd_sdcard_stop() { | 
			
		
	
		
			
				
					|  |  |  |  |   card.closefile(); | 
			
		
	
		
			
				
					|  |  |  |  |   autotempShutdown(); | 
			
		
	
		
			
				
					|  |  |  |  |   cancel_heatup = true; | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_setstatus(MSG_PRINT_ABORTED); | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_setstatus(MSG_PRINT_ABORTED, true); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /* Menu implementation */ | 
			
		
	
	
		
			
				
					|  |  |  | @ -1279,7 +1282,7 @@ void lcd_update() { | 
			
		
	
		
			
				
					|  |  |  |  |       lcdDrawUpdate = 2; | 
			
		
	
		
			
				
					|  |  |  |  |       lcd_oldcardstatus = IS_SD_INSERTED; | 
			
		
	
		
			
				
					|  |  |  |  |       lcd_implementation_init( // to maybe revive the LCD if static electricity killed it.
 | 
			
		
	
		
			
				
					|  |  |  |  |         #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) | 
			
		
	
		
			
				
					|  |  |  |  |         #ifdef LCD_PROGRESS_BAR | 
			
		
	
		
			
				
					|  |  |  |  |           currentMenu == lcd_status_screen | 
			
		
	
		
			
				
					|  |  |  |  |         #endif | 
			
		
	
		
			
				
					|  |  |  |  |       ); | 
			
		
	
	
		
			
				
					|  |  |  | @ -1397,7 +1400,7 @@ void lcd_ignore_click(bool b) { | 
			
		
	
		
			
				
					|  |  |  |  |   wait_for_unclick = false; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_finishstatus() { | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_finishstatus(bool persist=false) { | 
			
		
	
		
			
				
					|  |  |  |  |   int len = lcd_strlen(lcd_status_message); | 
			
		
	
		
			
				
					|  |  |  |  |   if (len > 0) { | 
			
		
	
		
			
				
					|  |  |  |  |     while (len < LCD_WIDTH) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -1405,11 +1408,11 @@ void lcd_finishstatus() { | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_status_message[LCD_WIDTH] = '\0'; | 
			
		
	
		
			
				
					|  |  |  |  |   #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) && !defined(DOGLCD) | 
			
		
	
		
			
				
					|  |  |  |  |   #ifdef LCD_PROGRESS_BAR | 
			
		
	
		
			
				
					|  |  |  |  |     progressBarTick = millis(); | 
			
		
	
		
			
				
					|  |  |  |  |     #if PROGRESS_MSG_EXPIRE > 0 | 
			
		
	
		
			
				
					|  |  |  |  |       messageTick = | 
			
		
	
		
			
				
					|  |  |  |  |       expireStatusMillis = persist ? 0 : progressBarTick + PROGRESS_MSG_EXPIRE; | 
			
		
	
		
			
				
					|  |  |  |  |     #endif | 
			
		
	
		
			
				
					|  |  |  |  |     progressBarTick = millis(); | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
		
			
				
					|  |  |  |  |   lcdDrawUpdate = 2; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -1418,21 +1421,26 @@ void lcd_finishstatus() { | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_setstatus(const char* message) { | 
			
		
	
		
			
				
					|  |  |  |  | #if defined(LCD_PROGRESS_BAR) && PROGRESS_MSG_EXPIRE > 0 | 
			
		
	
		
			
				
					|  |  |  |  |   void dontExpireStatus() { expireStatusMillis = 0; } | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_setstatus(const char* message, bool persist) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (lcd_status_message_level > 0) return; | 
			
		
	
		
			
				
					|  |  |  |  |   strncpy(lcd_status_message, message, LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_finishstatus(); | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_finishstatus(persist); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_setstatuspgm(const char* message) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (lcd_status_message_level > 0) return; | 
			
		
	
		
			
				
					|  |  |  |  |   strncpy_P(lcd_status_message, message, LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_finishstatus(); | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_setstatuspgm(const char* message, uint8_t level) { | 
			
		
	
		
			
				
					|  |  |  |  |   if (level >= lcd_status_message_level) { | 
			
		
	
		
			
				
					|  |  |  |  |     strncpy_P(lcd_status_message, message, LCD_WIDTH); | 
			
		
	
		
			
				
					|  |  |  |  |     lcd_status_message_level = level; | 
			
		
	
		
			
				
					|  |  |  |  |     lcd_finishstatus(level > 0); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void lcd_setalertstatuspgm(const char* message) { | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_setstatuspgm(message); | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_status_message_level = 1; | 
			
		
	
		
			
				
					|  |  |  |  |   lcd_setstatuspgm(message, 1); | 
			
		
	
		
			
				
					|  |  |  |  |   #ifdef ULTIPANEL | 
			
		
	
		
			
				
					|  |  |  |  |     lcd_return_to_status(); | 
			
		
	
		
			
				
					|  |  |  |  |   #endif | 
			
		
	
	
		
			
				
					|  |  |  | 
 |