1 #pragma once 2 3 #include "interfaces.hpp" 4 #include "sensor.hpp" 5 6 #include <memory> 7 #include <string> 8 9 namespace pid_control 10 { 11 12 /* 13 * A Sensor that can use any reader or writer you provide. 14 */ 15 class PluggableSensor : public Sensor 16 { 17 public: PluggableSensor(const std::string & name,int64_t timeout,std::unique_ptr<ReadInterface> reader,std::unique_ptr<WriteInterface> writer)18 PluggableSensor(const std::string& name, int64_t timeout, 19 std::unique_ptr<ReadInterface> reader, 20 std::unique_ptr<WriteInterface> writer) : 21 Sensor(name, timeout), _reader(std::move(reader)), 22 _writer(std::move(writer)) 23 {} 24 25 ReadReturn read(void) override; 26 void write(double value) override; 27 void write(double value, bool force, int64_t* written) override; 28 bool getFailed(void) override; 29 30 private: 31 std::unique_ptr<ReadInterface> _reader; 32 std::unique_ptr<WriteInterface> _writer; 33 }; 34 35 } // namespace pid_control 36