QP/C++ 8.1.1
Real-Time Event Framework
Loading...
Searching...
No Matches
QP::QMsm Class Reference

Hierarchical State Machine class (QMsm-style state machine implementation strategy). More...

#include <qp.hpp>

Inheritance diagram for QP::QMsm:
QP::QAsm

Public Member Functions

void init (void const *const e, std::uint_fast8_t const qsId) override
 Virtual function to take the top-most initial transition in the state machine.
void dispatch (QEvt const *const e, std::uint_fast8_t const qsId) override
 Virtual function to dispatch an event to the state machine.
bool isIn (QStateHandler const stateHndl) noexcept override
 Tests if a given state is part of the current active state configuration.
QStateHandler getStateHandler () const noexcept override
 Obtain the current active state from a MSM (read only).
QMState const * childStateObj (QMState const *const parentHndl) const noexcept
 Obtain the current active child state of a given parent in QP::QMsm.
virtual void init (std::uint_fast8_t const qsId)
 Virtual function to take the top-most initial transition in the state machine (overloaded).
Public Member Functions inherited from QP::QAsm
virtual ~QAsm () noexcept
 Virtual destructor of the QP::QAsm abstract base class.
QStateHandler state () const noexcept
QMState const * stateObj () const noexcept

Static Public Member Functions

static QMState const * topQMState () noexcept
Static Public Member Functions inherited from QP::QAsm
static constexpr QState Q_HANDLED ()
static constexpr QState Q_UNHANDLED ()
static constexpr QState QM_HANDLED ()
static constexpr QState QM_UNHANDLED ()
static constexpr QState QM_SUPER ()
static QState top (void *const me, QEvt const *const e) noexcept
 Top state handler that ignores all events.

Protected Member Functions

 QMsm (QStateHandler const initial) noexcept
 Constructor of QP::QMsm.
Protected Member Functions inherited from QP::QAsm
 QAsm () noexcept
 Constructor of the QP::QAsm base class.
QState tran (QStateHandler const target) noexcept
 Internal helper function to take a state transition in sublclasses of QP::QAsm.
QState tran_hist (QStateHandler const hist) noexcept
 Internal helper function to take a state transition to history in sublclasses of QP::QAsm.
QState super (QStateHandler const superstate) noexcept
 Internal helper function to indicate superstate of a given state in sublclasses of QP::QAsm.
QState qm_tran (void const *const tatbl) noexcept
 Internal helper function to take a state transition in QP::QMsm.
QState qm_tran_init (void const *const tatbl) noexcept
QState qm_tran_hist (QMState const *const hist, void const *const tatbl) noexcept
 Internal helper function to take a state transition to history in QP::QMsm.
QState qm_entry (QMState const *const s) noexcept
 Internal helper function to execute state entry actions in QP::QMsm.
QState qm_exit (QMState const *const s) noexcept
 Internal helper function to execute state exit actions in QP::QMsm.

Private Member Functions

QState execTatbl_ (QMTranActTable const *const tatbl, std::uint_fast8_t const qsId)
 Execute transition-action table.
void exitToTranSource_ (QMState const *const curr_state, QMState const *const tran_source, std::uint_fast8_t const qsId)
 Exit the current state up to the explicit transition source.
QState enterHistory_ (QMState const *const hist, std::uint_fast8_t const qsId)
 Enter history of a composite state.

Friends

class QS

Additional Inherited Members

Public Attributes inherited from QP::QAsm
QAsmAttr m_state
 Current state (pointer to the current state-handler function).
QAsmAttr m_temp
 Temporary storage for target/act-table etc.
Static Public Attributes inherited from QP::QAsm
static constexpr QState Q_RET_SUPER {0U}
static constexpr QState Q_RET_UNHANDLED {1U}
static constexpr QState Q_RET_HANDLED {2U}
static constexpr QState Q_RET_TRAN {3U}
static constexpr QState Q_RET_TRAN_HIST {4U}
static constexpr QState Q_RET_IGNORED {5U}
static constexpr QState Q_RET_ENTRY {6U}
static constexpr QState Q_RET_EXIT {7U}
static constexpr QState Q_RET_TRAN_INIT {8U}
static constexpr QSignal Q_EMPTY_SIG {0U}
static constexpr QSignal Q_ENTRY_SIG {1U}
static constexpr QSignal Q_EXIT_SIG {2U}
static constexpr QSignal Q_INIT_SIG {3U}
static constexpr QMState const * QM_STATE_NULL { nullptr }
static constexpr QActionHandler const Q_ACTION_NULL { nullptr }

Detailed Description

Hierarchical State Machine class (QMsm-style state machine implementation strategy).

Details
QP::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.

Backward Traceability

  • SRS_QP_SM_21: QP Framework should provide a State Machine Implementation Strategy optimized for "automatic code generation"
  • SDS_QP_QMsm: QMsm State machine class.

Usage
The following example illustrates how to derive a state machine class from QP::QMsm.

