1 #pragma once 2 3 #include "interfaces.hpp" 4 5 #include <string> 6 7 namespace pid_control 8 { 9 10 /** 11 * Abstract base class for all sensors. 12 */ 13 class Sensor 14 { 15 public: 16 /** 17 * Given a sensor's type, return the default timeout value. 18 * A timeout of 0 means there isn't a timeout for this sensor. 19 * By default a fan sensor isn't checked for a timeout, whereas 20 * any of sensor is meant to be sampled once per second. By default. 21 * 22 * @param[in] type - the sensor type (e.g. fan) 23 * @return the default timeout for that type (in seconds). 24 */ 25 static int64_t getDefaultTimeout(const std::string& type) 26 { 27 return (type == "fan") ? 0 : 2; 28 } 29 30 Sensor(const std::string& name, int64_t timeout) : 31 _name(name), _timeout(timeout) 32 {} 33 34 virtual ~Sensor() 35 {} 36 37 virtual ReadReturn read(void) = 0; 38 virtual void write(double value) = 0; 39 40 virtual void write(double value, bool force, int64_t* written) 41 { 42 (void)force; 43 (void)written; 44 return write(value); 45 } 46 47 virtual bool getFailed(void) 48 { 49 return false; 50 }; 51 52 std::string getName(void) const 53 { 54 return _name; 55 } 56 57 /* Returns the configurable timeout period 58 * for this sensor in seconds (undecorated). 59 */ 60 int64_t getTimeout(void) const 61 { 62 return _timeout; 63 } 64 65 private: 66 std::string _name; 67 int64_t _timeout; 68 }; 69 70 } // namespace pid_control 71