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