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