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 
27     virtual ~ReadInterface()
28     {
29     }
30 
31     virtual ReadReturn read(void) = 0;
32 
33     virtual bool getFailed(void) const
34     {
35         return false;
36     }
37 };
38 
39 /*
40  * A WriteInterface is a plug-in for the PluggableSensor and anyone implementing
41  * this basically is providing a way to write a sensor.
42  */
43 class WriteInterface
44 {
45   public:
46     WriteInterface(int64_t min, int64_t max) : _min(min), _max(max)
47     {
48     }
49 
50     virtual ~WriteInterface()
51     {
52     }
53 
54     virtual void write(double value) = 0;
55 
56     /*
57      * All WriteInterfaces have min/max available in case they want to error
58      * check.
59      */
60     int64_t getMin(void)
61     {
62         return _min;
63     }
64     int64_t getMax(void)
65     {
66         return _max;
67     }
68 
69   private:
70     int64_t _min;
71     int64_t _max;
72 };
73