From 458929957dea256397e1102491fcf893f7f610c9 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 15 Aug 2022 18:43:28 +0200 Subject: [PATCH] generic TM checker --- linux/devices/ploc/PlocSupvHelper.cpp | 26 +++++++++++++++++++------- linux/devices/ploc/PlocSupvHelper.h | 5 ++++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/linux/devices/ploc/PlocSupvHelper.cpp b/linux/devices/ploc/PlocSupvHelper.cpp index c9dc12a8..54e7c8ba 100644 --- a/linux/devices/ploc/PlocSupvHelper.cpp +++ b/linux/devices/ploc/PlocSupvHelper.cpp @@ -375,9 +375,8 @@ ReturnValue_t PlocSupvHelper::handleAck() { return result; } supv::AcknowledgmentReport ackReport(tmBuf.data(), tmBuf.size()); - result = ackReport.checkCrc(); - if (result != RETURN_OK) { - triggerEvent(SUPV_REPLY_CRC_MISSMATCH, rememberApid); + result = checkReceivedTm(ackReport); + if(result != RETURN_OK) { return result; } result = ackReport.checkApid(); @@ -403,9 +402,8 @@ ReturnValue_t PlocSupvHelper::handleExe(uint32_t timeout) { return result; } supv::ExecutionReport exeReport(tmBuf.data(), tmBuf.size()); - result = exeReport.checkCrc(); - if (result != RETURN_OK) { - triggerEvent(SUPV_REPLY_CRC_MISSMATCH, rememberApid); + result = checkReceivedTm(exeReport); + if(result != RETURN_OK) { return result; } result = exeReport.checkApid(); @@ -444,6 +442,20 @@ ReturnValue_t PlocSupvHelper::handleTmReception(size_t remainingBytes, uint32_t return result; } +ReturnValue_t PlocSupvHelper::checkReceivedTm(ploc::SpTmReader& reader) { + ReturnValue_t result = reader.checkSize(); + if (result != RETURN_OK) { + triggerEvent(SUPV_REPLY_SIZE_MISSMATCH, rememberApid); + return result; + } + result = reader.checkCrc(); + if (result != RETURN_OK) { + triggerEvent(SUPV_REPLY_CRC_MISSMATCH, rememberApid); + return result; + } + return result; +} + ReturnValue_t PlocSupvHelper::receive(uint8_t* data, size_t* readBytes, size_t requestBytes) { ReturnValue_t result = RETURN_OK; uint8_t* buffer = nullptr; @@ -585,7 +597,7 @@ ReturnValue_t PlocSupvHelper::handleEventBufferReception() { return result; } ReturnValue_t result = tmReader.checkCrc(); - if (result != RETURN_OK) { + if(result != RETURN_OK) { triggerEvent(SUPV_REPLY_CRC_MISSMATCH, rememberApid); return result; } diff --git a/linux/devices/ploc/PlocSupvHelper.h b/linux/devices/ploc/PlocSupvHelper.h index 4b0348c9..9531c3cb 100644 --- a/linux/devices/ploc/PlocSupvHelper.h +++ b/linux/devices/ploc/PlocSupvHelper.h @@ -86,7 +86,8 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha //! [EXPORT] : [COMMENT] Update procedure failed when sending packet with number P1 //! P1: Packet number for which the memory write command fails static const Event WRITE_MEMORY_FAILED = MAKE_EVENT(19, severity::LOW); - static const Event SUPV_REPLY_CRC_MISSMATCH = MAKE_EVENT(20, severity::LOW); + static const Event SUPV_REPLY_SIZE_MISSMATCH = MAKE_EVENT(20, severity::LOW); + static const Event SUPV_REPLY_CRC_MISSMATCH = MAKE_EVENT(21, severity::LOW); PlocSupvHelper(object_id_t objectId); virtual ~PlocSupvHelper(); @@ -225,6 +226,8 @@ class PlocSupvHelper : public SystemObject, public ExecutableObjectIF, public Ha * failure report. */ ReturnValue_t handleTmReception(size_t remainingBytes, uint32_t timeout = 70000); + ReturnValue_t checkReceivedTm(ploc::SpTmReader& reader); + ReturnValue_t selectMemory(); ReturnValue_t prepareUpdate(); ReturnValue_t eraseMemory();