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