33#define QP_VERSION_STR "8.0.3"
34#define QP_VERSION 803U
36#define QP_RELEASE 0x6ACCA50CU
43#define Q_SIGNAL_SIZE 2U
47#define QF_MAX_ACTIVE 32U
50#if (QF_MAX_ACTIVE > 64U)
51#error QF_MAX_ACTIVE exceeds the maximum of 64U;
54#ifndef QF_MAX_TICK_RATE
55#define QF_MAX_TICK_RATE 1U
58#if (QF_MAX_TICK_RATE > 15U)
59#error QF_MAX_TICK_RATE exceeds the maximum of 15U;
63#define QF_MAX_EPOOL 3U
66#if (QF_MAX_EPOOL > 15U)
67#error QF_MAX_EPOOL exceeds the maximum of 15U;
70#ifndef QF_TIMEEVT_CTR_SIZE
71#define QF_TIMEEVT_CTR_SIZE 4U
74#if (QF_TIMEEVT_CTR_SIZE > 4U)
75#error QF_TIMEEVT_CTR_SIZE defined incorrectly, expected 1U, 2U, or 4U;
78#ifndef QF_EVENT_SIZ_SIZE
79#define QF_EVENT_SIZ_SIZE 2U
82#if (QF_EVENT_SIZ_SIZE > 4U)
83#error QF_EVENT_SIZ_SIZE defined incorrectly, expected 1U, 2U, or 4U;
97#define Q_UNUSED_PAR(par_) (static_cast<void>(par_))
98#define Q_DIM(array_) (sizeof(array_) / sizeof((array_)[0U]))
99#define Q_UINT2PTR_CAST(type_, uint_) (reinterpret_cast<type_ *>(uint_))
108#if (Q_SIGNAL_SIZE == 1U)
110#elif (Q_SIGNAL_SIZE == 2U)
112#elif (Q_SIGNAL_SIZE == 4U)
230 void const *
const e,
231 std::uint_fast8_t
const qsId) = 0;
232 virtual void init(std::uint_fast8_t
const qsId) {
233 this->
init(
nullptr, qsId);
236 QEvt const *
const e,
237 std::uint_fast8_t
const qsId) = 0;
257 QEvt const *
const e)
noexcept
259 static_cast<void>(me);
260 static_cast<void>(e);
287 void const *
const tatbl)
noexcept
303 static_cast<void>(s);
317 static_cast<void>(s);
330 void const *
const e,
331 std::uint_fast8_t
const qsId)
override;
332 void init(std::uint_fast8_t
const qsId)
override {
333 this->
init(
nullptr, qsId);
336 QEvt const *
const e,
337 std::uint_fast8_t
const qsId)
override;
350 std::uint_fast8_t
const qsId);
354 std::uint_fast8_t
const qsId);
358 std::int_fast8_t
const depth,
359 std::uint_fast8_t
const qsId);
369 void const *
const e,
370 std::uint_fast8_t
const qsId)
override;
371 void init(std::uint_fast8_t
const qsId)
override {
372 this->
init(
nullptr, qsId);
375 QEvt const *
const e,
376 std::uint_fast8_t
const qsId)
override;
380 return m_state.obj->stateHandler;
390 std::uint_fast8_t
const qsId);
394 std::uint_fast8_t
const qsId);
397 std::uint_fast8_t
const qsId);
408#define Q_STATE_DECL(state_) \
409 QP::QState state_ ## _h(QP::QEvt const * const e); \
410 static QP::QState state_(void * const me, QP::QEvt const * const e)
412#define Q_STATE_DEF(subclass_, state_) \
413 QP::QState subclass_::state_(void * const me, QP::QEvt const * const e) { \
414 return static_cast<subclass_ *>(me)->state_ ## _h(e); } \
415 QP::QState subclass_::state_ ## _h(QP::QEvt const * const e)
417#define Q_HANDLED() (Q_RET_HANDLED)
418#define Q_UNHANDLED() (Q_RET_UNHANDLED)
420#define Q_EVT_CAST(subclass_) (static_cast<subclass_ const *>(e))
421#define Q_STATE_CAST(handler_) (reinterpret_cast<QP::QStateHandler>(handler_))
423#define QM_STATE_DECL(state_) \
424 QP::QState state_ ## _h(QP::QEvt const * const e); \
425 static QP::QState state_(void * const me, QP::QEvt const * const e); \
426 static QP::QMState const state_ ## _s
428#define QM_ACTION_DECL(action_) \
429 QP::QState action_ ## _h(); \
430 static QP::QState action_(void * const me)
432#define QM_STATE_DEF(subclass_, state_) \
433 QP::QState subclass_::state_(void * const me, QP::QEvt const * const e) {\
434 return static_cast<subclass_ *>(me)->state_ ## _h(e); } \
435 QP::QState subclass_::state_ ## _h(QP::QEvt const * const e)
437#define QM_ACTION_DEF(subclass_, action_) \
438 QP::QState subclass_::action_(void * const me) { \
439 return static_cast<subclass_ *>(me)->action_ ## _h(); } \
440 QP::QState subclass_::action_ ## _h()
442#define QM_HANDLED() (Q_RET_HANDLED)
443#define QM_UNHANDLED() (Q_RET_HANDLED)
444#define QM_SUPER() (Q_RET_SUPER)
445#define QM_STATE_NULL (nullptr)
446#define Q_ACTION_NULL (nullptr)
449 #define INIT(qsId_) init((qsId_))
450 #define DISPATCH(e_, qsId_) dispatch((e_), (qsId_))
452 #define INIT(dummy) init(0U)
453 #define DISPATCH(e_, dummy) dispatch((e_), 0U)
461#if (QF_TIMEEVT_CTR_SIZE == 1U)
463#elif (QF_TIMEEVT_CTR_SIZE == 2U)
465#elif (QF_TIMEEVT_CTR_SIZE == 4U)
469#if (QF_MAX_ACTIVE <= 8U)
471#elif (8U < QF_MAX_ACTIVE) && (QF_MAX_ACTIVE <= 16U)
473#elif (16 < QF_MAX_ACTIVE)
489#if (QF_MAX_ACTIVE > 32)
494#if (QF_MAX_ACTIVE <= 32U)
501#if (QF_MAX_ACTIVE <= 32U)
508#if (QF_MAX_ACTIVE <= 32U)
516 void insert(std::uint_fast8_t
const n)
noexcept {
517#if (QF_MAX_ACTIVE <= 32U)
528 void remove(std::uint_fast8_t
const n)
noexcept {
529#if (QF_MAX_ACTIVE <= 32U)
541#if (QF_MAX_ACTIVE <= 32U)
571#ifdef QACTIVE_THREAD_TYPE
575#ifdef QACTIVE_OS_OBJ_TYPE
579#ifdef QACTIVE_EQUEUE_TYPE
611 void const *
const e,
612 std::uint_fast8_t
const qsId)
override
616 void init(std::uint_fast8_t
const qsId)
override {
617 this->
init(
nullptr, qsId);
620 QEvt const *
const e,
621 std::uint_fast8_t
const qsId)
override
633 void const * attr2 =
nullptr);
637 std::uint_fast16_t
const qLen,
639 std::uint_fast16_t
const stkSize,
640 void const *
const par);
644 std::uint_fast16_t
const qLen,
646 std::uint_fast16_t
const stkSize)
648 this->
start(prioSpec, qSto, qLen, stkSto, stkSize,
nullptr);
651#ifdef QACTIVE_CAN_STOP
657 QEvt const * const e,
658 std::uint_fast16_t const margin,
659 void const * const sender) noexcept;
662 static std::uint_fast16_t
getQueueMin(std::uint_fast8_t const prio) noexcept;
665 enum_t const maxSignal) noexcept;
667 QEvt const * const e,
668 void const * const sender,
669 std::uint_fast8_t const qsId) noexcept;
675 QEvt const * const e) const noexcept;
679 std::uint_fast16_t const num = 0xFFFFU) const noexcept;
681 return static_cast<std::uint_fast8_t
>(
m_prio);
684 m_prio =
static_cast<std::uint8_t
>(prio & 0xFFU);
685 m_pthre =
static_cast<std::uint8_t
>(prio >> 8U);
688 return static_cast<std::uint_fast8_t
>(
m_pthre);
691#ifdef QACTIVE_EQUEUE_TYPE
697#ifdef QACTIVE_OS_OBJ_TYPE
703#ifdef QACTIVE_THREAD_TYPE
709#ifdef QACTIVE_THREAD_TYPE
718 QEvt const *
const e,
719 std::uint_fast16_t
const margin,
721 void const *
const sender)
noexcept;
728 void const * sender)
noexcept;
733 QEvt const *
const e,
734 void const *
const sender);
744 void const *
const e,
745 std::uint_fast8_t
const qsId)
override
749 void init(std::uint_fast8_t
const qsId)
override {
750 this->
init(
nullptr, qsId);
753 QEvt const *
const e,
754 std::uint_fast8_t
const qsId)
override
768 return reinterpret_cast<QMsm const *
>(
this)
794 std::uint_fast8_t
const tickRate = 0U)
noexcept;
796 std::uint32_t
const nTicks,
797 std::uint32_t
const interval = 0U)
noexcept;
799 bool rearm(std::uint32_t const nTicks) noexcept;
814 std::uint_fast8_t
const tickRate,
815 void const *
const sender)
noexcept;
819 std::uint_fast8_t
const tickRate,
820 void const *
const sender);
825 std::uint_fast8_t
const tickRate,
827 void const * sender)
noexcept;
829 static bool noActive(std::uint_fast8_t
const tickRate)
noexcept;
844 std::uint_fast8_t const tickRate) noexcept;
850 explicit QTicker(std::uint_fast8_t
const tickRate)
noexcept;
852 void const *
const e,
853 std::uint_fast8_t
const qsId)
override;
854 void init(std::uint_fast8_t
const qsId)
override {
855 this->
init(
nullptr, qsId);
858 QEvt const *
const e,
859 std::uint_fast8_t
const qsId)
override;
860 void trig_(
void const *
const sender)
noexcept;
877 enum_t const maxSignal)
noexcept
884 QEvt const *
const e,
885 void const *
const sender,
886 std::uint_fast8_t
const qsId)
noexcept
893 std::uint_fast8_t
const tickRate,
894 void const *
const sender)
noexcept
900inline std::uint_fast16_t
getQueueMin(std::uint_fast8_t
const prio)
noexcept {
909 void *
const poolSto,
910 std::uint_fast32_t
const poolSize,
911 std::uint_fast16_t
const evtSize)
noexcept;
913std::uint_fast16_t poolGetMaxBlockSize() noexcept;
914std::uint_fast16_t getPoolMin(std::uint_fast8_t const poolNum) noexcept;
916 std::uint_fast16_t const evtSize,
917 std::uint_fast16_t const margin,
918 enum_t const sig) noexcept;
919void gc(
QEvt const * const e) noexcept;
921 QEvt const * const e,
922 QEvt const * const evtRef) noexcept;
924void deleteRef_(
QEvt const * const evtRef) noexcept;
927 template<
class evtT_>
928 inline evtT_ * q_new(
enum_t const sig) {
929 return static_cast<evtT_*
>(
932 template<
class evtT_>
933 inline evtT_ * q_new_x(
934 std::uint_fast16_t
const margin,
937 return static_cast<evtT_*
>(
QP::QF::newX_(
sizeof(evtT_), margin, sig));
940 template<
class evtT_,
typename... Args>
945 evtT_ *e =
static_cast<evtT_*
>(
950 template<
class evtT_,
typename... Args>
952 std::uint_fast16_t
const margin,
956 evtT_ *e =
static_cast<evtT_*
>(
QP::QF::newX_(
sizeof(evtT_), margin, sig));
967 evtT_
const *& evtRef)
980 std::uint_fast16_t
const evtSize,
981 std::uint_fast16_t
const margin,
982 enum_t const sig)
noexcept;
993#ifdef QF_ON_CONTEXT_SW
1003#define Q_PRIO(prio_, pthre_) \
1004 (static_cast<QP::QPrioSpec>((prio_) | (pthre_) << 8U))
1006#ifndef QEVT_PAR_INIT
1007 #define Q_NEW(evtT_, sig_) (QP::QF::q_new<evtT_>((sig_)))
1008 #define Q_NEW_X(evtT_, margin_, sig_) (QP::QF::q_new_x<evtT_>((margin_), (sig_)))
1010 #define Q_NEW(evtT_, sig_, ...) (QP::QF::q_new<evtT_>((sig_), __VA_ARGS__))
1011 #define Q_NEW_X(evtT_, margin_, sig_, ...) (QP::QF::q_new_x<evtT_>((margin_), (sig_), __VA_ARGS__))
1014#define Q_NEW_REF(evtRef_, evtT_) (QP::QF::q_new_ref<evtT_>(e, (evtRef_)))
1015#define Q_DELETE_REF(evtRef_) do { \
1016 QP::QF::deleteRef_((evtRef_)); \
1017 (evtRef_) = nullptr; \
1021 #define PUBLISH(e_, sender_) \
1022 publish_((e_), (sender_), (sender_)->getPrio())
1023 #define POST(e_, sender_) post_((e_), QP::QF::NO_MARGIN, (sender_))
1024 #define POST_X(e_, margin_, sender_) \
1025 post_((e_), (margin_), (sender_))
1026 #define TICK_X(tickRate_, sender_) tick((tickRate_), (sender_))
1027 #define TRIG(sender_) trig_((sender_))
1029 #define PUBLISH(e_, dummy) publish_((e_), nullptr, 0U)
1030 #define POST(e_, dummy) post_((e_), QP::QF::NO_MARGIN, nullptr)
1031 #define POST_X(e_, margin_, dummy) post_((e_), (margin_), nullptr)
1032 #define TICK_X(tickRate_, dummy) tick((tickRate_), nullptr)
1033 #define TRIG(sender_) trig_(nullptr)
1036#define TICK(sender_) TICK_X(0U, (sender_))
1038#ifndef QF_CRIT_EXIT_NOP
1039 #define QF_CRIT_EXIT_NOP() (static_cast<void>(0))
1045#ifdef QF_MEM_ISOLATE
1046 #error Memory isolation not supported in this QP edition, need SafeQP
Active object class (based on the QHsm implementation strategy)
friend class QActiveDummy
QACTIVE_OS_OBJ_TYPE const & getOsObject() const noexcept
virtual bool postFromISR(QEvt const *const e, std::uint_fast16_t const margin, void *par, void const *const sender) noexcept
QACTIVE_THREAD_TYPE m_thread
void unregister_() noexcept
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 subscribe(enum_t const sig) const noexcept
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.
static QActive * registry_[QF_MAX_ACTIVE+1U]
bool defer(QEQueue *const eq, QEvt const *const e) const noexcept
void setThread(QACTIVE_THREAD_TYPE const &thr)
static QSubscrList * subscrList_
void register_() noexcept
std::uint_fast8_t getPThre() const noexcept
QACTIVE_THREAD_TYPE const & getThread() const noexcept
void unsubscribe(enum_t const sig) const noexcept
void postFIFO_(QEvt const *const e, void const *const sender)
static void publishFromISR(QEvt const *e, void *par, void const *sender) noexcept
static void publish_(QEvt const *const e, void const *const sender, std::uint_fast8_t const qsId) noexcept
static void evtLoop_(QActive *act)
void setAttr(std::uint32_t attr1, void const *attr2=nullptr)
static void psInit(QSubscrList *const subscrSto, enum_t const maxSignal) noexcept
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
Virtual function to dispatch an event to the state machine.
static enum_t maxPubSignal_
bool post_(QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept
bool isIn(QStateHandler const stateHndl) noexcept override
Virtual function to check whether the state machine is in a given state.
void init(std::uint_fast8_t const qsId) override
Virtual function to take the top-most initial transition in the state machine (overloaded).
void setPrio(QPrioSpec const prio) noexcept
QActive(QStateHandler const initial) noexcept
QACTIVE_EQUEUE_TYPE m_eQueue
QEvt const * get_() noexcept
QStateHandler childState(QStateHandler const parentHandler) noexcept
void postLIFO(QEvt const *const e) 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
QACTIVE_EQUEUE_TYPE const & getEQueue() const noexcept
QACTIVE_OS_OBJ_TYPE m_osObject
void unsubscribeAll() const noexcept
static std::uint_fast16_t getQueueMin(std::uint_fast8_t const prio) noexcept
void start(QPrioSpec const prioSpec, QEvtPtr *const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize)
Abstract State Machine class (state machine interface)
virtual void init(std::uint_fast8_t const qsId)
Virtual function to take the top-most initial transition in the state machine (overloaded).
QState qm_entry(QMState const *const s) noexcept
Internal helper function to execute state entry actions in QP::QMsm.
QAsm() noexcept
Constructor of the QP::QAsm base class.
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.
QStateHandler state() const noexcept
static constexpr QState Q_RET_UNHANDLED
QState qm_tran(void const *const tatbl) noexcept
Internal helper function to take a state transition in QP::QMsm.
static constexpr QState Q_RET_TRAN
static constexpr QState Q_RET_ENTRY
QState qm_exit(QMState const *const s) noexcept
Internal helper function to execute state exit actions in QP::QMsm.
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_init(void const *const tatbl) noexcept
static constexpr QState Q_RET_NULL
QAsmAttr m_temp
Temporary storage for target/act-table etc.
static constexpr QState Q_RET_IGNORED
static constexpr QState Q_RET_SUPER
static QState top(void *const me, QEvt const *const e) noexcept
Top state handler that ignores all events.
static constexpr QState Q_RET_TRAN_INIT
static constexpr QState Q_RET_TRAN_HIST
virtual QStateHandler getStateHandler() noexcept
Virtual method for getting the state handler.
static constexpr QState Q_RET_EXIT
QMState const * stateObj() const noexcept
virtual bool isIn(QStateHandler const stateHndl) noexcept
Virtual function to check whether the state machine is in a given state.
virtual void init(void const *const e, std::uint_fast8_t const qsId)=0
Virtual function to take the top-most initial transition in the state machine.
QState tran(QStateHandler const target) noexcept
Internal helper function to take a state transition in sublclasses of QP::QAsm.
virtual ~QAsm() noexcept
Virtual destructor of the QP::QAsm abstract base class.
static constexpr QSignal Q_INIT_SIG
QAsmAttr m_state
Current state (pointer to the current state-handler function)
virtual void dispatch(QEvt const *const e, std::uint_fast8_t const qsId)=0
Virtual function to dispatch an event to the state machine.
static constexpr QSignal Q_ENTRY_SIG
static constexpr QSignal Q_EXIT_SIG
static constexpr QSignal Q_EMPTY_SIG
static constexpr QState Q_RET_HANDLED
QSignal sig
Signal of the event (see Event Signal)
std::uint8_t poolNum_
Event pool number of this event.
std::uint8_t volatile refCtr_
Event reference counter.
constexpr QEvt(QSignal const s) noexcept
Event constexpr constructor applicable to immutable and mutable event instances.
void init(DynEvt const dummy) noexcept
Hierarchical State Machine class (QHsm-style state machine implementation strategy)
QStateHandler getStateHandler() noexcept override
std::int_fast8_t tran_complex_(QStateHandler *const path, std::uint_fast8_t const qsId)
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.
std::int_fast8_t tran_simple_(QStateHandler *const path, std::uint_fast8_t const qsId)
QStateHandler childState(QStateHandler const parentHndl) noexcept
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.
QHsm(QStateHandler const initial) noexcept
void enter_target_(QStateHandler *const path, std::int_fast8_t const depth, std::uint_fast8_t const qsId)
bool isIn(QStateHandler const stateHndl) noexcept override
QMActive(QStateHandler const initial) noexcept
Constructor of QP::QMActive class.
bool isIn(QStateHandler const stateHndl) 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.
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
Virtual function to dispatch an event to the state machine.
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.
QMState const * childStateObj(QMState const *const parent) const noexcept
void init(std::uint_fast8_t const qsId) override
Virtual function to take the top-most initial transition in the state machine (overloaded).
Hierarchical State Machine class (QMsm-style state machine implementation strategy)
QMState const * childStateObj(QMState const *const parentHndl) const noexcept
QState execTatbl_(QMTranActTable const *const tatbl, std::uint_fast8_t const qsId)
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.
void exitToTranSource_(QMState const *const cs, QMState const *const ts, std::uint_fast8_t const qsId)
QState enterHistory_(QMState const *const hist, std::uint_fast8_t const qsId)
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.
bool isIn(QStateHandler const stateHndl) noexcept override
QMsm(QStateHandler const initial) noexcept
QMState const * topQMState() const noexcept
QStateHandler getStateHandler() noexcept override
Obtain the current active state from a MSM (read only)
Set of Active Objects of up to QF_MAX_ACTIVE elements.
std::uint_fast8_t findMax() const noexcept
void remove(std::uint_fast8_t const n) noexcept
bool notEmpty() const noexcept
bool hasElement(std::uint_fast8_t const n) const noexcept
QPSetBits m_bits[((QF_MAX_ACTIVE+(8U *sizeof(QPSetBits))) - 1U)/(8U *sizeof(QPSetBits))]
bool isEmpty() const noexcept
void insert(std::uint_fast8_t const n) noexcept
Subscriber List (for publish-subscribe)
void init(std::uint_fast8_t const qsId) override
Virtual function to take the top-most initial transition in the state machine (overloaded).
QTicker(std::uint_fast8_t const tickRate) noexcept
static void tick(std::uint_fast8_t const tickRate, void const *const sender) noexcept
QTimeEvt * toTimeEvt() noexcept
void const * getAct() const noexcept
static QTimeEvt timeEvtHead_[QF_MAX_TICK_RATE]
QTimeEvt(QActive *const act, QSignal const sig, std::uint_fast8_t const tickRate=0U) noexcept
The "extended" constructor to initialize a Time Event.
static void tick1_(std::uint_fast8_t const tickRate, void const *const sender)
QTimeEvtCtr getInterval() const noexcept
static bool noActive(std::uint_fast8_t const tickRate) noexcept
static void tickFromISR(std::uint_fast8_t const tickRate, void *par, void const *sender) noexcept
void * m_act
Active object that receives the time events.
QTimeEvt *volatile m_next
Link to the next time event in the list.
QActive * toActive() noexcept
void armX(std::uint32_t const nTicks, std::uint32_t const interval=0U) noexcept
QTimeEvtCtr getCtr() const noexcept
bool rearm(std::uint32_t const nTicks) noexcept
std::uint8_t getTickRate() const noexcept
QTimeEvtCtr volatile m_ctr
Down-counter of the time event.
QTimeEvt * expire_(QTimeEvt *const prev_link, QActive const *const act, std::uint_fast8_t const tickRate) noexcept
QTimeEvtCtr m_interval
Interval for periodic time event (zero for one-shot time event)
bool wasDisarmed() noexcept
eXtended (blocking) thread of the QXK preemptive kernel
QF Active Object Framework namespace.
void deleteRef_(QEvt const *const evtRef) noexcept
void psInit(QSubscrList *const subscrSto, enum_t const maxSignal) noexcept
QEvt const * newRef_(QEvt const *const e, QEvt const *const evtRef) noexcept
evtT_ * q_new(enum_t const sig, Args... args)
void tick(std::uint_fast8_t const tickRate, void const *const sender) noexcept
evtT_ * q_new_x(std::uint_fast16_t const margin, enum_t const sig, Args... args)
void gcFromISR(QEvt const *e) noexcept
constexpr std::uint_fast16_t NO_MARGIN
void q_new_ref(QP::QEvt const *const e, evtT_ const *&evtRef)
std::uint_fast16_t getQueueMin(std::uint_fast8_t const prio) noexcept
QEvt * newXfromISR_(std::uint_fast16_t const evtSize, std::uint_fast16_t const margin, enum_t const sig) noexcept
void q_delete_ref(evtT_ const *&evtRef)
QEvt * newX_(std::uint_fast16_t const evtSize, std::uint_fast16_t const margin, enum_t const sig) noexcept
void publish_(QEvt const *const e, void const *const sender, std::uint_fast8_t const qsId) noexcept
constexpr enum_t Q_USER_SIG
std::uint32_t QTimeEvtCtr
Data type to store the block-size defined based on the macro QF_TIMEEVT_CTR_SIZE.
char const versionStr[24]
QState(*)(void *const me) QActionHandler
Pointer to an action-handler function.
std::uint_fast8_t QF_LOG2(QP::QPSetBits const bitmask) noexcept
QEvt const * QEvtPtr
Pointer to const event instances passed around in QP Framework.
std::uint_fast8_t QState
Type returned from state-handler functions.
QState(*)(void *const me, QEvt const *const e) QStateHandler
Pointer to a state-handler function.
std::uint16_t QSignal
The signal of event QP::QEvt.
void(*)(QXThread *const me) QXThreadHandler
Pointer to an extended-thread handler function.
std::uint16_t QPrioSpec
Priority specification for Active Objects in QP.
int int_t
Alias for assertion-ID numbers in QP assertions and return from QP::QF::run()
float float32_t
Alias for IEEE 754 32-bit floating point number.
#define Q_UNUSED_PAR(par_)
Helper macro to clearly mark unused parameters of functions.
double float64_t
Alias for IEEE 754 64-bit floating point number.
#define Q_STATE_CAST(handler_)
void QF_onContextSw(QP::QActive *prev, QP::QActive *next)
#define QF_MAX_TICK_RATE
Maximum # clock tick rates in the system (0..15)
#define QF_MAX_ACTIVE
Maximum # Active Objects in the system (1..64)
#define QACTIVE_OS_OBJ_TYPE
QP::QActive "OS-object" type used in various QP/C++ ports.
#define QACTIVE_EQUEUE_TYPE
QP::QActive event queue type used in various QP/C++ ports.
#define QACTIVE_THREAD_TYPE
QP::QActive "thread" type used in various QP/C++ ports.
State object for the QP::QMsm class (QM State Machine)
QActionHandler const entryAction
QStateHandler const stateHandler
QActionHandler const exitAction
QMState const * superstate
QActionHandler const initAction
Transition-Action Table for the QP::QMsm State Machine.
QActionHandler const act[1]
Attribute of for the QP::QAsm class (Abstract State Machine)
QMTranActTable const * tatbl