From 4d020d99f6eefecba90afbc8dec867ce25868c30 Mon Sep 17 00:00:00 2001 From: DRracer Date: Mon, 27 May 2019 14:57:02 +0200 Subject: [PATCH] Code cleanup --- Firmware/temperature.cpp | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 5a81c630..20ba8871 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -2043,10 +2043,13 @@ void check_max_temp() //! number of repeating the same state with consecutive step() calls //! used to slow down text switching struct alert_automaton_mintemp { +private: 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 ){ state = next_state; // advance to the next state repeat = ALERT_AUTOMATON_SPEED_DIV; // and prepare repeating for it too @@ -2054,38 +2057,41 @@ struct alert_automaton_mintemp { --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){ static const char m2[] PROGMEM = "MINTEMP fixed"; static const char m1[] PROGMEM = "Please restart"; switch(state){ - case 0: // initial state - check hysteresis + case STATES::INIT: // initial state - check hysteresis if( current_temp > mintemp ){ - state = 1; + state = STATES::TEMP_ABOVE_MINTEMP; } // otherwise keep the Err MINTEMP alert message on the display, // i.e. do not transfer to state 1 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); - substep(3); + substep(STATES::SHOW_MINTEMP); last_alert_sent_to_lcd = LCDALERT_MINTEMPFIXED; break; - case 2: // displaying "Please restart" + case STATES::SHOW_PLEASE_RESTART: // displaying "Please restart" lcd_updatestatuspgm(m1); - substep(3); + substep(STATES::SHOW_MINTEMP); last_alert_sent_to_lcd = LCDALERT_PLEASERESTART; break; - case 3: // displaying "MINTEMP fixed" + case STATES::SHOW_MINTEMP: // displaying "MINTEMP fixed" lcd_updatestatuspgm(m2); - substep(2); + substep(STATES::SHOW_PLEASE_RESTART); last_alert_sent_to_lcd = LCDALERT_MINTEMPFIXED; break; } } }; -static alert_automaton_mintemp aam[2]; +static alert_automaton_mintemp alert_automaton_hotend, alert_automaton_bed; void check_min_temp_heater0() { @@ -2102,9 +2108,10 @@ void check_min_temp_heater0() // 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 // 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. - 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) ){ // no recovery, just force the user to restart the printer // 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); } }