Avoid redundant temperature error strings
Factor-out MIN/MAXTEMP [BED/AMB] out of the error message, which is now built at runtime instead. Introduce two missing ultralcd functions lcd_setalertstatus and lcd_updatestatus to handle regular strings. 246272 -> 246084 = 188 bytes saved
This commit is contained in:
parent
e1c79c342d
commit
a8ce9358e5
3 changed files with 63 additions and 25 deletions
|
@ -1451,13 +1451,42 @@ enum { LCDALERT_NONE = 0, LCDALERT_HEATERMINTEMP, LCDALERT_BEDMINTEMP, LCDALERT_
|
|||
//! to prevent flicker and improve speed
|
||||
uint8_t last_alert_sent_to_lcd = LCDALERT_NONE;
|
||||
|
||||
|
||||
//! update the current temperature error message
|
||||
//! @param type short error abbreviation (PROGMEM)
|
||||
//! @param func optional lcd update function (lcd_setalertstatus when first setting the error)
|
||||
void temp_update_messagepgm(const char* PROGMEM type, void (*func)(const char*) = lcd_updatestatus)
|
||||
{
|
||||
char msg[LCD_WIDTH];
|
||||
strcpy_P(msg, PSTR("Err: "));
|
||||
strcat_P(msg, type);
|
||||
(*func)(msg);
|
||||
}
|
||||
|
||||
//! signal a temperature error on both the lcd and serial
|
||||
//! @param type short error abbreviation (PROGMEM)
|
||||
//! @param e optional extruder index for hotend errors
|
||||
void temp_error_messagepgm(const char* PROGMEM type, uint8_t e = EXTRUDERS)
|
||||
{
|
||||
temp_update_messagepgm(type, lcd_setalertstatus);
|
||||
|
||||
SERIAL_ERROR_START;
|
||||
|
||||
if(e != EXTRUDERS) {
|
||||
SERIAL_ERROR((int)e);
|
||||
SERIAL_ERRORPGM(": ");
|
||||
}
|
||||
|
||||
SERIAL_ERRORPGM("Heaters switched off. ");
|
||||
SERIAL_ERRORRPGM(type);
|
||||
SERIAL_ERRORLNPGM(" triggered!");
|
||||
}
|
||||
|
||||
|
||||
void max_temp_error(uint8_t e) {
|
||||
disable_heater();
|
||||
if(IsStopped() == false) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLN((int)e);
|
||||
SERIAL_ERRORLNPGM(": Heaters switched off. MAXTEMP triggered !");
|
||||
LCD_ALERTMESSAGEPGM("Err: MAXTEMP");
|
||||
temp_error_messagepgm(PSTR("MAXTEMP"), e);
|
||||
}
|
||||
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
|
||||
Stop();
|
||||
|
@ -1482,16 +1511,13 @@ void min_temp_error(uint8_t e) {
|
|||
#endif
|
||||
disable_heater();
|
||||
//if (current_temperature_ambient < MINTEMP_MINAMBIENT) return;
|
||||
static const char err[] PROGMEM = "Err: MINTEMP";
|
||||
static const char err[] PROGMEM = "MINTEMP";
|
||||
if(IsStopped() == false) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLN((int)e);
|
||||
SERIAL_ERRORLNPGM(": Heaters switched off. MINTEMP triggered !");
|
||||
lcd_setalertstatuspgm(err);
|
||||
temp_error_messagepgm(err, e);
|
||||
last_alert_sent_to_lcd = LCDALERT_HEATERMINTEMP;
|
||||
} else if( last_alert_sent_to_lcd != LCDALERT_HEATERMINTEMP ){ // only update, if the lcd message is to be changed (i.e. not the same as last time)
|
||||
// we are already stopped due to some error, only update the status message without flickering
|
||||
lcd_updatestatuspgm(err);
|
||||
temp_update_messagepgm(err);
|
||||
last_alert_sent_to_lcd = LCDALERT_HEATERMINTEMP;
|
||||
}
|
||||
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
|
||||
|
@ -1508,9 +1534,7 @@ void min_temp_error(uint8_t e) {
|
|||
void bed_max_temp_error(void) {
|
||||
disable_heater();
|
||||
if(IsStopped() == false) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Heaters switched off. MAXTEMP BED triggered !");
|
||||
LCD_ALERTMESSAGEPGM("Err: MAXTEMP BED");
|
||||
temp_error_messagepgm(PSTR("MAXTEMP BED"));
|
||||
}
|
||||
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
|
||||
Stop();
|
||||
|
@ -1524,13 +1548,11 @@ void bed_min_temp_error(void) {
|
|||
disable_heater();
|
||||
static const char err[] PROGMEM = "MINTEMP BED";
|
||||
if(IsStopped() == false) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Heaters switched off. MINTEMP BED triggered !");
|
||||
lcd_setalertstatuspgm(err);
|
||||
temp_error_messagepgm(err);
|
||||
last_alert_sent_to_lcd = LCDALERT_BEDMINTEMP;
|
||||
} else if( last_alert_sent_to_lcd != LCDALERT_BEDMINTEMP ){ // only update, if the lcd message is to be changed (i.e. not the same as last time)
|
||||
// we are already stopped due to some error, only update the status message without flickering
|
||||
lcd_updatestatuspgm(err);
|
||||
temp_update_messagepgm(err);
|
||||
last_alert_sent_to_lcd = LCDALERT_BEDMINTEMP;
|
||||
}
|
||||
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
|
||||
|
@ -1543,9 +1565,7 @@ void bed_min_temp_error(void) {
|
|||
void ambient_max_temp_error(void) {
|
||||
disable_heater();
|
||||
if(IsStopped() == false) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Heaters switched off. MAXTEMP AMBIENT triggered !");
|
||||
LCD_ALERTMESSAGEPGM("Err: MAXTEMP AMBIENT");
|
||||
temp_error_messagepgm(PSTR("MAXTEMP AMB"));
|
||||
}
|
||||
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
|
||||
Stop();
|
||||
|
@ -1558,9 +1578,7 @@ void ambient_min_temp_error(void) {
|
|||
#endif
|
||||
disable_heater();
|
||||
if(IsStopped() == false) {
|
||||
SERIAL_ERROR_START;
|
||||
SERIAL_ERRORLNPGM("Heaters switched off. MINTEMP AMBIENT triggered !");
|
||||
LCD_ALERTMESSAGEPGM("Err: MINTEMP AMBIENT");
|
||||
temp_error_messagepgm(PSTR("MINTEMP AMB"));
|
||||
}
|
||||
#ifndef BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE
|
||||
Stop();
|
||||
|
|
|
@ -8951,13 +8951,14 @@ void lcd_finishstatus() {
|
|||
lcd_draw_update = 2;
|
||||
|
||||
}
|
||||
|
||||
void lcd_setstatus(const char* message)
|
||||
{
|
||||
if (lcd_status_message_level > 0)
|
||||
return;
|
||||
strncpy(lcd_status_message, message, LCD_WIDTH);
|
||||
lcd_finishstatus();
|
||||
lcd_updatestatus(message);
|
||||
}
|
||||
|
||||
void lcd_updatestatuspgm(const char *message){
|
||||
strncpy_P(lcd_status_message, message, LCD_WIDTH);
|
||||
lcd_status_message[LCD_WIDTH] = 0;
|
||||
|
@ -8972,12 +8973,29 @@ void lcd_setstatuspgm(const char* message)
|
|||
return;
|
||||
lcd_updatestatuspgm(message);
|
||||
}
|
||||
|
||||
void lcd_updatestatus(const char *message){
|
||||
strncpy(lcd_status_message, message, LCD_WIDTH);
|
||||
lcd_status_message[LCD_WIDTH] = 0;
|
||||
lcd_finishstatus();
|
||||
// hack lcd_draw_update to 1, i.e. without clear
|
||||
lcd_draw_update = 1;
|
||||
}
|
||||
|
||||
void lcd_setalertstatuspgm(const char* message)
|
||||
{
|
||||
lcd_setstatuspgm(message);
|
||||
lcd_status_message_level = 1;
|
||||
lcd_return_to_status();
|
||||
}
|
||||
|
||||
void lcd_setalertstatus(const char* message)
|
||||
{
|
||||
lcd_setstatus(message);
|
||||
lcd_status_message_level = 1;
|
||||
lcd_return_to_status();
|
||||
}
|
||||
|
||||
void lcd_reset_alert_level()
|
||||
{
|
||||
lcd_status_message_level = 0;
|
||||
|
|
|
@ -23,9 +23,11 @@ void lcd_setstatuspgm(const char* message);
|
|||
//! - 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);
|
||||
//! only update the alert message on the main status screen
|
||||
//! has no sideeffects, may be called multiple times
|
||||
void lcd_updatestatus(const char *message);
|
||||
void lcd_updatestatuspgm(const char *message);
|
||||
|
||||
void lcd_reset_alert_level();
|
||||
|
|
Loading…
Add table
Reference in a new issue