QP/C++  8.0.0
Real-Time Embedded Framework
Loading...
Searching...
No Matches
QP::QMActive Class Reference

Active object class (based on QMsm implementation strategy) More...

#include "qp.hpp"

Inheritance diagram for QP::QMActive:
QP::QActive 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 init (std::uint_fast8_t const qsId) override
 Virtual function to take the top-most initial transition in the state machine (overloaded).
 
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 state) noexcept override
 Virtual function to check whether the state machine is in a given state.
 
QStateHandler getStateHandler () noexcept override
 Virtual method for getting the state handler.
 
QMState const * childStateObj (QMState const *const parent) const noexcept
 
- Public Member Functions inherited from QP::QActive
QStateHandler childState (QStateHandler const parent) noexcept
 
void setAttr (std::uint32_t attr1, void const *attr2=nullptr)
 
void start (QPrioSpec const prioSpec, QEvtPtr *const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize, void const *const par)
 
void start (QPrioSpec const prioSpec, QEvtPtr *const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize)
 
void stop ()
 
void register_ () noexcept
 
void unregister_ () noexcept
 
bool post_ (QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept
 
void postLIFO (QEvt const *const e) noexcept
 
QEvt const * get_ () noexcept
 
void subscribe (enum_t const sig) const noexcept
 
void unsubscribe (enum_t const sig) const noexcept
 
void unsubscribeAll () const noexcept
 
bool defer (QEQueue *const eq, QEvt const *const e) const noexcept
 
bool recall (QEQueue *const eq) noexcept
 
std::uint_fast16_t flushDeferred (QEQueue *const eq, std::uint_fast16_t const num=0xFFFFU) const noexcept
 
std::uint_fast8_t getPrio () const noexcept
 
void setPrio (QPrioSpec const prio) noexcept
 
std::uint_fast8_t getPThre () const noexcept
 
QACTIVE_EQUEUE_TYPE const & getEQueue () const noexcept
 
QACTIVE_OS_OBJ_TYPE const & getOsObject () const noexcept
 
QACTIVE_THREAD_TYPE const & getThread () const noexcept
 
void setThread (QACTIVE_THREAD_TYPE const &thr)
 
virtual bool postFromISR (QEvt const *const e, std::uint_fast16_t const margin, void *par, void const *const sender) noexcept
 
- 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
 

Protected Member Functions

 QMActive (QStateHandler const initial) noexcept
 Constructor of QP::QMActive class.
 
- Protected Member Functions inherited from QP::QActive
 QActive (QStateHandler const initial) noexcept
 
- 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.
 

Additional Inherited Members

- Public Types inherited from QP::QAsm
enum  QStateRet : QState {
  Q_RET_SUPER , 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_HIST
}
 
enum  ReservedSig : QSignal { Q_EMPTY_SIG , Q_ENTRY_SIG , Q_EXIT_SIG , Q_INIT_SIG }
 Reserved signals by the QP-framework. More...
 
- Static Public Member Functions inherited from QP::QActive
static std::uint_fast16_t getQueueMin (std::uint_fast8_t const prio) noexcept
 
static void psInit (QSubscrList *const subscrSto, enum_t const maxSignal) noexcept
 
static void publish_ (QEvt const *const e, void const *const sender, std::uint_fast8_t const qsId) noexcept
 
static void evtLoop_ (QActive *act)
 
static void publishFromISR (QEvt const *e, void *par, void const *sender) noexcept
 
- Static Public Member Functions inherited from QP::QAsm
static QState top (void *const me, QEvt const *const e) noexcept
 Top state handler that ignores all events.
 
- Public Attributes inherited from QP::QActive
std::uint8_t m_prio_dis
 
std::uint8_t m_pthre_dis
 
- Static Public Attributes inherited from QP::QActive
static QActiveregistry_ [QF_MAX_ACTIVE+1U]
 
static QSubscrListsubscrList_
 
static enum_t maxPubSignal_
 
- Protected Attributes inherited from QP::QActive
std::uint8_t m_prio
 
std::uint8_t m_pthre
 
QACTIVE_THREAD_TYPE m_thread
 
QACTIVE_OS_OBJ_TYPE m_osObject
 
QACTIVE_EQUEUE_TYPE m_eQueue
 
- Protected 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.
 

Detailed Description

Active object class (based on QMsm implementation strategy)

Details
QMActive represents an active object that uses the QP::QMsm style state machine implementation strategy. This strategy requires the use of the QM modeling tool to generate state machine code automatically, but the code is faster than in the QP::QHsm style implementation strategy and needs less run-time support (smaller event-processor).
Note
QMActive is not intended to be instantiated directly, but rather serves as the base class for derivation of active objects in the application.
Backward Traceability
Usage
The following example illustrates how to derive an active object from QP::QMActive. Please note the call to the QMActive constructor in the Philo subclass' constructor.
class Philo : public QP::QMActive { // <====
private:
QP::QTimeEvt m_timeEvt;
public:
Philo::Philo()
: QMActive(Q_STATE_CAST(&initial)), // <===
m_timeEvt(this, TIMEOUT_SIG, 0U)
{}
protected:
QM_STATE_DECL( initial);
QM_STATE_DECL( thinking);
QM_ACTION_DECL(thinking_e);
QM_ACTION_DECL(thinking_x);
. . .
}; // class Philo
Active object class (based on QMsm implementation strategy)
Definition qp.hpp:885
Time Event class.
Definition qp.hpp:927
#define Q_STATE_CAST(handler_)
Definition qp.hpp:456
#define QM_STATE_DECL(state_)
Definition qp.hpp:460
#define QM_ACTION_DECL(action_)
Definition qp.hpp:466

Definition at line 885 of file qp.hpp.

Constructor & Destructor Documentation

◆ QMActive()

QP::QMActive::QMActive ( QStateHandler const initial)
protectednoexcept

Constructor of QP::QMActive class.

Details
Performs the first step of active object initialization by assigning the virtual pointer and calling the superclass constructor.
Parameters
[in]initialpointer to the event to be dispatched to the MSM
Note
Must be called only ONCE before QASM_INIT().

Definition at line 63 of file qf_qmact.cpp.

Member Function Documentation

◆ init() [1/2]

void QP::QMActive::init ( void const *const e,
std::uint_fast8_t const qsId )
inlineoverridevirtual

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)

