fsfw/src/fsfw/controller/ExtendedControllerBase.cpp

93 lines
2.9 KiB
C++
Raw Normal View History

2021-07-13 20:22:54 +02:00
#include "fsfw/controller/ExtendedControllerBase.h"
2020-10-12 15:40:27 +02:00
2022-02-02 10:29:30 +01:00
ExtendedControllerBase::ExtendedControllerBase(object_id_t objectId, object_id_t parentId,
size_t commandQueueDepth)
: ControllerBase(objectId, parentId, commandQueueDepth),
poolManager(this, commandQueue),
actionHelper(this, commandQueue) {}
2020-10-12 15:40:27 +02:00
2022-02-02 10:29:30 +01:00
ExtendedControllerBase::~ExtendedControllerBase() {}
2021-02-03 22:23:31 +01:00
2022-06-29 23:36:45 +02:00
ReturnValue_t ExtendedControllerBase::executeAction(Action *action, MessageQueueId_t commandedBy) {
2022-02-02 10:29:30 +01:00
/* Needs to be overriden and implemented by child class. */
return HasReturnvaluesIF::RETURN_OK;
2020-10-12 15:40:27 +02:00
}
2022-02-02 10:29:30 +01:00
object_id_t ExtendedControllerBase::getObjectId() const { return SystemObject::getObjectId(); }
2020-10-12 15:40:27 +02:00
uint32_t ExtendedControllerBase::getPeriodicOperationFrequency() const {
2022-02-02 10:29:30 +01:00
return this->executingTask->getPeriodMs();
2020-10-12 15:40:27 +02:00
}
2022-02-02 10:29:30 +01:00
ReturnValue_t ExtendedControllerBase::handleCommandMessage(CommandMessage *message) {
ReturnValue_t result = actionHelper.handleActionMessage(message);
if (result == HasReturnvaluesIF::RETURN_OK) {
return result;
}
return poolManager.handleHousekeepingMessage(message);
2020-10-12 15:40:27 +02:00
}
void ExtendedControllerBase::handleQueue() {
2022-02-02 10:29:30 +01:00
CommandMessage command;
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
for (result = commandQueue->receiveMessage(&command); result == RETURN_OK;
result = commandQueue->receiveMessage(&command)) {
result = actionHelper.handleActionMessage(&command);
if (result == RETURN_OK) {
continue;
2020-10-12 15:40:27 +02:00
}
2022-02-02 10:29:30 +01:00
result = modeHelper.handleModeCommand(&command);
if (result == RETURN_OK) {
continue;
2020-10-12 15:40:27 +02:00
}
2022-02-02 10:29:30 +01:00
result = healthHelper.handleHealthCommand(&command);
if (result == RETURN_OK) {
continue;
2020-10-12 15:40:27 +02:00
}
2022-02-02 10:29:30 +01:00
result = poolManager.handleHousekeepingMessage(&command);
if (result == RETURN_OK) {
continue;
}
result = handleCommandMessage(&command);
if (result == RETURN_OK) {
continue;
}
command.setToUnknownCommand();
commandQueue->reply(&command);
}
}
ReturnValue_t ExtendedControllerBase::initialize() {
ReturnValue_t result = ControllerBase::initialize();
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
result = actionHelper.initialize(commandQueue);
if (result != HasReturnvaluesIF::RETURN_OK) {
return result;
}
return poolManager.initialize(commandQueue);
2020-10-12 15:40:27 +02:00
}
ReturnValue_t ExtendedControllerBase::initializeAfterTaskCreation() {
2022-02-02 10:29:30 +01:00
return poolManager.initializeAfterTaskCreation();
2020-10-12 15:40:27 +02:00
}
ReturnValue_t ExtendedControllerBase::performOperation(uint8_t opCode) {
2022-02-02 10:29:30 +01:00
handleQueue();
performControlOperation();
/* We do this after performing control operation because variables will be set changed
in this function. */
poolManager.performHkOperation();
return RETURN_OK;
2020-10-12 15:40:27 +02:00
}
2022-02-02 10:29:30 +01:00
MessageQueueId_t ExtendedControllerBase::getCommandQueue() const { return commandQueue->getId(); }
2020-10-12 15:40:27 +02:00
2022-02-02 10:29:30 +01:00
LocalDataPoolManager *ExtendedControllerBase::getHkManagerHandle() { return &poolManager; }