| #pragma once |
| |
| #include "config.h" |
| |
| #include "bmc_time_change_listener.hpp" |
| #include "epoch_base.hpp" |
| |
| #include <chrono> |
| |
| namespace phosphor |
| { |
| namespace time |
| { |
| |
| /** @class HostEpoch |
| * @brief OpenBMC HOST EpochTime implementation. |
| * @details A concrete implementation for xyz.openbmc_project.Time.EpochTime |
| * DBus API for HOST's epoch time. |
| */ |
| class HostEpoch : public EpochBase, public BmcTimeChangeListener |
| { |
| public: |
| friend class TestHostEpoch; |
| HostEpoch(sdbusplus::bus::bus& bus, const char* objPath); |
| |
| /** |
| * @brief Get value of Elapsed property |
| * |
| * @return The elapsed microseconds since UTC |
| **/ |
| uint64_t elapsed() const override; |
| |
| /** |
| * @brief Set value of Elapsed property |
| * |
| * @param[in] value - The microseconds since UTC to set |
| * |
| * @return The updated elapsed microseconds since UTC |
| **/ |
| uint64_t elapsed(uint64_t value) override; |
| |
| /** @brief Notified on time owner changed */ |
| void onOwnerChanged(Owner owner) override; |
| |
| /** @brief Notified on bmc time is changed |
| * |
| * @param[in] bmcTime - The epoch time in microseconds |
| */ |
| void onBmcTimeChanged(const std::chrono::microseconds& bmcTime) override; |
| |
| private: |
| /** @brief The diff between BMC and Host time */ |
| std::chrono::microseconds offset; |
| |
| /** |
| * @brief The diff between host time and steady clock |
| * @details This diff is used to calculate the host time if BMC time |
| * is changed and the owner is SPLIT. |
| * Without this the host time is lost if BMC time is changed. |
| */ |
| std::chrono::microseconds diffToSteadyClock; |
| |
| /** @brief Save the offset value into offsetFile */ |
| void saveOffset(); |
| |
| /** @brief The file to store the offset in File System. |
| * Read back when starts |
| **/ |
| static constexpr auto offsetFile = HOST_OFFSET_FILE; |
| }; |
| |
| } // namespace time |
| } // namespace phosphor |