| #pragma once |
| |
| #include "controller.hpp" |
| #include "ec/pid.hpp" |
| #include "fan.hpp" |
| |
| #include <memory> |
| #include <vector> |
| |
| class ZoneInterface; |
| |
| /* |
| * Base class for PID controllers. Each PID that implements this needs to |
| * provide an input_proc, setpt_proc, and output_proc. |
| */ |
| class PIDController : public Controller |
| { |
| public: |
| PIDController(const std::string& id, ZoneInterface* owner) : |
| Controller(), _owner(owner), _setpoint(0), _id(id) |
| { |
| } |
| |
| virtual ~PIDController() |
| { |
| } |
| |
| virtual float input_proc(void) = 0; |
| virtual float setpt_proc(void) = 0; |
| virtual void output_proc(float value) = 0; |
| |
| void process(void); |
| |
| std::string get_id(void) |
| { |
| return _id; |
| } |
| float get_setpoint(void) |
| { |
| return _setpoint; |
| } |
| void set_setpoint(float setpoint) |
| { |
| _setpoint = setpoint; |
| } |
| |
| ec::pid_info_t* get_pid_info(void) |
| { |
| return &_pid_info; |
| } |
| |
| protected: |
| ZoneInterface* _owner; |
| |
| private: |
| // parameters |
| ec::pid_info_t _pid_info; |
| float _setpoint; |
| std::string _id; |
| }; |