diff options
-rw-r--r-- | control/zone.cpp | 30 | ||||
-rw-r--r-- | control/zone.hpp | 6 |
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 * |