diff options
Diffstat (limited to 'src/sdevent.hpp')
-rw-r--r-- | src/sdevent.hpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/sdevent.hpp b/src/sdevent.hpp new file mode 100644 index 0000000..be8b510 --- /dev/null +++ b/src/sdevent.hpp @@ -0,0 +1,82 @@ +#pragma once + +#include "sdevent/event.hpp" +#include "sdevent/timer.hpp" + +namespace phosphor +{ +namespace dbus +{ +namespace monitoring +{ + +/** @class SDEvent + * @brief SDEventType access delegate implementation for sdevent. + */ +class SDEvent +{ + protected: + /** @brief Share a single event loop amongst users. */ + static auto& getEvent() + { + static auto event = sdevent::event::newDefault(); + return event; + } + + public: + /** @brief Wrapper for sd_event_now. */ + static auto now() + { + return getEvent().now(); + } +}; + +/** @class SDEventTimer + * @brief TimerType access delegate implementation for sdevent. + */ +class SDEventTimer : public SDEvent +{ + public: + SDEventTimer() = delete; + SDEventTimer(const SDEventTimer&) = default; + SDEventTimer(SDEventTimer&&) = default; + SDEventTimer& operator=(const SDEventTimer&) = default; + SDEventTimer& operator=(SDEventTimer&&) = default; + ~SDEventTimer() = default; + + explicit SDEventTimer( + const sdevent::event::timer::Timer::Callback& callback) + : timer(getEvent(), callback) {} + + /** @brief Update a timer expiration. */ + void update( + const std::chrono::steady_clock::time_point& expires) + { + timer.setTime(expires); + } + + /** @brief Query timer state. */ + auto enabled() + { + return timer.enabled() != SD_EVENT_OFF; + } + + /** @brief Enable a timer. */ + void enable() + { + timer.enable(SD_EVENT_ONESHOT); + } + + /** @brief Disable a timer. */ + void disable() + { + timer.enable(SD_EVENT_OFF); + } + + private: + sdevent::event::timer::Timer timer; +}; + +} // namespace monitoring +} // namespace dbus +} // namespace phosphor |