blob: a6b7816ee5783a46237706bb46717018675b9638 [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>
17 CreateStepwiseController(ZoneInterface* owner, const std::string& id,
18 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
29 float input_proc(void) override;
30
31 void output_proc(float value) override;
32
33 void process(void) override;
34
35 std::string get_id(void)
36 {
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;
James Feist3dfaafd2018-09-20 15:46:58 -070053 float lastInput = std::numeric_limits<float>::quiet_NaN();
54 float lastOutput = std::numeric_limits<float>::quiet_NaN();
James Feist22c257a2018-08-31 14:07:12 -070055};