Add time Manager to handle property changes callback
1. Implement time::Manager who registers property change signal for time
mode and owner;
2. Add PropertyChangeListner interface to handle the callback;
3. Make EpochBase to implement the interface.
Change-Id: I185580ae37353e1ed82a47e4905fb22e269ac09d
Signed-off-by: Lei YU <mine260309@gmail.com>
diff --git a/epoch_base.hpp b/epoch_base.hpp
index fc505d0..f31a32b 100644
--- a/epoch_base.hpp
+++ b/epoch_base.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include "property_change_listener.hpp"
+
#include <sdbusplus/bus.hpp>
#include <xyz/openbmc_project/Time/EpochTime/server.hpp>
@@ -16,64 +18,30 @@
* DBus API for epoch time.
*/
class EpochBase : public sdbusplus::server::object::object <
- sdbusplus::xyz::openbmc_project::Time::server::EpochTime >
+ sdbusplus::xyz::openbmc_project::Time::server::EpochTime >,
+ public PropertyChangeListner
{
public:
friend class TestEpochBase;
- /** @brief Supported time modes
- * NTP Time sourced by Network Time Server
- * MANUAL User of the system need to set the time
- */
- enum class Mode
- {
- NTP,
- MANUAL,
- };
-
- /** @brief Supported time owners
- * BMC Time source may be NTP or MANUAL but it has to be set natively
- * on the BMC. Meaning, host can not set the time. What it also
- * means is that when BMC gets IPMI_SET_SEL_TIME, then its ignored.
- * similarly, when BMC gets IPMI_GET_SEL_TIME, then the BMC's time
- * is returned.
- *
- * HOST Its only IPMI_SEL_SEL_TIME that will set the time on BMC.
- * Meaning, IPMI_GET_SEL_TIME and request to get BMC time will
- * result in same value.
- *
- * SPLIT Both BMC and HOST will maintain their individual clocks but then
- * the time information is stored in BMC. BMC can have either NTP
- * or MANUAL as it's source of time and will set the time directly
- * on the BMC. When IPMI_SET_SEL_TIME is received, then the delta
- * between that and BMC's time is calculated and is stored.
- * When BMC reads the time, the current time is returned.
- * When IPMI_GET_SEL_TIME is received, BMC's time is retrieved and
- * then the delta offset is factored in prior to returning.
- *
- * BOTH: BMC's time is set with whoever that sets the time. Similarly,
- * BMC's time is returned to whoever that asks the time.
- */
- enum class Owner
- {
- BMC,
- HOST,
- SPLIT,
- BOTH,
- };
-
EpochBase(sdbusplus::bus::bus& bus,
const char* objPath);
+ /** @brief Notified on time mode changed */
+ void onModeChanged(Mode mode) override;
+
+ /** @brief Notified on time owner changed */
+ void onOwnerChanged(Owner owner) override;
+
protected:
/** @brief Persistent sdbusplus DBus connection */
sdbusplus::bus::bus& bus;
/** @brief The current time mode */
- Mode timeMode;
+ Mode timeMode = Mode::NTP;
/** @brief The current time owner */
- Owner timeOwner;
+ Owner timeOwner = Owner::BMC;
/** @brief Set current time to system
*
@@ -89,57 +57,6 @@
* @return Microseconds since UTC
*/
std::chrono::microseconds getTime() const;
-
- /** @brief Convert a string to enum Mode
- *
- * Convert the time mode string to enum.
- * Valid strings are "NTP", "MANUAL"
- * If it's not a valid time mode string, return NTP.
- *
- * @param[in] mode - The string of time mode
- *
- * @return The Mode enum
- */
- static Mode convertToMode(const std::string& mode);
-
- /** @brief Convert a string to enum Owner
- *
- * Convert the time owner string to enum.
- * Valid strings are "BMC", "HOST", "SPLIT", "BOTH"
- * If it's not a valid time owner string, return BMC.
- *
- * @param[in] owner - The string of time owner
- *
- * @return The Owner enum
- */
- static Owner convertToOwner(const std::string& owner);
-
- private:
- /** @brief Initialize the time mode and owner */
- void initialize();
-
- /** @brief Set current time mode
- *
- * @param[in] mode - The string of time mode
- */
- void setCurrentTimeMode(const std::string& mode);
-
- /** @brief Set current time owner
- *
- * @param[in] owner - The string of time owner
- */
- void setCurrentTimeOwner(const std::string& owner);
-
- /** @brief Get setting value from settings manager
- *
- * @param[in] setting - The string of the setting to get
- *
- * @return The value of the setting
- */
- std::string getSettings(const char* setting) const;
-
- /** @brief The map maps the string key to enum Owner */
- static const std::map<std::string, Owner> ownerMap;
};
} // namespace time