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