QP/C++  6.9.3
Real-Time Embedded Framework
qs.hpp
Go to the documentation of this file.
1 
39 #ifndef QS_HPP
40 #define QS_HPP
41 
42 #ifndef Q_SPY
43  #error "Q_SPY must be defined to include qs.hpp"
44 #endif
45 
46 //****************************************************************************
47 namespace QP {
48 
61 
63  // [0] QS session (not maskable)
65 
66  // [1] SM records
76 
77  // [10] Active Object (AO) records
87 
88  // [19] Event Queue (EQ) records
93 
94  // [23] Framework (QF) records */
96 
97  // [24] Memory Pool (MP) records
100 
101  // [26] Additional Framework (QF) records
108 
109  // [32] Time Event (TE) records
116 
117  // [38] Additional Framework (QF) records
125 
126  // [45] Additional Active Object (AO) records
128 
129  // [46] Additional Event Queue (EQ) records
131 
132  // [47] Additional Memory Pool (MP) records
134 
135  // [48] Scheduler (SC) records
143 
144  // [55] Additional QEP records
148 
149  // [58] Miscellaneous QS records (not maskable)
163 
164  // [71] Reserved QS records
194 
195  // [100] Application-specific (User) QS records
196  QS_USER
197 };
198 
201  QS_ALL_RECORDS = static_cast<std::uint8_t>(0xF0U),
215 };
216 
224 };
225 
228  QS_AO_ID = 0,
229  QS_EP_ID = 64,
230  QS_EQ_ID = 80,
231  QS_AP_ID = 96,
232 };
233 
236  QS_ALL_IDS = 0xF0,
237  QS_AO_IDS = 0x80 + QS_AO_ID,
238  QS_EP_IDS = 0x80 + QS_EP_ID,
239  QS_EQ_IDS = 0x80 + QS_EQ_ID,
240  QS_AP_IDS = 0x80 + QS_AP_ID,
241 };
242 
244 struct QSpyId {
246  std::uint_fast8_t getPrio(void) const noexcept {
247  return static_cast<std::uint_fast8_t>(m_prio);
248  }
249 };
250 
251 } // namespace QP ************************************************************
252 
253 #ifndef QS_TIME_SIZE
254 
261 
262  #define QS_TIME_SIZE 4U
263 #endif
264 
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()))
272 #else
273  #error "QS_TIME_SIZE defined incorrectly, expected 1U, 2U, or 4U"
274 #endif
275 
276 
277 //****************************************************************************
278 namespace QP {
279 
280 #if (QS_TIME_SIZE == 1U)
282 #elif (QS_TIME_SIZE == 2U)
283  using QSTimeCtr = std::uint16_t;
284 #elif (QS_TIME_SIZE == 4U)
286  // range of QS time stamps
287  //
288  using QSTimeCtr = std::uint32_t;
289 #endif
290 
293 
296 constexpr std::uint16_t QS_EOD = 0xFFFFU;
297 
302 class QS {
303 public:
305  static void initBuf(std::uint8_t * const sto,
306  std::uint_fast16_t const stoSize) noexcept;
307 
309  // or a group of records.
310  static void glbFilter_(std::int_fast16_t const filter) noexcept;
311 
313  // or a group of object-ids.
314  static void locFilter_(std::int_fast16_t const filter) noexcept;
315 
317  static void beginRec_(std::uint_fast8_t const rec) noexcept;
318 
320  static void endRec_(void) noexcept;
321 
322  // raw (unformatted) output of data elements .............................
323 
325  static void u8_raw_(std::uint8_t const d) noexcept;
326 
328  static void u8u8_raw_(std::uint8_t const d1,
329  std::uint8_t const d2) noexcept;
330 
332  static void u16_raw_(std::uint16_t d) noexcept;
333 
335  static void u32_raw_(std::uint32_t d) noexcept;
336 
338  static void obj_raw_(void const * const obj) noexcept;
339 
341  static void str_raw_(char_t const *s) noexcept;
342 
343 
344  // formatted data elements output ........................................
345 
347  static void u8_fmt_(std::uint8_t const format,
348  std::uint8_t const d) noexcept;
349 
351  static void u16_fmt_(std::uint8_t format, std::uint16_t d) noexcept;
352 
354  static void u32_fmt_(std::uint8_t format, std::uint32_t d) noexcept;
355 
357  static void f32_fmt_(std::uint8_t format, float32_t const d) noexcept;
358 
360  static void f64_fmt_(std::uint8_t format, float64_t const d) noexcept;
361 
363  static void str_fmt_(char_t const *s) noexcept;
364 
366  static void mem_fmt_(std::uint8_t const *blk, std::uint8_t size) noexcept;
367 
369  static void u64_raw_(std::uint64_t d) noexcept;
370 
372  static void u64_fmt_(std::uint8_t format, std::uint64_t d) noexcept;
373 
375  static void sig_dict_pre_(enum_t const sig, void const * const obj,
376  char_t const *name) noexcept;
377 
379  static void obj_dict_pre_(void const * const obj,
380  char_t const *name) noexcept;
381 
383  static void fun_dict_pre_(void (* const fun)(void),
384  char_t const *name) noexcept;
385 
387  static void usr_dict_pre_(enum_t const rec,
388  char_t const * const name) noexcept;
389 
391  static void rxInitBuf(std::uint8_t * const sto,
392  std::uint16_t const stoSize) noexcept;
393 
395  static void rxParse(void);
396 
398  static std::uint16_t rxGetNfree(void) noexcept;
399 
401  static bool rxPut(std::uint8_t const b) noexcept;
402 
404  static void setCurrObj(std::uint8_t obj_kind, void *obj_ptr) noexcept;
405 
407  static void queryCurrObj(std::uint8_t obj_kind) noexcept;
408 
409  // QS buffer access ......................................................
411  static std::uint16_t getByte(void) noexcept;
412 
414  static std::uint8_t const *getBlock(
415  std::uint16_t * const pNbytes) noexcept;
416 
417  // platform-dependent callback functions to be implemented by clients ....
418 
420  static bool onStartup(void const *arg);
421 
423  static void onCleanup(void);
424 
426  static void onFlush(void);
427 
429  static QSTimeCtr onGetTime(void);
430 
432  static void onReset(void);
433 
435  static void onCommand(std::uint8_t cmdId,
436  std::uint32_t param1,
437  std::uint32_t param2,
438  std::uint32_t param3);
439 
441  static void rxHandleGoodFrame_(std::uint8_t const state);
442 
444  static void assertion_pre_(char_t const * const module, int_t const loc,
445  std::uint32_t delay);
446 
448  static void crit_entry_pre_(void);
449 
451  static void crit_exit_pre_(void);
452 
454  static void isr_entry_pre_(std::uint8_t const isrnest,
455  std::uint8_t const prio);
456 
458  static void isr_exit_pre_(std::uint8_t const isrnest,
459  std::uint8_t const prio);
460 
461 #ifdef Q_UTEST
463  static void onTestSetup(void);
464 
466  static void onTestTeardown(void);
467 
469  static void onTestEvt(QEvt *e);
470 
471  // callback to examine an event that is about to be posted
472  static void onTestPost(void const *sender, QActive *recipient,
473  QEvt const *e, bool status);
474 
476  static void onTestLoop(void);
477 
479  static void processTestEvts_(void);
480 
482  static void tickX_(std::uint_fast8_t const tickRate,
483  void const * const sender) noexcept;
484 
486  static std::uint32_t getTestProbe_(void (* const api)(void)) noexcept;
487 
488 #endif // Q_UTEST
489 
510  HEX_FMT
511  };
512 
521  MAX_OBJ
522  };
523 
525  SM_AO_OBJ = MAX_OBJ
526  };
527 
530  template<typename T_OUT, typename T_IN>
531  static T_OUT force_cast(T_IN in) {
532  union TCast {
533  T_IN in;
534  T_OUT out;
535  } u = { in };
536  return u.out;
537  }
538 
539  // private QS attributes .................................................
542  void const *locFilter_AP;
551 
553 
554  static QS priv_;
555 
556  static struct QSrxPriv {
557  void *currObj[MAX_OBJ];
562 #ifdef Q_UTEST
564  bool inTestLoop;
565 #endif
567 };
568 
569 //****************************************************************************
570 // QS receive channel
571 
592  QS_RX_EVENT
593 };
594 
596 inline bool QS::rxPut(std::uint8_t const b) noexcept {
597  QSCtr head = rxPriv_.head + 1U;
598  if (head == rxPriv_.end) {
599  head = 0U;
600  }
601  if (head != rxPriv_.tail) { // buffer NOT full?
602  rxPriv_.buf[rxPriv_.head] = b;
603  rxPriv_.head = head;
604  return true; // byte placed in the buffer
605  }
606  else {
607  return false; // byte NOT placed in the buffer
608  }
609 }
610 
611 
612 //****************************************************************************
613 #ifdef Q_UTEST
614 
620 class QActiveDummy : public QActive {
621 public:
622  QActiveDummy(void); // ctor
623 
624  void start(std::uint_fast8_t const prio,
625  QEvt const * * const qSto, std::uint_fast16_t const qLen,
626  void * const stkSto, std::uint_fast16_t const stkSize,
627  void const * const par) override;
628 
630  void start(std::uint_fast8_t const prio,
631  QEvt const * * const qSto, std::uint_fast16_t const qLen,
632  void * const stkSto, std::uint_fast16_t const stkSize) override
633  {
634  this->start(prio, qSto, qLen, stkSto, stkSize, nullptr);
635  }
636 
637  void init(void const * const e,
638  std::uint_fast8_t const qs_id) noexcept override;
639  void init(std::uint_fast8_t const qs_id) noexcept override {
640  this->init(qs_id);
641  }
642  void dispatch(QEvt const * const e,
643  std::uint_fast8_t const qs_id) noexcept override;
644  bool post_(QEvt const * const e,
645  std::uint_fast16_t const margin,
646  void const * const sender) noexcept override;
647  void postLIFO(QEvt const * const e) noexcept override;
648 };
649 
650 constexpr std::uint8_t QUTEST_ON_POST {124U};
651 
652 // interrupt nesting up-down counter
653 extern std::uint8_t volatile QF_intNest;
654 
655 #endif // Q_UTEST
656 
657 } // namespace QP
658 
659 //****************************************************************************
660 // Macros for adding QS instrumentation to the client code
661 
668 #define QS_INIT(arg_) (QP::QS::onStartup(arg_))
669 
675 #define QS_EXIT() (QP::QS::onCleanup())
676 
685 #define QS_GLB_FILTER(rec_) \
686  (QP::QS::glbFilter_(static_cast<std::int_fast16_t>(rec_)))
687 
695 #define QS_LOC_FILTER(qs_id_) \
696  (QP::QS::locFilter_(static_cast<std::int_fast16_t>(qs_id_)))
697 
698 
699 //****************************************************************************
700 // Macros to generate application-specific (user) QS records
701 
712 #define QS_BEGIN_ID(rec_, qs_id_) \
713  if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
714  QS_CRIT_STAT_ \
715  QS_CRIT_E_(); \
716  QP::QS::beginRec_(static_cast<std::uint_fast8_t>(rec_)); \
717  QS_TIME_PRE_();
718 
722 #define QS_END() \
723  QP::QS::endRec_(); \
724  QS_CRIT_X_(); \
725  }
726 
728 #define QS_BEGIN_NOCRIT(rec_, qs_id_) \
729  if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
730  QP::QS::beginRec_(rec_); \
731  QS_TIME_PRE_();
732 
734 #define QS_END_NOCRIT() \
735  QP::QS::endRec_(); \
736  }
737 
738 #ifndef QS_REC_DONE
740  #define QS_REC_DONE() (static_cast<void>(0))
741 #endif // QS_REC_DONE
742 
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)
748 
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)
754 
755 
756 //****************************************************************************
757 // Facilities for QS ciritical section
758 
759 // QS-specific critical section
760 #ifdef QS_CRIT_ENTRY // separate QS critical section defined?
761 
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()
766 #else
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()
770 #endif // QS_CRIT_STAT_TYPE
771 
772 #else // separate QS critical section not defined--use the QF definition
773 #ifndef QF_CRIT_STAT_TYPE
783  #define QS_CRIT_STAT_
784 
793  #define QS_CRIT_E_() QF_CRIT_ENTRY(dummy)
794 
803  #define QS_CRIT_X_() QF_CRIT_EXIT(dummy); QS_REC_DONE()
804 
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()
809 #endif // simple unconditional interrupt disabling used
810 
811 #endif // separate QS critical section not defined
812 
813 
814 //****************************************************************************
815 // Macros for use in the client code
816 
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_)))
822 
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_)))
828 
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_)))
834 
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_)))
839 
841 #define QS_I32(width_, data_) \
842  (QP::QS::u32_fmt_( \
843  static_cast<std::uint8_t>((static_cast<std::uint8_t>((width_) << 4)) \
844  | static_cast<std::uint8_t>(QP::QS::I32_T)), (data_)))
845 
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_)))
851 
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_)))
857 
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_)))
863 
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_)))
869 
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_)))
875 
877 #define QS_STR(str_) (QP::QS::str_fmt_(str_))
878 
880 #define QS_MEM(mem_, size_) (QP::QS::mem_fmt_((mem_), (size_)))
881 
882 
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_)))
895 #else
897  #define QS_OBJ(obj_) (QP::QS::u32_fmt_(QP::QS::OBJ_T, \
898  reinterpret_cast<std::uint32_t>(obj_)))
899 #endif
900 
901 
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_)))
914 #else
916  #define QS_FUN(fun_) (QP::QS::u32_fmt_(QP::QS::FUN_T, \
917  reinterpret_cast<std::uint32_t>(fun_)))
918 #endif
919 
920 
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_)
933 #else
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_)
939 #endif
940 
941 
943 
983 #define QS_SIG_DICTIONARY(sig_, obj_) \
984  (QP::QS::sig_dict_pre_((sig_), (obj_), #sig_))
985 
998 #define QS_OBJ_DICTIONARY(obj_) \
999  (QP::QS::obj_dict_pre_((obj_), #obj_))
1000 
1012 #define QS_FUN_DICTIONARY(fun_) \
1013  (QP::QS::fun_dict_pre_( \
1014  QP::QS::force_cast<void (*)(void)>(fun_), #fun_))
1015 
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]); \
1023 } while (false)
1024 
1026 #define QS_ASSERTION(module_, loc_, delay_) \
1027  (QP::QS::assertion_pre_((module_), (loc_), (delay_)))
1028 
1030 #define QF_QS_CRIT_ENTRY() (QP::QS::crit_entry_pre_())
1031 
1033 #define QF_QS_CRIT_EXIT() (QP::QS::crit_exit_pre_())
1034 
1036 #define QF_QS_ISR_ENTRY(isrnest_, prio_) \
1037  (QP::QS::isr_entry_pre_((isrnest_), (prio_)))
1038 
1040 #define QF_QS_ISR_EXIT(isrnest_, prio_) \
1041  (QP::QS::isr_exit_pre_((isrnest_), (prio_)))
1042 
1049 #define QS_FLUSH() (QP::QS::onFlush())
1050 
1052 #define QF_QS_ACTION(act_) (act_)
1053 
1056 #define QS_OUTPUT() (QS_output())
1057 
1060 #define QS_RX_INPUT() (QS_rx_input())
1061 
1062 
1063 //****************************************************************************
1064 // Macros for use in QUTest only
1065 
1066 #ifdef Q_UTEST
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_));
1071 
1073  #define QS_TEST_PROBE(code_) \
1074  if (qs_tp_ != 0U) { code_ }
1075 
1077  #define QS_TEST_PROBE_ID(id_, code_) \
1078  if (qs_tp_ == static_cast<std::uint32_t>(id_)) { code_ }
1079 
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(); \
1086  } while (false)
1087 
1088 #else
1089  // dummy definitions when not building for QUTEST
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)
1094 #endif // Q_UTEST
1095 
1096 #endif // QS_HPP
1097 
unsigned int uint16_t
Definition: 16bit/stdint.h:30
unsigned int uint_fast16_t
Definition: 16bit/stdint.h:38
unsigned long int uint32_t
Definition: 16bit/stdint.h:31
signed int int_fast16_t
Definition: 16bit/stdint.h:37
signed int int16_t
Definition: 16bit/stdint.h:25
unsigned long long uint64_t
Definition: 16bit/stdint.h:32
unsigned char uint8_t
Definition: 16bit/stdint.h:29
unsigned int uint_fast8_t
Definition: 16bit/stdint.h:36
signed char int8_t
Definition: 16bit/stdint.h:24
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
Definition: qutest.cpp:123
QActiveDummy(void)
Definition: qutest.cpp:119
void init(void const *const e, std::uint_fast8_t const qs_id) noexcept override
executes the top-most initial transition in QP::QHsm
Definition: qutest.cpp:143
void postLIFO(QEvt const *const e) noexcept override
Definition: qutest.cpp:227
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)
Definition: qs.hpp:630
void init(std::uint_fast8_t const qs_id) noexcept override
overloaded init(qs_id)
Definition: qs.hpp:639
bool post_(QEvt const *const e, std::uint_fast16_t const margin, void const *const sender) noexcept override
Definition: qutest.cpp:172
void dispatch(QEvt const *const e, std::uint_fast8_t const qs_id) noexcept override
Dispatches an event to QHsm.
Definition: qutest.cpp:157
Definition: qs.hpp:302
void * currObj[MAX_OBJ]
current objects
Definition: qs.hpp:557
static T_OUT force_cast(T_IN in)
Definition: qs.hpp:531
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
Definition: qs.cpp:994
static void usr_dict_pre_(enum_t const rec, char_t const *const name) noexcept
Output user dictionary record.
Definition: qs.cpp:646
static void crit_entry_pre_(void)
internal function to produce the critical section entry record
Definition: qs.cpp:1009
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.
Definition: qs_rx.cpp:302
static std::uint16_t getByte(void) noexcept
Byte-oriented interface to the QS data buffer.
Definition: qs.cpp:852
void const * locFilter_AP
deprecated local QS filter
Definition: qs.hpp:542
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
Definition: qs.cpp:1018
static void u16_raw_(std::uint16_t d) noexcept
Output std::uint16_t data element without format information.
Definition: qs.cpp:757
static void f64_fmt_(std::uint8_t format, float64_t const d) noexcept
Output 64-bit floating point data element with format information.
Definition: qs_fp.cpp:78
static void str_raw_(char_t const *s) noexcept
Output zero-terminated ASCII string element without format information.
Definition: qs.cpp:819
static QS priv_
Definition: qs.hpp:554
static bool rxPut(std::uint8_t const b) noexcept
Put one byte into the QS RX lock-free buffer.
Definition: qs.hpp:596
static std::uint8_t const * getBlock(std::uint16_t *const pNbytes) noexcept
Block-oriented interface to the QS data buffer.
Definition: qs.cpp:897
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.
Definition: qs.cpp:624
static QSTimeCtr onGetTime(void)
Callback to obtain a timestamp for a QS record.
Definition: qs_rx.cpp:1347
static void u64_fmt_(std::uint8_t format, std::uint64_t d) noexcept
Output uint64_t data element with format information.
Definition: qs_64bit.cpp:70
static void u64_raw_(std::uint64_t d) noexcept
Output uint64_t data element without format information.
Definition: qs_64bit.cpp:49
static void isr_exit_pre_(std::uint8_t const isrnest, std::uint8_t const prio)
internal function to produce the ISR exit record
Definition: qs.cpp:1038
static void rxHandleGoodFrame_(std::uint8_t const state)
internal function to handle incoming (QS-RX) packet
Definition: qs_rx.cpp:885
std::uint8_t full
the ring buffer is temporarily full
Definition: qs.hpp:550
static void str_fmt_(char_t const *s) noexcept
Output zero-terminated ASCII string element with format information.
Definition: qs.cpp:691
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
Definition: qs_rx.cpp:1318
static void glbFilter_(std::int_fast16_t const filter) noexcept
Set/clear the global Filter for a given QS record.
Definition: qs.cpp:121
static void beginRec_(std::uint_fast8_t const rec) noexcept
Mark the begin of a QS record rec.
Definition: qs.cpp:410
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.
Definition: qs.cpp:974
std::uint8_t seq
the record sequence number
Definition: qs.hpp:548
static void sig_dict_pre_(enum_t const sig, void const *const obj, char_t const *name) noexcept
Output signal dictionary record.
Definition: qs.cpp:933
static void isr_entry_pre_(std::uint8_t const isrnest, std::uint8_t const prio)
internal function to produce the ISR entry record
Definition: qs.cpp:1027
static void u8_fmt_(std::uint8_t const format, std::uint8_t const d) noexcept
Output std::uint8_t data element with format information.
Definition: qs.cpp:579
QSpyObjKind
Kinds of objects used in QS.
Definition: qs.hpp:514
@ SM_OBJ
state machine object for QEP
Definition: qs.hpp:515
@ EQ_OBJ
raw queue object
Definition: qs.hpp:518
@ AO_OBJ
active object
Definition: qs.hpp:516
@ TE_OBJ
time event object
Definition: qs.hpp:519
@ MAX_OBJ
Definition: qs.hpp:521
@ AP_OBJ
generic Application-specific object
Definition: qs.hpp:520
@ MP_OBJ
event pool object
Definition: qs.hpp:517
static void obj_raw_(void const *const obj) noexcept
Output obj pointer data element without format information.
Definition: qs.cpp:801
std::uint8_t locFilter[16]
lobal on/off QS filter
Definition: qs.hpp:541
static void f32_fmt_(std::uint8_t format, float32_t const d) noexcept
Output 32-bit floating point data element with format information.
Definition: qs_fp.cpp:49
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.
Definition: qs.cpp:436
static void u8_raw_(std::uint8_t const d) noexcept
output std::uint8_t data element without format information
Definition: qs.cpp:722
QSCtr head
offset to where next byte will be inserted
Definition: qs.hpp:545
bool inTestLoop
QUTest event loop is running.
Definition: qs.hpp:564
static void processTestEvts_(void)
internal function to process posted events during test
Definition: qutest.cpp:270
QP::QPSet readySet
QUTEST ready-set of active objects.
Definition: qs.hpp:563
QSCtr end
offset of the end of the ring buffer
Definition: qs.hpp:544
static std::uint16_t rxGetNfree(void) noexcept
Obtain the number of free bytes in the QS RX data buffer.
Definition: qs_rx.cpp:283
static void locFilter_(std::int_fast16_t const filter) noexcept
Set/clear the local Filter for a given object-id.
Definition: qs.cpp:346
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
Definition: qs.cpp:739
static bool onStartup(void const *arg)
Callback to startup the QS facility.
std::uint8_t chksum
the checksum of the current record
Definition: qs.hpp:549
static void u32_raw_(std::uint32_t d) noexcept
Output std::uint32_t data element without format information.
Definition: qs.cpp:780
std::uint8_t glbFilter[16]
global on/off QS filter
Definition: qs.hpp:540
QSCtr used
number of bytes currently in the ring buffer
Definition: qs.hpp:547
QSType
Definition: qs.hpp:494
@ I16_T
signed 16-bit integer format
Definition: qs.hpp:497
@ STR_T
zero-terminated ASCII string format
Definition: qs.hpp:503
@ U64_T
unsigned 64-bit integer format
Definition: qs.hpp:509
@ U16_T
unsigned 16-bit integer format
Definition: qs.hpp:498
@ OBJ_T
object pointer format
Definition: qs.hpp:506
@ SIG_T
event signal format
Definition: qs.hpp:505
@ U32_T
unsigned 32-bit integer format
Definition: qs.hpp:500
@ F64_T
64-bit floating point format
Definition: qs.hpp:502
@ F32_T
32-bit floating point format
Definition: qs.hpp:501
@ I8_T
signed 8-bit integer format
Definition: qs.hpp:495
@ MEM_T
up to 255-bytes memory block format
Definition: qs.hpp:504
@ U8_T
unsigned 8-bit integer format
Definition: qs.hpp:496
@ I32_T
signed 32-bit integer format
Definition: qs.hpp:499
@ FUN_T
function pointer format
Definition: qs.hpp:507
@ HEX_FMT
HEX format for the "width" filed.
Definition: qs.hpp:510
@ I64_T
signed 64-bit integer format
Definition: qs.hpp:508
static void queryCurrObj(std::uint8_t obj_kind) noexcept
Query the "current object" in the Target.
Definition: qs_rx.cpp:314
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.
Definition: qs_rx.cpp:243
QSCtr tail
offset of where next record will be extracted
Definition: qs.hpp:546
static void obj_dict_pre_(void const *const obj, char_t const *name) noexcept
Output object dictionary record.
Definition: qs.cpp:954
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.
Definition: qs.cpp:663
OSpyObjCombnation
Definition: qs.hpp:524
@ SM_AO_OBJ
combination of SM and AO
Definition: qs.hpp:525
static void tickX_(std::uint_fast8_t const tickRate, void const *const sender) noexcept
internal function to process armed time events during test
Definition: qutest.cpp:302
static void initBuf(std::uint8_t *const sto, std::uint_fast16_t const stoSize) noexcept
Initialize the QS data buffer.
Definition: qs.cpp:71
static void u16_fmt_(std::uint8_t format, std::uint16_t d) noexcept
output std::uint16_t data element with format information
Definition: qs.cpp:599
std::uint8_t * buf
pointer to the start of the ring buffer
Definition: qs.hpp:543
static void rxParse(void)
Parse all bytes present in the QS RX data buffer.
Definition: qs_rx.cpp:370
std::uint_fast8_t critNest
critical section nesting level
Definition: qs.hpp:552
static void onTestEvt(QEvt *e)
callback to "massage" the test event before dispatching/posting it
Definition: struct.dox:1
QSpyIdOffsets
QS ID offsets for QS_LOC_FILTER()
Definition: qs.hpp:227
@ QS_EQ_ID
offset for event-queue IDs
Definition: qs.hpp:230
@ QS_EP_ID
offset for event-pool IDs
Definition: qs.hpp:229
@ QS_AP_ID
offset for Appl-spec IDs
Definition: qs.hpp:231
@ QS_AO_ID
offset for AO priorities
Definition: qs.hpp:228
QSpyRecords
Definition: qs.hpp:62
@ QS_ASSERT_FAIL
assertion failed in the code
Definition: qs.hpp:161
@ QS_RESERVED_81
Definition: qs.hpp:175
@ QS_QF_TIMEEVT_AUTO_DISARM
a time event expired and was disarmed
Definition: qs.hpp:111
@ QS_MUTEX_UNLOCK
a mutex was unlocked
Definition: qs.hpp:137
@ QS_RESERVED_72
Definition: qs.hpp:166
@ QS_QF_INT_ENABLE
interrupts were enabled
Definition: qs.hpp:124
@ QS_QF_RUN
QF_run() was entered.
Definition: qs.hpp:162
@ QS_QF_MPOOL_GET_ATTEMPT
attempt to get a memory block failed
Definition: qs.hpp:133
@ QS_QF_DELETE_REF
an event reference is about to be deleted
Definition: qs.hpp:118
@ QS_QF_ACTIVE_RECALL
AO recalled an event.
Definition: qs.hpp:79
@ QS_RESERVED_90
Definition: qs.hpp:184
@ QS_QF_EQUEUE_GET_LAST
get the last event from the queue
Definition: qs.hpp:92
@ QS_RESERVED_73
Definition: qs.hpp:167
@ QS_QF_TIMEEVT_DISARM
true disarming of an armed time event
Definition: qs.hpp:113
@ QS_TEST_PROBE_GET
reports that Test-Probe has been used
Definition: qs.hpp:151
@ QS_QEP_STATE_INIT
an initial transition was taken in a state
Definition: qs.hpp:69
@ QS_QEP_TRAN_HIST
a tran to history was taken
Definition: qs.hpp:145
@ QS_QF_TIMEEVT_REARM
rearming of a time event
Definition: qs.hpp:114
@ QS_FUN_DICT
function dictionary entry
Definition: qs.hpp:154
@ QS_RESERVED_91
Definition: qs.hpp:185
@ QS_RESERVED_84
Definition: qs.hpp:178
@ QS_QF_PUBLISH
an event was published
Definition: qs.hpp:102
@ QS_RESERVED_94
Definition: qs.hpp:188
@ QS_RESERVED_74
Definition: qs.hpp:168
@ QS_RESERVED_71
Definition: qs.hpp:165
@ QS_RESERVED_77
Definition: qs.hpp:171
@ QS_QF_ACTIVE_POST_LIFO
an event was posted (LIFO) directly to AO
Definition: qs.hpp:83
@ QS_QEP_TRAN_EP
a tran to entry point into a submachine
Definition: qs.hpp:146
@ QS_QEP_STATE_EXIT
a state was exited
Definition: qs.hpp:68
@ QS_TARGET_DONE
reports completion of a user callback
Definition: qs.hpp:157
@ QS_USER
the first record available to QS users
Definition: qs.hpp:196
@ QS_QF_GC_ATTEMPT
garbage collection attempt
Definition: qs.hpp:105
@ QS_QF_CRIT_ENTRY
critical section was entered
Definition: qs.hpp:119
@ QS_QF_MPOOL_PUT
a memory block was returned to memory pool
Definition: qs.hpp:99
@ QS_RESERVED_88
Definition: qs.hpp:182
@ QS_QF_EQUEUE_POST_ATTEMPT
attempt to post an evt to QEQueue failed
Definition: qs.hpp:130
@ QS_RESERVED_97
Definition: qs.hpp:191
@ QS_QF_GC
garbage collection
Definition: qs.hpp:106
@ QS_QF_ACTIVE_GET
AO got an event and its queue is not empty.
Definition: qs.hpp:84
@ QS_QF_CRIT_EXIT
critical section was exited
Definition: qs.hpp:120
@ QS_QF_TIMEEVT_POST
a time event posted itself directly to an AO
Definition: qs.hpp:115
@ QS_QF_INT_DISABLE
interrupts were disabled
Definition: qs.hpp:123
@ QS_OBJ_DICT
object dictionary entry
Definition: qs.hpp:153
@ QS_QF_MPOOL_GET
a memory block was removed from memory pool
Definition: qs.hpp:98
@ QS_QF_TIMEEVT_DISARM_ATTEMPT
attempt to disarm a disarmed QTimeEvt
Definition: qs.hpp:112
@ QS_QF_ACTIVE_RECALL_ATTEMPT
AO attempted to recall an event.
Definition: qs.hpp:86
@ QS_QEP_INIT_TRAN
the top-most initial transition was taken
Definition: qs.hpp:70
@ QS_MUTEX_LOCK
a mutex was locked
Definition: qs.hpp:136
@ QS_RESERVED_92
Definition: qs.hpp:186
@ QS_TARGET_INFO
reports the Target information
Definition: qs.hpp:156
@ QS_QEP_INTERN_TRAN
an internal transition was taken
Definition: qs.hpp:71
@ QS_QEP_TRAN_XP
a tran to exit point out of a submachine
Definition: qs.hpp:147
@ QS_RX_STATUS
reports QS data receive status
Definition: qs.hpp:158
@ QS_SCHED_IDLE
scheduler became idle
Definition: qs.hpp:141
@ QS_QF_EQUEUE_POST_LIFO
an event was posted (LIFO) to a raw queue
Definition: qs.hpp:90
@ QS_RESERVED_99
Definition: qs.hpp:193
@ QS_RESERVED_93
Definition: qs.hpp:187
@ QS_QEP_STATE_ENTRY
a state was entered
Definition: qs.hpp:67
@ QS_QEP_UNHANDLED
an event was unhandled due to a guard
Definition: qs.hpp:75
@ QS_QF_ACTIVE_POST_ATTEMPT
attempt to post an evt to AO failed
Definition: qs.hpp:127
@ QS_QEP_TRAN
a regular transition was taken
Definition: qs.hpp:72
@ QS_QF_EQUEUE_GET
get an event and queue still not empty
Definition: qs.hpp:91
@ QS_QF_ISR_ENTRY
an ISR was entered
Definition: qs.hpp:121
@ QS_RESERVED_76
Definition: qs.hpp:170
@ QS_QF_NEW_ATTEMPT
an attempt to allocate an event failed
Definition: qs.hpp:95
@ QS_QF_ISR_EXIT
an ISR was exited
Definition: qs.hpp:122
@ QS_QF_TICK
QP::QF::tickX() was called.
Definition: qs.hpp:107
@ QS_QF_ACTIVE_UNSUBSCRIBE
an AO unsubscribed to an event
Definition: qs.hpp:81
@ QS_QEP_DISPATCH
an event was dispatched (begin of RTC step)
Definition: qs.hpp:74
@ QS_QF_ACTIVE_DEFER
AO deferred an event.
Definition: qs.hpp:78
@ QS_SCHED_LOCK
scheduler was locked
Definition: qs.hpp:138
@ QS_RESERVED_78
Definition: qs.hpp:172
@ QS_RESERVED_85
Definition: qs.hpp:179
@ QS_QF_NEW_REF
new event reference was created
Definition: qs.hpp:103
@ QS_TEST_PAUSED
test has been paused
Definition: qs.hpp:150
@ QS_SCHED_UNLOCK
scheduler was unlocked
Definition: qs.hpp:139
@ QS_RESERVED_86
Definition: qs.hpp:180
@ QS_RESERVED_95
Definition: qs.hpp:189
@ QS_EMPTY
QS record for cleanly starting a session.
Definition: qs.hpp:64
@ QS_RESERVED_87
Definition: qs.hpp:181
@ QS_RESERVED_89
Definition: qs.hpp:183
@ QS_QF_ACTIVE_POST
an event was posted (FIFO) directly to AO
Definition: qs.hpp:82
@ QS_SIG_DICT
signal dictionary entry
Definition: qs.hpp:152
@ QS_RESERVED_83
Definition: qs.hpp:177
@ QS_RESERVED_79
Definition: qs.hpp:173
@ QS_RESERVED_82
Definition: qs.hpp:176
@ QS_QUERY_DATA
reports the data from "current object" query
Definition: qs.hpp:159
@ QS_QF_TIMEEVT_ARM
a time event was armed
Definition: qs.hpp:110
@ QS_QEP_IGNORED
an event was ignored (silently discarded)
Definition: qs.hpp:73
@ QS_USR_DICT
user QS record dictionary entry
Definition: qs.hpp:155
@ QS_QF_NEW
new event was created
Definition: qs.hpp:104
@ QS_QF_EQUEUE_POST
an event was posted (FIFO) to a raw queue
Definition: qs.hpp:89
@ QS_QF_ACTIVE_GET_LAST
AO got an event and its queue is empty.
Definition: qs.hpp:85
@ QS_SCHED_NEXT
scheduler found next task to execute
Definition: qs.hpp:140
@ QS_PEEK_DATA
reports the data from the PEEK query
Definition: qs.hpp:160
@ QS_RESERVED_80
Definition: qs.hpp:174
@ QS_RESERVED_75
Definition: qs.hpp:169
@ QS_RESERVED_98
Definition: qs.hpp:192
@ QS_RESERVED_96
Definition: qs.hpp:190
@ QS_QF_ACTIVE_SUBSCRIBE
an AO subscribed to an event
Definition: qs.hpp:80
@ QS_SCHED_RESUME
scheduler resumed previous task (not idle)
Definition: qs.hpp:142
constexpr std::uint16_t QS_EOD
Definition: qs.hpp:296
QSpyUserOffsets
QS user record group offsets for QS_GLB_FILTER()
Definition: qs.hpp:218
@ QS_USER0
offset for User Group 0
Definition: qs.hpp:219
@ QS_USER3
offset of Group 3
Definition: qs.hpp:222
@ QS_USER1
offset of Group 1
Definition: qs.hpp:220
@ QS_USER2
offset of Group 2
Definition: qs.hpp:221
@ QS_USER4
offset of Group 4
Definition: qs.hpp:223
QSpyIdGroups
QS ID groups for QS_LOC_FILTER()
Definition: qs.hpp:235
@ QS_EP_IDS
event-pool IDs
Definition: qs.hpp:238
@ QS_AO_IDS
AO IDs (priorities)
Definition: qs.hpp:237
@ QS_EQ_IDS
event-queue IDs
Definition: qs.hpp:239
@ QS_ALL_IDS
all QS IDs
Definition: qs.hpp:236
@ QS_AP_IDS
Application-specific IDs.
Definition: qs.hpp:240
std::uint_fast16_t QSCtr
QS ring buffer counter and offset type.
Definition: qs.hpp:292
QSpyRecordGroups
QS record groups for QS_GLB_FILTER()
Definition: qs.hpp:200
@ QS_U2_RECORDS
User Group 110-114 records.
Definition: qs.hpp:211
@ QS_MP_RECORDS
Memory Pools QS records.
Definition: qs.hpp:205
@ QS_TE_RECORDS
Time Events QS records.
Definition: qs.hpp:206
@ QS_SM_RECORDS
State Machine QS records.
Definition: qs.hpp:202
@ QS_U0_RECORDS
User Group 100-104 records.
Definition: qs.hpp:209
@ QS_U3_RECORDS
User Group 115-119 records.
Definition: qs.hpp:212
@ QS_U4_RECORDS
User Group 120-124 records.
Definition: qs.hpp:213
@ QS_AO_RECORDS
Active Object QS records.
Definition: qs.hpp:203
@ QS_QF_RECORDS
QF QS records.
Definition: qs.hpp:207
@ QS_SC_RECORDS
Scheduler QS records.
Definition: qs.hpp:208
@ QS_U1_RECORDS
User Group 105-109 records.
Definition: qs.hpp:210
@ QS_EQ_RECORDS
Event Queues QS records.
Definition: qs.hpp:204
@ QS_ALL_RECORDS
all QS records
Definition: qs.hpp:201
@ QS_UA_RECORDS
All User records.
Definition: qs.hpp:214
constexpr std::uint8_t QUTEST_ON_POST
Definition: qs.hpp:650
QSpyRxRecords
Definition: qs.hpp:575
@ QS_RX_RESET
reset the Target
Definition: qs.hpp:578
@ QS_RX_EVENT
inject an event to the Target (post/publish)
Definition: qs.hpp:592
@ QS_RX_LOC_FILTER
set local filters in the Target
Definition: qs.hpp:587
@ QS_RX_FILL
fill Target memory
Definition: qs.hpp:582
@ QS_RX_AO_FILTER
set local AO filter in the Target
Definition: qs.hpp:588
@ QS_RX_TICK
call QF_tick()
Definition: qs.hpp:579
@ QS_RX_PEEK
peek Target memory
Definition: qs.hpp:580
@ QS_RX_CURR_OBJ
set the "current-object" in the Target
Definition: qs.hpp:589
@ QS_RX_GLB_FILTER
set global filters in the Target
Definition: qs.hpp:586
@ QS_RX_POKE
poke Target memory
Definition: qs.hpp:581
@ QS_RX_INFO
query Target info (ver, config, tstamp)
Definition: qs.hpp:576
@ QS_RX_TEST_TEARDOWN
test teardown
Definition: qs.hpp:584
@ QS_RX_TEST_PROBE
set a Test-Probe in the Target
Definition: qs.hpp:585
@ QS_RX_TEST_SETUP
test setup
Definition: qs.hpp:583
@ QS_RX_COMMAND
execute a user-defined command in the Target
Definition: qs.hpp:577
@ QS_RX_TEST_CONTINUE
continue a test after QS_RX_TEST_WAIT()
Definition: qs.hpp:590
@ QS_RX_QUERY_CURR
query the "current object" in the Target
Definition: qs.hpp:591
std::uint8_t QSTimeCtr
Definition: qs.hpp:281
std::uint8_t volatile QF_intNest
Definition: qutest.cpp:54
char char_t
Definition: qassert.h:77
int int_t
Definition: qassert.h:86
int enum_t
alias for enumerations used for event signals
Definition: qep.hpp:82
float float32_t
Definition: qep.hpp:91
double float64_t
Definition: qep.hpp:100
QS ID type for applying local filtering.
Definition: qs.hpp:244
std::uint8_t m_prio
Definition: qs.hpp:245
std::uint_fast8_t getPrio(void) const noexcept
Definition: qs.hpp:246