summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--control/zone.cpp30
-rw-r--r--control/zone.hpp6
2 files changed, 35 insertions, 1 deletions
diff --git a/control/zone.cpp b/control/zone.cpp
index 7d836ba..8408e8d 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -71,7 +71,8 @@ Zone::Zone(Mode mode,
// Do not enable set speed events when in init mode
if (mode == Mode::control)
{
- // TODO Determine thermal control mode states
+ // Restore thermal control current mode state
+ restoreCurrentMode();
// Emit objects added in control mode only
this->emit_object_added();
@@ -614,6 +615,33 @@ void Zone::saveCurrentMode()
oArch(ThermalObject::current());
}
+void Zone::restoreCurrentMode()
+{
+ std::string current = "Default";
+ fs::path path{CONTROL_PERSIST_ROOT_PATH};
+ path /= std::to_string(_zoneNum);
+ path /= "CurrentMode";
+ fs::create_directories(path.parent_path());
+
+ try
+ {
+ if (fs::exists(path))
+ {
+ std::ifstream ifs(path.c_str(), std::ios::in | std::ios::binary);
+ cereal::JSONInputArchive iArch(ifs);
+ iArch(current);
+ }
+ }
+ catch (std::exception& e)
+ {
+ log<level::ERR>(e.what());
+ fs::remove(path);
+ current = "Default";
+ }
+
+ this->current(current);
+}
+
}
}
}
diff --git a/control/zone.hpp b/control/zone.hpp
index feaa8c8..3774d76 100644
--- a/control/zone.hpp
+++ b/control/zone.hpp
@@ -622,6 +622,12 @@ class Zone : public ThermalObject
void saveCurrentMode();
/**
+ * @brief Restore persisted thermal control current mode property
+ * value, setting the mode to "Default" otherwise
+ */
+ void restoreCurrentMode();
+
+ /**
* @brief Get the request speed base if defined, otherwise the
* the current target speed is returned
*
OpenPOWER on IntegriCloud