QP/C++  7.0.1
Real-Time Embedded Framework
QActiveDummy Class Reference

Dummy Active Object class. More...

#include <qs.hpp>

Inheritance diagram for QActiveDummy:
QActive QHsm

Public Member Functions

 QActiveDummy (void)
 
void start (std::uint_fast8_t const prio, QEvt const **const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize, void const *const par) override
 Starts execution of an active object and registers the object with the framework. More...
 
void start (std::uint_fast8_t const prio, QEvt const **const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize) override
 Overloaded start function (no initialization event) More...
 
void init (void const *const e, std::uint_fast8_t const qs_id) noexcept override
 executes the top-most initial transition in QP::QHsm More...
 
void init (std::uint_fast8_t const qs_id) noexcept override
 overloaded init(qs_id) More...
 
void dispatch (QEvt const *const e, std::uint_fast8_t const qs_id) noexcept override
 Dispatches an event to QHsm. More...
 
bool post_ (QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept override
 
void postLIFO (QEvt const *const e) noexcept override
 Posts an event directly to the event queue of the active object using the Last-In-First-Out (LIFO) policy. More...
 
- Public Member Functions inherited from QActive
virtual void start (std::uint_fast8_t const prio, QEvt const **const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize, void const *const par)
 Starts execution of an active object and registers the object with the framework. More...
 
virtual void start (std::uint_fast8_t const prio, QEvt const **const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize)
 Overloaded start function (no initialization event) More...
 
void stop (void)
 Stops execution of an active object and removes it from the framework's supervision. More...
 
virtual bool post_ (QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept
 
virtual void postLIFO (QEvt const *const e) noexcept
 Posts an event directly to the event queue of the active object using the Last-In-First-Out (LIFO) policy. More...
 
void unsubscribeAll (void) const noexcept
 Un-subscribes from the delivery of all signals to the active object. More...
 
void subscribe (enum_t const sig) const noexcept
 Subscribes for delivery of signal sig to the active object. More...
 
void unsubscribe (enum_t const sig) const noexcept
 Un-subscribes from the delivery of signal sig to the active object. More...
 
bool defer (QEQueue *const eq, QEvt const *const e) const noexcept
 Defer an event to a given separate event queue. More...
 
bool recall (QEQueue *const eq) noexcept
 Recall a deferred event from a given event queue. More...
 
std::uint_fast16_t flushDeferred (QEQueue *const eq) const noexcept
 Flush the specified deferred queue 'eq'. More...
 
std::uint_fast8_t getPrio (void) const noexcept
 Get the priority of the active object. More...
 
void setPrio (std::uint_fast8_t const prio)
 Set the priority of the active object. More...
 
void setAttr (std::uint32_t attr1, void const *attr2=nullptr)
 Generic setting of additional attributes (useful in QP ports) More...
 
QEvt const * get_ (void) noexcept
 Get an event from the event queue of an active object. More...
 
- Public Member Functions inherited from QHsm
virtual ~QHsm ()
 virtual destructor More...
 
virtual void init (void const *const e, std::uint_fast8_t const qs_id)
 executes the top-most initial transition in QP::QHsm More...
 
virtual void init (std::uint_fast8_t const qs_id)
 overloaded init(qs_id) More...
 
virtual void dispatch (QEvt const *const e, std::uint_fast8_t const qs_id)
 Dispatches an event to QHsm. More...
 
bool isIn (QStateHandler const s) noexcept
 Tests if a given state is part of the current active state configuration. More...
 
QStateHandler state (void) const noexcept
 Obtain the current state (state handler function) More...
 
QStateHandler childState (QStateHandler const parent) noexcept
 Obtain the current active child state of a given parent. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from QHsm
static QState top (void *const me, QEvt const *const e) noexcept
 the top-state. More...
 
- Data Fields inherited from QActive
std::uint8_t m_prio
 QF priority (1..QF_MAX_ACTIVE) of this active object. More...
 
- Static Public Attributes inherited from QHsm
static constexpr QState Q_RET_SUPER {static_cast<QState>(0)}
 event passed to the superstate to handle More...
 
static constexpr QState Q_RET_SUPER_SUB {static_cast<QState>(1)}
 event passed to submachine superstate More...
 
static constexpr QState Q_RET_UNHANDLED {static_cast<QState>(2)}
 event unhandled due to a guard evaluating to 'false' More...
 
static constexpr QState Q_RET_HANDLED {static_cast<QState>(3)}
 event handled (internal transition) More...
 
static constexpr QState Q_RET_IGNORED {static_cast<QState>(4)}
 event silently ignored (bubbled up to top) More...
 
static constexpr QState Q_RET_ENTRY {static_cast<QState>(5)}
 state entry action executed More...
 
static constexpr QState Q_RET_EXIT {static_cast<QState>(6)}
 state exit action executed More...
 
static constexpr QState Q_RET_NULL {static_cast<QState>(7)}
 return value without any effect More...
 
static constexpr QState Q_RET_TRAN {static_cast<QState>(8)}
 regular transition taken More...
 
static constexpr QState Q_RET_TRAN_INIT {static_cast<QState>(9)}
 initial transition taken More...
 
static constexpr QState Q_RET_TRAN_EP {static_cast<QState>(10)}
 entry-point transition into a submachine More...
 
static constexpr QState Q_RET_TRAN_HIST {static_cast<QState>(11)}
 transition to history of a given state More...
 
static constexpr QState Q_RET_TRAN_XP {static_cast<QState>(12)}
 exit-point transition out of a submachine More...
 
- Protected Types inherited from QHsm
enum  ReservedHsmSignals : QSignal { Q_ENTRY_SIG = 1 , Q_EXIT_SIG , Q_INIT_SIG }
 
- Protected Member Functions inherited from QActive
 QActive (QStateHandler const initial) noexcept
 protected constructor (abstract class) More...
 
- Protected Member Functions inherited from QHsm
 QHsm (QStateHandler const initial) noexcept
 Protected constructor of QHsm. More...
 
QState tran (QStateHandler const target) noexcept
 Helper function to specify a state transition. More...
 
QState tran_hist (QStateHandler const hist) noexcept
 Helper function to specify a transition to history. More...
 
QState super (QStateHandler const superstate) noexcept
 Helper function to specify the superstate of a given state. More...
 
QState qm_tran (void const *const tatbl) noexcept
 Helper function to specify a regular state transition in a QM state-handler. More...
 
QState qm_tran_hist (QMState const *const hist, void const *const tatbl) noexcept
 Helper function to specifiy a transition to history in a QM state-handler. More...
 
QState qm_tran_init (void const *const tatbl) noexcept
 Helper function to specify an initial state transition in a QM state-handler. More...
 
QState qm_tran_ep (void const *const tatbl) noexcept
 Helper function to specify a transition to an entry point to a submachine state in a QM state-handler. More...
 
QState qm_tran_xp (QActionHandler const xp, void const *const tatbl) noexcept
 Helper function to specify a transition to an exit point from a submachine state in a QM state-handler. More...
 
QState qm_entry (QMState const *const s) noexcept
 Helper function to specify a state entry in a QM state-handler. More...
 
QState qm_exit (QMState const *const s) noexcept
 Helper function to specify a state exit in a QM state-handler. More...
 
virtual QStateHandler getStateHandler () noexcept
 Get the current state handler of the HSM. More...
 
QState qm_sm_exit (QMState const *const s) noexcept
 Helper function to specify a submachine exit in a QM state-handler. More...
 
QState qm_super_sub (QMState const *const s) noexcept
 Helper function to call in a QM state-handler when it passes the event to the host submachine state to handle an event. More...
 

Detailed Description

Description
QActiveDummy is a test double for the role of collaborating active objects in QUTest unit testing.

Definition at line 577 of file qs.hpp.

Constructor & Destructor Documentation

◆ QActiveDummy()

QActiveDummy ( void  )

Definition at line 150 of file qutest.cpp.

Member Function Documentation

◆ start() [1/2]

void start ( std::uint_fast8_t const  prio,
QEvt const **const  qSto,
std::uint_fast16_t const  qLen,
void *const  stkSto,
std::uint_fast16_t const  stkSize,
void const *const  par 
)
overridevirtual
Description
Starts execution of the AO and registers the AO with the framework.
Parameters
[in]priopriority at which to start the active object
[in]qStopointer to the storage for the ring buffer of the event queue (used only with the built-in QP::QEQueue)
[in]qLenlength of the event queue (in events)
[in]stkStopointer to the stack storage (must be nullptr in QV)
[in]stkSizestack size [bytes]
[in]parpointer to an extra parameter (might be nullptr)
Usage
The following example shows starting an AO when a per-task stack is needed
main() {
. . .
static Philo l_philo[N]; // N Philosopher active objects
static QEvt const *l_philQueueSto[N][N]; // storage for Philo event queues
static int l_philoStk[N][256]; // stacks for the Philosopher active objects
for (std::uint8_t n = 0U; n < N; ++n) {
uint32_t options = 0x1234U;
ie.philNum = n;
l_philo[n].start(
n*10U + 1U, // QP priority [1..QF_MAX_ACTIVE]
l_philoQueueSto[n], // queue storage
Q_DIM(l_philoQueueSto[n]), // queue depth [QEvt* pointers]
l_philoStk[n], // RTOS stack storage
sizeof(l_philoStk[n]), // RTOS stack size [bytes]
&options); // initialization parameter
}
. . .
}
#define Q_DIM(array_)
Definition: qassert.h:307
QEvt base class.
Definition: qep.hpp:191
Description
Starts execution of the AO and registers the AO with the framework. Also takes the top-most initial transition in the AO's state machine. This initial transition is taken in the callee's thread of execution.
Parameters
[in]priopriority at which to start the active object
[in]qStopointer to the storage for the ring buffer of the event queue (used only with the built-in QP::QEQueue)
[in]qLenlength of the event queue [events]
[in]stkStopointer to the stack storage (used only when per-AO stack is needed)
[in]stkSizestack size [bytes]
[in]parpointer to an extra parameter (might be NULL)
Precondition
AO cannot be started from an ISR, the priority must be in range and the stack storage must not be provided, because the QK kernel does not need per-AO stacks.
the priority must be in range and the stack storage must not be provided, because the QV kernel does not need per-AO stacks.
AO cannot be started:
  • from an ISR;
  • the priority must be in range;
  • the stack storage must NOT be provided (because the QXK kernel does not need per-AO stacks).

Reimplemented from QActive.

Definition at line 154 of file qutest.cpp.

◆ start() [2/2]

void start ( std::uint_fast8_t const  prio,
QEvt const **const  qSto,
std::uint_fast16_t const  qLen,
void *const  stkSto,
std::uint_fast16_t const  stkSize 
)
inlineoverridevirtual

Reimplemented from QActive.

Definition at line 587 of file qs.hpp.

◆ init() [1/2]

void init ( void const *const  e,
std::uint_fast8_t const  qs_id 
)
overridevirtualnoexcept
Description
Executes the top-most initial transition in a HSM.
Parameters
[in]epointer to an extra parameter (might be NULL)
[in]qs_idQS-id of this state machine (for QS local filter)
Note
Must be called exactly once before the QP::QHsm::dispatch().
Traceability:

traces to: RQP103

traces to: RQP120I

traces to: RQP120D

Precondition
ctor must have been executed and initial tran NOT taken

Reimplemented from QHsm.

Definition at line 174 of file qutest.cpp.

◆ init() [2/2]

void init ( std::uint_fast8_t const  qs_id)
overridevirtualnoexcept

Reimplemented from QHsm.

Definition at line 188 of file qutest.cpp.

◆ dispatch()

void dispatch ( QEvt const *const  e,
std::uint_fast8_t const  qs_id 
)
overridevirtualnoexcept
Description
Dispatches an event for processing to a hierarchical state machine (HSM). The processing of an event represents one run-to-completion (RTC) step.
Parameters
[in]epointer to the event to be dispatched to the HSM
[in]qs_idQS-id of this state machine (for QS local filter)
Note
This state machine must be initialized by calling QP::QHsm::init() exactly once before calling QP::QHsm::dispatch().
Traceability:

traces to: RQP103

traces to: RQP120A

traces to: RQP120B

traces to: RQP120C

traces to: RQP120D

traces to: RQP120E

Precondition
the current state must be initialized and the state configuration must be stable
Traceability:
traces to: RQP120A
Traceability:
traces to: RQP120E
Traceability:
traces to: RQP120C
Traceability:
traces to: RQP120B
Traceability:
traces to: RQP120I

Reimplemented from QHsm.

Definition at line 192 of file qutest.cpp.

◆ post_()

bool post_ ( QEvt const *const  e,
std::uint_fast16_t const  margin,
void const *const  sender 
)
overridevirtualnoexcept
Description
Direct event posting is the simplest asynchronous communication method available in QF.
Parameters
[in,out]epointer to the event to be posted
[in]marginnumber of required free slots in the queue after posting the event. The special value QP::QF_NO_MARGIN means that this function will assert if posting fails.
[in]senderpointer to a sender object (used in QS only)
Returns
'true' (success) if the posting succeeded (with the provided margin) and 'false' (failure) when the posting fails.
Attention
Should be called only via the macro POST() or POST_X().
Note
The QP::QF_NO_MARGIN value of the margin argument is special and denotes situation when the post() operation is assumed to succeed (event delivery guarantee). An assertion fires, when the event cannot be delivered in this case.
Usage
extern QActive * const AO_Table;
Q_STATE_DEF(Philo, hungry) {
QP::QState status_;
switch (e->sig) {
case Q_ENTRY_SIG: {
TableEvt *pe = Q_NEW(TableEvt, HUNGRY_SIG);
pe->philoNum = PHILO_ID(this);
AO_Table->POST(pe, this); // <----
status_ = Q_RET_HANDLED;
break;
}
. . .
default: {
status_ = super(&top);
break;
}
}
return status_;
}
QActive active object (based on QP::QHsm implementation)
Definition: qf.hpp:136
static constexpr QState Q_RET_HANDLED
event handled (internal transition)
Definition: qep.hpp:303
@ Q_ENTRY_SIG
signal for entry actions
Definition: qep.hpp:352
static QState top(void *const me, QEvt const *const e) noexcept
the top-state.
Definition: qep_hsm.cpp:228
QState super(QStateHandler const superstate) noexcept
Helper function to specify the superstate of a given state.
Definition: qep.hpp:346
std::uint_fast8_t QState
Type returned from state-handler functions.
Definition: qep.hpp:205
#define Q_STATE_DEF(subclass_, state_)
Macro to generate a definition of a state-handler for a given state in a subclass of QP::QHsm.
Definition: qep.hpp:605
#define Q_NEW(evtT_, sig_)
Allocate a dynamic event.
Definition: qf.hpp:708
See also
QActive::postLIFO()
Precondition
event pointer must be valid

Reimplemented from QActive.

Definition at line 206 of file qutest.cpp.

◆ postLIFO()

void postLIFO ( QEvt const *const  e)
overridevirtualnoexcept
Description
posts an event to the event queue of the active object using the Last-In-First-Out (LIFO) policy.
Note
The LIFO policy should be used only for self-posting and with caution, because it alters order of events in the queue.
Parameters
[in]epointer to the event to post to the queue
See also
QActive::post_()

Reimplemented from QActive.

Definition at line 261 of file qutest.cpp.


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