#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 #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); static constexpr ReturnValue_t STATUS_FILE_NEXISTS = HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 2); static constexpr ReturnValue_t STATUS_FILE_FORMAT_INVALID = HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 3); static constexpr ReturnValue_t SYSTEM_CALL_ERROR = HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 4); 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; /** * Switch on the specified SD card * @param sdCard * @return - RETURN_OK on success, ALREADY_ON if it is already on, * SYSTEM_CALL_ERROR on system error */ ReturnValue_t switchOnSdCard(sd::SdCard sdCard); /** * Switch off the specified SD card * @param sdCard * @return - RETURN_OK on success, ALREADY_ON if it is already on, * SYSTEM_CALL_ERROR on system error */ ReturnValue_t switchOffSdCard(sd::SdCard sdCard); /** * Updated the state file or creates one if it does not exist. You need to call this * function before calling #sdCardActiv * @return - RETURN_OK if the state file was updated successfully * - SYSTEM_CALL_ERROR if the call to create the status file failed */ ReturnValue_t updateSdCardStateFile(); /** * Get the state of the SD cards. If the state file does not exist, this function will * take care of updating it. If it does not, the function will use the state file to get * the status of the SD cards and set the field of the provided boolean pair. * @param active Pair of booleans, where the first entry is the state of the first SD card * and the second one the state of the second SD card * @return - RETURN_OK if the state was read successfully * - STATUS_FILE_FORMAT_INVALID if there was an issue with the state file. The user * should call #updateSdCardStateFile again in that case * - STATUS_FILE_NEXISTS if the status file does not exist */ ReturnValue_t sdCardActive(std::pair& active); sd::SdCard getPreferedSdCard() const; private: SdCardManager(); ReturnValue_t setSdCardState(sd::SdCard sdCard, bool on); sd::SdCard preferredSdCard = sd::SdCard::SLOT_0; static SdCardManager* factoryInstance; }; #endif /* BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_ */