1 #pragma once 2 3 #include <memory> 4 #include <vector> 5 6 #include "fan.hpp" 7 #include "ec/pid.hpp" 8 9 class PIDZone; 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, std::shared_ptr<PIDZone> owner) 19 : _owner(owner), 20 _id(id) 21 { } 22 23 virtual ~PIDController() { } 24 25 virtual float input_proc(void) = 0; 26 virtual float setpt_proc(void) = 0; 27 virtual void output_proc(float value) = 0; 28 29 void pid_process(void); 30 31 std::string get_id(void) 32 { 33 return _id; 34 } 35 float get_setpoint(void) 36 { 37 return _setpoint; 38 } 39 void set_setpoint(float setpoint) 40 { 41 _setpoint = setpoint; 42 } 43 44 ec::pid_info_t* get_pid_info(void) 45 { 46 return &_pid_info; 47 } 48 49 protected: 50 std::shared_ptr<PIDZone> _owner; 51 52 private: 53 // parameters 54 ec::pid_info_t _pid_info; 55 float _setpoint; 56 std::string _id; 57 }; 58 59