| #pragma once |
| |
| #include "sdevent/event.hpp" |
| #include "sdevent/timer.hpp" |
| |
| struct Loop; |
| |
| 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(); |
| } |
| |
| friend Loop; |
| }; |
| |
| /** @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 |