class ToasterOven : public QP::QMsm { // <== inherits QP::QMsm
public:
ToasterOven();
public:
// ctor
ToasterOven() : QMsm(Q_STATE_CAST(&ToasterOven::initial)) {...}
protected:
QM_STATE_DECL( initial);
QM_STATE_DECL( doorClosed);
QM_ACTION_DECL(doorClosed_e);
QM_ACTION_DECL(doorClosed_x);
QM_ACTION_DECL(doorClosed_i);
. . .
}; // class ToastOven
Hierarchical State Machine class (QMsm-style state machine implementation strategy).
Definition qp.hpp:335
QMsm(QStateHandler const initial) noexcept
Constructor of QP::QMsm.
#define Q_STATE_CAST(handler_)
Perform cast to QP::QStateHandler.
Definition qp.hpp:385
#define QM_STATE_DECL(state_)
Definition qp.hpp:387
#define QM_ACTION_DECL(action_)
Definition qp.hpp:392

Definition at line 335 of file qp.hpp.

Constructor & Destructor Documentation

◆ QMsm()

QP::QMsm::QMsm ( QStateHandler const initial)
explicitprotectednoexcept

Constructor of QP::QMsm.

Details
Performs the first step of QMsm initialization by assigning the initial pseudostate to the currently active state of the state machine.

Parameters
[in]initialthe 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()
: QMsm(Q_STATE_CAST(&Calc::initial)); // <===
. . .
{
. . .
}

Member Function Documentation

◆ 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.

Details
Synchronously executes the top-most initial transition in a state machine (must be overridden in the subclasses).

Parameters
[in]epointer to an initialization parameter (might be nullptr)
[in]qsIdQS-id of this state machine (for QS local filter)

Implements QP::QAsm.

◆ 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.

Details
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]epointer to the event to be dispatched to the MSM
[in]qsIdQS-id of this state machine (for QS local filter)

Implements QP::QAsm.

◆ isIn()

bool QP::QMsm::isIn ( QP::QStateHandler const state)
overridevirtualnoexcept

Tests if a given state is part of the current active state configuration.

Details
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.

Backward Traceability

  • SRS_QP_SM_25: All State Machine Implementation Strategies provided by QP Framework might supply a method for checking if a state machine is in a given state.

Implements QP::QAsm.

◆ getStateHandler()

QStateHandler QP::QMsm::getStateHandler ( ) const
overridevirtualnoexcept

Obtain the current active state from a MSM (read only).

Returns
the current active state-handler
Note
This function is used for state history (deep history) in the auto-generated code by the QM modeling tool. Reimplemented from QP::QAsm.

Implements QP::QAsm.

◆ childStateObj()

QMState const * QP::QMsm::childStateObj ( QMState const *const parentHndl) const
noexcept

Obtain the current active child state of a given parent in QP::QMsm.

Details
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]parentHndlpointer to the state-handler object
Returns
the child state (pointer to QP::QMState state object) of a given parentHndl state, which is an ancestor of the currently active state. For the corner case when the currently active state is the given parentHndl state-handler, function returns the parentHndl state.
Note
This function is used in the QM modeling tool for auto-generating code for state history (shallow history)

Backward Traceability

◆ topQMState()

QMState const * QP::QMsm::topQMState ( )
staticnoexcept

◆ execTatbl_()

QState QP::QMsm::execTatbl_ ( QMTranActTable const *const tatbl,
std::uint_fast8_t const qsId )
private

Execute transition-action table.

Details
Helper function to execute transition sequence in a transition-action table.

Parameters
[in]tatblpointer to the transition-action table
[in]qsIdQS-id of this state machine (for QS local filter)
Returns
status of the last action from the transition-action table.
Note
This function is for internal use inside the QEP event processor and should **not* be called directly from the applications.

◆ exitToTranSource_()

void QP::QMsm::exitToTranSource_ ( QMState const *const curr_state,
QMState const *const tran_source,
std::uint_fast8_t const qsId )
private

Exit the current state up to the explicit transition source.

Details
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]curr_statepointer to the current state
[in]tran_sourcepointer to the transition source state
[in]qsIdQS-id of this state machine (for QS local filter)

◆ enterHistory_()

QState QP::QMsm::enterHistory_ ( QMState const *const hist,
std::uint_fast8_t const qsId )
private

Enter history of a composite state.

Details
Static helper function to execute the segment of transition to history after entering the composite state and

Parameters
[in]histpointer to the history substate
[in]qsIdQS-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 0 (Q_RET_SUPER) if no such transition was taken.

◆ init() [2/2]

void QP::QAsm::init ( std::uint_fast8_t const qsId)
virtual

Virtual function to take the top-most initial transition in the state machine (overloaded).

Details
Synchronously executes the top-most initial transition in a state machine. This overloaded version takes no initialization parameter.

Parameters
[in]qsIdQS-id of this state machine (for QS local filter)

Reimplemented from QP::QAsm.

Definition at line 216 of file qf_act.cpp.

◆ QS

friend class QS
friend

Definition at line 367 of file qp.hpp.


The documentation for this class was generated from the following files: