#ifndef FSFW_CONTROLLER_EXTENDEDCONTROLLERBASE_H_ #define FSFW_CONTROLLER_EXTENDEDCONTROLLERBASE_H_ #include "ControllerBase.h" #include "../action/HasActionsIF.h" #include "../datapoollocal/HasLocalDataPoolIF.h" #include "../action/ActionHelper.h" #include "../datapoollocal/LocalDataPoolManager.h" /** * @brief Extendes the basic ControllerBase with the common components * HasActionsIF for commandability and HasLocalDataPoolIF to keep * a pool of local data pool variables. * @details * Default implementations required for the interfaces will be empty and have * to be implemented by child class. */ class ExtendedControllerBase: public ControllerBase, public HasActionsIF, public HasLocalDataPoolIF { public: ExtendedControllerBase(object_id_t objectId, object_id_t parentId, size_t commandQueueDepth = 3); virtual ~ExtendedControllerBase(); /** SystemObjectIF overrides */ virtual ReturnValue_t initialize() override; virtual MessageQueueId_t getCommandQueue() const override; /** ExecutableObjectIF overrides */ virtual ReturnValue_t performOperation(uint8_t opCode) override; virtual ReturnValue_t initializeAfterTaskCreation() override; protected: LocalDataPoolManager poolManager; ActionHelper actionHelper; /** * Implemented by child class. Handle all command messages which are * not health, mode, action or housekeeping messages. * @param message * @return */ virtual ReturnValue_t handleCommandMessage(CommandMessage *message) = 0; /** * Periodic helper from ControllerBase, implemented by child class. */ virtual void performControlOperation() = 0; /** Handle the four messages mentioned above */ void handleQueue() override; /** HasActionsIF overrides */ virtual ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t* data, size_t size) override; /** HasLocalDatapoolIF overrides */ virtual LocalDataPoolManager* getHkManagerHandle() override; virtual object_id_t getObjectId() const override; virtual ReturnValue_t initializeLocalDataPool( localpool::DataPool& localDataPoolMap, LocalDataPoolManager& poolManager) override; virtual uint32_t getPeriodicOperationFrequency() const override; virtual LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override; }; #endif /* FSFW_CONTROLLER_EXTENDEDCONTROLLERBASE_H_ */