50 #error "Q_SPY must be defined to include qs.h"
66#define QS_TIME_SIZE 4U
70#if (QS_TIME_SIZE != 1U) && (QS_TIME_SIZE != 2U) && (QS_TIME_SIZE != 4U)
71#error QS_TIME_SIZE defined incorrectly, expected 1U, 2U, or 4U;
80#if (QS_TIME_SIZE == 4U)
85#if (QS_TIME_SIZE == 2U)
90#if (QS_TIME_SIZE == 1U)
96#if (QS_FUN_PTR_SIZE == 4U)
97typedef uint32_t QSFun;
101#if (QS_FUN_PTR_SIZE == 8U)
102typedef uint64_t QSFun;
106#if (QS_FUN_PTR_SIZE == 2U)
107typedef uint16_t QSFun;
111#if (QS_FUN_PTR_SIZE == 1U)
112typedef uint8_t QSFun;
296#define QS_EOD ((uint16_t)0xFFFFU)
312 uint8_t glbFilter[16];
315 uint8_t locFilter[16];
402 uint_fast16_t
const stoSize);
449uint8_t
const *
QS_getBlock(uint16_t *
const pNbytes);
503void QS_doOutput(
void);
582 uint8_t
const format,
630 void const *
const obj,
631 char const *
const name);
640 void const *
const obj,
641 char const *
const name);
650 void const *
const obj,
651 uint_fast16_t
const idx,
652 char const *
const name);
662 char const *
const name);
672 char const *
const name);
682 char const *
const module,
684 uint32_t
const delay);
696uint8_t QS_onStartup(
void const * arg);
804 uint16_t
const stoSize);
810static inline bool QS_rxPut(uint8_t
const b) {
843void QS_doInput(
void);
882void QS_onReset(
void);
913#define QS_INIT(arg_) (QS_onStartup(arg_))
923#define QS_EXIT() (QS_onCleanup())
931#define QS_OUTPUT() (QS_output())
939#define QS_RX_INPUT() (QS_rx_input())
956#define QS_GLB_FILTER(rec_) (QS_glbFilter_((int_fast16_t)(rec_)))
972#define QS_LOC_FILTER(qs_id_) (QS_locFilter_((int_fast16_t)(qs_id_)))
987#define QS_BEGIN_ID(rec_, qs_id_) \
988if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
991 QS_beginRec_((uint_fast8_t)(rec_)); \
1014#define QS_FLUSH() (QS_onFlush())
1018#define QS_BEGIN_NOCRIT(rec_, qs_id_) \
1019if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
1020 QS_beginRec_((uint_fast8_t)(rec_)); \
1025#define QS_END_NOCRIT() } \
1031#define QS_GLB_CHECK_(rec_) \
1032 (((uint_fast8_t)QS_priv_.glbFilter[(uint_fast8_t)(rec_) >> 3U] \
1033 & ((uint_fast8_t)1U << ((uint_fast8_t)(rec_) & 7U))) != 0U)
1037#define QS_LOC_CHECK_(qs_id_) \
1038 (((uint_fast8_t)QS_priv_.locFilter[(uint_fast8_t)(qs_id_) >> 3U] \
1039 & ((uint_fast8_t)1U << ((uint_fast8_t)(qs_id_) & 7U))) != 0U)
1048#define QS_REC_DONE() ((void)0)
1053#define QS_I8(width_, data_) \
1054 (QS_u8_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I8_T, (data_)))
1058#define QS_U8(width_, data_) \
1059 (QS_u8_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U8_T, (data_)))
1063#define QS_I16(width_, data_) \
1064 (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I16_T, (data_)))
1068#define QS_U16(width_, data_) \
1069 (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U16_T, (data_)))
1073#define QS_I32(width_, data_) \
1074 (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I32_T, (data_)))
1078#define QS_U32(width_, data_) \
1079 (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U32_T, (data_)))
1083#define QS_I64(width_, data_) \
1084 (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I64_T, (data_)))
1088#define QS_U64(width_, data_) \
1089 (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U64_T, (data_)))
1093#define QS_F32(width_, data_) \
1094 (QS_f32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F32_T, (data_)))
1098#define QS_F64(width_, data_) \
1099 (QS_f64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F64_T, (data_)))
1103#define QS_STR(str_) (QS_str_fmt_((str_)))
1107#define QS_MEM(mem_, size_) (QS_mem_fmt_((mem_), (size_)))
1110#if (QS_TIME_SIZE == 4U)
1114#define QS_TIME_PRE_() (QS_u32_raw_(QS_onGetTime()))
1118#if (QS_TIME_SIZE == 2U)
1119#define QS_TIME_PRE_() (QS_u16_raw_(QS_onGetTime()))
1123#if (QS_TIME_SIZE == 1U)
1124#define QS_TIME_PRE_() (QS_u8_raw_(QS_onGetTime()))
1128#if (QS_OBJ_PTR_SIZE == 4U)
1130#define QS_OBJ(obj_) (QS_u32_fmt_(QS_OBJ_T, (uint32_t)(obj_)))
1134#if (QS_OBJ_PTR_SIZE == 2U)
1135#define QS_OBJ(obj_) (QS_u16_fmt_(QS_OBJ_T, (uint16_t)(obj_)))
1139#if (QS_OBJ_PTR_SIZE == 1U)
1140#define QS_OBJ(obj_) (QS_u8_fmt_(QS_OBJ_T, (uint8_t)(obj_)))
1144#if (QS_OBJ_PTR_SIZE == 8U)
1145#define QS_OBJ(obj_) (QS_u64_fmt_(QS_OBJ_T, (uint64_t)(obj_)))
1149#if (QS_FUN_PTR_SIZE == 4U)
1151#define QS_FUN(fun_) (QS_u32_fmt_(QS_FUN_T, (uint32_t)(fun_)))
1155#if (QS_FUN_PTR_SIZE == 2U)
1156#define QS_FUN(fun_) (QS_u16_fmt_(QS_FUN_T, (uint16_t)(fun_)))
1160#if (QS_FUN_PTR_SIZE == 1U)
1161#define QS_FUN(fun_) (QS_u8_fmt_(QS_FUN_T, (uint8_t)(fun_)))
1165#if (QS_FUN_PTR_SIZE == 8U)
1166#define QS_FUN(fun_) (QS_u64_fmt_(QS_FUN_T, (uint64_t)(fun_)))
1170#if (Q_SIGNAL_SIZE == 4U)
1174#define QS_SIG(sig_, obj_) \
1175 QS_u32_fmt_(QS_SIG_T, (sig_)); \
1180#if (Q_SIGNAL_SIZE == 2U)
1181#define QS_SIG(sig_, obj_) \
1182 QS_u16_fmt_(QS_SIG_T, (sig_)); \
1187#if (Q_SIGNAL_SIZE == 1U)
1188#define QS_SIG(sig_, obj_) \
1189 QS_u8_fmt_(QS_SIG_T, (sig_)); \
1234#define QS_SIG_DICTIONARY(sig_, obj_) \
1235 (QS_sig_dict_pre_((sig_), (obj_), #sig_))
1252#define QS_OBJ_DICTIONARY(obj_) \
1253 (QS_obj_dict_pre_((obj_), #obj_))
1271#define QS_OBJ_ARR_DICTIONARY(obj_, idx_) \
1272 (QS_obj_arr_dict_pre_((obj_), (idx_), #obj_))
1288#define QS_FUN_DICTIONARY(fun_) \
1289 (QS_fun_dict_pre_((void (*)(void))(fun_), #fun_))
1298#define QS_USR_DICTIONARY(rec_) \
1299 (QS_usr_dict_pre_((rec_), #rec_))
1312 uint_fast8_t
const isrnest,
1313 uint_fast8_t
const prio_);
1320 uint_fast8_t isrnest,
1325#define QF_QS_ACTION(act_) (act_)
1334#ifndef QS_CRIT_STAT_TYPE
1335 #define QS_CRIT_STAT_
1336 #define QS_CRIT_E_() QS_CRIT_ENTRY(dummy)
1337 #define QS_CRIT_X_() QS_CRIT_EXIT(dummy); QS_REC_DONE()
1339 #define QS_CRIT_STAT_ QS_CRIT_STAT_TYPE critStat_;
1340 #define QS_CRIT_E_() QS_CRIT_ENTRY(critStat_)
1341 #define QS_CRIT_X_() QS_CRIT_EXIT(critStat_); QS_REC_DONE()
1346#ifndef QF_CRIT_STAT_TYPE
1357 #define QS_CRIT_STAT_
1368 #define QS_CRIT_E_() QF_CRIT_ENTRY(dummy)
1379 #define QS_CRIT_X_() QF_CRIT_EXIT(dummy); QS_REC_DONE()
1381#elif (!defined QS_CRIT_STAT_)
1383 #define QS_CRIT_STAT_ QF_CRIT_STAT_TYPE critStat_;
1384 #define QS_CRIT_E_() QF_CRIT_ENTRY(critStat_)
1385 #define QS_CRIT_X_() QF_CRIT_EXIT(critStat_); QS_REC_DONE()
1439void QS_onTestSetup(
void);
1445void QS_onTestTeardown(
void);
1451void QS_onTestEvt(
QEvt * e);
1458 void const * sender,
1467void QS_onTestLoop(
void);
1495 void const *
const par,
1496 uint_fast8_t
const qs_id);
1503 QEvt const *
const e,
1504 uint_fast8_t
const qs_id);
1532 void const *
const par,
1533 uint_fast8_t
const qs_id);
1540 QEvt const *
const e,
1541 uint_fast8_t
const qs_id);
1548 uint_fast8_t
const prio,
1549 QEvt const * *
const qSto,
1550 uint_fast16_t
const qLen,
1551 void *
const stkSto,
1552 uint_fast16_t
const stkSize,
1553 void const *
const par);
1560 QEvt const *
const e,
1561 uint_fast16_t
const margin,
1562 void const *
const sender);
1569 QEvt const *
const e);
1573#define QUTEST_ON_POST 124
1577#define QS_TEST_PROBE_DEF(fun_) \
1578 uint32_t const qs_tp_ = QS_getTestProbe_((void (*)(void))(fun_));
1581#define QS_TEST_PROBE(code_) \
1582 if (qs_tp_ != 0U) { code_ }
1585#define QS_TEST_PROBE_ID(id_, code_) \
1586 if (qs_tp_ == (uint32_t)(id_)) { code_ }
1589#define QS_TEST_PAUSE() (QS_test_pause_())
1594#define QS_TEST_PROBE_DEF(fun_)
1595#define QS_TEST_PROBE(code_)
1596#define QS_TEST_PROBE_ID(id_, code_)
1597#define QS_TEST_PAUSE() ((void)0)
void QS_locFilter_(int_fast16_t const filter)
void QS_fun_dict_pre_(QSpyFunPtr fun, char const *const name)
void QS_target_info_pre_(uint8_t const isReset)
void QS_beginRec_(uint_fast8_t const rec)
void QS_u16_raw_(uint16_t d)
void QS_initBuf(uint8_t *const sto, uint_fast16_t const stoSize)
void QS_u16_fmt_(uint8_t format, uint16_t d)
void QS_obj_arr_dict_pre_(void const *const obj, uint_fast16_t const idx, char const *const name)
void QS_u32_raw_(uint32_t d)
uint8_t const * QS_getBlock(uint16_t *const pNbytes)
void QS_u8_raw_(uint8_t const d)
void QS_str_fmt_(char const *str)
void QS_u32_fmt_(uint8_t format, uint32_t d)
void QS_u8_fmt_(uint8_t const format, uint8_t const d)
void QS_usr_dict_pre_(enum_t const rec, char const *const name)
void QS_str_raw_(char const *str)
void QS_ASSERTION(char const *const module, int_t const loc, uint32_t const delay)
void QS_obj_dict_pre_(void const *const obj, char const *const name)
uint16_t QS_getByte(void)
void QS_sig_dict_pre_(enum_t const sig, void const *const obj, char const *const name)
void QS_glbFilter_(int_fast16_t const filter)
void QS_2u8_raw_(uint8_t const d1, uint8_t const d2)
void QS_obj_raw_(void const *const obj)
void QS_mem_fmt_(uint8_t const *blk, uint8_t size)
void const * locFilter_AP
void QF_QS_ISR_ENTRY(uint_fast8_t const isrnest, uint_fast8_t const prio_)
void QF_QS_CRIT_EXIT(void)
QSTimeCtr QS_onGetTime(void)
@ QS_QF_TIMEEVT_AUTO_DISARM
@ QS_QF_MPOOL_GET_ATTEMPT
@ QS_QF_EQUEUE_POST_ATTEMPT
@ QS_QF_TIMEEVT_DISARM_ATTEMPT
@ QS_QF_ACTIVE_RECALL_ATTEMPT
@ QS_QF_ACTIVE_POST_ATTEMPT
@ QS_QF_ACTIVE_UNSUBSCRIBE
struct QS_TestData QS_testData
void QF_QS_CRIT_ENTRY(void)
uint8_t volatile critNest
struct QS_TProbe tpBuf[16]
QS software tracing parameters for QS input (QS-RX)
Software tracing, output QS-TX.
QS ID type for applying local filtering.
void QS_u64_fmt_(uint8_t format, uint64_t d)
void QS_u64_raw_(uint64_t d)
void QS_f32_fmt_(uint8_t format, float32_t d)
void QS_f64_fmt_(uint8_t format, float64_t d)
void QS_queryCurrObj(uint8_t obj_kind)
void QS_rxInitBuf(uint8_t *const sto, uint16_t const stoSize)
void QS_rxHandleGoodFrame_(uint8_t const state)
bool QS_RX_PUT(uint8_t const b)
void QS_setCurrObj(uint8_t obj_kind, void *obj_ptr)
uint16_t QS_rxGetNfree(void)
void QS_processTestEvts_(void)
void QS_test_pause_(void)
uint32_t QS_getTestProbe_(QSpyFunPtr api)
QActiveDummy Object class.
void QActiveDummy_ctor(QActiveDummy *const me)
void QActiveDummy_postLIFO_(QActive *const me, QEvt const *const e)
void QActiveDummy_dispatch_(QHsm *const me, QEvt const *const e, uint_fast8_t const qs_id)
void QActiveDummy_init_(QHsm *const me, void const *const par, uint_fast8_t const qs_id)
void QActiveDummy_start_(QActive *const me, uint_fast8_t const prio, QEvt const **const qSto, uint_fast16_t const qLen, void *const stkSto, uint_fast16_t const stkSize, void const *const par)
bool QActiveDummy_post_(QActive *const me, QEvt const *const e, uint_fast16_t const margin, void const *const sender)
Active object class (based on the QHsm implementation strategy)
void QHsmDummy_ctor(QHsmDummy *const me)
void QHsmDummy_dispatch_(QHsm *const me, QEvt const *const e, uint_fast8_t const qs_id)
void QHsmDummy_init_(QHsm *const me, void const *const par, uint_fast8_t const qs_id)
Hierarchical State Machine class.