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