43 #error "Q_SPY must be defined to include qs.hpp"
262 #define QS_TIME_SIZE 4U
265 #if (QS_TIME_SIZE == 1U)
266 #define QS_TIME_PRE_() (QP::QS::u8_raw_(QP::QS::onGetTime()))
267 #elif (QS_TIME_SIZE == 2U)
268 #define QS_TIME_PRE_() (QP::QS::u16_raw_(QP::QS::onGetTime()))
269 #elif (QS_TIME_SIZE == 4U)
271 #define QS_TIME_PRE_() (QP::QS::u32_raw_(QP::QS::onGetTime()))
273 #error "QS_TIME_SIZE defined incorrectly, expected 1U, 2U, or 4U"
280 #if (QS_TIME_SIZE == 1U)
282 #elif (QS_TIME_SIZE == 2U)
284 #elif (QS_TIME_SIZE == 4U)
320 static void endRec_(
void) noexcept;
338 static void obj_raw_(
void const *
const obj) noexcept;
376 char_t const *name) noexcept;
380 char_t const *name) noexcept;
384 char_t const *name) noexcept;
388 char_t const *
const name) noexcept;
473 QEvt const *e,
bool status);
483 void const *
const sender) noexcept;
530 template<
typename T_OUT,
typename T_IN>
597 QSCtr head = rxPriv_.head + 1U;
598 if (head == rxPriv_.end) {
601 if (head != rxPriv_.tail) {
602 rxPriv_.buf[rxPriv_.head] = b;
627 void const *
const par)
override;
634 this->
start(prio, qSto, qLen, stkSto, stkSize,
nullptr);
637 void init(
void const *
const e,
646 void const *
const sender) noexcept
override;
668 #define QS_INIT(arg_) (QP::QS::onStartup(arg_))
675 #define QS_EXIT() (QP::QS::onCleanup())
685 #define QS_GLB_FILTER(rec_) \
686 (QP::QS::glbFilter_(static_cast<std::int_fast16_t>(rec_)))
695 #define QS_LOC_FILTER(qs_id_) \
696 (QP::QS::locFilter_(static_cast<std::int_fast16_t>(qs_id_)))
712 #define QS_BEGIN_ID(rec_, qs_id_) \
713 if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
716 QP::QS::beginRec_(static_cast<std::uint_fast8_t>(rec_)); \
728 #define QS_BEGIN_NOCRIT(rec_, qs_id_) \
729 if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
730 QP::QS::beginRec_(rec_); \
734 #define QS_END_NOCRIT() \
740 #define QS_REC_DONE() (static_cast<void>(0))
744 #define QS_GLB_CHECK_(rec_) \
745 ((QP::QS::priv_.glbFilter[static_cast<std::uint_fast8_t>(rec_) >> 3] \
746 & static_cast<std::uint8_t>(1U \
747 << (static_cast<std::uint_fast8_t>(rec_) & 7U))) != 0U)
750 #define QS_LOC_CHECK_(qs_id_) \
751 ((QP::QS::priv_.locFilter[static_cast<std::uint_fast8_t>(qs_id_) >> 3] \
752 & static_cast<std::uint8_t>(1U \
753 << (static_cast<std::uint_fast8_t>(qs_id_) & 7U))) != 0U)
762 #ifndef QS_CRIT_STAT_TYPE
763 #define QS_CRIT_STAT_
764 #define QS_CRIT_E_() QS_CRIT_ENTRY(dummy)
765 #define QS_CRIT_X_() QS_CRIT_EXIT(dummy); QS_REC_DONE()
767 #define QS_CRIT_STAT_ QS_CRIT_STAT_TYPE critStat_;
768 #define QS_CRIT_E_() QS_CRIT_ENTRY(critStat_)
769 #define QS_CRIT_X_() QS_CRIT_EXIT(critStat_); QS_REC_DONE()
773 #ifndef QF_CRIT_STAT_TYPE
783 #define QS_CRIT_STAT_
793 #define QS_CRIT_E_() QF_CRIT_ENTRY(dummy)
803 #define QS_CRIT_X_() QF_CRIT_EXIT(dummy); QS_REC_DONE()
805 #elif (!defined QS_CRIT_STAT_)
806 #define QS_CRIT_STAT_ QF_CRIT_STAT_TYPE critStat_;
807 #define QS_CRIT_E_() QF_CRIT_ENTRY(critStat_)
808 #define QS_CRIT_X_() QF_CRIT_EXIT(critStat_); QS_REC_DONE()
818 #define QS_I8(width_, data_) \
819 (QP::QS::u8_fmt_(static_cast<std::uint8_t>( \
820 (static_cast<std::uint8_t>(width_) << 4)) \
821 | static_cast<std::uint8_t>(QP::QS::I8_T)), (data_)))
824 #define QS_U8(width_, data_) \
825 (QP::QS::u8_fmt_(static_cast<std::uint8_t>( \
826 (static_cast<std::uint8_t>((width_) << 4)) \
827 | static_cast<std::uint8_t>(QP::QS::U8_T)), (data_)))
830 #define QS_I16(width_, data_) \
831 (QP::QS::u16_fmt_(static_cast<std::uint8_t>( \
832 (static_cast<std::uint8_t>((width_) << 4)) \
833 | static_cast<std::uint8_t>(QP::QS::I16_T)), (data_)))
836 #define QS_U16(width_, data_) \
837 (QP::QS::u16_fmt_(static_cast<std::uint8_t>((((width_) << 4)) \
838 | static_cast<std::uint8_t>(QP::QS::U16_T)), (data_)))
841 #define QS_I32(width_, data_) \
843 static_cast<std::uint8_t>((static_cast<std::uint8_t>((width_) << 4)) \
844 | static_cast<std::uint8_t>(QP::QS::I32_T)), (data_)))
847 #define QS_U32(width_, data_) \
848 (QP::QS::u32_fmt_(static_cast<std::uint8_t>( \
849 (static_cast<std::uint8_t>((width_) << 4)) \
850 | static_cast<std::uint8_t>(QP::QS::U32_T)), (data_)))
853 #define QS_I64(width_, data_) \
854 (QP::QS::u64_fmt_(static_cast<std::uint8_t>( \
855 (static_cast<std::uint8_t>((width_) << 4)) \
856 | static_cast<std::uint8_t>(QP::QS::I64_T)), (data_)))
859 #define QS_U64(width_, data_) \
860 (QP::QS::u64_fmt_(static_cast<std::uint8_t>( \
861 (static_cast<std::uint8_t>((width_) << 4)) \
862 | static_cast<std::uint8_t>(QP::QS::U64_T)), (data_)))
865 #define QS_F32(width_, data_) \
866 (QP::QS::f32_fmt_(static_cast<std::uint8_t>( \
867 (static_cast<std::uint8_t>((width_) << 4)) \
868 | static_cast<std::uint8_t>(QP::QS::F32_T)), (data_)))
871 #define QS_F64(width_, data_) \
872 (QP::QS::f64_fmt_(static_cast<std::uint8_t>( \
873 (static_cast<std::uint8_t>((width_) << 4)) \
874 | static_cast<std::uint8_t>(QP::QS::F64_T)), (data_)))
877 #define QS_STR(str_) (QP::QS::str_fmt_(str_))
880 #define QS_MEM(mem_, size_) (QP::QS::mem_fmt_((mem_), (size_)))
883 #if (QS_OBJ_PTR_SIZE == 1U)
884 #define QS_OBJ(obj_) (QP::QS::u8_fmt_(QP::QS::OBJ_T, \
885 reinterpret_cast<std::uint8_t>(obj_)))
886 #elif (QS_OBJ_PTR_SIZE == 2U)
887 #define QS_OBJ(obj_) (QP::QS::u16_fmt_(QP::QS::OBJ_T, \
888 reinterpret_cast<std::uint16_t>(obj_)))
889 #elif (QS_OBJ_PTR_SIZE == 4U)
890 #define QS_OBJ(obj_) (QP::QS::u32_fmt_(QP::QS::OBJ_T, \
891 reinterpret_cast<std::uint32_t>(obj_)))
892 #elif (QS_OBJ_PTR_SIZE == 8U)
893 #define QS_OBJ(obj_) (QP::QS::u64_fmt_(QP::QS::OBJ_T, \
894 reinterpret_cast<std::uint64_t>(obj_)))
897 #define QS_OBJ(obj_) (QP::QS::u32_fmt_(QP::QS::OBJ_T, \
898 reinterpret_cast<std::uint32_t>(obj_)))
902 #if (QS_FUN_PTR_SIZE == 1U)
903 #define QS_FUN(fun_) (QP::QS::u8_fmt_(QP::QS::FUN_T, \
904 reinterpret_cast<std::uint8_t>(fun_)))
905 #elif (QS_FUN_PTR_SIZE == 2U)
906 #define QS_FUN(fun_) (QP::QS::u16_fmt_(QP::QS::FUN_T, \
907 reinterpret_cast<std::uint16_t>(fun_)))
908 #elif (QS_FUN_PTR_SIZE == 4U)
909 #define QS_FUN(fun_) (QP::QS::u32_fmt_(QP::QS::FUN_T, \
910 reinterpret_cast<std::uint32_t>(fun_)))
911 #elif (QS_FUN_PTR_SIZE == 8U)
912 #define QS_FUN(fun_) (QP::QS::u64_fmt_(QP::QS::FUN_T, \
913 reinterpret_cast<std::uint64_t>(fun_)))
916 #define QS_FUN(fun_) (QP::QS::u32_fmt_(QP::QS::FUN_T, \
917 reinterpret_cast<std::uint32_t>(fun_)))
921 #if (Q_SIGNAL_SIZE == 1U)
922 #define QS_SIG(sig_, obj_) \
923 QP::QS::u8_fmt_(QP::QS::SIG_T, static_cast<std::uint8_t>(sig_)); \
924 QP::QS::obj_raw_(obj_)
925 #elif (Q_SIGNAL_SIZE == 2U)
926 #define QS_SIG(sig_, obj_) \
927 QP::QS::u16_fmt_(QP::QS::SIG_T, static_cast<std::uint16_t>(sig_)); \
928 QP::QS::obj_raw_(obj_)
929 #elif (Q_SIGNAL_SIZE == 4U)
930 #define QS_SIG(sig_, obj_) \
931 QP::QS::u32_fmt_(QP::QS::SIG_T, static_cast<std::uint32_t>(sig_)); \
932 QP::QS::obj_raw_(obj_)
936 #define QS_SIG(sig_, obj_) \
937 QP::QS::u16_fmt_(QP::QS::SIG_T, static_cast<std::uint16_t>(sig_)); \
938 QP::QS::obj_raw_(obj_)
983 #define QS_SIG_DICTIONARY(sig_, obj_) \
984 (QP::QS::sig_dict_pre_((sig_), (obj_), #sig_))
998 #define QS_OBJ_DICTIONARY(obj_) \
999 (QP::QS::obj_dict_pre_((obj_), #obj_))
1012 #define QS_FUN_DICTIONARY(fun_) \
1013 (QP::QS::fun_dict_pre_( \
1014 QP::QS::force_cast<void (*)(void)>(fun_), #fun_))
1020 #define QS_USR_DICTIONARY(rec_) do { \
1021 static char_t const usr_name_[] = #rec_; \
1022 QP::QS::usr_dict_pre_((rec_), &usr_name_[0]); \
1026 #define QS_ASSERTION(module_, loc_, delay_) \
1027 (QP::QS::assertion_pre_((module_), (loc_), (delay_)))
1030 #define QF_QS_CRIT_ENTRY() (QP::QS::crit_entry_pre_())
1033 #define QF_QS_CRIT_EXIT() (QP::QS::crit_exit_pre_())
1036 #define QF_QS_ISR_ENTRY(isrnest_, prio_) \
1037 (QP::QS::isr_entry_pre_((isrnest_), (prio_)))
1040 #define QF_QS_ISR_EXIT(isrnest_, prio_) \
1041 (QP::QS::isr_exit_pre_((isrnest_), (prio_)))
1049 #define QS_FLUSH() (QP::QS::onFlush())
1052 #define QF_QS_ACTION(act_) (act_)
1056 #define QS_OUTPUT() (QS_output())
1060 #define QS_RX_INPUT() (QS_rx_input())
1068 #define QS_TEST_PROBE_DEF(fun_) \
1069 std::uint32_t const qs_tp_ = \
1070 QP::QS::getTestProbe_(QP::QS::force_cast<void (*)(void)>(fun_));
1073 #define QS_TEST_PROBE(code_) \
1074 if (qs_tp_ != 0U) { code_ }
1077 #define QS_TEST_PROBE_ID(id_, code_) \
1078 if (qs_tp_ == static_cast<std::uint32_t>(id_)) { code_ }
1081 #define QS_TEST_PAUSE() do { \
1082 QP::QS::beginRec_( \
1083 static_cast<std::uint_fast8_t>(QP::QS_TEST_PAUSED)); \
1084 QP::QS::endRec_(); \
1085 QP::QS::onTestLoop(); \
1090 #define QS_TEST_PROBE_DEF(fun_)
1091 #define QS_TEST_PROBE(code_)
1092 #define QS_TEST_PROBE_ID(id_, code_)
1093 #define QS_TEST_PAUSE() ((void)0)
unsigned int uint16_t
exact-width 16-bit unsigned int
unsigned int uint_fast16_t
fast at-least 16-bit unsigned int
unsigned long int uint32_t
exact-width 32-bit unsigned int
signed int int_fast16_t
fast at-least 16-bit signed int
signed int int16_t
exact-width 16-bit signed int
unsigned long long uint64_t
exact-width 64-bit unsigned int
unsigned char uint8_t
exact-width 8-bit unsigned int
unsigned int uint_fast8_t
fast at-least 8-bit unsigned int
signed char int8_t
exact-width 8-bit signed int
Dummy Active Object class.
void start(std::uint_fast8_t const prio, QEvt const **const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize, void const *const par) override
Starts execution of an active object and registers the object with the framework.
void init(void const *const e, std::uint_fast8_t const qs_id) noexcept override
executes the top-most initial transition in QP::QHsm
void postLIFO(QEvt const *const e) noexcept override
Posts an event directly to the event queue of the active object using the Last-In-First-Out (LIFO) po...
void start(std::uint_fast8_t const prio, QEvt const **const qSto, std::uint_fast16_t const qLen, void *const stkSto, std::uint_fast16_t const stkSize) override
Overloaded start function (no initialization event)
void init(std::uint_fast8_t const qs_id) noexcept override
overloaded init(qs_id)
bool post_(QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept override
void dispatch(QEvt const *const e, std::uint_fast8_t const qs_id) noexcept override
Dispatches an event to QHsm.
QActive active object (based on QP::QHsm implementation)
void * currObj[MAX_OBJ]
current objects
static T_OUT force_cast(T_IN in)
template for forcing cast of member functions for function dictionaries and test probes.
static void assertion_pre_(char_t const *const module, int_t const loc, std::uint32_t delay)
internal function to produce the assertion failure trace record
static void usr_dict_pre_(enum_t const rec, char_t const *const name) noexcept
Output user dictionary record.
static void crit_entry_pre_(void)
internal function to produce the critical section entry record
static struct QP::QS::QSrxPriv rxPriv_
static void setCurrObj(std::uint8_t obj_kind, void *obj_ptr) noexcept
Set the "current object" in the Target.
static std::uint16_t getByte(void) noexcept
Byte-oriented interface to the QS data buffer.
void const * locFilter_AP
deprecated local QS filter
static void onCleanup(void)
Callback to cleanup the QS facility.
static void onTestLoop(void)
callback to run the test loop
static void crit_exit_pre_(void)
internal function to produce the critical section exit record
static void u16_raw_(std::uint16_t d) noexcept
Output std::uint16_t data element without format information.
static void f64_fmt_(std::uint8_t format, float64_t const d) noexcept
Output 64-bit floating point data element with format information.
static void str_raw_(char_t const *s) noexcept
Output zero-terminated ASCII string element without format information.
static bool rxPut(std::uint8_t const b) noexcept
Put one byte into the QS RX lock-free buffer.
static std::uint8_t const * getBlock(std::uint16_t *const pNbytes) noexcept
Block-oriented interface to the QS data buffer.
static void onFlush(void)
Callback to flush the QS trace data to the host.
static void u32_fmt_(std::uint8_t format, std::uint32_t d) noexcept
Output std::uint32_t data element with format information.
static QSTimeCtr onGetTime(void)
Callback to obtain a timestamp for a QS record.
static void u64_fmt_(std::uint8_t format, std::uint64_t d) noexcept
Output uint64_t data element with format information.
static void u64_raw_(std::uint64_t d) noexcept
Output uint64_t data element without format information.
static void isr_exit_pre_(std::uint8_t const isrnest, std::uint8_t const prio)
internal function to produce the ISR exit record
static void rxHandleGoodFrame_(std::uint8_t const state)
internal function to handle incoming (QS-RX) packet
std::uint8_t full
the ring buffer is temporarily full
static void str_fmt_(char_t const *s) noexcept
Output zero-terminated ASCII string element with format information.
static void onTestTeardown(void)
callback to teardown after a unit test inside the Target
static std::uint32_t getTestProbe_(void(*const api)(void)) noexcept
internal function to get the Test-Probe for a given API
static void glbFilter_(std::int_fast16_t const filter) noexcept
Set/clear the global Filter for a given QS record.
static void beginRec_(std::uint_fast8_t const rec) noexcept
Mark the begin of a QS record rec.
static void onTestSetup(void)
callback to setup a unit test inside the Target
static void fun_dict_pre_(void(*const fun)(void), char_t const *name) noexcept
Output function dictionary record.
std::uint8_t seq
the record sequence number
static void sig_dict_pre_(enum_t const sig, void const *const obj, char_t const *name) noexcept
Output signal dictionary record.
static void isr_entry_pre_(std::uint8_t const isrnest, std::uint8_t const prio)
internal function to produce the ISR entry record
static void u8_fmt_(std::uint8_t const format, std::uint8_t const d) noexcept
Output std::uint8_t data element with format information.
QSpyObjKind
Kinds of objects used in QS.
@ SM_OBJ
state machine object for QEP
@ TE_OBJ
time event object
@ AP_OBJ
generic Application-specific object
@ MP_OBJ
event pool object
static void obj_raw_(void const *const obj) noexcept
Output obj pointer data element without format information.
std::uint8_t locFilter[16]
lobal on/off QS filter
static void f32_fmt_(std::uint8_t format, float32_t const d) noexcept
Output 32-bit floating point data element with format information.
static void onReset(void)
callback function to reset the Target (to be implemented in the BSP)
static void endRec_(void) noexcept
Mark the end of a QS record rec.
static void u8_raw_(std::uint8_t const d) noexcept
output std::uint8_t data element without format information
QSCtr head
offset to where next byte will be inserted
bool inTestLoop
QUTest event loop is running.
static void processTestEvts_(void)
internal function to process posted events during test
QP::QPSet readySet
QUTEST ready-set of active objects.
QSCtr end
offset of the end of the ring buffer
static std::uint16_t rxGetNfree(void) noexcept
Obtain the number of free bytes in the QS RX data buffer.
static void locFilter_(std::int_fast16_t const filter) noexcept
Set/clear the local Filter for a given object-id.
static void u8u8_raw_(std::uint8_t const d1, std::uint8_t const d2) noexcept
output two std::uint8_t data elements without format information
static bool onStartup(void const *arg)
Callback to startup the QS facility.
std::uint8_t chksum
the checksum of the current record
static void u32_raw_(std::uint32_t d) noexcept
Output std::uint32_t data element without format information.
std::uint8_t glbFilter[16]
global on/off QS filter
QSCtr used
number of bytes currently in the ring buffer
QSType
Enumerates data formats recognized by QS.
@ I16_T
signed 16-bit integer format
@ STR_T
zero-terminated ASCII string format
@ U64_T
unsigned 64-bit integer format
@ U16_T
unsigned 16-bit integer format
@ OBJ_T
object pointer format
@ SIG_T
event signal format
@ U32_T
unsigned 32-bit integer format
@ F64_T
64-bit floating point format
@ F32_T
32-bit floating point format
@ I8_T
signed 8-bit integer format
@ MEM_T
up to 255-bytes memory block format
@ U8_T
unsigned 8-bit integer format
@ I32_T
signed 32-bit integer format
@ FUN_T
function pointer format
@ HEX_FMT
HEX format for the "width" filed.
@ I64_T
signed 64-bit integer format
static void queryCurrObj(std::uint8_t obj_kind) noexcept
Query the "current object" in the Target.
static void onCommand(std::uint8_t cmdId, std::uint32_t param1, std::uint32_t param2, std::uint32_t param3)
Callback function to execute user commands (to be implemented in BSP)
static void onTestPost(void const *sender, QActive *recipient, QEvt const *e, bool status)
static void rxInitBuf(std::uint8_t *const sto, std::uint16_t const stoSize) noexcept
Initialize the QS RX data buffer.
QSCtr tail
offset of where next record will be extracted
static void obj_dict_pre_(void const *const obj, char_t const *name) noexcept
Output object dictionary record.
static void mem_fmt_(std::uint8_t const *blk, std::uint8_t size) noexcept
Output memory block of up to 255-bytes with format information.
@ SM_AO_OBJ
combination of SM and AO
static void tickX_(std::uint_fast8_t const tickRate, void const *const sender) noexcept
internal function to process armed time events during test
static void initBuf(std::uint8_t *const sto, std::uint_fast16_t const stoSize) noexcept
Initialize the QS data buffer.
static void u16_fmt_(std::uint8_t format, std::uint16_t d) noexcept
output std::uint16_t data element with format information
std::uint8_t * buf
pointer to the start of the ring buffer
static void rxParse(void)
Parse all bytes present in the QS RX data buffer.
std::uint_fast8_t critNest
critical section nesting level
static void onTestEvt(QEvt *e)
callback to "massage" the test event before dispatching/posting it
namespace associated with the QP/C++ framework
QSpyIdOffsets
QS ID offsets for QS_LOC_FILTER()
@ QS_EQ_ID
offset for event-queue IDs
@ QS_EP_ID
offset for event-pool IDs
@ QS_AP_ID
offset for Appl-spec IDs
@ QS_AO_ID
offset for AO priorities
QSpyRecords
Quantum Spy record types.
@ QS_ASSERT_FAIL
assertion failed in the code
@ QS_QF_TIMEEVT_AUTO_DISARM
a time event expired and was disarmed
@ QS_MUTEX_UNLOCK
a mutex was unlocked
@ QS_QF_INT_ENABLE
interrupts were enabled
@ QS_QF_RUN
QF_run() was entered.
@ QS_QF_MPOOL_GET_ATTEMPT
attempt to get a memory block failed
@ QS_QF_DELETE_REF
an event reference is about to be deleted
@ QS_QF_ACTIVE_RECALL
AO recalled an event.
@ QS_QF_EQUEUE_GET_LAST
get the last event from the queue
@ QS_QF_TIMEEVT_DISARM
true disarming of an armed time event
@ QS_TEST_PROBE_GET
reports that Test-Probe has been used
@ QS_QEP_STATE_INIT
an initial transition was taken in a state
@ QS_QEP_TRAN_HIST
a tran to history was taken
@ QS_QF_TIMEEVT_REARM
rearming of a time event
@ QS_FUN_DICT
function dictionary entry
@ QS_QF_PUBLISH
an event was published
@ QS_QF_ACTIVE_POST_LIFO
an event was posted (LIFO) directly to AO
@ QS_QEP_TRAN_EP
a tran to entry point into a submachine
@ QS_QEP_STATE_EXIT
a state was exited
@ QS_TARGET_DONE
reports completion of a user callback
@ QS_USER
the first record available to QS users
@ QS_QF_GC_ATTEMPT
garbage collection attempt
@ QS_QF_CRIT_ENTRY
critical section was entered
@ QS_QF_MPOOL_PUT
a memory block was returned to memory pool
@ QS_QF_EQUEUE_POST_ATTEMPT
attempt to post an evt to QEQueue failed
@ QS_QF_GC
garbage collection
@ QS_QF_ACTIVE_GET
AO got an event and its queue is not empty.
@ QS_QF_CRIT_EXIT
critical section was exited
@ QS_QF_TIMEEVT_POST
a time event posted itself directly to an AO
@ QS_QF_INT_DISABLE
interrupts were disabled
@ QS_OBJ_DICT
object dictionary entry
@ QS_QF_MPOOL_GET
a memory block was removed from memory pool
@ QS_QF_TIMEEVT_DISARM_ATTEMPT
attempt to disarm a disarmed QTimeEvt
@ QS_QF_ACTIVE_RECALL_ATTEMPT
AO attempted to recall an event.
@ QS_QEP_INIT_TRAN
the top-most initial transition was taken
@ QS_MUTEX_LOCK
a mutex was locked
@ QS_TARGET_INFO
reports the Target information
@ QS_QEP_INTERN_TRAN
an internal transition was taken
@ QS_QEP_TRAN_XP
a tran to exit point out of a submachine
@ QS_RX_STATUS
reports QS data receive status
@ QS_SCHED_IDLE
scheduler became idle
@ QS_QF_EQUEUE_POST_LIFO
an event was posted (LIFO) to a raw queue
@ QS_QEP_STATE_ENTRY
a state was entered
@ QS_QEP_UNHANDLED
an event was unhandled due to a guard
@ QS_QF_ACTIVE_POST_ATTEMPT
attempt to post an evt to AO failed
@ QS_QEP_TRAN
a regular transition was taken
@ QS_QF_EQUEUE_GET
get an event and queue still not empty
@ QS_QF_ISR_ENTRY
an ISR was entered
@ QS_QF_NEW_ATTEMPT
an attempt to allocate an event failed
@ QS_QF_ISR_EXIT
an ISR was exited
@ QS_QF_TICK
QP::QF::tickX() was called.
@ QS_QF_ACTIVE_UNSUBSCRIBE
an AO unsubscribed to an event
@ QS_QEP_DISPATCH
an event was dispatched (begin of RTC step)
@ QS_QF_ACTIVE_DEFER
AO deferred an event.
@ QS_SCHED_LOCK
scheduler was locked
@ QS_QF_NEW_REF
new event reference was created
@ QS_TEST_PAUSED
test has been paused
@ QS_SCHED_UNLOCK
scheduler was unlocked
@ QS_EMPTY
QS record for cleanly starting a session.
@ QS_QF_ACTIVE_POST
an event was posted (FIFO) directly to AO
@ QS_SIG_DICT
signal dictionary entry
@ QS_QUERY_DATA
reports the data from "current object" query
@ QS_QF_TIMEEVT_ARM
a time event was armed
@ QS_QEP_IGNORED
an event was ignored (silently discarded)
@ QS_USR_DICT
user QS record dictionary entry
@ QS_QF_NEW
new event was created
@ QS_QF_EQUEUE_POST
an event was posted (FIFO) to a raw queue
@ QS_QF_ACTIVE_GET_LAST
AO got an event and its queue is empty.
@ QS_SCHED_NEXT
scheduler found next task to execute
@ QS_PEEK_DATA
reports the data from the PEEK query
@ QS_QF_ACTIVE_SUBSCRIBE
an AO subscribed to an event
@ QS_SCHED_RESUME
scheduler resumed previous task (not idle)
constexpr std::uint16_t QS_EOD
Constant representing End-Of-Data condition returned from the QP::QS::getByte() function.
QSpyUserOffsets
QS user record group offsets for QS_GLB_FILTER()
@ QS_USER0
offset for User Group 0
@ QS_USER3
offset of Group 3
@ QS_USER1
offset of Group 1
@ QS_USER2
offset of Group 2
@ QS_USER4
offset of Group 4
QSpyIdGroups
QS ID groups for QS_LOC_FILTER()
@ QS_EP_IDS
event-pool IDs
@ QS_AO_IDS
AO IDs (priorities)
@ QS_EQ_IDS
event-queue IDs
@ QS_AP_IDS
Application-specific IDs.
std::uint_fast16_t QSCtr
QS ring buffer counter and offset type.
QSpyRecordGroups
QS record groups for QS_GLB_FILTER()
@ QS_U2_RECORDS
User Group 110-114 records.
@ QS_MP_RECORDS
Memory Pools QS records.
@ QS_TE_RECORDS
Time Events QS records.
@ QS_SM_RECORDS
State Machine QS records.
@ QS_U0_RECORDS
User Group 100-104 records.
@ QS_U3_RECORDS
User Group 115-119 records.
@ QS_U4_RECORDS
User Group 120-124 records.
@ QS_AO_RECORDS
Active Object QS records.
@ QS_QF_RECORDS
QF QS records.
@ QS_SC_RECORDS
Scheduler QS records.
@ QS_U1_RECORDS
User Group 105-109 records.
@ QS_EQ_RECORDS
Event Queues QS records.
@ QS_ALL_RECORDS
all QS records
@ QS_UA_RECORDS
All User records.
constexpr std::uint8_t QUTEST_ON_POST
QSpyRxRecords
Quantum Spy Receive (RX) record types.
@ QS_RX_RESET
reset the Target
@ QS_RX_EVENT
inject an event to the Target (post/publish)
@ QS_RX_LOC_FILTER
set local filters in the Target
@ QS_RX_FILL
fill Target memory
@ QS_RX_AO_FILTER
set local AO filter in the Target
@ QS_RX_TICK
call QF_tick()
@ QS_RX_PEEK
peek Target memory
@ QS_RX_CURR_OBJ
set the "current-object" in the Target
@ QS_RX_GLB_FILTER
set global filters in the Target
@ QS_RX_POKE
poke Target memory
@ QS_RX_INFO
query Target info (ver, config, tstamp)
@ QS_RX_TEST_TEARDOWN
test teardown
@ QS_RX_TEST_PROBE
set a Test-Probe in the Target
@ QS_RX_TEST_SETUP
test setup
@ QS_RX_COMMAND
execute a user-defined command in the Target
@ QS_RX_TEST_CONTINUE
continue a test after QS_RX_TEST_WAIT()
@ QS_RX_QUERY_CURR
query the "current object" in the Target
std::uint8_t volatile QF_intNest
char char_t
typedef for character strings.
int int_t
typedef for assertions-ids and line numbers in assertions.
int enum_t
alias for enumerations used for event signals
float float32_t
alias for 32-bit IEEE 754 floating point numbers
double float64_t
alias for 64-bit IEEE 754 floating point numbers
Priority Set of up to 32 elements */.
QS ID type for applying local filtering.
std::uint_fast8_t getPrio(void) const noexcept