19 #ifndef RTC_STATEMACHINE_H
20 #define RTC_STATEMACHINE_H
54 template <
class State>
258 template <
class State,
261 class Callback = void (Listener::*)(
const States& states)
286 : m_num(num_of_state),
287 m_entry (new Callback[m_num]),
288 m_predo (new Callback[m_num]),
289 m_do (new Callback[m_num]),
290 m_postdo(new Callback[m_num]),
291 m_exit (new Callback[m_num])
293 setNullFunc(m_entry, NULL);
294 setNullFunc(m_do, NULL);
295 setNullFunc(m_exit, NULL);
296 setNullFunc(m_predo, NULL);
297 setNullFunc(m_postdo, NULL);
331 setNullFunc(m_entry, call_back);
332 setNullFunc(m_do, call_back);
333 setNullFunc(m_exit, call_back);
334 setNullFunc(m_predo, call_back);
335 setNullFunc(m_postdo, call_back);
336 m_transit = call_back;
358 m_listener = listener;
387 m_entry[state] = call_back;
416 m_predo[state] = call_back;
445 m_do[state] = call_back;
474 m_postdo[state] = call_back;
503 m_exit[state] = call_back;
532 m_transit = call_back;
555 m_states.curr = states.curr;
556 m_states.prev = states.prev;
557 m_states.next = states.next;
582 Guard guard(m_mutex);
605 Guard guard(m_mutex);
606 return m_states.curr;
632 Guard guard(m_mutex);
633 return m_states.curr == state ?
true :
false;
664 Guard guard(m_mutex);
665 m_states.next = state;
666 if (m_states.curr == state)
695 if (state.curr == state.next)
698 if (m_predo[state.curr] != NULL)
699 (m_listener->*m_predo [state.curr])(state);
701 if (need_trans())
return;
704 if (m_do[state.curr] != NULL)
705 (m_listener->*m_do [state.curr])(state);
707 if (need_trans())
return;
710 if (m_postdo[state.curr] != NULL)
711 (m_listener->*m_postdo[state.curr])(state);
715 if (m_exit[state.curr] != NULL)
716 (m_listener->*m_exit[state.curr])(state);
720 if (state.curr != state.next)
722 state.curr = state.next;
723 if(m_entry[state.curr] != NULL)
724 (m_listener->*m_entry[state.curr])(state);
725 update_curr(state.curr);
752 for (
int i = 0; i < m_num; ++i) s[i] = nullfunc;
839 inline void sync(States& st)
841 Guard guard(m_mutex);
845 inline bool need_trans()
847 Guard guard(m_mutex);
848 return (m_states.curr != m_states.next);
851 inline void update_curr(
const State curr)
853 Guard guard(m_mutex);
854 m_states.curr = curr;
859 #endif // RTC_STATEMACHINE_H
virtual ~StateMachine()
Definition: StateMachine.h:302
bool setDoAction(State state, Callback call_back)
Set Do action function.
Definition: StateMachine.h:443
bool setExitAction(State state, Callback call_back)
Set Exit action function.
Definition: StateMachine.h:501
Utility functions for RT-Component.
Mutex class.
Definition: Mutex.h:40
bool setPostDoAction(State state, Callback call_back)
Set PostDo action function.
Definition: StateMachine.h:472
States getStates()
Get states.
Definition: StateMachine.h:580
Callback * m_entry
Callback function for Entry action.
Definition: StateMachine.h:780
States m_states
Current state information.
Definition: StateMachine.h:834
int m_num
Number of state.
Definition: StateMachine.h:762
Mutex m_mutex
Definition: StateMachine.h:836
void worker()
Worker function.
Definition: StateMachine.h:689
bool setEntryAction(State state, Callback call_back)
Set Entry action function.
Definition: StateMachine.h:385
Callback * m_exit
Callback function for Exit action.
Definition: StateMachine.h:816
Callback * m_do
Callback function for Do action.
Definition: StateMachine.h:798
bool setTransitionAction(Callback call_back)
Set state transition action function.
Definition: StateMachine.h:530
State machine class.
Definition: StateMachine.h:263
void goTo(State state)
Transit State.
Definition: StateMachine.h:662
bool isIn(State state)
Check current state.
Definition: StateMachine.h:630
void setNOP(Callback call_back)
Set NOP function.
Definition: StateMachine.h:329
State prev
Definition: StateMachine.h:58
Listener * m_listener
Callback function for listener.
Definition: StateMachine.h:771
State holder class.
Definition: StateMachine.h:55
bool setPreDoAction(State state, Callback call_back)
Set PreDo action function.
Definition: StateMachine.h:414
void setStartState(States states)
Set the initial state.
Definition: StateMachine.h:553
Callback * m_predo
Callback function for PreDo action.
Definition: StateMachine.h:789
State curr
Definition: StateMachine.h:57
Callback * m_postdo
Callback function for PostDo action.
Definition: StateMachine.h:807
bool m_selftrans
Definition: StateMachine.h:835
Guard template class.
Definition: Guard.h:41
State next
Definition: StateMachine.h:59
void setListener(Listener *listener)
Set Listener Object.
Definition: StateMachine.h:356
Callback m_transit
Callback function for State transition action.
Definition: StateMachine.h:825
StateMachine(int num_of_state)
Constructor.
Definition: StateMachine.h:285
void setNullFunc(Callback *s, Callback nullfunc)
Set NOP function.
Definition: StateMachine.h:750
State getState()
Get current state.
Definition: StateMachine.h:603