#include "fsfw/tmtcpacket/pus/tc/TcPacketStoredBase.h" #include #include "fsfw/objectmanager/ObjectManager.h" #include "fsfw/objectmanager/frameworkObjects.h" #include "fsfw/serviceinterface/ServiceInterface.h" StorageManagerIF* TcPacketStoredBase::STORE = nullptr; TcPacketStoredBase::TcPacketStoredBase() { this->storeAddress.raw = StorageManagerIF::INVALID_ADDRESS; TcPacketStoredBase::checkAndSetStore(); } TcPacketStoredBase::~TcPacketStoredBase() = default; ReturnValue_t TcPacketStoredBase::getData(const uint8_t** dataPtr, size_t* dataSize) { auto result = TcPacketStoredBase::STORE->getData(storeAddress, dataPtr, dataSize); if (result != HasReturnvaluesIF::RETURN_OK) { #if FSFW_CPP_OSTREAM_ENABLED == 1 sif::warning << "TcPacketStoredBase: Could not get data" << std::endl; #else sif::printWarning("TcPacketStoredBase: Could not get data!\n"); #endif } return result; } bool TcPacketStoredBase::checkAndSetStore() { if (TcPacketStoredBase::STORE == nullptr) { TcPacketStoredBase::STORE = ObjectManager::instance()->get(objects::TC_STORE); if (TcPacketStoredBase::STORE == nullptr) { #if FSFW_CPP_OSTREAM_ENABLED == 1 sif::error << "TcPacketStoredBase::TcPacketStoredBase: TC Store not found" << std::endl; #else sif::printError("TcPacketStoredBase::TcPacketStoredBase: TC Store not found\n"); #endif return false; } } return true; } void TcPacketStoredBase::setStoreAddress(store_address_t setAddress, RedirectableDataPointerIF* packet) { this->storeAddress = setAddress; const uint8_t* tempData = nullptr; size_t tempSize; ReturnValue_t status = StorageManagerIF::RETURN_FAILED; if (this->checkAndSetStore()) { status = TcPacketStoredBase::STORE->getData(this->storeAddress, &tempData, &tempSize); } if (status == StorageManagerIF::RETURN_OK) { packet->setData(const_cast(tempData), tempSize); } else { packet->setData(nullptr, -1); this->storeAddress.raw = StorageManagerIF::INVALID_ADDRESS; } } store_address_t TcPacketStoredBase::getStoreAddress() { return this->storeAddress; }