Add support for power mode locking
This change adds support for preventing changes to the power mode based
on a mode setting lock. The default state of the lock is unlocked. The
state is changed from unlocked to locked using a dbus method call and
can only be unlocked by setting it back to the default state through a
factory reset.
Signed-off-by: Ben Tyner <ben.tyner@ibm.com>
Change-Id: I9d8fac5a6f74357efe36efd86c9f97776004385f
diff --git a/powermode.hpp b/powermode.hpp
index f0aca51..4cbbf15 100644
--- a/powermode.hpp
+++ b/powermode.hpp
@@ -74,6 +74,7 @@
uint16_t ipsEnterTime = 0;
uint8_t ipsExitUtil = 0;
uint16_t ipsExitTime = 0;
+ bool modeLocked = false;
/** @brief Function specifying data to archive for cereal.
*/
@@ -81,7 +82,8 @@
void serialize(Archive& archive)
{
archive(modeInitialized, mode, oemModeData, ipsInitialized, ipsEnabled,
- ipsEnterUtil, ipsEnterTime, ipsExitUtil, ipsExitTime);
+ ipsEnterUtil, ipsEnterTime, ipsExitUtil, ipsExitTime,
+ modeLocked);
}
};
@@ -118,6 +120,15 @@
save();
}
+ /** @brief Save Power Mode Lock value to persistent file
+ *
+ * @param[in] modeLock - desired System Power Mode Lock
+ */
+ void updateModeLock(const bool modeLock)
+ {
+ modeData.modeLocked = modeLock;
+ save();
+ }
/** @brief Write Idle Power Saver parameters to persistent file
*
* @param[in] enabled - Idle Power Save status (true = enabled)
@@ -184,6 +195,12 @@
return true;
}
+ /** @brief Return persisted mode lock */
+ bool getModeLock()
+ {
+ return modeData.modeLocked;
+ }
+
/** @brief Return true if the power mode is available */
bool modeAvailable()
{
@@ -285,6 +302,18 @@
*/
bool initPersistentData();
+ /** @brief Set the power mode lock (dbus method)
+ *
+ * @return true if successful
+ */
+ bool powerModeLock();
+
+ /** @brief Get the power mode lock status (dbus method)
+ *
+ * @return true if locked
+ */
+ bool powerModeLockStatus();
+
/** @brief Set the current power mode property
*
* @param[in] newMode - desired system power mode
@@ -335,6 +364,14 @@
/** @brief Set dbus property to SAFE Mode(true) or clear SAFE Mode(false)*/
void updateDbusSafeMode(const bool safeMode);
+ /** @brief override the set/get MODE function
+ *
+ * @param[in] value - Intended value
+ *
+ * @return - the value or Updated value of the property
+ */
+ Base::Mode::PowerMode powerMode(Base::Mode::PowerMode value) override;
+
private:
/** @brief OCC manager object */
const Manager& manager;