Hierarchical State Machine class (QMsm-style state machine implementation strategy)
More...
#include "qp.h"
|
void | QMsm_init_ (QAsm *const me, void const *const e, uint_fast8_t const qsId) |
|
void | QMsm_dispatch_ (QAsm *const me, QEvt const *const e, uint_fast8_t const qsId) |
|
bool | QMsm_isIn_ (QAsm *const me, QStateHandler const state) |
|
QState | QMsm_execTatbl_ (QAsm *const me, QMTranActTable const *const tatbl, uint_fast8_t const qsId) |
|
void | QMsm_exitToTranSource_ (QAsm *const me, QMState const *const cs, QMState const *const ts, uint_fast8_t const qsId) |
|
QState | QMsm_enterHistory_ (QAsm *const me, QMState const *const hist, uint_fast8_t const qsId) |
|
Hierarchical State Machine class (QMsm-style state machine implementation strategy)
- Description
- QMsm (QM State Machine) provides a more efficient state machine implementation strategy than QHsm, but requires the use of the QM modeling tool, but are the fastest and need the least run-time support (the smallest event-processor taking up the least code space).
- Note
- QMsm is not intended to be instantiated directly, but rather serves as the abstract base class for derivation of state machines in the application code.
- Traceability
-
- Usage
- The following example illustrates how to derive a state machine class from QMsm. Please note that the QMsm member
super
is defined as the first member of the derived struct. typedef struct {
} ToasterOven;
void ToasterOven_ctor(ToastOven * const me) {
. . .
}
QState(* QStateHandler)(void *const me, QEvt const *const e)
#define Q_STATE_CAST(handler_)
Hierarchical State Machine class (QMsm-style state machine implementation strategy)
Definition at line 376 of file qp.h.
◆ QMsm_ctor()
Constructor of QMsm
- Description
- Performs the first step of QMsm initialization by assigning the initial pseudostate to the currently active state of the state machine.
- Parameters
-
[in,out] | me | current instance pointer (see Object Orientation) |
[in] | initial | the top-most initial transition for the MSM. |
- Note
- Must be called only ONCE before QASM_INIT().
- Usage
- The following example illustrates how to invoke QMsm_ctor() in the "constructor" of a derived state machine:
void Calc_ctor(Calc const me) {
me->operand1 = 0.0;
me->operand2 = 0.0;
me->len = 0U;
me->opKey = 0U;
}
void QMsm_ctor(QMsm *const me, QStateHandler const initial)
Definition at line 95 of file qep_msm.c.
◆ QMsm_init_()
QMsm::QMsm_init_ |
( |
QAsm *const |
me, |
|
|
void const *const |
e, |
|
|
uint_fast8_t const |
qsId |
|
) |
| |
|
private |
Implementation of the top-most initial transition in QMsm.
- Description
- Synchronously executes the top-most initial transition in a state machine.
- Parameters
-
[in,out] | me | current instance pointer (see Object Orientation) |
[in] | e | pointer to an extra parameter (might be NULL) |
[in] | qsId | QS-id of this state machine (for QS local filter) |
- Precondition
qep_msm:200
- the virtual pointer must be initialized,
- the top-most initial transition must be initialized,
- the initial transition must not be taken yet.
- Note
- This function should be called only via the virtual table (see QASM_INIT()) and should NOT be called directly in the applications.
Definition at line 114 of file qep_msm.c.
◆ QMsm_dispatch_()
QMsm::QMsm_dispatch_ |
( |
QAsm *const |
me, |
|
|
QEvt const *const |
e, |
|
|
uint_fast8_t const |
qsId |
|
) |
| |
|
private |
Implementation of dispatching events to a QMsm
- Description
- Synchronously dispatches an event for processing to a state machine. The processing of an event represents one run-to-completion (RTC) step.
- Parameters
-
[in,out] | me | current instance pointer (see Object Orientation) |
[in] | e | pointer to the event to be dispatched to the MSM |
[in] | qsId | QS-id of this state machine (for QS local filter) |
- Precondition
qep_msm:302
- current state must be initialized
- check the internal integrity (Software Self-Monitoring (SSM))
- Note
- This function should be called only via the virtual table (see QASM_DISPATCH()) and should NOT be called directly in the applications.
Definition at line 178 of file qep_msm.c.
◆ QMsm_getStateHandler_()
QMsm::QMsm_getStateHandler_ |
( |
QAsm *const |
me | ) |
|
|
inlinestatic |
Implementation of getting the state handler in a QMsm subclass
- Parameters
-
- Note
- This function is only called internally via the virtual table
Definition at line 407 of file qp.h.
◆ QMsm_isIn_()
- Description
- Tests if a given state is part of the current active state configuration in QMsm subclasses. Please note that for a MSM, to "be in a state" means also to be in a superstate of of the state.
- Parameters
-
[in] | me | current instance pointer (see Object Orientation) |
[in] | state | pointer to the state-handler function to be tested |
- Returns
- 'true' if the MSM "is in" the
state
and 'false' otherwise
- Note
- This function should be called only via the virtual table (see QASM_IS_IN()) and should NOT be called directly in the applications.
- Attention
- This function should be only called only when the state machine is in a "stable state configuration".
- Traceability
-
Definition at line 385 of file qep_msm.c.
◆ QMsm_stateObj()
QMsm::QMsm_stateObj |
( |
QMsm *const |
me | ) |
|
|
inlinestatic |
Obtain the current active state from a MSM (read only)
- Parameters
-
- Returns
- the current active state-object
- Note
- This function is used in QM for auto-generating code for state history (deep history)
Definition at line 422 of file qp.h.
◆ QMsm_childStateObj()
QMsm::QMsm_childStateObj |
( |
QMsm const *const |
me, |
|
|
QMState const *const |
parent |
|
) |
| |
Obtain the current active child state of a given parent in QMsm
- Description
- Finds the child state of the given
parent
, such that this child state is an ancestor of the currently active state. The main purpose of this function is to support **shallow history*transitions in state machines derived from QMsm.
- Parameters
-
[in] | me | current instance pointer (see Object Orientation) |
[in] | parent | pointer to the state-handler object |
- Returns
- the child of a given
parent
state, which is an ancestor of the currently active state. For the corner case when the currently active state is the given parent
state, function returns the parent
state.
- Postcondition
qep_msm:890
-
- Note
- This function is used in QM for auto-generating code for state history (shallow history)
Definition at line 439 of file qep_msm.c.
◆ QMsm_execTatbl_()
QMsm::QMsm_execTatbl_ |
( |
QAsm *const |
me, |
|
|
QMTranActTable const *const |
tatbl, |
|
|
uint_fast8_t const |
qsId |
|
) |
| |
|
private |
Execute transition-action table
- Description
- Helper function to execute transition sequence in a transition-action table.
- Parameters
-
[in,out] | me | current instance pointer (see Object Orientation) |
[in] | tatbl | pointer to the transition-action table |
[in] | qsId | QS-id of this state machine (for QS local filter) |
- Returns
- status of the last action from the transition-action table.
- Precondition
qep_msm:400
- provided state table cannot be NULL
- Note
- This function is for internal use inside the QEP event processor and should **not* be called directly from the applications.
Definition at line 491 of file qep_msm.c.
◆ QMsm_exitToTranSource_()
QMsm::QMsm_exitToTranSource_ |
( |
QAsm *const |
me, |
|
|
QMState const *const |
cs, |
|
|
QMState const *const |
ts, |
|
|
uint_fast8_t const |
qsId |
|
) |
| |
|
private |
Exit the current state up to the explicit transition source
- Description
- Static helper function to exit the current state configuration to the transition source, which in a hierarchical state machine might be a superstate of the current state.
- Parameters
-
[in,out] | me | current instance pointer (see Object Orientation) |
[in] | cs | pointer to the current state |
[in] | ts | pointer to the transition source state |
[in] | qsId | QS-id of this state machine (for QS local filter) |
Definition at line 568 of file qep_msm.c.
◆ QMsm_enterHistory_()
QMsm::QMsm_enterHistory_ |
( |
QAsm *const |
me, |
|
|
QMState const *const |
hist, |
|
|
uint_fast8_t const |
qsId |
|
) |
| |
|
private |
Enter history of a composite state
- Description
- Static helper function to execute the segment of transition to history after entering the composite state and
- Parameters
-
[in,out] | me | current instance pointer (see Object Orientation) |
[in] | hist | pointer to the history substate |
[in] | qsId | QS-id of this state machine (for QS local filter) |
- Returns
- Q_RET_TRAN_INIT, if an initial transition has been executed in the last entered state or Q_RET_NULL if no such transition was taken.
Definition at line 615 of file qep_msm.c.
◆ super
Definition at line 378 of file qp.h.
The documentation for this class was generated from the following files: