1 #ifndef _ots_RunControlStateMachine_h_
2 #define _ots_RunControlStateMachine_h_
4 #include "otsdaq/FiniteStateMachine/FiniteStateMachine.h"
5 #include "otsdaq/FiniteStateMachine/VStateMachine.h"
6 #include "otsdaq/ProgressBar/ProgressBar.h"
10 #include "toolbox/lang/Class.h"
23 void setStateMachineName(
const std::string& name)
25 theStateMachine_.setStateMachineName(name);
27 const std::string& getErrorMessage(
void)
const
29 return theStateMachine_.getErrorMessage();
31 void setAsyncPauseExceptionMessage(
const std::string& error)
33 asyncPauseExceptionReceived_ =
true;
34 theStateMachine_.setErrorMessage(error);
36 void setAsyncStopExceptionMessage(
const std::string& error)
38 asyncStopExceptionReceived_ =
true;
39 theStateMachine_.setErrorMessage(error);
42 template<
class OBJECT>
43 void addStateTransition(toolbox::fsm::State from,
44 toolbox::fsm::State to,
45 const std::string& input,
46 const std::string& transitionName,
48 void (OBJECT::*func)(toolbox::Event::Reference))
51 stateTransitionFunctionTable_[from][input] = func;
52 theStateMachine_.addStateTransition(from, to, input, transitionName, obj, func);
55 template<
class OBJECT>
56 void addStateTransition(toolbox::fsm::State from,
57 toolbox::fsm::State to,
58 const std::string& input,
59 const std::string& transitionName,
60 const std::string& transitionParameter,
62 void (OBJECT::*func)(toolbox::Event::Reference))
65 stateTransitionFunctionTable_[from][input] = func;
66 theStateMachine_.addStateTransition(
67 from, to, input, transitionName, transitionParameter, obj, func);
76 virtual void stateInitial(toolbox::fsm::FiniteStateMachine& ) { ; }
83 virtual void statePaused(toolbox::fsm::FiniteStateMachine& ) { ; }
90 virtual void stateRunning(toolbox::fsm::FiniteStateMachine& ) { ; }
96 virtual void stateHalted(toolbox::fsm::FiniteStateMachine& ) { ; }
108 virtual void inError(toolbox::fsm::FiniteStateMachine& ) { ; }
110 virtual void transitionConfiguring(toolbox::Event::Reference ) { ; }
111 virtual void transitionHalting(toolbox::Event::Reference ) { ; }
112 virtual void transitionShuttingDown(toolbox::Event::Reference ) { ; }
113 virtual void transitionStartingUp(toolbox::Event::Reference ) { ; }
114 virtual void transitionInitializing(toolbox::Event::Reference ) { ; }
115 virtual void transitionPausing(toolbox::Event::Reference ) { ; }
116 virtual void transitionResuming(toolbox::Event::Reference ) { ; }
117 virtual void transitionStarting(toolbox::Event::Reference ) { ; }
118 virtual void transitionStopping(toolbox::Event::Reference ) { ; }
119 virtual void enteringError(toolbox::Event::Reference ) { ; }
124 static const std::string FAILED_STATE_NAME;
125 static const std::string INITIAL_STATE_NAME;
126 static const std::string HALTED_STATE_NAME;
127 static const std::string PAUSED_STATE_NAME;
128 static const std::string RUNNING_STATE_NAME;
129 static const std::string SHUTDOWN_STATE_NAME;
130 static const std::string CONFIGURED_STATE_NAME;
132 static const std::string SHUTDOWN_TRANSITION_NAME;
133 static const std::string STARTUP_TRANSITION_NAME;
134 static const std::string INIT_TRANSITION_NAME;
135 static const std::string ERROR_TRANSITION_NAME;
136 static const std::string FAIL_TRANSITION_NAME;
137 static const std::string CONFIGURE_TRANSITION_NAME;
138 static const std::string HALT_TRANSITION_NAME;
139 static const std::string ABORT_TRANSITION_NAME;
140 static const std::string PAUSE_TRANSITION_NAME;
141 static const std::string RESUME_TRANSITION_NAME;
142 static const std::string START_TRANSITION_NAME;
143 static const std::string STOP_TRANSITION_NAME;
146 unsigned int getSubsystemIterationIndex(
void)
const {
return subsystemIterationIndex_; }
151 return (subsystemIterationIndex_ == 0 || isStandaloneSubsystem()) &&
152 iterationIndex_ == 0 && subIterationIndex_ == 0;
158 return isStandaloneSubsystem() ? iterationIndex_ : subsystemIterationIndex_;
160 void indicateSubsystemSyncStepWork(
void)
162 if(isStandaloneSubsystem())
163 iterationWorkFlag_ =
true;
165 subsystemIterationWorkFlag_ =
true;
167 void indicateSubsystemIterationWork(
void) { subsystemIterationWorkFlag_ =
true; }
168 void clearSubsystemIterationWork(
void) { subsystemIterationWorkFlag_ =
false; }
169 bool getSubsystemIterationWork(
void) {
return subsystemIterationWorkFlag_; }
172 unsigned int getIterationIndex(
void) {
return iterationIndex_; }
173 unsigned int getSubIterationIndex(
void) {
return subIterationIndex_; }
174 unsigned int getMinReadyForEventGenerationStartIteration(
void) {
return minReadyForEventGenerationStartIteration_; }
175 void indicateIterationWork(
void) { iterationWorkFlag_ =
true; }
176 void clearIterationWork(
void) { iterationWorkFlag_ =
false; }
177 bool getIterationWork(
void) {
return iterationWorkFlag_; }
180 void indicateSubIterationWork(
void) { subIterationWorkFlag_ =
true; }
181 void clearSubIterationWork(
void) { subIterationWorkFlag_ =
false; }
182 bool getSubIterationWork(
void) {
return subIterationWorkFlag_; }
184 const std::string& getLastCommand(
void) {
return lastIterationCommand_; }
185 const std::string& getLastAttemptedConfigureGroup(
void)
187 return lastAttemptedConfigureGroup_;
191 FiniteStateMachine theStateMachine_;
192 ProgressBar theProgressBar_;
194 std::atomic<bool> asyncFailureReceived_{
false};
195 std::atomic<bool> asyncPauseExceptionReceived_{
false};
196 std::atomic<bool> asyncStopExceptionReceived_{
false};
198 unsigned int subsystemIterationIndex_ = 0;
199 unsigned int iterationIndex_ = 0, subIterationIndex_ = 0;
200 bool subsystemIterationWorkFlag_, iterationWorkFlag_, subIterationWorkFlag_;
201 unsigned int minReadyForEventGenerationStartIteration_ = 0;
203 toolbox::fsm::State lastIterationState_;
204 std::string lastIterationCommand_;
205 std::string lastAttemptedConfigureGroup_;
206 std::string lastIterationResult_;
207 unsigned int lastSubsystemIterationIndex_, lastIterationIndex_, lastSubIterationIndex_;
209 std::map<toolbox::fsm::State,
210 std::map<std::string,
211 void (RunControlStateMachine::*)(toolbox::Event::Reference),
212 std::less<std::string> > >
213 stateTransitionFunctionTable_;
virtual void statePaused(toolbox::fsm::FiniteStateMachine &)
virtual void stateConfigured(toolbox::fsm::FiniteStateMachine &)
virtual void stateRunning(toolbox::fsm::FiniteStateMachine &)
virtual void stateShutdown(toolbox::fsm::FiniteStateMachine &)
bool isFirstIteration(void) const
true on the very first call of a transition (all indices at their starting value)
xoap::MessageReference runControlMessageHandler(xoap::MessageReference message)
Run Control Messages.
virtual void stateInitial(toolbox::fsm::FiniteStateMachine &)
unsigned int getSubsystemSyncStepIndex(void) const
virtual void stateHalted(toolbox::fsm::FiniteStateMachine &)
static const unsigned int SUBSYSTEM_ITERATION_STANDALONE
defines used also by OtsConfigurationWizardSupervisor