171230efdSCarol Wang #pragma once 271230efdSCarol Wang 371230efdSCarol Wang #include <sdbusplus/bus.hpp> 471230efdSCarol Wang #include <phosphor-logging/log.hpp> 5*6a5db3d3SCarol Wang #include <sdeventplus/event.hpp> 6*6a5db3d3SCarol Wang #include <sdeventplus/utility/timer.hpp> 771230efdSCarol Wang #include <xyz/openbmc_project/State/ScheduledHostTransition/server.hpp> 8*6a5db3d3SCarol Wang #include "config.h" 971230efdSCarol Wang 104ca6f3f4SCarol Wang class TestScheduledHostTransition; 114ca6f3f4SCarol Wang 1271230efdSCarol Wang namespace phosphor 1371230efdSCarol Wang { 1471230efdSCarol Wang namespace state 1571230efdSCarol Wang { 1671230efdSCarol Wang namespace manager 1771230efdSCarol Wang { 1871230efdSCarol Wang 19*6a5db3d3SCarol Wang using Transition = 20*6a5db3d3SCarol Wang sdbusplus::xyz::openbmc_project::State::server::Host::Transition; 2171230efdSCarol Wang using ScheduledHostTransitionInherit = sdbusplus::server::object::object< 2271230efdSCarol Wang sdbusplus::xyz::openbmc_project::State::server::ScheduledHostTransition>; 2371230efdSCarol Wang 2471230efdSCarol Wang /** @class ScheduledHostTransition 2571230efdSCarol Wang * @brief Scheduled host transition implementation. 2671230efdSCarol Wang * @details A concrete implementation for 2771230efdSCarol Wang * xyz.openbmc_project.State.ScheduledHostTransition 2871230efdSCarol Wang */ 2971230efdSCarol Wang class ScheduledHostTransition : public ScheduledHostTransitionInherit 3071230efdSCarol Wang { 3171230efdSCarol Wang public: 32*6a5db3d3SCarol Wang ScheduledHostTransition(sdbusplus::bus::bus& bus, const char* objPath, 33*6a5db3d3SCarol Wang const sdeventplus::Event& event) : 34*6a5db3d3SCarol Wang ScheduledHostTransitionInherit(bus, objPath), 35*6a5db3d3SCarol Wang bus(bus), 36*6a5db3d3SCarol Wang timer(event, std::bind(&ScheduledHostTransition::callback, this)) 3771230efdSCarol Wang { 3871230efdSCarol Wang } 3971230efdSCarol Wang 4071230efdSCarol Wang ~ScheduledHostTransition() = default; 4171230efdSCarol Wang 4271230efdSCarol Wang /** 4371230efdSCarol Wang * @brief Handle with scheduled time 4471230efdSCarol Wang * 4571230efdSCarol Wang * @param[in] value - The seconds since epoch 4671230efdSCarol Wang * @return The time for the transition. It is the same as the input value if 4771230efdSCarol Wang * it is set successfully. Otherwise, it won't return value, but throw an 4871230efdSCarol Wang * error. 4971230efdSCarol Wang **/ 5071230efdSCarol Wang uint64_t scheduledTime(uint64_t value) override; 514ca6f3f4SCarol Wang 524ca6f3f4SCarol Wang private: 534ca6f3f4SCarol Wang friend class TestScheduledHostTransition; 54*6a5db3d3SCarol Wang 55*6a5db3d3SCarol Wang /** @brief sdbusplus bus client connection */ 56*6a5db3d3SCarol Wang sdbusplus::bus::bus& bus; 57*6a5db3d3SCarol Wang 58*6a5db3d3SCarol Wang /** @brief Timer used for host transition with seconds */ 59*6a5db3d3SCarol Wang sdeventplus::utility::Timer<sdeventplus::ClockId::RealTime> timer; 60*6a5db3d3SCarol Wang 614ca6f3f4SCarol Wang /** @brief Get current time 624ca6f3f4SCarol Wang * 634ca6f3f4SCarol Wang * @return - return current epoch time 644ca6f3f4SCarol Wang */ 654ca6f3f4SCarol Wang std::chrono::seconds getTime(); 66*6a5db3d3SCarol Wang 67*6a5db3d3SCarol Wang /** @brief Implement host transition 68*6a5db3d3SCarol Wang * 69*6a5db3d3SCarol Wang * @return - Does not return anything. Error will result in exception 70*6a5db3d3SCarol Wang * being thrown 71*6a5db3d3SCarol Wang */ 72*6a5db3d3SCarol Wang void hostTransition(); 73*6a5db3d3SCarol Wang 74*6a5db3d3SCarol Wang /** @brief Used by the timer to do host transition */ 75*6a5db3d3SCarol Wang void callback(); 7671230efdSCarol Wang }; 7771230efdSCarol Wang } // namespace manager 7871230efdSCarol Wang } // namespace state 7971230efdSCarol Wang } // namespace phosphor 80