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