summaryrefslogtreecommitdiffstats
path: root/control/zone.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'control/zone.cpp')
-rw-r--r--control/zone.cpp30
1 files changed, 29 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);
+}
+
}
}
}
OpenPOWER on IntegriCloud