DRracer 5 gadi atpakaļ
vecāks
revīzija
4d020d99f6
1 mainītis faili ar 22 papildinājumiem un 15 dzēšanām
  1. 22 15
      Firmware/temperature.cpp

+ 22 - 15
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);
 	}
 }