diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index d62447071..20ee9ae7a 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -1627,6 +1627,8 @@ void process_commands() lcd_update(); } }else{ + if (!lcd_detected()) + break; while(!lcd_clicked()){ manage_heater(); manage_inactivity(); diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 3262f2d24..607b49eeb 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -1148,6 +1148,11 @@ void lcd_setstatus(const char* message) if (lcd_status_message_level > 0) return; strncpy(lcd_status_message, message, LCD_WIDTH); + + size_t i = strlen(lcd_status_message); + memset(lcd_status_message + i, ' ', LCD_WIDTH - i); + lcd_status_message[LCD_WIDTH] = '\0'; + lcdDrawUpdate = 2; } void lcd_setstatuspgm(const char* message) @@ -1155,6 +1160,11 @@ void lcd_setstatuspgm(const char* message) if (lcd_status_message_level > 0) return; strncpy_P(lcd_status_message, message, LCD_WIDTH); + + size_t i = strlen(lcd_status_message); + memset(lcd_status_message + i, ' ', LCD_WIDTH - i); + lcd_status_message[LCD_WIDTH] = '\0'; + lcdDrawUpdate = 2; } void lcd_setalertstatuspgm(const char* message) @@ -1263,6 +1273,15 @@ void lcd_buttons_update() lastEncoderBits = enc; } +bool lcd_detected(void) +{ +#if (defined(LCD_I2C_TYPE_MCP23017) || defined(LCD_I2C_TYPE_MCP23008)) && defined(DETECT_DEVICE) + return lcd.LcdDetected() == 1; +#else + return true; +#endif +} + void lcd_buzz(long duration, uint16_t freq) { #ifdef LCD_USE_I2C_BUZZER diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index f4570f6a5..fce23bab0 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -11,6 +11,7 @@ void lcd_setstatuspgm(const char* message); void lcd_setalertstatuspgm(const char* message); void lcd_reset_alert_level(); + bool lcd_detected(void); #ifdef DOGLCD extern int lcd_contrast; @@ -92,6 +93,7 @@ FORCE_INLINE void lcd_buttons_update() {} FORCE_INLINE void lcd_reset_alert_level() {} FORCE_INLINE void lcd_buzz(long duration,uint16_t freq) {} + FORCE_INLINE bool lcd_detected(void) { return true; } #define LCD_MESSAGEPGM(x) #define LCD_ALERTMESSAGEPGM(x) diff --git a/Marlin/ultralcd_implementation_hitachi_HD44780.h b/Marlin/ultralcd_implementation_hitachi_HD44780.h index 932895b9b..fd3374454 100644 --- a/Marlin/ultralcd_implementation_hitachi_HD44780.h +++ b/Marlin/ultralcd_implementation_hitachi_HD44780.h @@ -166,13 +166,21 @@ extern volatile uint16_t buttons; //an extended version of the last checked but #include #include #define LCD_CLASS LiquidTWI2 - LCD_CLASS lcd(LCD_I2C_ADDRESS); + #if defined(DETECT_DEVICE) + LCD_CLASS lcd(LCD_I2C_ADDRESS, 1); + #else + LCD_CLASS lcd(LCD_I2C_ADDRESS); + #endif #elif defined(LCD_I2C_TYPE_MCP23008) #include #include #define LCD_CLASS LiquidTWI2 - LCD_CLASS lcd(LCD_I2C_ADDRESS); + #if defined(DETECT_DEVICE) + LCD_CLASS lcd(LCD_I2C_ADDRESS, 1); + #else + LCD_CLASS lcd(LCD_I2C_ADDRESS); + #endif #elif defined(LCD_I2C_TYPE_PCA8574) #include