Hierarchical State Machine class (QMsm-style state machine implementation strategy)
More...
#include "qp.hpp"
|
enum | QStateRet : QState {
Q_RET_SUPER
, Q_RET_SUPER_SUB
, Q_RET_UNHANDLED
, Q_RET_HANDLED
,
Q_RET_IGNORED
, Q_RET_ENTRY
, Q_RET_EXIT
, Q_RET_NULL
,
Q_RET_TRAN
, Q_RET_TRAN_INIT
, Q_RET_TRAN_EP
, Q_RET_TRAN_HIST
,
Q_RET_TRAN_XP
} |
|
enum | ReservedSig : QSignal { Q_EMPTY_SIG
, Q_ENTRY_SIG
, Q_EXIT_SIG
, Q_INIT_SIG
} |
| Reserved signals by the QP-framework. More...
|
|
static QState | top (void *const me, QEvt const *const e) noexcept |
|
QAsmAttr | m_state |
|
QAsmAttr | m_temp |
|
Hierarchical State Machine class (QMsm-style state machine implementation strategy)
- Description
QMsm
(QM State Machine) provides a more efficient state machine implementation strategy than QP::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
- QP::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 QP::QMsm.
public:
ToasterOven();
public:
protected:
. . .
};
Hierarchical State Machine class (QMsm-style state machine implementation strategy)
#define Q_STATE_CAST(handler_)
#define QM_STATE_DECL(state_)
#define QM_ACTION_DECL(action_)
Definition at line 425 of file qp.hpp.
◆ QMsm()
|
explicitprotectednoexcept |
Constructor of QP::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] | initial | the top-most initial transition for the MSM. |
- Usage
- The following example illustrates how to invoke QMsm() constructor in the "constructor" of a derived state machine:
void Calc::Calc()
. . .
{
. . .
}
Definition at line 98 of file qep_msm.cpp.
◆ init() [1/2]
void QP::QMsm::init |
( |
void const *const |
e, |
|
|
std::uint_fast8_t const |
qsId |
|
) |
| |
|
overridevirtual |
Virtual function to take the top-most initial transition in the state machine.
- Description
- Synchronously executes the top-most initial transition in a state machine (must be overridden in the subclasses).
- Parameters
-
[in] | e | pointer to an initialization parameter (might be nullptr) |
[in] | qsId | QS-id of this state machine (for QS local filter) |
- Precondition
qep_asm:200
- the virtual pointer must be initialized,
- the top-most initial transition must be initialized,
- the initial transition must not be taken yet.
Implements QP::QAsm.
Definition at line 106 of file qep_msm.cpp.
◆ init() [2/2]
void QP::QMsm::init |
( |
std::uint_fast8_t const |
qsId | ) |
|
|
inlineoverridevirtual |
Virtual function to take the top-most initial transition in the state machine (overloaded).
- Description
- Synchronously executes the top-most initial transition in a state machine. This overloaded version takes no initialization parameter.
- Parameters
-
[in] | qsId | QS-id of this state machine (for QS local filter) |
Reimplemented from QP::QAsm.
Definition at line 433 of file qp.hpp.
◆ dispatch()
void QP::QMsm::dispatch |
( |
QEvt const *const |
e, |
|
|
std::uint_fast8_t const |
qsId |
|
) |
| |
|
overridevirtual |
Virtual function to dispatch an event to the state machine.
- Description
- Synchronously dispatches an event for processing to a state machine (must be overridden in the subclasses). The processing of an event represents one run-to-completion (RTC) step.
- Parameters
-
[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_asm:302
- current state must be initialized
- check the internal integrity (Software Self-Monitoring (SSM))
Implements QP::QAsm.
Definition at line 167 of file qep_msm.cpp.
◆ getStateHandler()
QP::QMsm::getStateHandler |
( |
| ) |
|
|
inlineoverridevirtualnoexcept |
Implementation of getting the state handler in a QP::QMsm subclass
Reimplemented from QP::QAsm.
Definition at line 441 of file qp.hpp.
◆ isIn()
- Description
- Check if a given state is part of the current active state configuration in QMsm subclasses. Please note that in a hierarchical state machine, to "be in a state" means also to be in a superstate of of the state.
- See also
- QP::QAsm::isIn()
- Attention
- This function must be called only on a state machine that is in the "stable state configuration". Among others, this means that the state machine cannot call it in the middle of its own transition.
- Precondition
qep_hsm:602
- internal integrity check (Software Self-Monitoring (SSM))
- Traceability
-
Reimplemented from QP::QAsm.
Definition at line 374 of file qep_msm.cpp.
◆ isInState()
QP::QMsm::isInState |
( |
QMState const *const |
stateObj | ) |
const |
|
noexcept |
◆ childStateObj()
QP::QMsm::childStateObj |
( |
QMState const *const |
parent | ) |
const |
|
noexcept |
Obtain the current active child state of a given parent in QP::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] | 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 the QM modeling tool for auto-generating code for state history (shallow history)
Definition at line 422 of file qep_msm.cpp.
◆ execTatbl_()
QMsm::execTatbl_ |
( |
QMTranActTable const *const |
tatbl, |
|
|
std::uint_fast8_t const |
qsId |
|
) |
| |
|
private |
Execute transition-action table
- Description
- Helper function to execute transition sequence in a transition-action table.
- Parameters
-
[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 471 of file qep_msm.cpp.
◆ exitToTranSource_()
QMsm::exitToTranSource_ |
( |
QMState const *const |
cs, |
|
|
QMState const *const |
ts, |
|
|
std::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] | 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 546 of file qep_msm.cpp.
◆ enterHistory_()
QMsm::enterHistory_ |
( |
QMState const *const |
hist, |
|
|
std::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] | 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 591 of file qep_msm.cpp.
◆ topQMState()
QMState const * QP::QMsm::topQMState |
( |
| ) |
const |
|
noexcept |
The documentation for this class was generated from the following files: