diff --git a/bsp_q7s/memory/CMakeLists.txt b/bsp_q7s/memory/CMakeLists.txt index 03b7f0b9..35ee43ea 100644 --- a/bsp_q7s/memory/CMakeLists.txt +++ b/bsp_q7s/memory/CMakeLists.txt @@ -1,5 +1,5 @@ target_sources(${TARGET_NAME} PRIVATE FileSystemManager.cpp SdCardAccess.cpp - SdCardAccessManager.cpp + SdCardManager.cpp ) \ No newline at end of file diff --git a/bsp_q7s/memory/SdCardAccess.cpp b/bsp_q7s/memory/SdCardAccess.cpp index 05e8bd3c..92837787 100644 --- a/bsp_q7s/memory/SdCardAccess.cpp +++ b/bsp_q7s/memory/SdCardAccess.cpp @@ -1,22 +1,7 @@ #include "SdCardAccess.h" -#include "q7sConfig.h" -#include "SdCardAccessManager.h" #include "fsfw/ipc/MutexGuard.h" SdCardAccess::SdCardAccess(sd::SdCard sdCard) { - auto accessManager = SdCardAccessManager::instance(); - MutexGuard(accessManager->mutex, MutexIF::TimeoutType::WAITING, - config::SD_CARD_ACCESS_MUTEX_TIMEOUT); - if(accessManager->getSdCardAccessors(sdCard) == 0) { - if(sdCard == sd::SdCard::SLOT_0) { - std::system("q7hw sd set 0 on"); - accessManager->activeAccessesSdCard0++; - } - else { - std::system("q7hw sd set 1 on"); - accessManager->activeAccessesSdCard1++; - } - } } diff --git a/bsp_q7s/memory/SdCardAccessManager.cpp b/bsp_q7s/memory/SdCardAccessManager.cpp deleted file mode 100644 index 8c204aae..00000000 --- a/bsp_q7s/memory/SdCardAccessManager.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "SdCardAccessManager.h" -#include "fsfw/ipc/MutexFactory.h" - -SdCardAccessManager* SdCardAccessManager::factoryInstance = nullptr; - -SdCardAccessManager::~SdCardAccessManager() { - MutexFactory::instance()->deleteMutex(mutex); -} - -void SdCardAccessManager::create() { - if(factoryInstance == nullptr) { - factoryInstance = new SdCardAccessManager(); - } -} - -SdCardAccessManager* SdCardAccessManager::instance() { - SdCardAccessManager::create(); - return SdCardAccessManager::factoryInstance; -} - -SdCardAccessManager::SdCardAccessManager() { - mutex = MutexFactory::instance()->createMutex(); - -} - -uint8_t SdCardAccessManager::getSdCardAccessors(sd::SdCard sdCard) const { - if(sdCard == sd::SdCard::SLOT_0) { - return activeAccessesSdCard0; - } - else { - return activeAccessesSdCard1; - } -} diff --git a/bsp_q7s/memory/SdCardAccessManager.h b/bsp_q7s/memory/SdCardAccessManager.h deleted file mode 100644 index 2c6337b7..00000000 --- a/bsp_q7s/memory/SdCardAccessManager.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_ -#define BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_ - -#include "definitions.h" - -#include - -class MutexIF; - -/** - * @brief This class manages selecting and switching the active SD card, therefore also - * managing the redundancy of the SD cards - * @details - * This class will track the currently active users for a SD card. It is always used by the - * SD card access token automatically to get the currently active SD card in a thread safe way- - */ -class SdCardAccessManager { - friend class SdCardAccess; -public: - virtual ~SdCardAccessManager(); - - static void create(); - - /** - * Returns the single instance of the SD card manager. - */ - static SdCardAccessManager* instance(); - - sd::SdCard getPreferedSdCard() const; - - /** - * Get current number of SD card users - * @param sdCard - * @return - */ - uint8_t getSdCardAccessors(sd::SdCard sdCard) const; - -private: - SdCardAccessManager(); - MutexIF* mutex; - - uint8_t activeAccessesSdCard0 = 0; - uint8_t activeAccessesSdCard1 = 0; - - static SdCardAccessManager* factoryInstance; -}; - -#endif /* BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_ */ diff --git a/bsp_q7s/memory/SdCardManager.cpp b/bsp_q7s/memory/SdCardManager.cpp new file mode 100644 index 00000000..f04e518b --- /dev/null +++ b/bsp_q7s/memory/SdCardManager.cpp @@ -0,0 +1,55 @@ +#include "SdCardManager.h" +#include "fsfw/ipc/MutexFactory.h" + +#include +#include + +SdCardManager* SdCardManager::factoryInstance = nullptr; + +SdCardManager::SdCardManager() { +} + +SdCardManager::~SdCardManager() { +} + +void SdCardManager::create() { + if(factoryInstance == nullptr) { + factoryInstance = new SdCardManager(); + } +} + +SdCardManager* SdCardManager::instance() { + SdCardManager::create(); + return SdCardManager::factoryInstance; +} + +ReturnValue_t SdCardManager::switchOnSdCard(sd::SdCard sdCard) { + if(sdCardActive(sdCard)) { + return ALREADY_ON; + } + return HasReturnvaluesIF::RETURN_OK; +} + +ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard) { + return HasReturnvaluesIF::RETURN_OK; +} + +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; + } + + return false; +} + +sd::SdCard SdCardManager::getPreferredSdCard() const { + return preferredSdCard; +} + +void SdCardManager::setPreferredSdCard(sd::SdCard sdCard) { + preferredSdCard = sdCard; +} + +void SdCardManager::updateSdCardStateFile() { +} diff --git a/bsp_q7s/memory/SdCardManager.h b/bsp_q7s/memory/SdCardManager.h new file mode 100644 index 00000000..2a489d79 --- /dev/null +++ b/bsp_q7s/memory/SdCardManager.h @@ -0,0 +1,56 @@ +#ifndef BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_ +#define BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_ + +#include "definitions.h" +#include "returnvalues/classIds.h" + +#include "fsfw/returnvalues/HasReturnvaluesIF.h" + +#include + +class MutexIF; + +/** + * @brief Manages handling of SD cards like switching them on or off or getting the current + * state + */ +class SdCardManager { + friend class SdCardAccess; +public: + static constexpr uint8_t INTERFACE_ID = CLASS_ID::SD_CARD_MANAGER; + + static constexpr ReturnValue_t ALREADY_ON = HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 0); + static constexpr ReturnValue_t ALREADY_OFF = HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 1); + + virtual ~SdCardManager(); + + static void create(); + + /** + * Returns the single instance of the SD card manager. + */ + static SdCardManager* instance(); + + void setPreferredSdCard(sd::SdCard sdCard); + + sd::SdCard getPreferredSdCard() const; + + ReturnValue_t switchOnSdCard(sd::SdCard sdCard); + + ReturnValue_t switchOffSdCard(sd::SdCard sdCard); + + bool sdCardActive(sd::SdCard sdCard); + + sd::SdCard getPreferedSdCard() const; + +private: + SdCardManager(); + + void updateSdCardStateFile(); + + sd::SdCard preferredSdCard = sd::SdCard::SLOT_0; + + static SdCardManager* factoryInstance; +}; + +#endif /* BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_ */ diff --git a/linux/fsfwconfig/returnvalues/classIds.h b/linux/fsfwconfig/returnvalues/classIds.h index d1bfe7e2..79f1a175 100644 --- a/linux/fsfwconfig/returnvalues/classIds.h +++ b/linux/fsfwconfig/returnvalues/classIds.h @@ -13,6 +13,7 @@ namespace CLASS_ID { enum { CLASS_ID_START = COMMON_CLASS_ID_END, SA_DEPL_HANDLER, //SADPL + SD_CARD_MANAGER, //SDMA CLASS_ID_END // [EXPORT] : [END] }; } diff --git a/misc/eclipse/.cproject b/misc/eclipse/.cproject index 58022d69..16bd992b 100644 --- a/misc/eclipse/.cproject +++ b/misc/eclipse/.cproject @@ -707,6 +707,7 @@ +