#pragma once #include "interfaces/sensor.hpp" #include "interfaces/sensor_listener.hpp" #include "types/milliseconds.hpp" #include "utils/unique_call.hpp" #include #include #include #include class Sensor final : public interfaces::Sensor, public std::enable_shared_from_this { using ValueVariant = std::variant; public: Sensor(interfaces::Sensor::Id sensorId, boost::asio::io_context& ioc, const std::shared_ptr& bus); Sensor(const Sensor&) = delete; Sensor& operator=(const Sensor&) = delete; static Id makeId(std::string_view service, std::string_view path); Id id() const override; void registerForUpdates( const std::weak_ptr& weakListener) override; void unregisterFromUpdates( const std::weak_ptr& weakListener) override; private: static std::optional readValue(const ValueVariant& v); static void signalProc(const std::weak_ptr& weakSelf, sdbusplus::message::message&); void async_read(); void async_read(std::shared_ptr); void makeSignalMonitor(); void updateValue(double); interfaces::Sensor::Id sensorId; boost::asio::io_context& ioc; std::shared_ptr bus; Milliseconds timerInterval = Milliseconds(0); std::optional timer; utils::UniqueCall uniqueCall; std::vector> listeners; uint64_t timestamp = 0; std::optional value; std::unique_ptr signalMonitor; };