From 21258c2d79d872fe09f125d2193b535d96f2f938 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 11 Oct 2022 22:58:31 +0200 Subject: [PATCH 1/4] fix core controller --- bsp_q7s/core/CoreController.cpp | 40 ++++++++++++------------ bsp_q7s/core/CoreController.h | 2 +- fsfw | 2 +- mission/controller/ThermalController.cpp | 10 +++--- tmtc | 2 +- 5 files changed, 29 insertions(+), 27 deletions(-) diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index 56734032..083aebf5 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -1230,29 +1230,29 @@ void CoreController::performWatchdogControlOperation() { } void CoreController::performMountedSdCardOperations() { - auto mountedSdCardOp = [&](bool &mntSwitch, sd::SdCard sdCard, std::string mntPoint) { - if (mntSwitch) { - bool sdCardMounted = sdcMan->isSdCardUsable(sdCard); - if (sdCardMounted and not performOneShotSdCardOpsSwitch) { - std::ostringstream path; - path << mntPoint << "/" << CONF_FOLDER; - if (not std::filesystem::exists(path.str())) { - std::filesystem::create_directory(path.str()); - } - initVersionFile(); - initClockFromTimeFile(); - performRebootFileHandling(false); - performOneShotSdCardOpsSwitch = true; + auto mountedSdCardOp = [&](sd::SdCard sdCard, std::string mntPoint) { + if (not performOneShotSdCardOpsSwitch) { + std::ostringstream path; + path << mntPoint << "/" << CONF_FOLDER; + if (not std::filesystem::exists(path.str())) { + std::filesystem::create_directory(path.str()); } - mntSwitch = false; + initVersionFile(); + initClockFromTimeFile(); + performRebootFileHandling(false); } }; - if (sdInfo.active == sd::SdCard::SLOT_1) { - mountedSdCardOp(sdInfo.mountSwitch.second, sd::SdCard::SLOT_1, config::SD_1_MOUNT_POINT); - mountedSdCardOp(sdInfo.mountSwitch.first, sd::SdCard::SLOT_0, config::SD_0_MOUNT_POINT); - } else { - mountedSdCardOp(sdInfo.mountSwitch.first, sd::SdCard::SLOT_0, config::SD_0_MOUNT_POINT); - mountedSdCardOp(sdInfo.mountSwitch.second, sd::SdCard::SLOT_1, config::SD_1_MOUNT_POINT); + bool clearOneShotFlag = false; + if (sdInfo.active == sd::SdCard::SLOT_0 and sdcMan->isSdCardUsable(sd::SdCard::SLOT_0)) { + mountedSdCardOp(sd::SdCard::SLOT_0, config::SD_0_MOUNT_POINT); + clearOneShotFlag = true; + } + if (sdInfo.active == sd::SdCard::SLOT_1 and sdcMan->isSdCardUsable(sd::SdCard::SLOT_1)) { + mountedSdCardOp(sd::SdCard::SLOT_1, config::SD_1_MOUNT_POINT); + clearOneShotFlag = true; + } + if (clearOneShotFlag) { + performOneShotSdCardOpsSwitch = true; } timeFileHandler(); } diff --git a/bsp_q7s/core/CoreController.h b/bsp_q7s/core/CoreController.h index 206a93c9..3c205e4a 100644 --- a/bsp_q7s/core/CoreController.h +++ b/bsp_q7s/core/CoreController.h @@ -205,7 +205,7 @@ class CoreController : public ExtendedControllerBase { RebootFile rebootFile = {}; std::string currMntPrefix; - bool performOneShotSdCardOpsSwitch = true; + bool performOneShotSdCardOpsSwitch = false; /** * Index 0: Chip 0 Copy 0 diff --git a/fsfw b/fsfw index a8fb83df..692be9df 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit a8fb83dfcedb5391ac942d6bcffa64f0cbca38c5 +Subproject commit 692be9df8d06beb3bfc83aad77cefd727d8f7c35 diff --git a/mission/controller/ThermalController.cpp b/mission/controller/ThermalController.cpp index 30f5e176..10c74fca 100644 --- a/mission/controller/ThermalController.cpp +++ b/mission/controller/ThermalController.cpp @@ -238,7 +238,8 @@ void ThermalController::copySensors() { PoolReadGuard pg0(&max31865Set0); if (pg0.getReadResult() == returnvalue::OK) { sensorTemperatures.sensor_ploc_heatspreader.value = max31865Set0.temperatureCelcius.value; - sensorTemperatures.sensor_ploc_heatspreader.setValid(max31865Set0.temperatureCelcius.isValid()); + sensorTemperatures.sensor_ploc_heatspreader.setValid( + max31865Set0.temperatureCelcius.isValid()); if (not sensorTemperatures.sensor_ploc_heatspreader.isValid()) { sensorTemperatures.sensor_ploc_heatspreader.value = INVALID_TEMPERATURE; } @@ -249,7 +250,8 @@ void ThermalController::copySensors() { PoolReadGuard pg1(&max31865Set1); if (pg1.getReadResult() == returnvalue::OK) { sensorTemperatures.sensor_ploc_missionboard.value = max31865Set1.temperatureCelcius.value; - sensorTemperatures.sensor_ploc_missionboard.setValid(max31865Set1.temperatureCelcius.isValid()); + sensorTemperatures.sensor_ploc_missionboard.setValid( + max31865Set1.temperatureCelcius.isValid()); if (not sensorTemperatures.sensor_ploc_missionboard.isValid()) { sensorTemperatures.sensor_ploc_missionboard.value = INVALID_TEMPERATURE; } @@ -271,7 +273,8 @@ void ThermalController::copySensors() { PoolReadGuard pg3(&max31865Set3); if (pg3.getReadResult() == returnvalue::OK) { sensorTemperatures.sensor_dac_heatspreader.value = max31865Set3.temperatureCelcius.value; - sensorTemperatures.sensor_dac_heatspreader.setValid(max31865Set3.temperatureCelcius.isValid()); + sensorTemperatures.sensor_dac_heatspreader.setValid( + max31865Set3.temperatureCelcius.isValid()); if (not sensorTemperatures.sensor_dac_heatspreader.isValid()) { sensorTemperatures.sensor_dac_heatspreader.value = INVALID_TEMPERATURE; } @@ -389,7 +392,6 @@ void ThermalController::copySensors() { } } - { PoolReadGuard pg14(&max31865Set14); if (pg14.getReadResult() == returnvalue::OK) { diff --git a/tmtc b/tmtc index a91d40f3..4c3f5f28 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit a91d40f3337a948bc061b033e194dd629fd34be1 +Subproject commit 4c3f5f28256be0dbfc5b46ea87f8f484c93a9996 From 607822b4133184e44ff7c4377094d0bdc8cccc07 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 11 Oct 2022 23:07:44 +0200 Subject: [PATCH 2/4] fix in SDC manager --- bsp_q7s/fs/SdCardManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bsp_q7s/fs/SdCardManager.cpp b/bsp_q7s/fs/SdCardManager.cpp index 87d2a440..42182829 100644 --- a/bsp_q7s/fs/SdCardManager.cpp +++ b/bsp_q7s/fs/SdCardManager.cpp @@ -27,8 +27,7 @@ SdCardManager::SdCardManager() : SystemObject(objects::SDC_MANAGER), cmdExecutor } uint8_t prefSdRaw = 0; result = scratch::readNumber(scratch::PREFERED_SDC_KEY, prefSdRaw); - result = mutex->unlockMutex(); - if (result != returnvalue::OK) { + if (mutex->unlockMutex() != returnvalue::OK) { sif::error << "SdCardManager::SdCardManager: Mutex unlock failed" << std::endl; } From f196838f6bc6810fc143bef2f849cf9483cb6def Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 11 Oct 2022 23:08:37 +0200 Subject: [PATCH 3/4] bump revision --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 04362a82..d6a73014 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.13) set(OBSW_VERSION_MAJOR_IF_GIT_FAILS 1) set(OBSW_VERSION_MINOR_IF_GIT_FAILS 14) -set(OBSW_VERSION_REVISION_IF_GIT_FAILS 0) +set(OBSW_VERSION_REVISION_IF_GIT_FAILS 1) # set(CMAKE_VERBOSE TRUE) From bcf7fa216a6946c5aaf12799a450985a1c95ac72 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 11 Oct 2022 23:10:09 +0200 Subject: [PATCH 4/4] bump changelog --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91a00baf..6d2e94db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,13 @@ list yields a list of all related PRs for each release. # [unreleased] +# [v1.14.1] + +- Various bugfixes and regression fixes +- General file handling at program initialization now works properly again +- Scratch buffer preferred SD card handling works again +- Use scoped locks in TCS controller to avoid deadlocks + # [v1.14.0] - Provide full SW update capability for the OBSW.