xref: /openbmc/phosphor-pid-control/pid/fancontroller.hpp (revision da06428574f100bd84e7fc4f8f44d38ec05f8429)
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              PIDZone* 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                        PIDZone* 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