Code cleanup

This commit is contained in:
DRracer 2019-05-27 14:57:02 +02:00
parent 9cb0bc7bcf
commit 4d020d99f6

View file

@ -2043,10 +2043,13 @@ void check_max_temp()
//! number of repeating the same state with consecutive step() calls //! number of repeating the same state with consecutive step() calls
//! used to slow down text switching //! used to slow down text switching
struct alert_automaton_mintemp { struct alert_automaton_mintemp {
private:
enum { ALERT_AUTOMATON_SPEED_DIV = 5 }; enum { ALERT_AUTOMATON_SPEED_DIV = 5 };
uint8_t state, repeat = ALERT_AUTOMATON_SPEED_DIV; enum class STATES : uint8_t { INIT = 0, TEMP_ABOVE_MINTEMP, SHOW_PLEASE_RESTART, SHOW_MINTEMP };
STATES state = STATES::INIT;
uint8_t repeat = ALERT_AUTOMATON_SPEED_DIV;
void substep(uint8_t next_state){ void substep(STATES next_state){
if( repeat == 0 ){ if( repeat == 0 ){
state = next_state; // advance to the next state state = next_state; // advance to the next state
repeat = ALERT_AUTOMATON_SPEED_DIV; // and prepare repeating for it too repeat = ALERT_AUTOMATON_SPEED_DIV; // and prepare repeating for it too
@ -2054,38 +2057,41 @@ struct alert_automaton_mintemp {
--repeat; --repeat;
} }
} }
public:
//! brief state automaton step routine
//! @param current_temp current hotend/bed temperature (for computing simple hysteresis)
//! @param mintemp minimal temperature including hysteresis to check current_temp against
void step(float current_temp, float mintemp){ void step(float current_temp, float mintemp){
static const char m2[] PROGMEM = "MINTEMP fixed"; static const char m2[] PROGMEM = "MINTEMP fixed";
static const char m1[] PROGMEM = "Please restart"; static const char m1[] PROGMEM = "Please restart";
switch(state){ switch(state){
case 0: // initial state - check hysteresis case STATES::INIT: // initial state - check hysteresis
if( current_temp > mintemp ){ if( current_temp > mintemp ){
state = 1; state = STATES::TEMP_ABOVE_MINTEMP;
} }
// otherwise keep the Err MINTEMP alert message on the display, // otherwise keep the Err MINTEMP alert message on the display,
// i.e. do not transfer to state 1 // i.e. do not transfer to state 1
break; break;
case 1: // the temperature has risen above the hysteresis check case STATES::TEMP_ABOVE_MINTEMP: // the temperature has risen above the hysteresis check
lcd_setalertstatuspgm(m2); lcd_setalertstatuspgm(m2);
substep(3); substep(STATES::SHOW_MINTEMP);
last_alert_sent_to_lcd = LCDALERT_MINTEMPFIXED; last_alert_sent_to_lcd = LCDALERT_MINTEMPFIXED;
break; break;
case 2: // displaying "Please restart" case STATES::SHOW_PLEASE_RESTART: // displaying "Please restart"
lcd_updatestatuspgm(m1); lcd_updatestatuspgm(m1);
substep(3); substep(STATES::SHOW_MINTEMP);
last_alert_sent_to_lcd = LCDALERT_PLEASERESTART; last_alert_sent_to_lcd = LCDALERT_PLEASERESTART;
break; break;
case 3: // displaying "MINTEMP fixed" case STATES::SHOW_MINTEMP: // displaying "MINTEMP fixed"
lcd_updatestatuspgm(m2); lcd_updatestatuspgm(m2);
substep(2); substep(STATES::SHOW_PLEASE_RESTART);
last_alert_sent_to_lcd = LCDALERT_MINTEMPFIXED; last_alert_sent_to_lcd = LCDALERT_MINTEMPFIXED;
break; break;
} }
} }
}; };
static alert_automaton_mintemp aam[2]; static alert_automaton_mintemp alert_automaton_hotend, alert_automaton_bed;
void check_min_temp_heater0() void check_min_temp_heater0()
{ {
@ -2102,9 +2108,10 @@ void check_min_temp_heater0()
// which is a safer variant than just continuing printing // which is a safer variant than just continuing printing
// The automaton also checks for hysteresis - the temperature must have reached a few degrees above the MINTEMP, before // The automaton also checks for hysteresis - the temperature must have reached a few degrees above the MINTEMP, before
// we shall signalize, that MINTEMP has been fixed // we shall signalize, that MINTEMP has been fixed
// Code notice: normally the aam instance would have been placed here as static alert_automaton_mintemp aam, but // Code notice: normally the alert_automaton instance would have been placed here
// as static alert_automaton_mintemp alert_automaton_hotend, but
// due to stupid compiler that takes 16 more bytes. // due to stupid compiler that takes 16 more bytes.
aam[0].step(current_temperature[0], minttemp[0] + TEMP_HYSTERESIS); alert_automaton_hotend.step(current_temperature[0], minttemp[0] + TEMP_HYSTERESIS);
} }
} }
@ -2120,7 +2127,7 @@ void check_min_temp_bed()
} else if( menu_is_serious_error(SERIOUS_ERR_MINTEMP_BED) ){ } else if( menu_is_serious_error(SERIOUS_ERR_MINTEMP_BED) ){
// no recovery, just force the user to restart the printer // no recovery, just force the user to restart the printer
// which is a safer variant than just continuing printing // which is a safer variant than just continuing printing
aam[1].step(current_temperature_bed, BED_MINTEMP + TEMP_HYSTERESIS); alert_automaton_bed.step(current_temperature_bed, BED_MINTEMP + TEMP_HYSTERESIS);
} }
} }