46 #error "Q_SPY must be defined to include qs.h"
66#if (QS_CTR_SIZE != 2U) && (QS_CTR_SIZE != 4U)
67#error QS_CTR_SIZE defined incorrectly, expected 2U or 4U;
80#define QS_TIME_SIZE 4U
84#if (QS_TIME_SIZE != 1U) && (QS_TIME_SIZE != 2U) && (QS_TIME_SIZE != 4U)
85#error QS_TIME_SIZE defined incorrectly, expected 1U, 2U, or 4U;
93#if (QS_CTR_SIZE == 2U)
99#if (QS_CTR_SIZE == 4U)
100typedef uint_fast32_t
QSCtr;
104#if (QS_TIME_SIZE == 4U)
110#if (QS_TIME_SIZE == 2U)
115#if (QS_TIME_SIZE == 1U)
120#if (QS_FUN_PTR_SIZE == 4U)
126#if (QS_FUN_PTR_SIZE == 8U)
127typedef uint64_t
QSFun;
131#if (QS_FUN_PTR_SIZE == 2U)
132typedef uint16_t
QSFun;
136#if (QS_FUN_PTR_SIZE == 1U)
137typedef uint8_t
QSFun;
341typedef void (* QSpyFunPtr )(void);
360 uint8_t glbFilter[16];
363 uint8_t locFilter[16];
450 uint_fast32_t
const stoSize);
635 uint8_t
const format,
647 uint8_t
const format,
658 uint8_t
const format,
672 uint8_t
const *
const blk,
683 void const *
const obj,
684 char const *
const name);
693 void const *
const obj,
694 char const *
const name);
703 void const *
const obj,
704 uint_fast16_t
const idx,
705 char const *
const name);
714 QSpyFunPtr
const fun,
715 char const *
const name);
725 char const *
const name);
736 char const *
const name);
746 char const *
const module,
748 uint32_t
const delay);
803 uint8_t
const format,
813 uint8_t
const format,
889 uint16_t
const stoSize);
897 if (head == QS_rxPriv_.
end) {
900 if (head != QS_rxPriv_.
tail) {
901 QS_rxPriv_.
buf[QS_rxPriv_.
head] = b;
902 QS_rxPriv_.
head = head;
938 uint8_t
const obj_kind,
939 void *
const obj_ptr);
998#define QS_INIT(arg_) (QS_onStartup(arg_))
1008#define QS_EXIT() (QS_onCleanup())
1016#define QS_OUTPUT() (QS_output())
1024#define QS_RX_INPUT() (QS_rx_input())
1041#define QS_GLB_FILTER(rec_) (QS_glbFilter_((int_fast16_t)(rec_)))
1057#define QS_LOC_FILTER(qs_id_) (QS_locFilter_((int_fast16_t)(qs_id_)))
1072#define QS_BEGIN_ID(rec_, qs_id_) \
1073if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
1076 QS_beginRec_((uint_fast8_t)(rec_)); \
1099#define QS_FLUSH() (QS_onFlush())
1103#define QS_BEGIN_NOCRIT(rec_, qs_id_) \
1104if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
1105 QS_beginRec_((uint_fast8_t)(rec_)); \
1110#define QS_END_NOCRIT() } \
1116#define QS_GLB_CHECK_(rec_) \
1117 (((uint_fast8_t)QS_priv_.glbFilter[(uint_fast8_t)(rec_) >> 3U] \
1118 & ((uint_fast8_t)1U << ((uint_fast8_t)(rec_) & 7U))) != 0U)
1122#define QS_LOC_CHECK_(qs_id_) \
1123 (((uint_fast8_t)QS_priv_.locFilter[(uint_fast8_t)(qs_id_) >> 3U] \
1124 & ((uint_fast8_t)1U << ((uint_fast8_t)(qs_id_) & 7U))) != 0U)
1133#define QS_REC_DONE() ((void)0)
1138#define QS_I8(width_, data_) \
1139 (QS_u8_fmt_((uint8_t)(((width_) << 4U) & 0x7U) | (uint8_t)QS_I8_ENUM_T, \
1144#define QS_U8(width_, data_) \
1145 (QS_u8_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U8_T, (data_)))
1149#define QS_I16(width_, data_) \
1150 (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I16_T, (data_)))
1154#define QS_U16(width_, data_) \
1155 (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U16_T, (data_)))
1159#define QS_I32(width_, data_) \
1160 (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I32_T, (data_)))
1164#define QS_U32(width_, data_) \
1165 (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U32_T, (data_)))
1169#define QS_I64(width_, data_) \
1170 (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I64_T, (data_)))
1174#define QS_U64(width_, data_) \
1175 (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U64_T, (data_)))
1179#define QS_F32(width_, data_) \
1180 (QS_f32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F32_T, (data_)))
1184#define QS_F64(width_, data_) \
1185 (QS_f64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F64_T, (data_)))
1189#define QS_STR(str_) (QS_str_fmt_((str_)))
1193#define QS_MEM(mem_, size_) (QS_mem_fmt_((mem_), (size_)))
1197#define QS_ENUM(group_, value_) \
1198 (QS_u8_fmt_((uint8_t)(0x80U | ((group_) << 4U)) | (uint8_t)QS_I8_ENUM_T,\
1202#if (QS_TIME_SIZE == 4U)
1206#define QS_TIME_PRE_() (QS_u32_raw_(QS_onGetTime()))
1210#if (QS_TIME_SIZE == 2U)
1211#define QS_TIME_PRE_() (QS_u16_raw_(QS_onGetTime()))
1215#if (QS_TIME_SIZE == 1U)
1216#define QS_TIME_PRE_() (QS_u8_raw_(QS_onGetTime()))
1220#if (QS_OBJ_PTR_SIZE == 4U)
1222#define QS_OBJ(obj_) (QS_u32_fmt_(QS_OBJ_T, (uint32_t)(obj_)))
1226#if (QS_OBJ_PTR_SIZE == 2U)
1227#define QS_OBJ(obj_) (QS_u16_fmt_(QS_OBJ_T, (uint16_t)(obj_)))
1231#if (QS_OBJ_PTR_SIZE == 1U)
1232#define QS_OBJ(obj_) (QS_u8_fmt_(QS_OBJ_T, (uint8_t)(obj_)))
1236#if (QS_OBJ_PTR_SIZE == 8U)
1237#define QS_OBJ(obj_) (QS_u64_fmt_(QS_OBJ_T, (uint64_t)(obj_)))
1241#if (QS_FUN_PTR_SIZE == 4U)
1243#define QS_FUN(fun_) (QS_u32_fmt_(QS_FUN_T, (uint32_t)(fun_)))
1247#if (QS_FUN_PTR_SIZE == 2U)
1248#define QS_FUN(fun_) (QS_u16_fmt_(QS_FUN_T, (uint16_t)(fun_)))
1252#if (QS_FUN_PTR_SIZE == 1U)
1253#define QS_FUN(fun_) (QS_u8_fmt_(QS_FUN_T, (uint8_t)(fun_)))
1257#if (QS_FUN_PTR_SIZE == 8U)
1258#define QS_FUN(fun_) (QS_u64_fmt_(QS_FUN_T, (uint64_t)(fun_)))
1262#if (Q_SIGNAL_SIZE == 4U)
1266#define QS_SIG(sig_, obj_) \
1267 QS_u32_fmt_(QS_SIG_T, (sig_)); \
1272#if (Q_SIGNAL_SIZE == 2U)
1273#define QS_SIG(sig_, obj_) \
1274 QS_u16_fmt_(QS_SIG_T, (sig_)); \
1279#if (Q_SIGNAL_SIZE == 1U)
1280#define QS_SIG(sig_, obj_) \
1281 QS_u8_fmt_(QS_SIG_T, (sig_)); \
1318#define QS_SIG_DICTIONARY(sig_, obj_) \
1319 (QS_sig_dict_pre_((sig_), (obj_), #sig_))
1334#define QS_OBJ_DICTIONARY(obj_) \
1335 (QS_obj_dict_pre_((obj_), #obj_))
1352#define QS_OBJ_ARR_DICTIONARY(obj_, idx_) \
1353 (QS_obj_arr_dict_pre_((obj_), (idx_), #obj_))
1369#define QS_FUN_DICTIONARY(fun_) \
1370 (QS_fun_dict_pre_((void (*)(void))(fun_), #fun_))
1379#define QS_USR_DICTIONARY(rec_) \
1380 (QS_usr_dict_pre_((rec_), #rec_))
1389#define QS_ENUM_DICTIONARY(value_, group_) \
1390 (QS_enum_dict_pre_((value_), (group_), #value_))
1403 uint_fast8_t
const isrnest,
1404 uint_fast8_t
const prio_);
1409 uint_fast8_t isrnest,
1414#define QF_QS_ACTION(act_) (act_)
1420#define QS_EOD ((uint16_t)0xFFFFU)
1427#define QS_CMD ((uint8_t)7U)
1433#define QS_HEX_FMT ((uint8_t)0x0FU)
1442#ifndef QS_CRIT_STAT_TYPE
1443 #define QS_CRIT_STAT_
1444 #define QS_CRIT_E_() QS_CRIT_ENTRY(dummy)
1445 #define QS_CRIT_X_() QS_CRIT_EXIT(dummy); QS_REC_DONE()
1447 #define QS_CRIT_STAT_ QS_CRIT_STAT_TYPE critStat_;
1448 #define QS_CRIT_E_() QS_CRIT_ENTRY(critStat_)
1449 #define QS_CRIT_X_() QS_CRIT_EXIT(critStat_); QS_REC_DONE()
1454#ifndef QF_CRIT_STAT_TYPE
1465 #define QS_CRIT_STAT_
1476 #define QS_CRIT_E_() QF_CRIT_ENTRY(dummy)
1487 #define QS_CRIT_X_() QF_CRIT_EXIT(dummy); QS_REC_DONE()
1489#elif (!defined QS_CRIT_STAT_)
1491 #define QS_CRIT_STAT_ QF_CRIT_STAT_TYPE critStat_;
1492 #define QS_CRIT_E_() QF_CRIT_ENTRY(critStat_)
1493 #define QS_CRIT_X_() QF_CRIT_EXIT(critStat_); QS_REC_DONE()
1548 void const * sender,
1549 QActive * recipient,
1559#define QUTEST_ON_POST 124
1602 void const *
const par,
1603 uint_fast8_t
const qs_id);
1610 QEvt
const *
const e,
1611 uint_fast8_t
const qs_id);
1641 void const *
const par,
1642 uint_fast8_t
const qs_id);
1649 QEvt
const *
const e,
1650 uint_fast8_t
const qs_id);
1657 QPrioSpec
const prioSpec,
1658 QEvt
const * *
const qSto,
1659 uint_fast16_t
const qLen,
1660 void *
const stkSto,
1661 uint_fast16_t
const stkSize,
1662 void const *
const par);
1669 QEvt
const *
const e,
1670 uint_fast16_t
const margin,
1671 void const *
const sender);
1678 QEvt
const *
const e);
1683#define QS_TEST_PROBE_DEF(fun_) \
1684 uint32_t const qs_tp_ = QS_getTestProbe_((void (*)(void))(fun_));
1687#define QS_TEST_PROBE(code_) \
1688 if (qs_tp_ != 0U) { code_ }
1691#define QS_TEST_PROBE_ID(id_, code_) \
1692 if (qs_tp_ == (uint32_t)(id_)) { code_ }
1695#define QS_TEST_PAUSE() (QS_test_pause_())
1700#define QS_TEST_PROBE_DEF(fun_)
1701#define QS_TEST_PROBE(code_)
1702#define QS_TEST_PROBE_ID(id_, code_)
1703#define QS_TEST_PAUSE() ((void)0)
@ QS_QF_TIMEEVT_AUTO_DISARM
void QF_QS_ISR_EXIT(uint_fast8_t isrnest, uint_fast8_t prio)
@ QS_QF_MPOOL_GET_ATTEMPT
void QS_onTestPost(void const *sender, QActive *recipient, QEvt const *e, bool status)
uint32_t QS_getTestProbe_(QSpyFunPtr const api)
void QF_QS_ISR_ENTRY(uint_fast8_t const isrnest, uint_fast8_t const prio_)
void QS_onTestSetup(void)
@ QS_QF_EQUEUE_POST_ATTEMPT
void QF_QS_CRIT_EXIT(void)
@ QS_QF_TIMEEVT_DISARM_ATTEMPT
@ QS_QF_ACTIVE_RECALL_ATTEMPT
void QS_processTestEvts_(void)
@ QS_QF_ACTIVE_POST_ATTEMPT
void QS_test_pause_(void)
@ QS_QF_ACTIVE_UNSUBSCRIBE
void QS_onTestTeardown(void)
struct QS_TestData QS_testData
void QS_onTestEvt(QEvt *e)
void QF_QS_CRIT_ENTRY(void)
struct QS_TProbe tpBuf[16]
QS ID type for applying local filtering.
QActiveDummy Object class.
void QActiveDummy_start_(QActive *const me, QPrioSpec const prioSpec, QEvt const **const qSto, uint_fast16_t const qLen, void *const stkSto, uint_fast16_t const stkSize, void const *const par)
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)
bool QActiveDummy_post_(QActive *const me, QEvt const *const e, uint_fast16_t const margin, void const *const sender)
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)
QS software tracing parameters for QS input (QS-RX)
void QS_queryCurrObj(uint8_t const obj_kind)
void QS_rxInitBuf(uint8_t *const sto, uint16_t const stoSize)
static bool QS_rxPut(uint8_t const b)
void QS_rxHandleGoodFrame_(uint8_t const state)
bool QS_RX_PUT(uint8_t const b)
void QS_setCurrObj(uint8_t const obj_kind, void *const obj_ptr)
uint16_t QS_rxGetNfree(void)
void QS_onCommand(uint8_t cmdId, uint32_t param1, uint32_t param2, uint32_t param3)
void QS_mem_fmt_(uint8_t const *const blk, uint8_t const size)
void QS_locFilter_(int_fast16_t const filter)
void const * locFilter_AP
void QS_u16_raw_(uint16_t const d)
void QS_target_info_pre_(uint8_t const isReset)
void QS_u32_fmt_(uint8_t const format, uint32_t const d)
void QS_beginRec_(uint_fast8_t const rec)
void QS_fun_dict_pre_(QSpyFunPtr const fun, char const *const name)
void QS_u64_fmt_(uint8_t format, uint64_t d)
void QS_obj_arr_dict_pre_(void const *const obj, uint_fast16_t const idx, char const *const name)
uint8_t const * QS_getBlock(uint16_t *const pNbytes)
void QS_u8_raw_(uint8_t const d)
void QS_u64_raw_(uint64_t d)
void QS_f64_fmt_(uint8_t const format, float64_t const 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 *const str)
void QS_u16_fmt_(uint8_t const format, uint16_t const d)
void QS_ASSERTION(char const *const module, int_t const loc, uint32_t const delay)
QSTimeCtr QS_onGetTime(void)
uint8_t QS_onStartup(void const *arg)
void QS_enum_dict_pre_(enum_t const value, uint8_t const group, char const *const name)
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_str_fmt_(char const *const str)
void QS_initBuf(uint8_t *const sto, uint_fast32_t const stoSize)
void QS_u32_raw_(uint32_t const d)
void QS_2u8_raw_(uint8_t const d1, uint8_t const d2)
void QS_obj_raw_(void const *const obj)
uint8_t volatile critNest
void QS_f32_fmt_(uint8_t const format, float32_t const d)