1 #pragma once
2 
3 #include <chrono>
4 
5 struct ReadReturn
6 {
7     double value;
8     std::chrono::high_resolution_clock::time_point updated;
9 
10     bool operator==(const ReadReturn& rhs) const
11     {
12         return (this->value == rhs.value && this->updated == rhs.updated);
13     }
14 };
15 
16 /*
17  * A ReadInterface is a plug-in for the PluggableSensor and anyone implementing
18  * this basically is providing a way to read a sensor.
19  */
20 class ReadInterface
21 {
22   public:
23     ReadInterface()
24     {}
25 
26     virtual ~ReadInterface()
27     {}
28 
29     virtual ReadReturn read(void) = 0;
30 
31     virtual bool getFailed(void) const
32     {
33         return false;
34     }
35 };
36 
37 /*
38  * A WriteInterface is a plug-in for the PluggableSensor and anyone implementing
39  * this basically is providing a way to write a sensor.
40  */
41 class WriteInterface
42 {
43   public:
44     WriteInterface(int64_t min, int64_t max) : _min(min), _max(max)
45     {}
46 
47     virtual ~WriteInterface()
48     {}
49 
50     virtual void write(double value) = 0;
51 
52     /*
53      * All WriteInterfaces have min/max available in case they want to error
54      * check.
55      */
56     int64_t getMin(void)
57     {
58         return _min;
59     }
60     int64_t getMax(void)
61     {
62         return _max;
63     }
64 
65   private:
66     int64_t _min;
67     int64_t _max;
68 };
69