diff --git a/core/src/config.cpp b/core/src/config.cpp index b934b05..49d2405 100644 --- a/core/src/config.cpp +++ b/core/src/config.cpp @@ -59,9 +59,9 @@ void ConfigManager::disableAutoSave() { std::lock_guard lock(termMtx); autoSaveEnabled = false; termFlag = true; - termCond.notify_one(); } - autoSaveThread.join(); + termCond.notify_one(); + if (autoSaveThread.joinable()) { autoSaveThread.join(); } } } diff --git a/core/src/core.cpp b/core/src/core.cpp index 92e85ee..9bc9af6 100644 --- a/core/src/core.cpp +++ b/core/src/core.cpp @@ -152,6 +152,8 @@ int sdrpp_main(int argc, char *argv[]) { defConfig["windowSize"]["h"] = 720; defConfig["windowSize"]["w"] = 1280; + defConfig["vfoOffsets"] = json::object(); + #ifdef _WIN32 defConfig["modulesDirectory"] = "./modules"; defConfig["resourcesDirectory"] = "./res"; diff --git a/core/src/gui/main_window.cpp b/core/src/gui/main_window.cpp index dd34f99..115f320 100644 --- a/core/src/gui/main_window.cpp +++ b/core/src/gui/main_window.cpp @@ -240,6 +240,15 @@ void windowInit() { centerTuning = core::configManager.conf["centerTuning"]; + // Load each VFO's offset + for (auto const& [name, _vfo] : gui::waterfall.vfos) { + if (!core::configManager.conf["vfoOffsets"].contains(name)) { + continue; + } + double offset = core::configManager.conf["vfoOffsets"][name]; + sigpath::vfoManager.setOffset(name, std::clamp(offset, -bw/2.0, bw/2.0)); + } + core::configManager.release(); } @@ -360,7 +369,7 @@ void drawWindow() { gui::freqSelect.setFrequency(gui::waterfall.getCenterFrequency() + vfo->generalOffset); gui::freqSelect.frequencyChanged = false; core::configManager.aquire(); - core::configManager.conf["frequency"] = gui::freqSelect.frequency; + core::configManager.conf["vfoOffsets"][gui::waterfall.selectedVFO] = vfo->generalOffset; core::configManager.release(true); } } @@ -371,9 +380,6 @@ void drawWindow() { gui::waterfall.selectedVFOChanged = false; gui::freqSelect.setFrequency(vfo->generalOffset + gui::waterfall.getCenterFrequency()); gui::freqSelect.frequencyChanged = false; - core::configManager.aquire(); - core::configManager.conf["frequency"] = gui::freqSelect.frequency; - core::configManager.release(true); } if (gui::freqSelect.frequencyChanged) { @@ -385,7 +391,10 @@ void drawWindow() { vfo->upperOffsetChanged = false; } core::configManager.aquire(); - core::configManager.conf["frequency"] = gui::freqSelect.frequency; + core::configManager.conf["frequency"] = gui::waterfall.getCenterFrequency(); + if (vfo != NULL) { + core::configManager.conf["vfoOffsets"][gui::waterfall.selectedVFO] = vfo->generalOffset; + } core::configManager.release(true); } @@ -399,7 +408,7 @@ void drawWindow() { gui::freqSelect.setFrequency(gui::waterfall.getCenterFrequency()); } core::configManager.aquire(); - core::configManager.conf["frequency"] = gui::freqSelect.frequency; + core::configManager.conf["frequency"] = gui::waterfall.getCenterFrequency(); core::configManager.release(true); }