1 #pragma once 2 3 #include "ec/pid.hpp" 4 #include "fan.hpp" 5 #include "pidcontroller.hpp" 6 7 #include <memory> 8 #include <string> 9 #include <vector> 10 11 /* 12 * A FanController is a PID controller that reads a number of fans and given 13 * the output then tries to set them to the goal values set by the thermal 14 * controllers. 15 */ 16 class FanController : public PIDController 17 { 18 public: 19 static std::unique_ptr<PIDController> 20 createFanPid(ZoneInterface* owner, const std::string& id, 21 const std::vector<std::string>& inputs, 22 const ec::pidinfo& initial); 23 24 FanController(const std::string& id, const std::vector<std::string>& inputs, 25 ZoneInterface* owner) : 26 PIDController(id, owner), 27 _inputs(inputs), _direction(FanSpeedDirection::NEUTRAL) 28 {} 29 30 double inputProc(void) override; 31 double setptProc(void) override; 32 void outputProc(double value) override; 33 34 FanSpeedDirection getFanDirection(void) const 35 { 36 return _direction; 37 } 38 39 void setFanDirection(FanSpeedDirection direction) 40 { 41 _direction = direction; 42 }; 43 44 private: 45 std::vector<std::string> _inputs; 46 FanSpeedDirection _direction; 47 }; 48