57#if (QP_VERSION < 730U) || (QP_VERSION != ((QP_RELEASE^4294967295U) % 0x3E8U))
58#error qpc version 7.3.0 or higher required
68QSTestAttr QS_tstPriv_;
71void QS_test_pause_(
void) {
78uint32_t QS_getTestProbe_(QSpyFunPtr
const api) {
80 for (uint_fast8_t i = 0U; i < QS_tstPriv_.tpNum; ++i) {
81 if (QS_tstPriv_.tpBuf[i].addr == (QSFun)api) {
82 data = QS_tstPriv_.tpBuf[i].data;
97 for (uint_fast8_t j = i; j < QS_tstPriv_.tpNum; ++j) {
98 QS_tstPriv_.tpBuf[j] = QS_tstPriv_.tpBuf[j + 1U];
110 return (++QS_tstPriv_.testTime);
115 char const *
const module,
123 QS_STR_PRE_((module != (
char *)0) ? module :
"?");
142Q_DEFINE_THIS_MODULE(
"qutest")
145void QS_processTestEvts_(
void) {
151 while (QPSet_notEmpty(&QS_tstPriv_.readySet)) {
152 uint_fast8_t
const p = QPSet_findMax(&QS_tstPriv_.readySet);
155 QEvt const *
const e = QActive_get_(a);
157#if (QF_MAX_EPOOL > 0U)
161 QPSet_remove(&QS_tstPriv_.readySet, p);
163 QPSet_update_(&QS_tstPriv_.readySet, &QS_tstPriv_.readySet_dis);
177 QF_bzero_(&QS_tstPriv_,
sizeof(QS_tstPriv_));
181 QPSet_update_(&QS_tstPriv_.readySet, &QS_tstPriv_.readySet_dis);
208 QS_processTestEvts_();
218void QActive_start_(
QActive *
const me,
220 QEvt const * *
const qSto,
221 uint_fast16_t
const qLen,
223 uint_fast16_t
const stkSize,
224 void const *
const par)
229 me->
prio = (uint8_t)(prioSpec & 0xFFU);
230 me->
pthre = (uint8_t)(prioSpec >> 8U);
231 QActive_register_(me);
233 QEQueue_init(&me->
eQueue, qSto, qLen);
240#ifdef QACTIVE_CAN_STOP
243 QActive_unsubscribeAll(me);
244 QActive_unregister_(me);
253 uint_fast8_t
const tickRate,
254 void const *
const sender)
260 QTimeEvt *prev = &QTimeEvt_timeEvtHead_[tickRate];
264 QS_TEC_PRE_(prev->
ctr);
265 QS_U8_PRE_(tickRate);
292 QS_U8_PRE_(tickRate);
301 QS_U8_PRE_(tickRate);
320 if (QTimeEvt_timeEvtHead_[tickRate].act != (
void *)0) {
324 prev->
next = (
QTimeEvt *)QTimeEvt_timeEvtHead_[tickRate].act;
325 QTimeEvt_timeEvtHead_[tickRate].
act = (
void *)0;
362 &QHsmDummy_dispatch_,
365 ,&QHsm_getStateHandler_
375 void const *
const par,
376 uint_fast8_t
const qsId)
381 if ((QS_priv_.flags & 0x01U) == 0U) {
382 QS_priv_.flags |= 0x01U;
401void QHsmDummy_dispatch_(
403 QEvt const *
const e,
404 uint_fast8_t
const qsId)
429 &QActiveDummy_dispatch_,
432 ,&QHsm_getStateHandler_
440void QActiveDummy_init_(
442 void const *
const par,
443 uint_fast8_t
const qsId)
447 QHsmDummy_init_(me, par, ((
QActive const *)me)->prio);
452void QActiveDummy_dispatch_(
454 QEvt const *
const e,
455 uint_fast8_t
const qsId)
459 QHsmDummy_dispatch_(me, e, ((
QActive const *)me)->prio);
464bool QActiveDummy_fakePost_(
466 QEvt const *
const e,
467 uint_fast16_t
const margin,
468 void const *
const sender)
487 if (QEvt_getPoolNum_(e) != 0U) {
493 QS_BEGIN_PRE_(rec, me->
prio)
498 QS_2U8_PRE_(QEvt_getPoolNum_(e), e->
refCtr_);
507 QS_onTestPost(sender, me, e, status);
513 #if (QF_MAX_EPOOL > 0U)
522void QActiveDummy_fakePostLIFO_(
524 QEvt const *
const e)
539 if (QEvt_getPoolNum_(e) != 0U) {
547 QS_2U8_PRE_(QEvt_getPoolNum_(e), e->
refCtr_);
556 QS_onTestPost((
QActive *)0, me, e,
true);
562 #if (QF_MAX_EPOOL > 0U)
QActive * QActive_registry_[QF_MAX_ACTIVE+1U]
#define Q_UNUSED_PAR(par_)
#define Q_STATE_CAST(handler_)
#define QACTIVE_POST(me_, e_, sender_)
#define QASM_DISPATCH(me_, e_, qsId_)
Internal (package scope) QP/C interface.
@ QS_ASSERT_FAIL
assertion failed in the code
@ QS_QF_TIMEEVT_AUTO_DISARM
a time event expired and was disarmed
@ QS_QF_RUN
QF_run() was entered.
@ QS_TEST_PROBE_GET
reports that Test-Probe has been used
@ QS_QEP_STATE_INIT
an initial transition was taken in a state
#define QS_FUN_DICTIONARY(fun_)
@ QS_QF_ACTIVE_POST_LIFO
an event was posted (LIFO) directly to AO
@ QS_QF_TIMEEVT_POST
a time event posted itself directly to an AO
@ QS_QF_ACTIVE_POST_ATTEMPT
attempt to post an evt to AO failed
@ TE_OBJ
time event object
@ QS_QF_TICK
QTimeEvt tick was called.
@ QS_QEP_DISPATCH
an event was dispatched (begin of RTC step)
#define QS_TEST_PROBE_DEF(fun_)
@ QS_TEST_PAUSED
test has been paused
@ QS_QF_ACTIVE_POST
an event was posted (FIFO) directly to AO
#define QS_TEST_PROBE(code_)
#define QS_TEST_PROBE_ID(id_, code_)
#define QS_LOC_CHECK_(qsId_)
QS/C package-scope interface.
QP Functional Safety (FuSa) Subsystem.
Q_NORETURN Q_onError(char const *const module, int_t const id)
#define Q_ASSERT_INCRIT(id_, expr_)
Dummy Active Object for testing.
Active object class (based on the QHsm implementation strategy)
QACTIVE_EQUEUE_TYPE eQueue
Abstract State Machine class (state machine interface)
struct QAsmVtable const * vptr
Virtual table for the QAsm class.
void(* init)(QAsm *const me, void const *const e, uint_fast8_t const qsId)
Dummy HSM class for testing.
struct QTimeEvt *volatile next