blob: 4aa811645dc8c6dab3c3341f95eef9585f7f19ea [file] [log] [blame]
James Feist22c257a2018-08-31 14:07:12 -07001#pragma once
2
3#include "controller.hpp"
4#include "ec/stepwise.hpp"
5#include "fan.hpp"
6
James Feist3dfaafd2018-09-20 15:46:58 -07007#include <limits>
James Feist22c257a2018-08-31 14:07:12 -07008#include <memory>
9#include <vector>
10
11class ZoneInterface;
12
13class StepwiseController : public Controller
14{
15 public:
16 static std::unique_ptr<Controller>
Patrick Venture563a3562018-10-30 09:31:26 -070017 createStepwiseController(ZoneInterface* owner, const std::string& id,
James Feist22c257a2018-08-31 14:07:12 -070018 const std::vector<std::string>& inputs,
19 const ec::StepwiseInfo& initial);
20
21 StepwiseController(const std::string& id,
22 const std::vector<std::string>& inputs,
23 ZoneInterface* owner) :
24 Controller(),
25 _owner(owner), _id(id), _inputs(inputs)
26 {
27 }
28
Patrick Venture5f59c0f2018-11-11 12:55:14 -080029 double inputProc(void) override;
James Feist22c257a2018-08-31 14:07:12 -070030
Patrick Venture5f59c0f2018-11-11 12:55:14 -080031 void outputProc(double value) override;
James Feist22c257a2018-08-31 14:07:12 -070032
33 void process(void) override;
34
Patrick Venturea57477f2018-10-30 13:28:14 -070035 std::string getID(void) override
James Feist22c257a2018-08-31 14:07:12 -070036 {
37 return _id;
38 }
39
40 ec::StepwiseInfo& get_stepwise_info(void)
41 {
42 return _stepwise_info;
43 }
44
45 protected:
46 ZoneInterface* _owner;
47
48 private:
49 // parameters
50 ec::StepwiseInfo _stepwise_info;
51 std::string _id;
52 std::vector<std::string> _inputs;
Patrick Venture5f59c0f2018-11-11 12:55:14 -080053 double lastInput = std::numeric_limits<double>::quiet_NaN();
54 double lastOutput = std::numeric_limits<double>::quiet_NaN();
James Feist22c257a2018-08-31 14:07:12 -070055};