From 21ac86619e2b1fecf71bd2aa0f09ecbd471c8531 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 30 Aug 2022 15:52:34 +0200 Subject: [PATCH] now its getting interesting --- src/fsfw/devicehandlers/DeviceHandlerBase.cpp | 61 ------------------- src/fsfw/util/dataWrapper.h | 18 +++++- 2 files changed, 17 insertions(+), 62 deletions(-) diff --git a/src/fsfw/devicehandlers/DeviceHandlerBase.cpp b/src/fsfw/devicehandlers/DeviceHandlerBase.cpp index bdfd7efa..5aebe917 100644 --- a/src/fsfw/devicehandlers/DeviceHandlerBase.cpp +++ b/src/fsfw/devicehandlers/DeviceHandlerBase.cpp @@ -1329,67 +1329,6 @@ void DeviceHandlerBase::handleDeviceTm(util::DataWrapper dataWrapper, DeviceComm } } -void DeviceHandlerBase::handleDeviceTM(const uint8_t* data, size_t dataSize, - DeviceCommandId_t replyId, bool forceDirectTm) { - // TODO: Horrible duplicate code. Avoiding this would require using the Serializable union - // type. Furthermore, DeviceTmReportingWrapper needs to be extended to allow using raw - // buffers. - if (data == nullptr) { - return; - } - - DeviceReplyMap::iterator iter = deviceReplyMap.find(replyId); - if (iter == deviceReplyMap.end()) { - triggerEvent(DEVICE_UNKNOWN_REPLY, replyId); - return; - } - - /* Regular replies to a command */ - if (iter->second.command != deviceCommandMap.end()) { - MessageQueueId_t queueId = iter->second.command->second.sendReplyTo; - - if (queueId != NO_COMMANDER) { - /* This may fail, but we'll ignore the fault. */ - actionHelper.reportData(queueId, replyId, data, dataSize); - } - - /* This check should make sure we get any TM but don't get anything doubled. */ - // TODO: The wrapper does not support this.. - // if (wiretappingMode == TM && (requestedRawTraffic != queueId)) { - // DeviceTmReportingWrapper wrapper(getObjectId(), replyId, data, dataSize); - // actionHelper.reportData(requestedRawTraffic, replyId, &wrapper); - // } - - else if (forceDirectTm and (defaultRawReceiver != queueId) and - (defaultRawReceiver != MessageQueueIF::NO_QUEUE)) { - // hiding of sender needed so the service will handle it as - // unexpected Data, no matter what state (progress or completed) - // it is in - actionHelper.reportData(defaultRawReceiver, replyId, data, dataSize, true); - } - } - /* Unrequested or aperiodic replies */ - // TODO: The wrapper does not support this.. - // else { - // DeviceTmReportingWrapper wrapper(getObjectId(), replyId, data, dataSize); - // if (wiretappingMode == TM) { - // actionHelper.reportData(requestedRawTraffic, replyId, &wrapper); - // } - // if (forceDirectTm and defaultRawReceiver != MessageQueueIF::NO_QUEUE) { - // // sid_t setSid = sid_t(this->getObjectId(), replyId); - // // LocalPoolDataSetBase* dataset = getDataSetHandle(setSid); - // // if(dataset != nullptr) { - // // poolManager.generateHousekeepingPacket(setSid, dataset, true); - // // } - // - // // hiding of sender needed so the service will handle it as - // // unexpected Data, no matter what state (progress or completed) - // // it is in - // actionHelper.reportData(defaultRawReceiver, replyId, &wrapper, true); - // } - // } -} - ReturnValue_t DeviceHandlerBase::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t* data, size_t size) { ReturnValue_t result = acceptExternalDeviceCommands(); diff --git a/src/fsfw/util/dataWrapper.h b/src/fsfw/util/dataWrapper.h index fe973290..6a3fd5dc 100644 --- a/src/fsfw/util/dataWrapper.h +++ b/src/fsfw/util/dataWrapper.h @@ -23,9 +23,25 @@ union DataUnion { }; struct DataWrapper { + using BufPairT = std::pair; + + DataWrapper() = default; + + DataWrapper(const uint8_t* data, size_t size): type(DataTypes::RAW) { + setRawData({data, size}); + } + + explicit DataWrapper(BufPairT raw): type(DataTypes::RAW) { + setRawData(raw); + } + + explicit DataWrapper(SerializeIF& serializable): type(DataTypes::SERIALIZABLE) { + setSerializable(serializable); + } + DataTypes type = DataTypes::NONE; DataUnion dataUnion; - using BufPairT = std::pair; + [[nodiscard]] size_t getLength() const { if (type == DataTypes::RAW) {