47#define QP_VERSION 734U
48#define QP_VERSION_STR "7.3.4"
51#define QP_RELEASE 0x70C1EA11U
57#define Q_SIGNAL_SIZE 2U
61#define QF_MAX_ACTIVE 32U
64#if (QF_MAX_ACTIVE > 64U)
65#error QF_MAX_ACTIVE exceeds the maximum of 64U;
68#ifndef QF_MAX_TICK_RATE
69#define QF_MAX_TICK_RATE 1U
72#if (QF_MAX_TICK_RATE > 15U)
73#error QF_MAX_TICK_RATE exceeds the maximum of 15U;
77#define QF_MAX_EPOOL 3U
80#if (QF_MAX_EPOOL > 15U)
81#error QF_MAX_EPOOL exceeds the maximum of 15U;
84#ifndef QF_TIMEEVT_CTR_SIZE
85#define QF_TIMEEVT_CTR_SIZE 4U
88#if (QF_TIMEEVT_CTR_SIZE > 4U)
89#error QF_TIMEEVT_CTR_SIZE defined incorrectly, expected 1U, 2U, or 4U;
92#ifndef QF_EVENT_SIZ_SIZE
93#define QF_EVENT_SIZ_SIZE 2U
96#if (QF_EVENT_SIZ_SIZE > 4U)
97#error QF_EVENT_SIZ_SIZE defined incorrectly, expected 1U, 2U, or 4U;
124#if (Q_SIGNAL_SIZE == 1U)
129#if (Q_SIGNAL_SIZE == 2U)
134#if (Q_SIGNAL_SIZE == 4U)
146 static constexpr std::uint8_t
MARKER {0xE0U};
164 return (e !=
nullptr)
165 && ((e->evtTag_ & 0xF0U) ==
MARKER);
168 return static_cast<std::uint8_t
>(
evtTag_) & 0x0FU;
274 virtual ~QAsm() noexcept {
279 void const *
const e,
280 std::uint_fast8_t
const qsId) = 0;
281 virtual void init(std::uint_fast8_t
const qsId) {
282 this->
init(
nullptr, qsId);
285 QEvt const *
const e,
286 std::uint_fast8_t
const qsId) = 0;
288 static_cast<void>(
state);
305 QEvt const *
const e)
noexcept
307 static_cast<void>(me);
308 static_cast<void>(e);
335 void const *
const tatbl)
noexcept
347 void const *
const tatbl)
noexcept
363 static_cast<void>(s);
377 static_cast<void>(s);
401 void const *
const e,
402 std::uint_fast8_t
const qsId)
override;
403 void init(std::uint_fast8_t
const qsId)
override {
404 this->
init(
nullptr, qsId);
407 QEvt const *
const e,
408 std::uint_fast8_t
const qsId)
override;
421 std::uint_fast8_t
const qsId);
431 void const *
const e,
432 std::uint_fast8_t
const qsId)
override;
433 void init(std::uint_fast8_t
const qsId)
override {
434 this->
init(
nullptr, qsId);
437 QEvt const *
const e,
438 std::uint_fast8_t
const qsId)
override;
454 std::uint_fast8_t
const qsId);
458 std::uint_fast8_t
const qsId);
461 std::uint_fast8_t
const qsId);
473#define Q_STATE_DECL(state_) \
474 QP::QState state_ ## _h(QP::QEvt const * const e); \
475 static QP::QState state_(void * const me, QP::QEvt const * const e)
478#define Q_STATE_DEF(subclass_, state_) \
479 QP::QState subclass_::state_(void * const me, QP::QEvt const * const e) { \
480 return static_cast<subclass_ *>(me)->state_ ## _h(e); } \
481 QP::QState subclass_::state_ ## _h(QP::QEvt const * const e)
484#define Q_HANDLED() (Q_RET_HANDLED)
487#define Q_UNHANDLED() (Q_RET_UNHANDLED)
490#define Q_EVT_CAST(subclass_) (static_cast<subclass_ const *>(e))
493#define Q_STATE_CAST(handler_) \
494 (reinterpret_cast<QP::QStateHandler>(handler_))
497#define QM_STATE_DECL(state_) \
498 QP::QState state_ ## _h(QP::QEvt const * const e); \
499 static QP::QState state_(void * const me, QP::QEvt const * const e); \
500 static QP::QMState const state_ ## _s
503#define QM_SM_STATE_DECL(subm_, state_) \
504 QP::QState state_ ## _h(QP::QEvt const * const e);\
505 static QP::QState state_(void * const me, QP::QEvt const * const e); \
506 static SM_ ## subm_ const state_ ## _s
509#define QM_ACTION_DECL(action_) \
510 QP::QState action_ ## _h(); \
511 static QP::QState action_(void * const me)
514#define QM_STATE_DEF(subclass_, state_) \
515 QP::QState subclass_::state_(void * const me, QP::QEvt const * const e) {\
516 return static_cast<subclass_ *>(me)->state_ ## _h(e); } \
517 QP::QState subclass_::state_ ## _h(QP::QEvt const * const e)
520#define QM_ACTION_DEF(subclass_, action_) \
521 QP::QState subclass_::action_(void * const me) { \
522 return static_cast<subclass_ *>(me)->action_ ## _h(); } \
523 QP::QState subclass_::action_ ## _h()
526#define QM_HANDLED() (Q_RET_HANDLED)
529#define QM_UNHANDLED() (Q_RET_HANDLED)
532#define QM_SUPER() (Q_RET_SUPER)
535#define QM_STATE_NULL (nullptr)
538#define Q_ACTION_NULL (nullptr)
541#define Q_UNUSED_PAR(par_) (static_cast<void>(par_))
544#define Q_DIM(array_) (sizeof(array_) / sizeof((array_)[0U]))
547#define Q_UINT2PTR_CAST(type_, uint_) (reinterpret_cast<type_ *>(uint_))
551#define INIT(qsId_) init((qsId_))
556#define INIT(dummy) init(0U)
561#define DISPATCH(e_, qsId_) dispatch((e_), (qsId_))
566#define DISPATCH(e_, dummy) dispatch((e_), 0U)
577#if (QF_TIMEEVT_CTR_SIZE == 1U)
582#if (QF_TIMEEVT_CTR_SIZE == 2U)
587#if (QF_TIMEEVT_CTR_SIZE == 4U)
592#if (QF_MAX_ACTIVE <= 8U)
597#if (8U < QF_MAX_ACTIVE) && (QF_MAX_ACTIVE <= 16U)
602#if (16 < QF_MAX_ACTIVE)
619 #if (QF_MAX_ACTIVE > 32)
624 #if (QF_MAX_ACTIVE <= 32U)
625 return (m_bits[0] == 0U);
627 return (m_bits[0] == 0U) ? (m_bits[1] == 0U) :
false;
631 #if (QF_MAX_ACTIVE <= 32U)
632 return (m_bits[0] != 0U);
634 return (m_bits[0] != 0U) ? true : (m_bits[1] != 0U);
638 #if (QF_MAX_ACTIVE <= 32U)
639 return (m_bits[0] & (
static_cast<QPSetBits>(1U) << (n - 1U))) != 0U;
642 ? ((m_bits[0] & (
static_cast<QPSetBits>(1U) << (n - 1U))) != 0U)
643 : ((m_bits[1] & (
static_cast<QPSetBits>(1U) << (n - 33U))) != 0U);
646 void insert(std::uint_fast8_t
const n)
noexcept {
647 #if (QF_MAX_ACTIVE <= 32U)
648 m_bits[0] = (m_bits[0] | (
static_cast<QPSetBits>(1U) << (n - 1U)));
651 m_bits[0] = (m_bits[0] | (
static_cast<QPSetBits>(1U) << (n - 1U)));
654 m_bits[1] = (m_bits[1] | (
static_cast<QPSetBits>(1U) << (n - 33U)));
658 void remove(std::uint_fast8_t
const n)
noexcept {
659 #if (QF_MAX_ACTIVE <= 32U)
660 m_bits[0] = (m_bits[0] &
static_cast<QPSetBits>(~(1U << (n - 1U))));
663 (m_bits[0] = (m_bits[0] & ~(
static_cast<QPSetBits>(1U) << (n - 1U))));
666 (m_bits[1] = (m_bits[1] & ~(
static_cast<QPSetBits>(1U) << (n - 33U))));
671 #if (QF_MAX_ACTIVE <= 32U)
674 return (m_bits[1] != 0U)
682 dis->m_bits[0] = ~m_bits[0];
683 #if (QF_MAX_ACTIVE > 32U)
684 dis->m_bits[1] = ~m_bits[1];
691 #if (QF_MAX_ACTIVE <= 32U)
692 return m_bits[0] ==
static_cast<QPSetBits>(~dis->m_bits[0]);
694 return (m_bits[0] ==
static_cast<QPSetBits>(~dis->m_bits[0]))
695 && (m_bits[1] ==
static_cast<QPSetBits>(~dis->m_bits[1]));
729#ifdef QACTIVE_THREAD_TYPE
733#ifdef QACTIVE_OS_OBJ_TYPE
737#ifdef QACTIVE_EQUEUE_TYPE
761 friend class GuiQActive;
762 friend class GuiQMActive;
772 m_temp.fun = initial;
775 m_prio_dis =
static_cast<std::uint8_t
>(~m_prio);
776 m_pthre_dis =
static_cast<std::uint8_t
>(~m_pthre);
782 void const *
const e,
783 std::uint_fast8_t
const qsId)
override
785 reinterpret_cast<QHsm *
>(
this)->QHsm::init(e, qsId);
787 void init(std::uint_fast8_t
const qsId)
override {
788 this->init(
nullptr, qsId);
791 QEvt const *
const e,
792 std::uint_fast8_t
const qsId)
override
794 reinterpret_cast<QHsm *
>(
this)->QHsm::dispatch(e, qsId);
797 return reinterpret_cast<QHsm *
>(
this)->QHsm::isIn(state);
800 return reinterpret_cast<QHsm *
>(
this)->QHsm::childState(parent);
804 void const * attr2 =
nullptr);
807 QEvt const * *
const qSto,
808 std::uint_fast16_t
const qLen,
810 std::uint_fast16_t
const stkSize,
811 void const *
const par);
814 QEvt const * *
const qSto,
815 std::uint_fast16_t
const qLen,
817 std::uint_fast16_t
const stkSize)
819 this->start(prioSpec, qSto, qLen, stkSto, stkSize,
nullptr);
822#ifdef QACTIVE_CAN_STOP
825 void register_() noexcept;
826 void unregister_() noexcept;
828 QEvt const * const e,
829 std::uint_fast16_t const margin,
830 void const * const sender) noexcept;
831 void postLIFO(
QEvt const * const e) noexcept;
832 QEvt const * get_() noexcept;
833 static std::uint_fast16_t getQueueMin(std::uint_fast8_t const prio) noexcept;
836 enum_t const maxSignal) noexcept;
837 static
void publish_(
838 QEvt const * const e,
839 void const * const sender,
840 std::uint_fast8_t const qsId) noexcept;
841 void subscribe(
enum_t const sig) const noexcept;
842 void unsubscribe(
enum_t const sig) const noexcept;
843 void unsubscribeAll() const noexcept;
846 QEvt const * const e) const noexcept;
847 bool recall(
QEQueue * const eq) noexcept;
848 std::uint_fast16_t flushDeferred(
850 std::uint_fast16_t const num = 0xFFFFU) const noexcept;
851 std::uint_fast8_t getPrio() const noexcept {
852 return static_cast<std::uint_fast8_t
>(m_prio);
855 m_prio =
static_cast<std::uint8_t
>(prio & 0xFFU);
856 m_pthre =
static_cast<std::uint8_t
>(prio >> 8U);
859 return static_cast<std::uint_fast8_t
>(m_pthre);
862#ifdef QACTIVE_EQUEUE_TYPE
868#ifdef QACTIVE_OS_OBJ_TYPE
874#ifdef QACTIVE_THREAD_TYPE
880#ifdef QACTIVE_THREAD_TYPE
889 QEvt const *
const e,
890 std::uint_fast16_t
const margin,
892 void const *
const sender)
noexcept;
899 void const * sender)
noexcept;
916 void const *
const e,
917 std::uint_fast8_t
const qsId)
override
919 reinterpret_cast<QMsm *
>(
this)->QMsm::init(e, qsId);
921 void init(std::uint_fast8_t
const qsId)
override {
922 this->init(
nullptr, qsId);
925 QEvt const *
const e,
926 std::uint_fast8_t
const qsId)
override
928 reinterpret_cast<QMsm *
>(
this)->QMsm::dispatch(e, qsId);
931 return reinterpret_cast<QMsm *
>(
this)->QMsm::isIn(state);
936 return reinterpret_cast<QMsm *
>(
this)->QMsm::getStateHandler();
940 return reinterpret_cast<QMsm const *
>(
this)->QMsm::isInState(st);
943 return reinterpret_cast<QMsm const *
>(
this)
944 ->QMsm::childStateObj(parent);
972 std::uint_fast8_t
const tickRate = 0U)
noexcept;
980 bool disarm() noexcept;
982 bool wasDisarmed() noexcept;
983 void const * getAct() const noexcept {
993 std::uint_fast8_t
const tickRate,
994 void const *
const sender)
noexcept;
998 std::uint_fast8_t
const tickRate,
999 void const *
const sender);
1004 std::uint_fast8_t
const tickRate,
1006 void const * sender)
noexcept;
1008 static bool noActive(std::uint_fast8_t
const tickRate)
noexcept;
1010 return static_cast<QActive *
>(m_act);
1013 return static_cast<QTimeEvt *
>(m_act);
1031 explicit QTicker(std::uint_fast8_t
const tickRate)
noexcept;
1033 void const *
const e,
1034 std::uint_fast8_t
const qsId)
override;
1035 void init(std::uint_fast8_t
const qsId)
override {
1036 this->init(
nullptr, qsId);
1039 QEvt const *
const e,
1040 std::uint_fast8_t
const qsId)
override;
1041 void trig_(
void const *
const sender)
noexcept;
1070 enum_t const maxSignal)
noexcept
1072 QActive::psInit(subscrSto, maxSignal);
1078 QEvt const *
const e,
1079 void const *
const sender,
1080 std::uint_fast8_t
const qsId)
noexcept
1082 QActive::publish_(e, sender, qsId);
1088 std::uint_fast8_t
const tickRate,
1089 void const *
const sender)
noexcept
1091 QTimeEvt::tick(tickRate, sender);
1096inline std::uint_fast16_t
getQueueMin(std::uint_fast8_t
const prio)
noexcept {
1097 return QActive::getQueueMin(prio);
1113 void *
const poolSto,
1114 std::uint_fast32_t
const poolSize,
1115 std::uint_fast16_t
const evtSize)
noexcept;
1121std::uint_fast16_t getPoolMin(std::uint_fast8_t const poolNum) noexcept;
1125 std::uint_fast16_t const evtSize,
1126 std::uint_fast16_t const margin,
1127 enum_t const sig) noexcept;
1130void gc(QEvt const * const e) noexcept;
1133QEvt const * newRef_(
1134 QEvt const * const e,
1135 QEvt const * const evtRef) noexcept;
1138void deleteRef_(QEvt const * const evtRef) noexcept;
1143 std::uint_fast16_t
const evtSize,
1144 std::uint_fast16_t
const margin,
1145 enum_t const sig)
noexcept;
1161#ifdef QF_ON_CONTEXT_SW
1172#define Q_PRIO(prio_, pthre_) \
1173 (static_cast<QP::QPrioSpec>((prio_) | (pthre_) << 8U))
1176#ifndef QEVT_DYN_CTOR
1177#define Q_NEW(evtT_, sig_) (static_cast<evtT_ *>( \
1178 QP::QF::newX_(sizeof(evtT_), QP::QF::NO_MARGIN, (sig_))))
1183#define Q_NEW(evtT_, sig_, ...) ( static_cast<evtT_ *>( \
1184 QP::QF::newX_(sizeof(evtT_), QP::QF::NO_MARGIN, (sig_)))->ctor(__VA_ARGS__))
1188#ifndef QEVT_DYN_CTOR
1189#define Q_NEW_X(evtT_, margin_, sig_) (static_cast<evtT_ *>( \
1190 QP::QF::newX_(sizeof(evtT_), (margin_), (sig_))))
1195#define Q_NEW_X(evtT_, margin_, sig_, ...) ( static_cast<evtT_ *>( \
1196 QP::QF::newX_(sizeof(evtT_), (margin_), (sig_)))->ctor(__VA_ARGS__))
1200#define Q_NEW_REF(evtRef_, evtT_) \
1201 ((evtRef_) = static_cast<evtT_ const *>(QP::QF::newRef_(e, (evtRef_))))
1204#define Q_DELETE_REF(evtRef_) do { \
1205 QP::QF::deleteRef_((evtRef_)); \
1211#define PUBLISH(e_, sender_) \
1212 publish_((e_), (sender_), (sender_)->getPrio())
1217#define PUBLISH(e_, dummy) publish_((e_), nullptr, 0U)
1222#define POST(e_, sender_) post_((e_), QP::QF::NO_MARGIN, (sender_))
1227#define POST(e_, dummy) post_((e_), QP::QF::NO_MARGIN, nullptr)
1232#define POST_X(e_, margin_, sender_) \
1233 post_((e_), (margin_), (sender_))
1238#define POST_X(e_, margin_, dummy) post_((e_), (margin_), nullptr)
1243#define TICK_X(tickRate_, sender_) tick((tickRate_), (sender_))
1248#define TICK_X(tickRate_, dummy) tick((tickRate_), nullptr)
1252#define TICK(sender_) TICK_X(0U, (sender_))
1256#define TRIG(sender_) trig_((sender_))
1261#define TRIG(sender_) trig_(nullptr)
1265#ifndef QF_CRIT_EXIT_NOP
1266#define QF_CRIT_EXIT_NOP() (static_cast<void>(0))
1271#define QF_MEM_SYS() (static_cast<void>(0))
1276#define QF_MEM_APP() (static_cast<void>(0))
Dummy Active Object for testing.
Active object class (based on the QHsm implementation strategy)
QACTIVE_OS_OBJ_TYPE const & getOsObject() const noexcept
void init(void const *const e, std::uint_fast8_t const qsId) override
void setThread(QACTIVE_THREAD_TYPE const &thr)
std::uint_fast8_t getPThre() const noexcept
QACTIVE_THREAD_TYPE const & getThread() const noexcept
static QSubscrList * subscrList_
void setAttr(std::uint32_t attr1, void const *attr2=nullptr)
static enum_t maxPubSignal_
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
static void publishFromISR(QEvt const *e, void *par, void const *sender) noexcept
virtual bool postFromISR(QEvt const *const e, std::uint_fast16_t const margin, void *par, void const *const sender) noexcept
QACTIVE_EQUEUE_TYPE m_eQueue
bool isIn(QStateHandler const state) noexcept override
void init(std::uint_fast8_t const qsId) override
void setPrio(QPrioSpec const prio) noexcept
QActive(QStateHandler const initial) noexcept
void start(QPrioSpec const prioSpec, QEvt const **const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize)
static void evtLoop_(QActive *act)
QStateHandler childState(QStateHandler const parent) noexcept
QACTIVE_EQUEUE_TYPE const & getEQueue() const noexcept
QACTIVE_THREAD_TYPE m_thread
QACTIVE_OS_OBJ_TYPE m_osObject
Abstract State Machine class (state machine interface)
QState qm_tran_init(void const *const tatbl) noexcept
QStateHandler state() const noexcept
virtual void dispatch(QEvt const *const e, std::uint_fast8_t const qsId)=0
@ Q_RET_HANDLED
event handled (internal transition)
@ Q_RET_ENTRY
state entry action executed
@ Q_RET_IGNORED
event silently ignored (bubbled up to top)
@ Q_RET_UNHANDLED
event unhandled due to a guard
@ Q_RET_TRAN
regular transition
@ Q_RET_TRAN_HIST
transition to history of a given state
@ Q_RET_TRAN_XP
exit-point transition out of a submachine
@ Q_RET_SUPER_SUB
event passed to submachine superstate
@ Q_RET_NULL
return value without any effect
@ Q_RET_TRAN_INIT
initial transition in a state or submachine
@ Q_RET_TRAN_EP
entry-point transition into a submachine
@ Q_RET_EXIT
state exit action executed
@ Q_RET_SUPER
event passed to superstate to handle
QState qm_sm_exit(QMState const *const s) noexcept
QState super(QStateHandler const superstate) noexcept
static QState top(void *const me, QEvt const *const e) noexcept
QState qm_super_sub(QMState const *const s) noexcept
virtual bool isIn(QStateHandler const state) noexcept
QState qm_tran_ep(void const *const tatbl) noexcept
QState qm_entry(QMState const *const s) noexcept
QState qm_exit(QMState const *const s) noexcept
QMState const * stateObj() const noexcept
QState qm_tran_hist(QMState const *const hist, void const *const tatbl) noexcept
QState tran(QStateHandler const target) noexcept
QState qm_tran_xp(QActionHandler const xp, void const *const tatbl) noexcept
QState qm_tran(void const *const tatbl) noexcept
ReservedSig
Reserved signals by the QP-framework.
@ Q_EXIT_SIG
signal for exit actions
@ Q_INIT_SIG
signal for nested initial transitions
@ Q_ENTRY_SIG
signal for entry actions
@ Q_EMPTY_SIG
signal to execute the default case
virtual void init(void const *const e, std::uint_fast8_t const qsId)=0
virtual void init(std::uint_fast8_t const qsId)
virtual QStateHandler getStateHandler() noexcept
QState tran_hist(QStateHandler const hist) noexcept
static constexpr std::uint8_t MARKER
constexpr QEvt(QSignal const s) noexcept
std::uint_fast8_t getPoolNum_() const noexcept
QEvt * ctor(DynEvt const dummy) noexcept
std::uint8_t volatile refCtr_
static bool verify_(QEvt const *const e) noexcept
Hierarchical State Machine class (QHsm-style state machine implementation strategy)
static constexpr std::int_fast8_t MAX_NEST_DEPTH_
QStateHandler getStateHandler() noexcept override
QStateHandler childState(QStateHandler const parent) noexcept
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
std::int_fast8_t hsm_tran(QStateHandler(&path)[MAX_NEST_DEPTH_], std::uint_fast8_t const qsId)
void init(void const *const e, std::uint_fast8_t const qsId) override
QHsm(QStateHandler const initial) noexcept
Active object class (based on QMsm implementation strategy)
bool isIn(QStateHandler const state) noexcept override
QStateHandler getStateHandler() noexcept override
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
bool isInState(QMState const *const st) const noexcept
void init(void const *const e, std::uint_fast8_t const qsId) override
QMState const * childStateObj(QMState const *const parent) const noexcept
void init(std::uint_fast8_t const qsId) override
Hierarchical State Machine class (QMsm-style state machine implementation strategy)
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)
QStateHandler getStateHandler() noexcept override
bool isIn(QStateHandler const state) noexcept override
QMsm(QStateHandler const initial) noexcept
void init(std::uint_fast8_t const qsId) override
void dispatch(QEvt const *const e, std::uint_fast8_t const qsId) override
bool isInState(QMState const *const stateObj) const noexcept
void init(void const *const e, std::uint_fast8_t const qsId) override
QMState const * topQMState() const noexcept
QMState const * childStateObj(QMState const *const parent) const noexcept
QState execTatbl_(QMTranActTable const *const tatbl, std::uint_fast8_t const qsId)
Set of Active Objects of up to QF_MAX_ACTIVE elements.
bool isEmpty() const noexcept
void update_(QPSet *const dis) const noexcept
bool verify_(QPSet const *const dis) const noexcept
void remove(std::uint_fast8_t const n) noexcept
std::uint_fast8_t findMax() const noexcept
void insert(std::uint_fast8_t const n) noexcept
bool hasElement(std::uint_fast8_t const n) const noexcept
bool notEmpty() const noexcept
Subscriber List (for publish-subscribe)
"Ticker" Active Object class
void init(std::uint_fast8_t const qsId) override
QTimeEvt * toTimeEvt() noexcept
QTimeEvt *volatile m_next
QTimeEvtCtr volatile m_ctr
QTimeEvtCtr getInterval() const noexcept
static void tickFromISR(std::uint_fast8_t const tickRate, void *par, void const *sender) noexcept
QTimeEvtCtr getCtr() const noexcept
QActive * toActive() noexcept
Blocking Mutex of the QXK preemptive kernel.
Counting Semaphore of the QXK preemptive kernel.
eXtended (blocking) thread of the QXK preemptive kernel
void psInit(QSubscrList *const subscrSto, enum_t const maxSignal) noexcept
void tick(std::uint_fast8_t const tickRate, void const *const sender) noexcept
void gcFromISR(QEvt const *e) noexcept
std::uint_fast16_t poolGetMaxBlockSize() noexcept
void poolInit(void *const poolSto, std::uint_fast32_t const poolSize, std::uint_fast16_t const evtSize) noexcept
std::uint_fast16_t getQueueMin(std::uint_fast8_t const prio) noexcept
constexpr std::uint_fast16_t NO_MARGIN
QEvt * newXfromISR_(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
void(*)(QXThread *const me) QXThreadHandler
std::uint_fast8_t QF_LOG2(QP::QPSetBits x) noexcept
QState(*)(void *const me) QActionHandler
QState(*)(void *const me, QEvt const *const e) QStateHandler
constexpr char const versionStr[]
#define Q_STATE_CAST(handler_)
void QF_onContextSw(QP::QActive *prev, QP::QActive *next)
#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