xref: /openbmc/phosphor-pid-control/pid/controller.hpp (revision da4a5dd133b88ebfeb69e89d05b381f81ba70e50)
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