adapted SolarArrayDeploymentHandler

This commit is contained in:
Ulrich Mohr 2022-07-26 17:18:35 +02:00
parent cd1200d23d
commit a2910a401e
3 changed files with 37 additions and 22 deletions

View File

@ -111,7 +111,7 @@ void SolarArrayDeploymentHandler::performWaitOn8VActions() {
} else { } else {
if (mainSwitchCountdown.hasTimedOut()) { if (mainSwitchCountdown.hasTimedOut()) {
triggerEvent(MAIN_SWITCH_ON_TIMEOUT); triggerEvent(MAIN_SWITCH_ON_TIMEOUT);
actionHelper.finish(false, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, actionHelper.finish(false, rememberCommanderId, static_cast<DeviceCommandId_t>(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS),
MAIN_SWITCH_TIMEOUT_FAILURE); MAIN_SWITCH_TIMEOUT_FAILURE);
stateMachine = WAIT_ON_DELOYMENT_COMMAND; stateMachine = WAIT_ON_DELOYMENT_COMMAND;
} }
@ -129,7 +129,7 @@ void SolarArrayDeploymentHandler::switchDeploymentTransistors() {
* the deployment sequence. */ * the deployment sequence. */
stateMachine = WAIT_ON_DELOYMENT_COMMAND; stateMachine = WAIT_ON_DELOYMENT_COMMAND;
triggerEvent(DEPL_SA1_GPIO_SWTICH_ON_FAILED); triggerEvent(DEPL_SA1_GPIO_SWTICH_ON_FAILED);
actionHelper.finish(false, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, SWITCHING_DEPL_SA2_FAILED); actionHelper.finish(false, rememberCommanderId, static_cast<DeviceCommandId_t>(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS), SWITCHING_DEPL_SA1_FAILED);
mainLineSwitcher->sendSwitchCommand(mainLineSwitch, PowerSwitchIF::SWITCH_OFF); mainLineSwitcher->sendSwitchCommand(mainLineSwitch, PowerSwitchIF::SWITCH_OFF);
} }
result = gpioInterface->pullHigh(deplSA2); result = gpioInterface->pullHigh(deplSA2);
@ -139,7 +139,7 @@ void SolarArrayDeploymentHandler::switchDeploymentTransistors() {
<< std::endl; << std::endl;
stateMachine = WAIT_ON_DELOYMENT_COMMAND; stateMachine = WAIT_ON_DELOYMENT_COMMAND;
triggerEvent(DEPL_SA2_GPIO_SWTICH_ON_FAILED); triggerEvent(DEPL_SA2_GPIO_SWTICH_ON_FAILED);
actionHelper.finish(false, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, SWITCHING_DEPL_SA2_FAILED); actionHelper.finish(false, rememberCommanderId, static_cast<DeviceCommandId_t>(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS), SWITCHING_DEPL_SA2_FAILED);
mainLineSwitcher->sendSwitchCommand(mainLineSwitch, PowerSwitchIF::SWITCH_OFF); mainLineSwitcher->sendSwitchCommand(mainLineSwitch, PowerSwitchIF::SWITCH_OFF);
} }
deploymentCountdown.setTimeout(burnTimeMs); deploymentCountdown.setTimeout(burnTimeMs);
@ -149,7 +149,7 @@ void SolarArrayDeploymentHandler::switchDeploymentTransistors() {
void SolarArrayDeploymentHandler::handleDeploymentFinish() { void SolarArrayDeploymentHandler::handleDeploymentFinish() {
ReturnValue_t result = RETURN_OK; ReturnValue_t result = RETURN_OK;
if (deploymentCountdown.hasTimedOut()) { if (deploymentCountdown.hasTimedOut()) {
actionHelper.finish(true, rememberCommanderId, DEPLOY_SOLAR_ARRAYS, RETURN_OK); actionHelper.finish(true, rememberCommanderId, static_cast<DeviceCommandId_t>(SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS), RETURN_OK);
result = gpioInterface->pullLow(deplSA1); result = gpioInterface->pullLow(deplSA1);
if (result != RETURN_OK) { if (result != RETURN_OK) {
sif::debug << "SolarArrayDeploymentHandler::handleStateMachine: Failed to pull solar" sif::debug << "SolarArrayDeploymentHandler::handleStateMachine: Failed to pull solar"
@ -181,25 +181,20 @@ void SolarArrayDeploymentHandler::readCommandQueue() {
} }
} }
ReturnValue_t SolarArrayDeploymentHandler::executeAction(ActionId_t actionId, ReturnValue_t SolarArrayDeploymentHandler::executeAction(Action* action) {
MessageQueueId_t commandedBy,
const uint8_t* data, size_t size) {
ReturnValue_t result;
if (stateMachine != WAIT_ON_DELOYMENT_COMMAND) { if (stateMachine != WAIT_ON_DELOYMENT_COMMAND) {
sif::error << "SolarArrayDeploymentHandler::executeAction: Received command while not in" sif::error << "SolarArrayDeploymentHandler::executeAction: Received command while not in"
<< "waiting-on-command-state" << std::endl; << "waiting-on-command-state" << std::endl;
return DEPLOYMENT_ALREADY_EXECUTING; return DEPLOYMENT_ALREADY_EXECUTING;
} }
if (actionId != DEPLOY_SOLAR_ARRAYS) { //delegates to SolarArrayDeploymentHandler::handleAction()
sif::error << "SolarArrayDeploymentHandler::executeAction: Received invalid command" return action->handle();
<< std::endl; }
result = COMMAND_NOT_SUPPORTED;
} else { ReturnValue_t SolarArrayDeploymentHandler::handleAction(SolarArrayDeploymentAction* action) {
stateMachine = SWITCH_8V_ON; stateMachine = SWITCH_8V_ON;
rememberCommanderId = commandedBy; rememberCommanderId = action->commandedBy;
result = RETURN_OK; return RETURN_OK;
}
return result;
} }
MessageQueueId_t SolarArrayDeploymentHandler::getCommandQueue() const { MessageQueueId_t SolarArrayDeploymentHandler::getCommandQueue() const {

View File

@ -1,6 +1,7 @@
#ifndef MISSION_DEVICES_SOLARARRAYDEPLOYMENT_H_ #ifndef MISSION_DEVICES_SOLARARRAYDEPLOYMENT_H_
#define MISSION_DEVICES_SOLARARRAYDEPLOYMENT_H_ #define MISSION_DEVICES_SOLARARRAYDEPLOYMENT_H_
#include "devicedefinitions/SolarArrayDeploymentDefinitions.h"
#include <devices/powerSwitcherList.h> #include <devices/powerSwitcherList.h>
#include <fsfw/action/HasActionsIF.h> #include <fsfw/action/HasActionsIF.h>
#include <fsfw/devicehandlers/CookieIF.h> #include <fsfw/devicehandlers/CookieIF.h>
@ -24,8 +25,6 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF,
public HasReturnvaluesIF, public HasReturnvaluesIF,
public HasActionsIF { public HasActionsIF {
public: public:
static const DeviceCommandId_t DEPLOY_SOLAR_ARRAYS = 0x5;
/** /**
* @brief constructor * @brief constructor
* *
@ -51,8 +50,8 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF,
virtual ReturnValue_t performOperation(uint8_t operationCode = 0) override; virtual ReturnValue_t performOperation(uint8_t operationCode = 0) override;
virtual MessageQueueId_t getCommandQueue() const override; virtual MessageQueueId_t getCommandQueue() const override;
virtual ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, virtual ReturnValue_t executeAction(Action* action) override;
const uint8_t* data, size_t size) override; ReturnValue_t handleAction(SolarArrayDeploymentAction* action);
virtual ReturnValue_t initialize() override; virtual ReturnValue_t initialize() override;
private: private:
@ -127,6 +126,9 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF,
*/ */
PowerSwitchIF* mainLineSwitcher = nullptr; PowerSwitchIF* mainLineSwitcher = nullptr;
SolarArrayDeploymentAction deploymentAction = SolarArrayDeploymentAction(this);
ActionHelper actionHelper; ActionHelper actionHelper;
void readCommandQueue(); void readCommandQueue();

View File

@ -0,0 +1,18 @@
#pragma once
#include <fsfw/action/MinMaxParameter.h>
#include <fsfw/action/TemplateAction.h>
#include <fsfw/introspection/Enum.h>
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
class SolarArrayDeploymentHandler;
FSFW_ENUM(SolarArrayDeploymentCommands, DeviceCommandId_t,((DEPLOY_SOLAR_ARRAYS, 0x05, "Deploy Solar Arrays")))
class SolarArrayDeploymentAction
: public TemplateAction<SolarArrayDeploymentHandler, SolarArrayDeploymentAction,
SolarArrayDeploymentCommands> {
public:
SolarArrayDeploymentAction(SolarArrayDeploymentHandler *owner)
: TemplateAction(owner, SolarArrayDeploymentCommands::DEPLOY_SOLAR_ARRAYS) {}
};