diff --git a/mission/devices/SolarArrayDeploymentHandler.cpp b/mission/devices/SolarArrayDeploymentHandler.cpp index 2b24ba07..9fe6539d 100644 --- a/mission/devices/SolarArrayDeploymentHandler.cpp +++ b/mission/devices/SolarArrayDeploymentHandler.cpp @@ -111,7 +111,7 @@ void SolarArrayDeploymentHandler::performWaitOn8VActions() { } else { if (mainSwitchCountdown.hasTimedOut()) { triggerEvent(MAIN_SWITCH_ON_TIMEOUT); - actionHelper.finish(false, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, + actionHelper.finish(false, rememberCommanderId, static_cast(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS), MAIN_SWITCH_TIMEOUT_FAILURE); stateMachine = WAIT_ON_DELOYMENT_COMMAND; } @@ -129,7 +129,7 @@ void SolarArrayDeploymentHandler::switchDeploymentTransistors() { * the deployment sequence. */ stateMachine = WAIT_ON_DELOYMENT_COMMAND; triggerEvent(DEPL_SA1_GPIO_SWTICH_ON_FAILED); - actionHelper.finish(false, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, SWITCHING_DEPL_SA2_FAILED); + actionHelper.finish(false, rememberCommanderId, static_cast(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS), SWITCHING_DEPL_SA1_FAILED); mainLineSwitcher->sendSwitchCommand(mainLineSwitch, PowerSwitchIF::SWITCH_OFF); } result = gpioInterface->pullHigh(deplSA2); @@ -139,7 +139,7 @@ void SolarArrayDeploymentHandler::switchDeploymentTransistors() { << std::endl; stateMachine = WAIT_ON_DELOYMENT_COMMAND; triggerEvent(DEPL_SA2_GPIO_SWTICH_ON_FAILED); - actionHelper.finish(false, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, SWITCHING_DEPL_SA2_FAILED); + actionHelper.finish(false, rememberCommanderId, static_cast(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS), SWITCHING_DEPL_SA2_FAILED); mainLineSwitcher->sendSwitchCommand(mainLineSwitch, PowerSwitchIF::SWITCH_OFF); } deploymentCountdown.setTimeout(burnTimeMs); @@ -149,7 +149,7 @@ void SolarArrayDeploymentHandler::switchDeploymentTransistors() { void SolarArrayDeploymentHandler::handleDeploymentFinish() { ReturnValue_t result = RETURN_OK; if (deploymentCountdown.hasTimedOut()) { - actionHelper.finish(true, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, RETURN_OK); + actionHelper.finish(true, rememberCommanderId, static_cast(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS), RETURN_OK); result = gpioInterface->pullLow(deplSA1); if (result != RETURN_OK) { sif::debug << "SolarArrayDeploymentHandler::handleStateMachine: Failed to pull solar" @@ -181,25 +181,20 @@ void SolarArrayDeploymentHandler::readCommandQueue() { } } -ReturnValue_t SolarArrayDeploymentHandler::executeAction(ActionId_t actionId, - MessageQueueId_t commandedBy, - const uint8_t* data, size_t size) { - ReturnValue_t result; +ReturnValue_t SolarArrayDeploymentHandler::executeAction(Action* action) { if (stateMachine != WAIT_ON_DELOYMENT_COMMAND) { sif::error << "SolarArrayDeploymentHandler::executeAction: Received command while not in" << "waiting-on-command-state" << std::endl; return DEPLOYMENT_ALREADY_EXECUTING; } - if (actionId != DEPLOY_SOLAR_ARRAYS) { - sif::error << "SolarArrayDeploymentHandler::executeAction: Received invalid command" - << std::endl; - result = COMMAND_NOT_SUPPORTED; - } else { - stateMachine = SWITCH_8V_ON; - rememberCommanderId = commandedBy; - result = RETURN_OK; - } - return result; + //delegates to SolarArrayDeploymentHandler::handleAction() + return action->handle(); +} + +ReturnValue_t SolarArrayDeploymentHandler::handleAction(SolarArrayDeploymentAction* action) { + stateMachine = SWITCH_8V_ON; + rememberCommanderId = action->commandedBy; + return RETURN_OK; } MessageQueueId_t SolarArrayDeploymentHandler::getCommandQueue() const { diff --git a/mission/devices/SolarArrayDeploymentHandler.h b/mission/devices/SolarArrayDeploymentHandler.h index d66a0509..0b2bf236 100644 --- a/mission/devices/SolarArrayDeploymentHandler.h +++ b/mission/devices/SolarArrayDeploymentHandler.h @@ -1,6 +1,7 @@ #ifndef MISSION_DEVICES_SOLARARRAYDEPLOYMENT_H_ #define MISSION_DEVICES_SOLARARRAYDEPLOYMENT_H_ +#include "devicedefinitions/SolarArrayDeploymentDefinitions.h" #include #include #include @@ -24,8 +25,6 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF, public HasReturnvaluesIF, public HasActionsIF { public: - static const DeviceCommandId_t DEPLOY_SOLAR_ARRAYS = 0x5; - /** * @brief constructor * @@ -51,8 +50,8 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF, virtual ReturnValue_t performOperation(uint8_t operationCode = 0) override; virtual MessageQueueId_t getCommandQueue() const override; - virtual ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, - const uint8_t* data, size_t size) override; + virtual ReturnValue_t executeAction(Action* action) override; + ReturnValue_t handleAction(SolarArrayDeploymentAction* action); virtual ReturnValue_t initialize() override; private: @@ -127,6 +126,9 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF, */ PowerSwitchIF* mainLineSwitcher = nullptr; + + SolarArrayDeploymentAction deploymentAction = SolarArrayDeploymentAction(this); + ActionHelper actionHelper; void readCommandQueue(); diff --git a/mission/devices/devicedefinitions/SolarArrayDeploymentDefinitions.h b/mission/devices/devicedefinitions/SolarArrayDeploymentDefinitions.h new file mode 100644 index 00000000..e69d0874 --- /dev/null +++ b/mission/devices/devicedefinitions/SolarArrayDeploymentDefinitions.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include +#include +#include + +class SolarArrayDeploymentHandler; + +FSFW_ENUM(SolarArrayDeploymentCommands, DeviceCommandId_t,((DEPLOY_SOLAR_ARRAYS, 0x05, "Deploy Solar Arrays"))) + +class SolarArrayDeploymentAction + : public TemplateAction { + public: + SolarArrayDeploymentAction(SolarArrayDeploymentHandler *owner) + : TemplateAction(owner, SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS) {} +}; \ No newline at end of file