1 #pragma once 2 3 #include <chrono> 4 5 namespace pid_control 6 { 7 8 struct ReadReturn 9 { 10 double value = std::numeric_limits<double>::quiet_NaN(); 11 std::chrono::high_resolution_clock::time_point updated; 12 double unscaled = value; 13 operator ==pid_control::ReadReturn14 bool operator==(const ReadReturn& rhs) const 15 { 16 return ((this->value == rhs.value) && (this->updated == rhs.updated) && 17 (this->unscaled == rhs.unscaled)); 18 } 19 }; 20 21 struct ValueCacheEntry 22 { 23 // This is normalized to (0.0, 1.0) range, using configured min and max 24 double scaled; 25 26 // This is the raw value, as recieved from the input/output sensors 27 double unscaled; 28 }; 29 30 /* 31 * A ReadInterface is a plug-in for the PluggableSensor and anyone implementing 32 * this basically is providing a way to read a sensor. 33 */ 34 class ReadInterface 35 { 36 public: ReadInterface()37 ReadInterface() {} 38 ~ReadInterface()39 virtual ~ReadInterface() {} 40 41 virtual ReadReturn read(void) = 0; 42 getFailed(void) const43 virtual bool getFailed(void) const 44 { 45 return false; 46 } 47 }; 48 49 /* 50 * A WriteInterface is a plug-in for the PluggableSensor and anyone implementing 51 * this basically is providing a way to write a sensor. 52 */ 53 class WriteInterface 54 { 55 public: WriteInterface(int64_t min,int64_t max)56 WriteInterface(int64_t min, int64_t max) : _min(min), _max(max) {} 57 ~WriteInterface()58 virtual ~WriteInterface() {} 59 60 virtual void write(double value) = 0; 61 62 /* 63 * A wrapper around write(), with additional parameters. 64 * force = true to perform redundant write, even if raw value unchanged. 65 * written = non-null to be filled in with the actual raw value written. 66 */ write(double value,bool force,int64_t * written)67 virtual void write(double value, bool force, int64_t* written) 68 { 69 (void)force; 70 (void)written; 71 return write(value); 72 } 73 74 /* 75 * All WriteInterfaces have min/max available in case they want to error 76 * check. 77 */ getMin(void)78 int64_t getMin(void) 79 { 80 return _min; 81 } getMax(void)82 int64_t getMax(void) 83 { 84 return _max; 85 } 86 87 private: 88 int64_t _min; 89 int64_t _max; 90 }; 91 92 } // namespace pid_control 93