1 #ifndef _ots_RunControlStateMachine_h_
2 #define _ots_RunControlStateMachine_h_
4 #include "otsdaq-core/FiniteStateMachine/FiniteStateMachine.h"
5 #include "otsdaq-core/ProgressBar/ProgressBar.h"
8 #include "toolbox/lang/Class.h"
21 void setStateMachineName(
const std::string& name)
23 theStateMachine_.setStateMachineName(name);
25 const std::string& getErrorMessage(
void)
const
27 return theStateMachine_.getErrorMessage();
30 template<
class OBJECT>
31 void addStateTransition(toolbox::fsm::State from,
32 toolbox::fsm::State to,
33 const std::string& input,
34 const std::string& transitionName,
36 void (OBJECT::*func)(toolbox::Event::Reference))
39 stateTransitionFunctionTable_[from][input] = func;
40 theStateMachine_.addStateTransition(from, to, input, transitionName, obj, func);
43 template<
class OBJECT>
44 void addStateTransition(toolbox::fsm::State from,
45 toolbox::fsm::State to,
46 const std::string& input,
47 const std::string& transitionName,
48 const std::string& transitionParameter,
50 void (OBJECT::*func)(toolbox::Event::Reference))
53 stateTransitionFunctionTable_[from][input] = func;
54 theStateMachine_.addStateTransition(
55 from, to, input, transitionName, transitionParameter, obj, func);
64 virtual void stateInitial(toolbox::fsm::FiniteStateMachine& fsm) { ; }
71 virtual void statePaused(toolbox::fsm::FiniteStateMachine& fsm) { ; }
78 virtual void stateRunning(toolbox::fsm::FiniteStateMachine& fsm) { ; }
84 virtual void stateHalted(toolbox::fsm::FiniteStateMachine& fsm) { ; }
87 virtual void stateShutdown(toolbox::fsm::FiniteStateMachine& fsm) { ; }
94 virtual void stateConfigured(toolbox::fsm::FiniteStateMachine& fsm) { ; }
96 virtual void inError(toolbox::fsm::FiniteStateMachine& fsm) { ; }
98 virtual void transitionConfiguring(toolbox::Event::Reference e) { ; }
99 virtual void transitionHalting(toolbox::Event::Reference e) { ; }
100 virtual void transitionShuttingDown(toolbox::Event::Reference e) { ; }
101 virtual void transitionStartingUp(toolbox::Event::Reference e) { ; }
102 virtual void transitionInitializing(toolbox::Event::Reference e) { ; }
103 virtual void transitionPausing(toolbox::Event::Reference e) { ; }
104 virtual void transitionResuming(toolbox::Event::Reference e) { ; }
105 virtual void transitionStarting(toolbox::Event::Reference e) { ; }
106 virtual void transitionStopping(toolbox::Event::Reference e) { ; }
107 virtual void enteringError(toolbox::Event::Reference e) { ; }
110 xoap::MessageReference runControlMessageHandler(xoap::MessageReference message);
112 static const std::string FAILED_STATE_NAME;
114 unsigned int getIterationIndex(
void) {
return iterationIndex_; }
115 unsigned int getSubIterationIndex(
void) {
return subIterationIndex_; }
116 void indicateIterationWork(
void) { iterationWorkFlag_ =
true; }
117 void clearIterationWork(
void) { iterationWorkFlag_ =
false; }
118 bool getIterationWork(
void) {
return iterationWorkFlag_; }
119 void indicateSubIterationWork(
void) { subIterationWorkFlag_ =
true; }
120 void clearSubIterationWork(
void) { subIterationWorkFlag_ =
false; }
121 bool getSubIterationWork(
void) {
return subIterationWorkFlag_; }
127 volatile bool asyncFailureReceived_, asyncSoftFailureReceived_;
129 unsigned int iterationIndex_, subIterationIndex_;
130 bool iterationWorkFlag_, subIterationWorkFlag_;
132 toolbox::fsm::State lastIterationState_;
133 std::string lastIterationCommand_;
134 std::string lastIterationResult_;
135 unsigned int lastIterationIndex_, lastSubIterationIndex_;
137 std::map<toolbox::fsm::State,
138 std::map<std::string,
140 std::less<std::string> > >
141 stateTransitionFunctionTable_;