Reimplemented from QP::QActive.

Definition at line 890 of file qp.hpp.

◆ init() [2/2]

void QP::QMActive::init ( std::uint_fast8_t const qsId)
inlineoverridevirtual

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::QActive.

Definition at line 896 of file qp.hpp.

◆ dispatch()

void QP::QMActive::dispatch ( QEvt const *const e,
std::uint_fast8_t const qsId )
inlineoverridevirtual

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)

Reimplemented from QP::QActive.

Definition at line 899 of file qp.hpp.

◆ isIn()

bool QP::QMActive::isIn ( QStateHandler const state)
inlineoverridevirtualnoexcept

Virtual function to check whether the state machine is in a given state.

Details
Tests if a given state is part of the current active state configuration. Please note that in a hierarchical state machine, to "be in a state" means also to be in a superstate of of the state.
Parameters
[in]statepointer to the state-handler function to be checked
Returns
'true' if the state machine "is in" the state and 'false' otherwise
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))
Backward Traceability
  • SRS_QP_SM_25 : All State Machine Implementation Strategies provided by QP/C++ Framework might supply a method for checking if a state machine is in a given state

Reimplemented from QP::QActive.

Definition at line 905 of file qp.hpp.

◆ getStateHandler()

QStateHandler QP::QMActive::getStateHandler ( )
inlineoverridevirtualnoexcept

Virtual method for getting the state handler.

Reimplemented from QP::QAsm.

Definition at line 910 of file qp.hpp.

◆ childStateObj()

QMState const * QP::QMActive::childStateObj ( QMState const *const parent) const
inlinenoexcept

Definition at line 914 of file qp.hpp.


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