diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index dfaa04ca3..fcce9b199 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -8813,18 +8813,22 @@ void lcd_updatestatus(const char *message){ lcd_draw_update = 1; } -void lcd_setalertstatuspgm(const char* message) +void lcd_setalertstatuspgm(const char* message, uint8_t severity) { - lcd_setstatuspgm(message); - lcd_status_message_level = 1; - lcd_return_to_status(); + if (severity > lcd_status_message_level) { + lcd_setstatuspgm(message); + lcd_status_message_level = severity; + lcd_return_to_status(); + } } -void lcd_setalertstatus(const char* message) +void lcd_setalertstatus(const char* message, uint8_t severity) { - lcd_setstatus(message); - lcd_status_message_level = 1; - lcd_return_to_status(); + if (severity > lcd_status_message_level) { + lcd_setstatus(message); + lcd_status_message_level = severity; + lcd_return_to_status(); + } } void lcd_reset_alert_level() diff --git a/Firmware/ultralcd.h b/Firmware/ultralcd.h index 68b933d02..e3683576e 100755 --- a/Firmware/ultralcd.h +++ b/Firmware/ultralcd.h @@ -12,13 +12,20 @@ extern void menu_lcd_lcdupdate_func(void); void ultralcd_init(); void lcd_setstatus(const char* message); void lcd_setstatuspgm(const char* message); + +//! LCD status severities +#define LCD_STATUS_CRITICAL 2 //< Heater failure +#define LCD_STATUS_ALERT 1 //< Other hardware issue +#define LCD_STATUS_NONE 0 //< No alert message set + //! return to the main status screen and display the alert message //! Beware - it has sideeffects: //! - always returns the display to the main status screen //! - always makes lcd_reset (which is slow and causes flicker) -//! - does not update the message if there is already one (i.e. lcd_status_message_level > 0) -void lcd_setalertstatus(const char* message); -void lcd_setalertstatuspgm(const char* message); +//! - does not update the message if there is one with the same (or higher) severity present +void lcd_setalertstatus(const char* message, uint8_t severity = LCD_STATUS_ALERT); +void lcd_setalertstatuspgm(const char* message, uint8_t severity = LCD_STATUS_ALERT); + //! only update the alert message on the main status screen //! has no sideeffects, may be called multiple times void lcd_updatestatus(const char *message);