Active object class (based on QMsm implementation strategy) More...
#include "qp.hpp"
Public Member Functions | |
void | init (void const *const e, std::uint_fast8_t const qsId) override |
void | init (std::uint_fast8_t const qsId) override |
void | dispatch (QEvt const *const e, std::uint_fast8_t const qsId) override |
bool | isIn (QStateHandler const state) noexcept override |
QStateHandler | getStateHandler () noexcept override |
bool | isInState (QMState const *const st) const noexcept |
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, QEvt const **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, QEvt const **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 |
QStateHandler | state () const noexcept |
QMState const * | stateObj () const noexcept |
Protected Member Functions | |
QMActive (QStateHandler const initial) noexcept | |
Protected Member Functions inherited from QP::QActive | |
QActive (QStateHandler const initial) noexcept | |
Protected Member Functions inherited from QP::QAsm | |
QAsm () noexcept | |
QState | tran (QStateHandler const target) noexcept |
QState | tran_hist (QStateHandler const hist) noexcept |
QState | super (QStateHandler const superstate) noexcept |
QState | qm_tran (void const *const tatbl) noexcept |
QState | qm_tran_init (void const *const tatbl) noexcept |
QState | qm_tran_hist (QMState const *const hist, void const *const tatbl) noexcept |
QState | qm_tran_ep (void const *const tatbl) noexcept |
QState | qm_tran_xp (QActionHandler const xp, void const *const tatbl) noexcept |
QState | qm_entry (QMState const *const s) noexcept |
QState | qm_exit (QMState const *const s) noexcept |
QState | qm_sm_exit (QMState const *const s) noexcept |
QState | qm_super_sub (QMState const *const s) noexcept |
Additional Inherited Members | |
Public Types inherited from QP::QAsm | |
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 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 |
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 QActive * | registry_ [QF_MAX_ACTIVE+1U] |
static QSubscrList * | subscrList_ |
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 |
QAsmAttr | m_temp |
Active object class (based on QMsm implementation strategy)
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).
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.
|
protectednoexcept |
Constructor of QP::QMActive class.
Performs the first step of active object initialization by assigning the virtual pointer and calling the superclass constructor.
[in] | initial | pointer to the event to be dispatched to the MSM |
Definition at line 71 of file qf_qmact.cpp.
|
inlineoverridevirtual |
Virtual function to take the top-most initial transition in the state machine.
Synchronously executes the top-most initial transition in a state machine (must be overridden in the subclasses).
[in] | e | pointer to an initialization parameter (might be nullptr) |
[in] | qsId | QS-id of this state machine (for QS local filter) |
qep_asm:200
Reimplemented from QP::QActive.
|
inlineoverridevirtual |
Virtual function to take the top-most initial transition in the state machine (overloaded).
Synchronously executes the top-most initial transition in a state machine. This overloaded version takes no initialization parameter.
[in] | qsId | QS-id of this state machine (for QS local filter) |
Reimplemented from QP::QActive.
|
inlineoverridevirtual |
Virtual function to dispatch an event to the state machine.
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.
[in] | e | pointer to the event to be dispatched to the MSM |
[in] | qsId | QS-id of this state machine (for QS local filter) |
qep_asm:302
Reimplemented from QP::QActive.
|
inlineoverridevirtualnoexcept |
Virtual function to check whether the state machine is in a given state.
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.
[in] | state | pointer to the state-handler function to be checked |
state
and 'false' otherwiseReimplemented from QP::QActive.
|
inlineoverridevirtualnoexcept |
|
inlinenoexcept |