1d8012181SPatrick Venture #pragma once
2d8012181SPatrick Venture 
3da4a5dd1SPatrick Venture #include "ec/pid.hpp"
4da4a5dd1SPatrick Venture #include "fan.hpp"
5da4a5dd1SPatrick Venture 
622c257abSJames Feist #include <string>
7d8012181SPatrick Venture 
8*a076487aSPatrick Venture namespace pid_control
9*a076487aSPatrick Venture {
10*a076487aSPatrick Venture 
11d8012181SPatrick Venture /*
1222c257abSJames Feist  * Base class for controllers.  Each controller that implements this needs to
13563a356fSPatrick Venture  * provide an inputProc, process, and outputProc.
14d8012181SPatrick Venture  */
1522c257abSJames Feist class ZoneInterface;
16d8012181SPatrick Venture 
1722c257abSJames Feist struct Controller
18da4a5dd1SPatrick Venture {
1922c257abSJames Feist     virtual ~Controller() = default;
20d8012181SPatrick Venture 
215f59c0fdSPatrick Venture     virtual double inputProc(void) = 0;
2222c257abSJames Feist 
235f59c0fdSPatrick Venture     virtual void outputProc(double value) = 0;
24d8012181SPatrick Venture 
2522c257abSJames Feist     virtual void process(void) = 0;
26d8012181SPatrick Venture 
27563a356fSPatrick Venture     virtual std::string getID(void) = 0;
28d8012181SPatrick Venture };
29*a076487aSPatrick Venture 
30*a076487aSPatrick Venture } // namespace pid_control
31