#pragma once #include #include #include #include "controller.hpp" #include "fan.hpp" #include "ec/pid.hpp" /* * A FanController is a PID controller that reads a number of fans and given * the output then tries to set them to the goal values set by the thermal * controllers. */ class FanController : public PIDController { public: static std::unique_ptr CreateFanPid( std::shared_ptr owner, const std::string& id, std::vector& inputs, ec::pidinfo initial); FanController(const std::string& id, std::vector& inputs, std::shared_ptr owner) : PIDController(id, owner), _inputs(inputs), _direction(FanSpeedDirection::NEUTRAL) { } float input_proc(void) override; float setpt_proc(void) override; void output_proc(float value) override; void setFanDirection(FanSpeedDirection direction) { _direction = direction; }; private: std::vector _inputs; FanSpeedDirection _direction; };