diff --git a/bsp_q7s/memory/SdCardManager.cpp b/bsp_q7s/memory/SdCardManager.cpp index f04e518b..b6668045 100644 --- a/bsp_q7s/memory/SdCardManager.cpp +++ b/bsp_q7s/memory/SdCardManager.cpp @@ -1,5 +1,6 @@ #include "SdCardManager.h" #include "fsfw/ipc/MutexFactory.h" +#include "fsfw/serviceinterface/ServiceInterface.h" #include #include @@ -35,11 +36,38 @@ ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard) { } bool SdCardManager::sdCardActive(sd::SdCard sdCard) { - if(std::filesystem::exists("/tmp/sd_status.txt")) { - std::ifstream sdStatus("/tmp/sd_status.txt"); - return HasReturnvaluesIF::RETURN_OK; + using namespace std; + if(not filesystem::exists("/tmp/sd_status.txt")) { + ReturnValue_t result = updateSdCardStateFile(); + if(result != HasReturnvaluesIF::RETURN_OK) { + return result; + } } + // Now the file should exist in any case. Still check whether it exists. + fstream sdStatus("/tmp/sd_status.txt"); + if (not sdStatus.good()) { + return false; + } + string line; + uint8_t idx = 0; + while (std::getline(sdStatus, line)) { + istringstream iss(line); + string word; + if((sdCard == sd::SdCard::SLOT_0 and idx == 0) or + (sdCard == sd::SdCard::SLOT_1 and idx == 1)) { + while(iss >> word) { + if(word == "on") { + return true; + } + else { + return false; + } + } + } + idx++; + } + return HasReturnvaluesIF::RETURN_OK; return false; } @@ -51,5 +79,12 @@ void SdCardManager::setPreferredSdCard(sd::SdCard sdCard) { preferredSdCard = sdCard; } -void SdCardManager::updateSdCardStateFile() { +ReturnValue_t SdCardManager::updateSdCardStateFile() { + int result = std::system("q7hw sd info all > /tmp/sd_status.txt"); + if(result == 0) { + return HasReturnvaluesIF::RETURN_OK; + } + sif::warning << "SdCardManager::updateSdCardStateFile: system call failed with code " << + result << std::endl; + return HasReturnvaluesIF::RETURN_FAILED; } diff --git a/bsp_q7s/memory/SdCardManager.h b/bsp_q7s/memory/SdCardManager.h index 2a489d79..33b3db0c 100644 --- a/bsp_q7s/memory/SdCardManager.h +++ b/bsp_q7s/memory/SdCardManager.h @@ -46,7 +46,7 @@ public: private: SdCardManager(); - void updateSdCardStateFile(); + ReturnValue_t updateSdCardStateFile(); sd::SdCard preferredSdCard = sd::SdCard::SLOT_0;