moved store failure to separate function

This commit is contained in:
Robin Müller 2021-10-05 12:47:30 +02:00 committed by Robin Mueller
parent ecdbf98ca4
commit 155432663b
5 changed files with 132 additions and 151 deletions

View File

@ -91,4 +91,34 @@ void TmPacketStoredBase::checkAndReportLostTm() {
} }
} }
void TmPacketStoredBase::handleStoreFailure(const char *const packetType, ReturnValue_t result,
size_t sizeToReserve) {
checkAndReportLostTm();
#if FSFW_VERBOSE_LEVEL >= 1
switch(result) {
#if FSFW_CPP_OSTREAM_ENABLED == 1
case(StorageManagerIF::DATA_STORAGE_FULL): {
sif::warning << "TmPacketStoredPus" << packetType << ": " <<
"Store full for packet with size" << sizeToReserve << std::endl;
break;
}
case(StorageManagerIF::DATA_TOO_LARGE): {
sif::warning << "TmPacketStoredPus" << packetType << ": Data with size " <<
sizeToReserve << " too large" << std::endl;
break;
}
#else
case(StorageManagerIF::DATA_STORAGE_FULL): {
sif::printWarning("TmPacketStoredPus%s: Store full for packet with "
"size %d\n", packetType, sizeToReserve);
break;
}
case(StorageManagerIF::DATA_TOO_LARGE): {
sif::printWarning("TmPacketStoredPus%s: Data with size "
"%d too large\n", packetType, sizeToReserve);
break;
}
#endif
#endif
}
}

View File

@ -82,6 +82,9 @@ protected:
bool checkAndSetStore(); bool checkAndSetStore();
void checkAndReportLostTm(); void checkAndReportLostTm();
void handleStoreFailure(const char* const packetType, ReturnValue_t result,
size_t sizeToReserve);
}; };

View File

