From d00cb6d4a540d74cfa906187e2f21f7c5a1ce657 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Sat, 9 Apr 2022 15:38:09 +0200 Subject: [PATCH] updates for new dle parser API --- fsfw | 2 +- linux/boardtest/UartTestClass.cpp | 10 +++++++--- linux/boardtest/UartTestClass.h | 3 ++- linux/devices/ScexDleParser.cpp | 2 +- linux/devices/ScexDleParser.h | 2 +- linux/devices/ScexUartReader.cpp | 10 +++++++--- linux/devices/ScexUartReader.h | 2 +- 7 files changed, 20 insertions(+), 11 deletions(-) diff --git a/fsfw b/fsfw index bdddee4f..4e242aa9 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit bdddee4f81fbdff7f207fd03b3c592522e04c5aa +Subproject commit 4e242aa9547dfc6d7abc0cdd405440547239016b diff --git a/linux/boardtest/UartTestClass.cpp b/linux/boardtest/UartTestClass.cpp index 0a164c8b..672a34c8 100644 --- a/linux/boardtest/UartTestClass.cpp +++ b/linux/boardtest/UartTestClass.cpp @@ -290,9 +290,13 @@ int UartTestClass::prepareScexCmd(scex::ScexCmds cmd, bool tempCheck, uint8_t* c return 0; } -void UartTestClass::foundDlePacketHandler(uint8_t* packet, size_t len, void* args) { - UartTestClass* obj = reinterpret_cast(args); - obj->handleFoundDlePacket(packet, len); +void UartTestClass::foundDlePacketHandler(const DleParser::Context& ctx) { + UartTestClass* obj = reinterpret_cast(ctx.userArgs); + if (ctx.getType() == DleParser::ContextType::PACKET_FOUND) { + obj->handleFoundDlePacket(ctx.decodedPacket.first, ctx.decodedPacket.second); + } else { + DleParser::defaultErrorHandler(ctx.error.first, ctx.error.second); + } } void UartTestClass::handleFoundDlePacket(uint8_t* packet, size_t len) { diff --git a/linux/boardtest/UartTestClass.h b/linux/boardtest/UartTestClass.h index b080f8a3..c6242281 100644 --- a/linux/boardtest/UartTestClass.h +++ b/linux/boardtest/UartTestClass.h @@ -3,6 +3,7 @@ #include #include +#include #include #include // Contains POSIX terminal control definitions @@ -42,7 +43,7 @@ class UartTestClass : public TestTask { void scexSimplePeriodic(); void scexSimpleInit(); - static void foundDlePacketHandler(uint8_t* packet, size_t len, void* args); + static void foundDlePacketHandler(const DleParser::Context& ctx); void handleFoundDlePacket(uint8_t* packet, size_t len); bool cmdSent = false; diff --git a/linux/devices/ScexDleParser.cpp b/linux/devices/ScexDleParser.cpp index f2620b8e..3a95e497 100644 --- a/linux/devices/ScexDleParser.cpp +++ b/linux/devices/ScexDleParser.cpp @@ -1,6 +1,6 @@ #include "ScexDleParser.h" ScexDleParser::ScexDleParser(SimpleRingBuffer &decodeRingBuf, DleEncoder &decoder, - BufPair encodedBuf, BufPair decodedBuf, FoundPacketHandler handler, + BufPair encodedBuf, BufPair decodedBuf, UserHandler handler, void *args) : DleParser(decodeRingBuf, decoder, encodedBuf, decodedBuf, handler, args) {} diff --git a/linux/devices/ScexDleParser.h b/linux/devices/ScexDleParser.h index d914cdaf..eab7e9c1 100644 --- a/linux/devices/ScexDleParser.h +++ b/linux/devices/ScexDleParser.h @@ -6,7 +6,7 @@ class ScexDleParser : public DleParser { public: ScexDleParser(SimpleRingBuffer& decodeRingBuf, DleEncoder& decoder, BufPair encodedBuf, - BufPair decodedBuf, FoundPacketHandler handler, void* args); + BufPair decodedBuf, UserHandler handler, void* args); }; #endif /* LINUX_DEVICES_SCEXDLEPARSER_H_ */ diff --git a/linux/devices/ScexUartReader.cpp b/linux/devices/ScexUartReader.cpp index 8017e8c6..5a325668 100644 --- a/linux/devices/ScexUartReader.cpp +++ b/linux/devices/ScexUartReader.cpp @@ -162,9 +162,13 @@ ReturnValue_t ScexUartReader::finish() { return RETURN_OK; } -void ScexUartReader::foundDlePacketHandler(uint8_t *packet, size_t len, void *args) { - ScexUartReader *obj = reinterpret_cast(args); - obj->handleFoundDlePacket(packet, len); +void ScexUartReader::foundDlePacketHandler(const DleParser::Context &ctx) { + ScexUartReader *obj = reinterpret_cast(ctx.userArgs); + if (ctx.getType() == DleParser::ContextType::PACKET_FOUND) { + obj->handleFoundDlePacket(ctx.decodedPacket.first, ctx.decodedPacket.second); + } else { + DleParser::defaultErrorHandler(ctx.error.first, ctx.error.second); + } } void ScexUartReader::handleFoundDlePacket(uint8_t *packet, size_t len) { diff --git a/linux/devices/ScexUartReader.h b/linux/devices/ScexUartReader.h index 246dd8f9..ad760b39 100644 --- a/linux/devices/ScexUartReader.h +++ b/linux/devices/ScexUartReader.h @@ -47,7 +47,7 @@ class ScexUartReader : public SystemObject, // strg+shift+n DynamicFIFO ipcQueue; ScexDleParser dleParser; - static void foundDlePacketHandler(uint8_t *packet, size_t len, void *args); + static void foundDlePacketHandler(const DleParser::Context &ctx); void handleFoundDlePacket(uint8_t *packet, size_t len); ReturnValue_t performOperation(uint8_t operationCode = 0) override;