1 #pragma once 2 3 #include "ec/pid.hpp" 4 #include "fan.hpp" 5 6 #include <memory> 7 #include <vector> 8 9 class ZoneInterface; 10 11 /* 12 * Base class for PID controllers. Each PID that implements this needs to 13 * provide an input_proc, setpt_proc, and output_proc. 14 */ 15 class PIDController 16 { 17 public: 18 PIDController(const std::string& id, ZoneInterface* owner) : 19 _owner(owner), _setpoint(0), _id(id) 20 { 21 } 22 23 virtual ~PIDController() 24 { 25 } 26 27 virtual float input_proc(void) = 0; 28 virtual float setpt_proc(void) = 0; 29 virtual void output_proc(float value) = 0; 30 31 void pid_process(void); 32 33 std::string get_id(void) 34 { 35 return _id; 36 } 37 float get_setpoint(void) 38 { 39 return _setpoint; 40 } 41 void set_setpoint(float setpoint) 42 { 43 _setpoint = setpoint; 44 } 45 46 ec::pid_info_t* get_pid_info(void) 47 { 48 return &_pid_info; 49 } 50 51 protected: 52 ZoneInterface* _owner; 53 54 private: 55 // parameters 56 ec::pid_info_t _pid_info; 57 float _setpoint; 58 std::string _id; 59 }; 60