You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
5.5 KiB
206 lines
5.5 KiB
API Reference
|
|
=============
|
|
|
|
`#include <tinyfsm.hpp>`
|
|
|
|
|
|
Class Diagram
|
|
-------------
|
|
.......
|
|
+--------------------------------------: T :
|
|
| tinyfsm::FsmList :.....:
|
|
+-----------------------------------------|
|
|
| [+] set_initial_state() <<static>> |
|
|
| [+] reset() <<static>> |
|
|
| [+] enter() <<static>> |
|
|
| [+] start() <<static>> |
|
|
| [+] dispatch(Event) <<static>> |
|
|
+-----------------------------------------+
|
|
|
|
|
|
.......
|
|
+--------------------------------------: T :
|
|
| tinyfsm::Fsm :.....:
|
|
+-----------------------------------------|
|
|
| [+] state<S>() <<static>> |
|
|
| [+] set_initial_state() <<static>> |
|
|
| [+] reset() <<static>> |
|
|
| [+] enter() <<static>> |
|
|
| [+] start() <<static>> |
|
|
| [+] dispatch(Event) <<static>> |
|
|
| [#] transit<S>() |
|
|
| [#] transit<S>(Action) |
|
|
| [#] transit<S>(Action, Condition) |
|
|
+-----------------------------------------+
|
|
#
|
|
|
|
|
|
|
|
+---------------------+
|
|
| MyFSM |
|
|
+---------------------+
|
|
| [+] entry() |
|
|
| [+] exit() |
|
|
| [+] react(EventX) |
|
|
| [+] react(EventY) |
|
|
| ... |
|
|
+---------------------+
|
|
#
|
|
|
|
|
+-------------+-------------+
|
|
| | |
|
|
+---------+ +---------+ +---------+
|
|
| State_A | | State_B | | ... |
|
|
+---------+ +---------+ +---------+
|
|
|
|
|
|
[#] protected
|
|
[+] public
|
|
[-] private
|
|
|
|
|
|
template< typename F > class Fsm
|
|
--------------------------------
|
|
|
|
### State Machine Functions
|
|
|
|
* `template< typename S > static constexpr S & state(void)`
|
|
|
|
Returns a reference to a (implicitly instantiated) state S. Allows
|
|
low-level access to all states;
|
|
|
|
|
|
* `static void set_initial_state(void)`
|
|
|
|
Function prototype, must be defined (explicit template
|
|
specialization) for every state machine class (e.g. by using the
|
|
`FSM_INITIAL_STATE(fsm, state`) macro). Sets current state to
|
|
initial (start) state.
|
|
|
|
|
|
* `static void reset(void)`
|
|
|
|
Empty function, can be overridden by state machine class in order to
|
|
perform custom initialization (e.g. set static state machine
|
|
variables, or reset states using `StateList<MyStates...>::reset()`)
|
|
or directly via the `state<MyState>()` instance).
|
|
|
|
Note that this function is NOT called on start().
|
|
|
|
See example: `/examples/api/resetting_switch.cpp`
|
|
|
|
* `static void enter(void)`
|
|
|
|
Helper function, usually not needed to be used directly:
|
|
calls entry() function of current state.
|
|
|
|
|
|
* `static void start()`
|
|
|
|
Sets the initial (start) state and calls its entry() function.
|
|
|
|
|
|
* `template< typename E > static void dispatch(E const &)`
|
|
|
|
Dispatch an event to the current state of this state machine.
|
|
|
|
|
|
### State Transition Functions
|
|
|
|
* `template< typename S > void transit(void)`
|
|
|
|
Transit to a new state:
|
|
|
|
1. Call exit() function on current state
|
|
2. Set new current state to S
|
|
3. Call entry() function on new state
|
|
|
|
|
|
* `template< typename S, typename ActionFunction > void transit(ActionFunction)`
|
|
|
|
Transit to a new state, with action function:
|
|
|
|
1. Call exit() function on current state
|
|
2. Call ActionFunction
|
|
3. Set new current state to S
|
|
4. Call entry() function on new state
|
|
|
|
|
|
* `template< typename S, typename ActionFunction, typename ConditionFunction > void transit(ActionFunction, ConditionFunction)`
|
|
|
|
Transit to a new state only if ConditionFunction returns true.
|
|
Shortcut for: `if(ConditionFunction()) transit<S>(ActionFunction);`.
|
|
|
|
|
|
### Derived Classes
|
|
|
|
#### template< typename F > class MooreMachine
|
|
|
|
Moore state machines have entry actions, but no exit actions:
|
|
|
|
* `virtual void entry(void) { }`
|
|
|
|
Entry action, not enforcing. Can be enforced by declaring pure
|
|
virtual: `virtual void entry(void) = 0`
|
|
|
|
* `void exit(void) { }`
|
|
|
|
No exit actions.
|
|
|
|
See example: `/examples/api/more_machine.cpp`
|
|
|
|
#### template< typename F > class MealyMachine
|
|
|
|
Mealy state machines do not have entry/exit actions:
|
|
|
|
* `void entry(void) { }`
|
|
|
|
No entry actions.
|
|
|
|
* `void exit(void) { }`
|
|
|
|
No exit actions.
|
|
|
|
*Input actions* are modeled in react(), conditional dependent of event
|
|
type or payload and using `transit<>(ActionFunction)`.
|
|
|
|
See example: `/examples/api/mealy_machine.cpp`
|
|
|
|
|
|
template< typename... FF > struct FsmList
|
|
-----------------------------------------
|
|
|
|
* `static void set_initial_state(void)`
|
|
|
|
Calls set_initial_state() on all state machines in the list.
|
|
|
|
|
|
* `static void reset()`
|
|
|
|
Calls reset() on all state machines in the list.
|
|
|
|
|
|
* `static void enter()`
|
|
|
|
Calls enter() on all state machines in the list.
|
|
|
|
|
|
* `static void start()`
|
|
|
|
Sets the initial (start) state for all state machines in list, then
|
|
call all entry() functions.
|
|
|
|
|
|
* `template< typename E > static void dispatch(E const &)`
|
|
|
|
Dispatch an event to the current state of all the state machines in
|
|
the list.
|
|
|
|
|
|
template< typename... SS > struct StateList
|
|
-------------------------------------------
|
|
|
|
* `static void reset(void)`
|
|
|
|
Re-instantiate all states in the list, using copy-constructor.
|
|
|
|
See example: `/examples/api/resetting_switch.cpp`
|
|
|