QP/C  7.3.4
Real-Time Embedded Framework
Loading...
Searching...
No Matches
QMsm Class Reference

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

#include "qp.h"

Inheritance diagram for QMsm:
QAsm

Public Member Functions

QMState const * QMsm_childStateObj (QMsm const *const me, QMState const *const parent)
 

Static Public Member Functions

static QStateHandler QMsm_getStateHandler_ (QAsm *const me)
 
static QMState const * QMsm_stateObj (QMsm *const me)
 

Public Attributes

QAsm super
 

Protected Member Functions

void QMsm_ctor (QMsm *const me, QStateHandler const initial)
 
- Protected Member Functions inherited from QAsm
void QAsm_ctor (QAsm *const me)
 
QState QHsm_top (QHsm const *const me, QEvt const *const e)
 

Private Member Functions

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)
 

Additional Inherited Members

- Protected Attributes inherited from QAsm
struct QAsmVtable const * vptr
 
union QAsmAttr state
 
union QAsmAttr temp
 

Detailed Description

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 {
QMsm super; // <=== inherit QMsm
// private state histories
QStateHandler hist_doorClosed;
QStateHandler hist_heating;
} ToasterOven;
void ToasterOven_ctor(ToastOven * const me) {
QHsm_ctor(&me->super, Q_STATE_CAST(&ToasterOven_initial));
. . .
}
QState(* QStateHandler)(void *const me, QEvt const *const e)
Definition qp.h:226
#define Q_STATE_CAST(handler_)
Definition qp.h:526
Hierarchical State Machine class (QMsm-style state machine implementation strategy)
Definition qp.h:376
QAsm super
Definition qp.h:378

Definition at line 376 of file qp.h.

Member Function Documentation

◆ QMsm_ctor()

QMsm::QMsm_ctor ( QMsm *const  me,
QStateHandler const  initial 
)
protected

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]mecurrent instance pointer (see Object Orientation)
[in]initialthe 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) {
// call superclass' ctor
QMsm_ctor(&me->super, Q_STATE_CAST(&Calc_initial));
me->operand1 = 0.0;
me->operand2 = 0.0;
me->len = 0U;
me->opKey = 0U;
}
void QMsm_ctor(QMsm *const me, QStateHandler const initial)
Definition qep_msm.c:95

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]mecurrent instance pointer (see Object Orientation)
[in]epointer to an extra parameter (might be NULL)
[in]qsIdQS-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]mecurrent instance pointer (see Object Orientation)
[in]epointer to the event to be dispatched to the MSM
[in]qsIdQS-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
[in,out]mecurrent instance pointer (see Object Orientation)
Note
This function is only called internally via the virtual table

Definition at line 407 of file qp.h.

◆ QMsm_isIn_()

QMsm::QMsm_isIn_ ( QAsm *const  me,
QStateHandler const  state 
)
private
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]mecurrent instance pointer (see Object Orientation)
[in]statepointer 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
[in]mecurrent instance pointer (see Object Orientation)
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]mecurrent instance pointer (see Object Orientation)
[in]parentpointer 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
  • the child must be found
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]mecurrent instance pointer (see Object Orientation)
[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.
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]mecurrent instance pointer (see Object Orientation)
[in]cspointer to the current state
[in]tspointer to the transition source state
[in]qsIdQS-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]mecurrent instance pointer (see Object Orientation)
[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 Q_RET_NULL if no such transition was taken.

Definition at line 615 of file qep_msm.c.

Member Data Documentation

◆ super

QAsm QMsm::super

Definition at line 378 of file qp.h.


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