Increase timeout max to 2040 secs or 34 minutes
[clinton/Smoothieware.git] / src / modules / tools / temperaturecontrol / TemperatureControl.h
index 1c52f19..9df2969 100644 (file)
@@ -5,8 +5,8 @@
       you should have received a copy of the gnu general public license along with smoothie. if not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifndef temperaturecontrol_h
-#define temperaturecontrol_h
+#ifndef TEMPERATURECONTROL_H
+#define TEMPERATURECONTROL_H
 
 #include "Module.h"
 #include "Pwm.h"
@@ -21,7 +21,6 @@ class TemperatureControl : public Module {
 
         void on_module_loaded();
         void on_main_loop(void* argument);
-        void on_gcode_execute(void* argument);
         void on_gcode_received(void* argument);
         void on_second_tick(void* argument);
         void on_get_public_data(void* argument);
@@ -32,54 +31,34 @@ class TemperatureControl : public Module {
 
         float get_temperature();
 
+
         friend class PID_Autotuner;
 
     private:
         void load_config();
         uint32_t thermistor_read_tick(uint32_t dummy);
         void pid_process(float);
+        void setPIDp(float p);
+        void setPIDi(float i);
+        void setPIDd(float d);
 
         int pool_index;
 
         float target_temperature;
+        float max_temp, min_temp;
 
         float preset1;
         float preset2;
 
         TempSensor *sensor;
-
-        // PID runtime
         float i_max;
-
         int o;
-
         float last_reading;
-
         float readings_per_second;
-
-        uint16_t name_checksum;
-
         Pwm  heater_pin;
 
-        struct {
-            bool use_bangbang:1;
-            bool waiting:1;
-            bool min_temp_violated:1;
-            bool link_to_tool:1;
-            bool active:1;
-            bool readonly:1;
-        };
-
-        uint16_t set_m_code;
-        uint16_t set_and_wait_m_code;
-        uint16_t get_m_code;
-        struct pad_temperature public_data_return;
-
         std::string designator;
 
-        void setPIDp(float p);
-        void setPIDi(float i);
-        void setPIDd(float d);
 
         float hysteresis;
         float iTerm;
@@ -89,6 +68,31 @@ class TemperatureControl : public Module {
         float i_factor;
         float d_factor;
         float PIDdt;
+
+        enum RUNAWAY_TYPE {NOT_HEATING, HEATING_UP, COOLING_DOWN, TARGET_TEMPERATURE_REACHED};
+
+        // pack these to save memory
+        struct {
+            uint16_t name_checksum;
+            uint16_t set_m_code:10;
+            uint16_t set_and_wait_m_code:10;
+            uint16_t get_m_code:10;
+            RUNAWAY_TYPE runaway_state:2;
+            // Temperature runaway config options
+            uint8_t runaway_range:6; // max 63
+            uint16_t runaway_heating_timeout:8; // 2040 secs
+            uint16_t runaway_cooling_timeout:8; // 2040 secs
+            uint16_t runaway_timer:8;
+            uint8_t tick:3;
+            bool use_bangbang:1;
+            bool waiting:1;
+            bool temp_violated:1;
+            bool link_to_tool:1;
+            bool active:1;
+            bool readonly:1;
+            bool windup:1;
+            bool sensor_settings:1;
+        };
 };
 
 #endif