@ -5,24 +5,25 @@
#include <cstring> #include <cstring>
TmPacketStoredPusA::TmPacketStoredPusA(store_address_t setAddress) : TmPacketStoredPusA::TmPacketStoredPusA(store_address_t setAddress):
TmPacketStoredBase(setAddress), TmPacketPusA(nullptr){ TmPacketStoredBase(setAddress), TmPacketPusA(nullptr){
} }
TmPacketStoredPusA::TmPacketStoredPusA(uint16_t apid, uint8_t service, TmPacketStoredPusA::TmPacketStoredPusA(uint16_t apid, uint8_t service,
uint8_t subservice, uint8_t packetSubcounter, const uint8_t *data, uint8_t subservice, uint8_t packetSubcounter, const uint8_t *data,
uint32_t size, const uint8_t *headerData, uint32_t headerSize) : uint32_t size, const uint8_t *headerData, uint32_t headerSize):
TmPacketPusA(nullptr) { TmPacketPusA(nullptr) {
storeAddress.raw = StorageManagerIF::INVALID_ADDRESS; storeAddress.raw = StorageManagerIF::INVALID_ADDRESS;
if (not TmPacketStoredBase::checkAndSetStore()) { if (not TmPacketStoredBase::checkAndSetStore()) {
return; return;
} }
uint8_t *pData = nullptr; uint8_t *pData = nullptr;
size_t sizeToReserve = getPacketMinimumSize() + size + headerSize;
ReturnValue_t returnValue = store->getFreeElement(&storeAddress, ReturnValue_t returnValue = store->getFreeElement(&storeAddress,
(getPacketMinimumSize() + size + headerSize), &pData); sizeToReserve, &pData);
if (returnValue != store->RETURN_OK) { if (returnValue != store->RETURN_OK) {
TmPacketStoredBase::checkAndReportLostTm(); handleStoreFailure("A", returnValue, sizeToReserve);
return; return;
} }
setData(pData); setData(pData);
@ -53,34 +54,7 @@ TmPacketStoredPusA::TmPacketStoredPusA(uint16_t apid, uint8_t service,
ReturnValue_t returnValue = store->getFreeElement(&storeAddress, ReturnValue_t returnValue = store->getFreeElement(&storeAddress,
sizeToReserve, &pData); sizeToReserve, &pData);
if (returnValue != store->RETURN_OK) { if (returnValue != store->RETURN_OK) {
TmPacketStoredBase::checkAndReportLostTm(); handleStoreFailure("A", returnValue, sizeToReserve);
#if FSFW_VERBOSE_LEVEL >= 1
switch(returnValue) {
#if FSFW_CPP_OSTREAM_ENABLED == 1
case(StorageManagerIF::DATA_STORAGE_FULL): {
sif::warning << "TmPacketStoredPusA::TmPacketStoredPusC: Store full for packet with "
"size " << sizeToReserve << std::endl;
break;
}
case(StorageManagerIF::DATA_TOO_LARGE): {
sif::warning << "TmPacketStoredPusA::TmPacketStoredPusC: Data with size " <<
sizeToReserve << " too large" << std::endl;
break;
}
#else
case(StorageManagerIF::DATA_STORAGE_FULL): {
sif::printWarning("TmPacketStoredPusA::TmPacketStoredPusC: Store full for packet with "
"size %d\n", sizeToReserve);
break;
}
case(StorageManagerIF::DATA_TOO_LARGE): {
sif::printWarning("TmPacketStoredPusA::TmPacketStoredPusC: Data with size "
"%d too large\n", sizeToReserve);
break;
}
#endif
#endif
}
return; return;
} }
setData(pData); setData(pData);

View File

@ -15,7 +15,7 @@
* packets in a store with the help of a storeAddress. * packets in a store with the help of a storeAddress.
* @ingroup tmtcpackets * @ingroup tmtcpackets
*/ */
class TmPacketStoredPusA : class TmPacketStoredPusA:
public TmPacketStoredBase, public TmPacketStoredBase,
public TmPacketPusA { public TmPacketPusA {
public: public:

View File

@ -19,11 +19,12 @@ TmPacketStoredPusC::TmPacketStoredPusC(uint16_t apid, uint8_t service,
return; return;
} }
uint8_t *pData = nullptr; uint8_t *pData = nullptr;
size_t sizeToReserve = getPacketMinimumSize() + size + headerSize;
ReturnValue_t returnValue = store->getFreeElement(&storeAddress, ReturnValue_t returnValue = store->getFreeElement(&storeAddress,
(getPacketMinimumSize() + size + headerSize), &pData); sizeToReserve, &pData);
if (returnValue != store->RETURN_OK) { if (returnValue != store->RETURN_OK) {
TmPacketStoredBase::checkAndReportLostTm(); handleStoreFailure("C", returnValue, sizeToReserve);
return; return;
} }
setData(pData); setData(pData);
@ -53,34 +54,7 @@ TmPacketStoredPusC::TmPacketStoredPusC(uint16_t apid, uint8_t service,
size_t sizeToReserve = getPacketMinimumSize() + sourceDataSize; size_t sizeToReserve = getPacketMinimumSize() + sourceDataSize;
ReturnValue_t returnValue = store->getFreeElement(&storeAddress, sizeToReserve, &pData); ReturnValue_t returnValue = store->getFreeElement(&storeAddress, sizeToReserve, &pData);
if (returnValue != store->RETURN_OK) { if (returnValue != store->RETURN_OK) {
#if FSFW_VERBOSE_LEVEL >= 1 handleStoreFailure("C", returnValue, sizeToReserve);
switch(returnValue) {
#if FSFW_CPP_OSTREAM_ENABLED == 1
case(StorageManagerIF::DATA_STORAGE_FULL): {
sif::warning << "TmPacketStoredPusC::TmPacketStoredPusC: Store full for packet with "
"size " << sizeToReserve << std::endl;
break;
}
case(StorageManagerIF::DATA_TOO_LARGE): {
sif::warning << "TmPacketStoredPusC::TmPacketStoredPusC: Data with size " <<
sizeToReserve << " too large" << std::endl;
break;
}
#else
case(StorageManagerIF::DATA_STORAGE_FULL): {
sif::printWarning("TmPacketStoredPusC::TmPacketStoredPusC: Store full for packet with "
"size %d\n", sizeToReserve);
break;
}
case(StorageManagerIF::DATA_TOO_LARGE): {
sif::printWarning("TmPacketStoredPusC::TmPacketStoredPusC: Data with size "
"%d too large\n", sizeToReserve);
break;
}
#endif
#endif
}
TmPacketStoredBase::checkAndReportLostTm();
return; return;
} }
setData(pData); setData(pData);