diff --git a/housekeeping/HousekeepingMessage.cpp b/housekeeping/HousekeepingMessage.cpp index 0d0f9860..64b07c17 100644 --- a/housekeeping/HousekeepingMessage.cpp +++ b/housekeeping/HousekeepingMessage.cpp @@ -1,67 +1,47 @@ #include #include -HousekeepingMessage::HousekeepingMessage(): CommandMessage() { -} - HousekeepingMessage::~HousekeepingMessage() {} -void HousekeepingMessage::setParameter(uint32_t parameter) { - std::memcpy(getData(), ¶meter, sizeof(parameter)); -} - -uint32_t HousekeepingMessage::getParameter() const { - uint32_t parameter; - std::memcpy(¶meter, getData(), sizeof(parameter)); - return parameter; -} - -void HousekeepingMessage::setHkReportMessage(sid_t sid, +void HousekeepingMessage::setHkReportMessage(CommandMessage* message, sid_t sid, store_address_t storeId) { - CommandMessage::setCommand(HK_REPORT); - setSid(sid); - setParameter(storeId.raw); + message->setCommand(HK_REPORT); + message->setMessageSize(HK_MESSAGE_SIZE); + setSid(message, sid); + message->setParameter(storeId.raw); } -void HousekeepingMessage::setHkDiagnosticsMessage(sid_t sid, - store_address_t storeId) { - CommandMessage::setCommand(DIAGNOSTICS_REPORT); - setSid(sid); - setParameter(storeId.raw); +void HousekeepingMessage::setHkDiagnosticsMessage(CommandMessage* message, + sid_t sid, store_address_t storeId) { + message->setCommand(DIAGNOSTICS_REPORT); + setSid(message, sid); + setParameter(message, storeId.raw); } - -//size_t HousekeepingMessage::getMinimumMessageSize() const { -// return HK_MESSAGE_SIZE; -//} - -sid_t HousekeepingMessage::getSid() const { +sid_t HousekeepingMessage::getSid(const CommandMessage* message) { sid_t sid; - std::memcpy(&sid.raw, CommandMessage::getData(), sizeof(sid.raw)); + std::memcpy(&sid.raw, message->getData(), sizeof(sid.raw)); return sid; } -sid_t HousekeepingMessage::getHkReportMessage( - store_address_t *storeIdToSet) const { +sid_t HousekeepingMessage::getHkReportMessage(const CommandMessage *message, + store_address_t *storeIdToSet) { if(storeIdToSet != nullptr) { - *storeIdToSet = getParameter(); + *storeIdToSet = getParameter(message); } - return getSid(); + return getSid(message); } -void HousekeepingMessage::setSid(sid_t sid) { - std::memcpy(CommandMessage::getData(), &sid.raw, sizeof(sid.raw)); +void HousekeepingMessage::setSid(CommandMessage *message, sid_t sid) { + std::memcpy(message->getData(), &sid.raw, sizeof(sid.raw)); } -uint8_t* HousekeepingMessage::getData() { - return CommandMessage::getData() + sizeof(sid_t); +void HousekeepingMessage::setParameter(CommandMessage *message, + uint32_t parameter) { + message->setParameter3(parameter); } -const uint8_t* HousekeepingMessage::getData() const { - return CommandMessage::getData() + sizeof(sid_t); -} - -void HousekeepingMessage::clear() { - // clear IPC store where it is needed. +uint32_t HousekeepingMessage::getParameter(const CommandMessage *message) { + return message->getParameter3(); } diff --git a/housekeeping/HousekeepingMessage.h b/housekeeping/HousekeepingMessage.h index 8958201e..e2a69805 100644 --- a/housekeeping/HousekeepingMessage.h +++ b/housekeeping/HousekeepingMessage.h @@ -34,7 +34,7 @@ union sid_t { * This message is slightly larger than regular command messages to accomodate * the uint64_t structure ID (SID). */ -class HousekeepingMessage : public CommandMessage { +class HousekeepingMessage { public: static constexpr size_t HK_MESSAGE_SIZE = CommandMessageIF::HEADER_SIZE + @@ -45,7 +45,7 @@ public: * the message data, see CommandMessageIF and getInternalMessage(). * @param message */ - HousekeepingMessage(); + HousekeepingMessage() = delete; virtual ~HousekeepingMessage(); static constexpr uint8_t MESSAGE_ID = messagetypes::HOUSEKEEPING; @@ -94,25 +94,22 @@ public: static constexpr Command_t MODIFY_DIAGNOSTICS_REPORT_COLLECTION_INTERVAL = MAKE_COMMAND_ID(32); + static sid_t getSid(const CommandMessage* message); - void setParameter(uint32_t parameter); - uint32_t getParameter() const; - sid_t getSid() const; + static void setHkReportMessage(CommandMessage* message, sid_t sid, + store_address_t storeId); + static void setHkDiagnosticsMessage(CommandMessage* message, sid_t sid, + store_address_t storeId); - void setHkReportMessage(sid_t sid, store_address_t storeId); - void setHkDiagnosticsMessage(sid_t sid, store_address_t storeId); //! Get the respective SID and store ID. Command ID can be used beforehand //! to distinguish between diagnostics and regular HK packets - sid_t getHkReportMessage(store_address_t * storeIdToSet) const; + static sid_t getHkReportMessage(const CommandMessage* message, + store_address_t * storeIdToSet); - //virtual size_t getMinimumMessageSize() const override; - virtual void clear() override; private: - - void setSid(sid_t sid); - - virtual uint8_t* getData() override; - virtual const uint8_t* getData() const override; + static void setSid(CommandMessage* message, sid_t sid); + static void setParameter(CommandMessage* message, uint32_t parameter); + static uint32_t getParameter(const CommandMessage* message); }; diff --git a/ipc/CommandMessage.cpp b/ipc/CommandMessage.cpp index 2b0c34d5..e1d4dfae 100644 --- a/ipc/CommandMessage.cpp +++ b/ipc/CommandMessage.cpp @@ -52,6 +52,18 @@ void CommandMessage::setParameter2(uint32_t parameter2) { sizeof(parameter2)); } +uint32_t CommandMessage::getParameter3() const { + uint32_t parameter3; + std::memcpy(¶meter3, this->getData() + 2 * sizeof(uint32_t), + sizeof(parameter3)); + return parameter3; +} + +void CommandMessage::setParameter3(uint32_t parameter3) { + std::memcpy(this->getData() + 2 * sizeof(uint32_t), ¶meter3, + sizeof(parameter3)); +} + size_t CommandMessage::getMinimumMessageSize() const { return MINIMUM_COMMAND_MESSAGE_SIZE; } diff --git a/ipc/CommandMessage.h b/ipc/CommandMessage.h index 53df1c08..021fa49a 100644 --- a/ipc/CommandMessage.h +++ b/ipc/CommandMessage.h @@ -66,29 +66,21 @@ public: virtual uint8_t* getData() override; virtual const uint8_t* getData() const override; + /** * Get the first parameter of the message * @return the first Parameter of the message */ uint32_t getParameter() const; - /** * Set the first parameter of the message * @param the first parameter of the message */ void setParameter(uint32_t parameter1); - - /** - * Get the second parameter of the message - * @return the second Parameter of the message - */ uint32_t getParameter2() const; - - /** - * Set the second parameter of the message - * @param the second parameter of the message - */ void setParameter2(uint32_t parameter2); + uint32_t getParameter3() const; + void setParameter3(uint32_t parameter3); /** * check if a message was cleared