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