| 
					
				 | 
			
			
				@@ -344,7 +344,7 @@ bool lcd_oldcardstatus; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif //ULTIPANEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 menuFunc_t currentMenu = lcd_status_screen; /* function pointer to the currently active menu */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-uint32_t lcd_next_update_millis; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ShortTimer lcd_next_update_millis; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 uint8_t lcd_status_update_delay; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bool ignore_click = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 bool wait_for_unclick; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -6500,7 +6500,7 @@ bool lcd_selftest() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	lcd_reset_alert_level(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	enquecommand_P(PSTR("M84")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	lcd_implementation_clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	lcd_next_update_millis = millis() + LCD_UPDATE_INTERVAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	lcd_next_update_millis.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (_result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7209,7 +7209,7 @@ static bool lcd_selftest_fan_dialog(int _fan) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static int lcd_selftest_screen(int _step, int _progress, int _progress_scale, bool _clear, int _delay) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	lcd_next_update_millis = millis() + (LCD_UPDATE_INTERVAL * 10000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	lcd_next_update_millis.stop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	int _step_block = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	const char *_indicator = (_progress > _progress_scale) ? "-" : "|"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7410,6 +7410,7 @@ static void menu_action_setting_edit_callback_bool(const char* pstr, bool* ptr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void lcd_init() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   lcd_implementation_init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  lcd_next_update_millis.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef NEWPANEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SET_INPUT(BTN_EN1); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7479,8 +7480,6 @@ void lcd_update_enable(bool enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // Enabling the normal LCD update procedure. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // Reset the timeout interval. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             lcd_timeoutToStatus = millis() + LCD_TIMEOUT_TO_STATUS; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // Force the keypad update now. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            lcd_next_update_millis = millis() - 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // Full update. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             lcd_implementation_clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       #if defined(LCD_PROGRESS_BAR) && defined(SDSUPPORT) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7491,14 +7490,15 @@ void lcd_update_enable(bool enabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 lcd_set_custom_characters_arrows(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            lcd_update(2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // Force the keypad update now. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            lcd_update(2,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // Clear the LCD always, or let it to the caller? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void lcd_update(uint8_t lcdDrawUpdateOverride) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void lcd_update(uint8_t lcdDrawUpdateOverride, bool forceRedraw) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (lcdDrawUpdate < lcdDrawUpdateOverride) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7513,6 +7513,7 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   lcd_buttons_update(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #if (SDCARDDETECT > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if ((IS_SD_INSERTED != lcd_oldcardstatus && lcd_detected())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7538,8 +7539,9 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif//CARDINSERTED 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (lcd_next_update_millis < millis()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (lcd_next_update_millis.expired(LCD_UPDATE_INTERVAL) || forceRedraw) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      lcd_next_update_millis.start(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef DEBUG_BLINK_ACTIVE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static bool active_led = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	active_led = !active_led; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7547,6 +7549,7 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	digitalWrite(LED_PIN, active_led?HIGH:LOW); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif //DEBUG_BLINK_ACTIVE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef ULTIPANEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef REPRAPWORLD_KEYPAD 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  if (REPRAPWORLD_KEYPAD_MOVE_Z_UP) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7607,7 +7610,6 @@ void lcd_update(uint8_t lcdDrawUpdateOverride) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif//ULTIPANEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  if (lcdDrawUpdate == 2) lcd_implementation_clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  if (lcdDrawUpdate) lcdDrawUpdate--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  lcd_next_update_millis = millis() + LCD_UPDATE_INTERVAL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (!SdFatUtil::test_stack_integrity()) stack_error(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #ifdef DEBUG_STEPPER_TIMER_MISSED 
			 |