54Q_DEFINE_THIS_MODULE(
"qf_ps")
58#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
59#error qpc version 7.3.0 or higher required
68enum_t QActive_maxPubSignal_;
79 QActive_subscrList_ = subscrSto;
80 QActive_maxPubSignal_ = maxSignal;
83 for (
enum_t sig = 0; sig < maxSignal; ++sig) {
84 QPSet_setEmpty(&subscrSto[sig].set);
86 QPSet_update_(&subscrSto[sig].set, &subscrSto[sig].set_dis);
98 void const *
const sender,
99 uint_fast8_t
const qsId)
114 QPSet_verify_(&QActive_subscrList_[sig].set,
115 &QActive_subscrList_[sig].set_dis));
121 QS_2U8_PRE_(QEvt_getPoolNum_(e), e->
refCtr_);
125 if (QEvt_getPoolNum_(e) != 0U) {
136 QPSet subscrSet = QActive_subscrList_[sig].set;
141 if (QPSet_notEmpty(&subscrSet)) {
143 uint_fast8_t p = QPSet_findMax(&subscrSet);
164 QPSet_remove(&subscrSet, p);
165 if (QPSet_notEmpty(&subscrSet)) {
166 p = QPSet_findMax(&subscrSet);
181 }
while ((p != 0U) && (limit > 0U));
193 #if (QF_MAX_EPOOL > 0U)
203void QActive_subscribe(
QActive const *
const me,
206 uint_fast8_t
const p = (uint_fast8_t)me->
prio;
213 && (sig < QActive_maxPubSignal_)
217 QPSet_verify_(&QActive_subscrList_[sig].set,
218 &QActive_subscrList_[sig].set_dis));
227 QPSet_insert(&QActive_subscrList_[sig].set, p);
229 QPSet_update_(&QActive_subscrList_[sig].set,
230 &QActive_subscrList_[sig].set_dis);
242void QActive_unsubscribe(
QActive const *
const me,
245 uint_fast8_t
const p = (uint_fast8_t)me->
prio;
252 && (sig < QActive_maxPubSignal_)
256 QPSet_verify_(&QActive_subscrList_[sig].set,
257 &QActive_subscrList_[sig].set_dis));
266 QPSet_remove(&QActive_subscrList_[sig].set, p);
268 QPSet_update_(&QActive_subscrList_[sig].set,
269 &QActive_subscrList_[sig].set_dis);
281void QActive_unsubscribeAll(
QActive const *
const me) {
286 uint_fast8_t
const p = (uint_fast8_t)me->
prio;
290 enum_t const maxPubSig = QActive_maxPubSignal_;
299 if (QPSet_hasElement(&QActive_subscrList_[sig].set, p)) {
300 QPSet_remove(&QActive_subscrList_[sig].set, p);
302 QPSet_update_(&QActive_subscrList_[sig].set,
303 &QActive_subscrList_[sig].set_dis);
QActive * QActive_registry_[QF_MAX_ACTIVE+1U]
#define QF_SCHED_LOCK_(ceil_)
#define QF_SCHED_UNLOCK_()
#define Q_UNUSED_PAR(par_)
@ Q_USER_SIG
offset for the user signals (QP Application)
#define QACTIVE_POST(me_, e_, sender_)
#define QF_CRIT_EXIT_NOP()
Internal (package scope) QP/C interface.
@ QS_QF_PUBLISH
an event was published to active objects
@ QS_QF_ACTIVE_UNSUBSCRIBE
an AO unsubscribed to an event
@ QS_QF_ACTIVE_SUBSCRIBE
an AO subscribed to an event
QS/C package-scope interface.
QP Functional Safety (FuSa) Subsystem.
#define Q_ASSERT_INCRIT(id_, expr_)
#define Q_ENSURE_INCRIT(id_, expr_)
#define Q_REQUIRE_INCRIT(id_, expr_)
Active object class (based on the QHsm implementation strategy)
Set of Active Objects of up to QF_MAX_ACTIVE elements.
Subscriber List (for publish-subscribe)