From 7325d7102ef119188b9ed0f6bbdb02ba90f00ca6 Mon Sep 17 00:00:00 2001 From: neildarlow Date: Mon, 3 Mar 2014 21:01:27 +0000 Subject: [PATCH] Activate LiquidTWI2 device detection and space-pad LCD status line. --- Marlin/Marlin_main.cpp | 2 ++ Marlin/ultralcd.cpp | 19 +++++++++++++++++++ Marlin/ultralcd.h | 2 ++ .../ultralcd_implementation_hitachi_HD44780.h | 12 ++++++++++-- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index d62447071e..20ee9ae7a6 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 3262f2d245..607b49eeb5 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 f4570f6a58..fce23bab03 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 932895b9bb..fd3374454d 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