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