QP/C  6.9.3
Real-Time Embedded Framework
qs.h
Go to the documentation of this file.
1 
40 #ifndef QS_H
41 #define QS_H
42 
43 #ifndef Q_SPY
44  #error "Q_SPY must be defined to include qs.h"
45 #endif
46 
47 /****************************************************************************/
63  /* [0] QS session (not maskable) */
66  /* [1] SM records */
77  /* [10] Active Object (AO) records */
88  /* [19] Event Queue (EQ) records */
94  /* [23] Framework (QF) records */
97  /* [24] Memory Pool (MP) records */
101  /* [26] Additional Framework (QF) records */
109  /* [32] Time Event (TE) records */
117  /* [38] Additional Framework (QF) records */
126  /* [45] Additional Active Object (AO) records */
129  /* [46] Additional Event Queue (EQ) records */
132  /* [47] Additional Memory Pool (MP) records */
135  /* [48] Scheduler (SC) records */
144  /* [55] Additional QEP records */
149  /* [58] Miscellaneous QS records (not maskable) */
164  /* [71] Reserved QS records */
194 
195  /* [100] Application-specific (User) QS records */
196  QS_USER
197 };
198 
215 };
216 
223  QS_USER4 = (enum_t)QS_USER3 + 5
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 + (enum_t)QS_AO_ID),
238  QS_EP_IDS = (0x80 + (enum_t)QS_EP_ID),
239  QS_EQ_IDS = (0x80 + (enum_t)QS_EQ_ID),
240  QS_AP_IDS = (0x80 + (enum_t)QS_AP_ID),
241 };
242 
244 typedef struct { uint8_t prio; } QSpyId;
245 
246 #ifndef QS_TIME_SIZE
247 
257  #define QS_TIME_SIZE 4U
258 #endif
259 
260 #if (QS_TIME_SIZE == 1U)
262  #define QS_TIME_PRE_() (QS_u8_raw_(QS_onGetTime()))
263 #elif (QS_TIME_SIZE == 2U)
264  typedef uint16_t QSTimeCtr;
265  #define QS_TIME_PRE_() (QS_u16_raw_(QS_onGetTime()))
266 #elif (QS_TIME_SIZE == 4U)
270  typedef uint32_t QSTimeCtr;
271 
273  #define QS_TIME_PRE_() (QS_u32_raw_(QS_onGetTime()))
274 #else
275  #error "QS_TIME_SIZE defined incorrectly, expected 1, 2, or 4"
276 #endif
277 
278 
279 /****************************************************************************/
280 /* QS services. */
281 
283 void QS_initBuf(uint8_t sto[], uint_fast16_t stoSize);
284 
286 void QS_glbFilter_(int_fast16_t const filter);
287 
289 void QS_locFilter_(int_fast16_t const filter);
290 
292 void QS_beginRec_(uint_fast8_t rec);
293 
295 void QS_endRec_(void);
296 
297 /* unformatted (raw) data elements output ..................................*/
299 void QS_u8_raw_(uint8_t d);
300 
302 void QS_2u8_raw_(uint8_t d1, uint8_t d2);
303 
305 void QS_u16_raw_(uint16_t d);
306 
308 void QS_u32_raw_(uint32_t d);
309 
311 void QS_str_raw_(char_t const *str);
312 
313 /* formatted data elements output ..........................................*/
315 void QS_u8_fmt_(uint8_t format, uint8_t d);
316 
318 void QS_u16_fmt_(uint8_t format, uint16_t d);
319 
321 void QS_u32_fmt_(uint8_t format, uint32_t d);
322 
324 void QS_f32_fmt_(uint8_t format, float32_t f);
325 
327 void QS_f64_fmt_(uint8_t format, float64_t d);
328 
330 void QS_obj_raw_(void const * const obj);
331 
333 void QS_str_fmt_(char_t const *str);
334 
336 void QS_mem_fmt_(uint8_t const *blk, uint8_t size);
337 
339 void QS_u64_raw_(uint64_t d);
340 
342 void QS_u64_fmt_(uint8_t format, uint64_t d);
343 
344 /* QS buffer access *********************************************************/
346 uint16_t QS_getByte(void);
347 
349 #define QS_EOD ((uint16_t)0xFFFFU)
350 
352 uint8_t const *QS_getBlock(uint16_t *pNbytes);
353 
354 
355 /* platform-specific callback functions, need to be implemented by clients */
356 
374 uint8_t QS_onStartup(void const *arg);
375 
384 void QS_onCleanup(void);
385 
394 void QS_onFlush(void);
395 
414 QSTimeCtr QS_onGetTime(void);
415 
416 
417 /****************************************************************************/
418 /* Macros for adding QS instrumentation to the client code */
419 
427 #define QS_INIT(arg_) (QS_onStartup(arg_))
428 
436 #define QS_EXIT() (QS_onCleanup())
437 
446 #define QS_FLUSH() (QS_onFlush())
447 
457 #define QS_GLB_FILTER(rec_) (QS_glbFilter_((int_fast16_t)(rec_)))
458 
468 #define QS_LOC_FILTER(qs_id_) (QS_locFilter_((int_fast16_t)(qs_id_)))
469 
470 
471 /****************************************************************************/
472 /* Facilities for QS ciritical section */
473 
474 /* QS-specific critical section */
475 #ifdef QS_CRIT_ENTRY /* separate QS critical section defined? */
476 
477 #ifndef QS_CRIT_STAT_TYPE
478  #define QS_CRIT_STAT_
479  #define QS_CRIT_E_() QS_CRIT_ENTRY(dummy)
480  #define QS_CRIT_X_() QS_CRIT_EXIT(dummy); QS_REC_DONE()
481 #else
482  #define QS_CRIT_STAT_ QS_CRIT_STAT_TYPE critStat_;
483  #define QS_CRIT_E_() QS_CRIT_ENTRY(critStat_)
484  #define QS_CRIT_X_() QS_CRIT_EXIT(critStat_); QS_REC_DONE()
485 #endif /* QS_CRIT_STAT_TYPE */
486 
487 #else /* separate QS critical section not defined--use the QF definition */
488 
489 #ifndef QF_CRIT_STAT_TYPE
501  #define QS_CRIT_STAT_
502 
513  #define QS_CRIT_E_() QF_CRIT_ENTRY(dummy)
514 
525  #define QS_CRIT_X_() QF_CRIT_EXIT(dummy); QS_REC_DONE()
526 
527 #elif (!defined QS_CRIT_STAT_)
528 
529  #define QS_CRIT_STAT_ QF_CRIT_STAT_TYPE critStat_;
530  #define QS_CRIT_E_() QF_CRIT_ENTRY(critStat_)
531  #define QS_CRIT_X_() QF_CRIT_EXIT(critStat_); QS_REC_DONE()
532 
533 #endif /* simple unconditional interrupt disabling used */
534 
535 #endif /* separate QS critical section not defined */
536 
537 
538 /****************************************************************************/
539 /* Macros to generate application-specific (user) QS records */
540 
542 #define QS_BEGIN_NOCRIT(rec_, qs_id_) \
543  if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
544  QS_beginRec_((uint_fast8_t)(rec_)); \
545  QS_TIME_PRE_(); {
546 
548 #define QS_END_NOCRIT() } \
549  QS_endRec_(); \
550  }
551 
552 #ifndef QS_REC_DONE
554  #define QS_REC_DONE() ((void)0)
555 #endif /* QS_REC_DONE */
556 
558 #define QS_GLB_CHECK_(rec_) \
559  (((uint_fast8_t)QS_priv_.glbFilter[(uint_fast8_t)(rec_) >> 3U] \
560  & ((uint_fast8_t)1U << ((uint_fast8_t)(rec_) & 7U))) != 0U)
561 
563 #define QS_LOC_CHECK_(qs_id_) \
564  (((uint_fast8_t)QS_priv_.locFilter[(uint_fast8_t)(qs_id_) >> 3U] \
565  & ((uint_fast8_t)1U << ((uint_fast8_t)(qs_id_) & 7U))) != 0U)
566 
577 #define QS_BEGIN_ID(rec_, qs_id_) \
578  if (QS_GLB_CHECK_(rec_) && QS_LOC_CHECK_(qs_id_)) { \
579  QS_CRIT_STAT_ \
580  QS_CRIT_E_(); \
581  QS_beginRec_((uint_fast8_t)(rec_)); \
582  QS_TIME_PRE_(); {
583 
588 #define QS_END() } \
589  QS_endRec_(); \
590  QS_CRIT_X_(); \
591  }
592 
599 enum {
615  QS_HEX_FMT
616 };
617 
619 #define QS_I8(width_, data_) \
620  (QS_u8_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I8_T, (data_)))
621 
623 #define QS_U8(width_, data_) \
624  (QS_u8_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U8_T, (data_)))
625 
627 #define QS_I16(width_, data_) \
628  (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I16_T, (data_)))
629 
631 #define QS_U16(width_, data_) \
632  (QS_u16_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U16_T, (data_)))
633 
635 #define QS_I32(width_, data_) \
636  (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I32_T, (data_)))
637 
639 #define QS_U32(width_, data_) \
640  (QS_u32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U32_T, (data_)))
641 
643 #define QS_F32(width_, data_) \
644  (QS_f32_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F32_T, (data_)))
645 
647 #define QS_F64(width_, data_) \
648  (QS_f64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_F64_T, (data_)))
649 
651 #define QS_I64(width_, data_) \
652  (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_I64_T, (data_)))
653 
655 #define QS_U64(width_, data_) \
656  (QS_u64_fmt_((uint8_t)(((width_) << 4)) | (uint8_t)QS_U64_T, (data_)))
657 
659 #define QS_STR(str_) (QS_str_fmt_((str_)))
660 
662 #define QS_MEM(mem_, size_) (QS_mem_fmt_((mem_), (size_)))
663 
664 
665 #if (QS_OBJ_PTR_SIZE == 1U)
666  #define QS_OBJ(obj_) (QS_u8_fmt_(QS_OBJ_T, (uint8_t)(obj_)))
667 #elif (QS_OBJ_PTR_SIZE == 2U)
668  #define QS_OBJ(obj_) (QS_u16_fmt_(QS_OBJ_T, (uint16_t)(obj_)))
669 #elif (QS_OBJ_PTR_SIZE == 4U)
670  #define QS_OBJ(obj_) (QS_u32_fmt_(QS_OBJ_T, (uint32_t)(obj_)))
671 #elif (QS_OBJ_PTR_SIZE == 8U)
672  #define QS_OBJ(obj_) (QS_u64_fmt_(QS_OBJ_T, (uint64_t)(obj_)))
673 #else
675  #define QS_OBJ(obj_) (QS_u32_fmt_(QS_OBJ_T, (uint32_t)(obj_)))
676 #endif
677 
678 
679 #if (QS_FUN_PTR_SIZE == 1U)
680  #define QS_FUN(fun_) (QS_u8_fmt_(QS_FUN_T, (uint8_t)(fun_)))
681 #elif (QS_FUN_PTR_SIZE == 2U)
682  #define QS_FUN(fun_) (QS_u16_fmt_(QS_FUN_T, (uint16_t)(fun_)))
683 #elif (QS_FUN_PTR_SIZE == 4U)
684  #define QS_FUN(fun_) (QS_u32_fmt_(QS_FUN_T, (uint32_t)(fun_)))
685 #elif (QS_FUN_PTR_SIZE == 8U)
686  #define QS_FUN(fun_) (QS_u64_fmt_(QS_FUN_T, (uint64_t)(fun_)))
687 #else
689  #define QS_FUN(fun_) (QS_u32_fmt_(QS_FUN_T, (uint32_t)(fun_)))
690 #endif
691 
692 #if (Q_SIGNAL_SIZE == 1)
693 
694  #define QS_SIG(sig_, obj_) \
695  QS_u8_fmt_(QS_SIG_T, (sig_)); \
696  QS_obj_raw_(obj_)
697 
698 #elif (Q_SIGNAL_SIZE == 2)
699 
700  #define QS_SIG(sig_, obj_) \
701  QS_u16_fmt_(QS_SIG_T, (sig_)); \
702  QS_obj_raw_(obj_)
703 
704 #elif (Q_SIGNAL_SIZE == 4)
705 
706  #define QS_SIG(sig_, obj_) \
707  QS_u32_fmt_(QS_SIG_T, (sig_)); \
708  QS_obj_raw_(obj_)
709 
710 #else
714  #define QS_SIG(sig_, obj_) \
715  QS_u16_fmt_(QS_SIG_T, (sig_)); \
716  QS_obj_raw_(obj_)
717 
718 #endif
719 
720 
721 /****************************************************************************/
722 /* Dictionary trace records */
723 
765 #define QS_SIG_DICTIONARY(sig_, obj_) \
766  (QS_sig_dict_pre_((sig_), (obj_), #sig_))
767 
782 #define QS_OBJ_DICTIONARY(obj_) \
783  (QS_obj_dict_pre_((obj_), #obj_))
784 
798 #define QS_FUN_DICTIONARY(fun_) \
799  (QS_fun_dict_pre_((void (*)(void))(fun_), #fun_))
800 
807 #define QS_USR_DICTIONARY(rec_) \
808  (QS_usr_dict_pre_((rec_), #rec_))
809 
811 void QS_sig_dict_pre_(enum_t const sig, void const * const obj,
812  char_t const *name);
813 
815 void QS_obj_dict_pre_(void const * const obj,
816  char_t const *name);
817 
819 void QS_fun_dict_pre_(void (* const fun)(void),
820  char_t const *name);
821 
823 void QS_usr_dict_pre_(enum_t const rec,
824  char_t const * const name);
825 
826 
827 /****************************************************************************/
828 /* Miscellaneous pre-formatted trace records used in applications */
829 
835 void QS_ASSERTION(char_t const * const module,
836  int_t const loc,
837  uint32_t delay);
838 
840 void QF_QS_CRIT_ENTRY(void);
841 
843 void QF_QS_CRIT_EXIT(void);
844 
846 void QF_QS_ISR_ENTRY(uint8_t const isrnest, uint8_t const prio);
847 
849 void QF_QS_ISR_EXIT(uint8_t const isrnest, uint8_t const prio);
850 
852 #define QF_QS_ACTION(act_) (act_)
853 
854 
855 /****************************************************************************/
856 /* QS private data (the TX channel) */
867  MAX_OBJ
868 };
869 
872 };
873 
875 typedef struct {
876  uint8_t glbFilter[16];
877  uint8_t locFilter[16];
878  void const *locFilter_AP;
888 } QSPrivAttr;
889 
890 extern QSPrivAttr QS_priv_;
891 
892 
893 /****************************************************************************/
894 /* QS receive channel */
895 
914  QS_RX_EVENT
915 };
916 
918 void QS_rxInitBuf(uint8_t sto[], uint16_t stoSize);
919 
921 void QS_rxParse(void);
922 
924 bool QS_RX_PUT(uint8_t const b);
925 
927 uint16_t QS_rxGetNfree(void);
928 
930 void QS_setCurrObj(uint8_t obj_kind, void *obj_ptr);
931 
933 void QS_queryCurrObj(uint8_t obj_kind);
934 
936 void QS_onReset(void);
937 
939 void QS_onCommand(uint8_t cmdId, uint32_t param1,
940  uint32_t param2, uint32_t param3);
941 
945 #define QS_OUTPUT() (QS_output())
946 
950 #define QS_RX_INPUT() (QS_rx_input())
951 
952 /****************************************************************************/
953 /* Facilities for use in QUTest only */
954 #ifdef Q_UTEST
956  void QS_onTestSetup(void);
957 
959  void QS_onTestTeardown(void);
960 
962  void QS_onTestLoop(void);
963 
965  void QS_onTestEvt(QEvt *e);
966 
968  void QS_onTestPost(void const *sender, QActive *recipient,
969  QEvt const *e, bool status);
970 
972  void QS_processTestEvts_(void);
973 
975  void QS_tickX_(uint_fast8_t const tickRate, void const * const sender);
976 
978  uint32_t QS_getTestProbe_(void (* const api)(void));
979 
981  #define QS_TEST_PROBE_DEF(fun_) \
982  uint32_t const qs_tp_ = QS_getTestProbe_((void (*)(void))(fun_));
983 
985  #define QS_TEST_PROBE(code_) \
986  if (qs_tp_ != 0U) { code_ }
987 
989  #define QS_TEST_PROBE_ID(id_, code_) \
990  if (qs_tp_ == (uint32_t)(id_)) { code_ }
991 
993  #define QS_TEST_PAUSE() do { \
994  QS_beginRec_((uint_fast8_t)QS_TEST_PAUSED); \
995  QS_endRec_(); \
996  QS_onTestLoop(); \
997  } while (false)
998 
1000  QUTEST_ON_POST = 124
1001  };
1002 
1003  /* interrupt nesting up-down counter */
1004  extern uint8_t volatile QF_intNest;
1005 
1006  /************************************************************************/
1013  typedef struct {
1014  QActive super; /*< inherit QActive */
1015  } QActiveDummy;
1016 
1018  void QActiveDummy_ctor(QActiveDummy * const me);
1019 
1020 #else /* Q_UTEST not defined */
1021 
1022  /* dummy definitions when not building for QUTEST */
1023  #define QS_TEST_PROBE_DEF(fun_)
1024  #define QS_TEST_PROBE(code_)
1025  #define QS_TEST_PROBE_ID(id_, code_)
1026  #define QS_TEST_PAUSE() ((void)0)
1027 
1028 #endif /* Q_UTEST */
1029 
1030 #endif /* QS_H */
1031 
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
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
char char_t
Definition: qassert.h:77
int int_t
Definition: qassert.h:86
float float32_t
Definition: qep.h:88
double float64_t
Definition: qep.h:97
int enum_t
Definition: qep.h:79
QSPrivAttr QS_priv_
Definition: qs.c:49
void QS_locFilter_(int_fast16_t const filter)
Definition: qs.c:314
void QActiveDummy_ctor(QActiveDummy *const me)
Definition: qutest.c:126
void QS_onReset(void)
OSpyObjCombnation
Definition: qs.h:870
@ SM_AO_OBJ
Definition: qs.h:871
QActive super
Definition: qs.h:1014
void QS_onTestPost(void const *sender, QActive *recipient, QEvt const *e, bool status)
uint8_t volatile QF_intNest
Definition: qutest.c:53
void QS_endRec_(void)
Definition: qs.c:403
void const * locFilter_AP
Definition: qs.h:878
void QS_onCleanup(void)
uint8_t * buf
Definition: qs.h:879
QSpyIdOffsets
Definition: qs.h:227
@ QS_EQ_ID
Definition: qs.h:230
@ QS_EP_ID
Definition: qs.h:229
@ QS_AP_ID
Definition: qs.h:231
@ QS_AO_ID
Definition: qs.h:228
uint8_t chksum
Definition: qs.h:885
void QS_onTestSetup(void)
void QS_ASSERTION(char_t const *const module, int_t const loc, uint32_t delay)
Definition: qs.c:948
uint8_t seq
Definition: qs.h:884
void QF_QS_ISR_ENTRY(uint8_t const isrnest, uint8_t const prio)
Definition: qs.c:987
QSpyRecordGroups
Definition: qs.h:200
@ QS_U2_RECORDS
Definition: qs.h:211
@ QS_MP_RECORDS
Definition: qs.h:205
@ QS_TE_RECORDS
Definition: qs.h:206
@ QS_SM_RECORDS
Definition: qs.h:202
@ QS_U0_RECORDS
Definition: qs.h:209
@ QS_U3_RECORDS
Definition: qs.h:212
@ QS_U4_RECORDS
Definition: qs.h:213
@ QS_AO_RECORDS
Definition: qs.h:203
@ QS_QF_RECORDS
Definition: qs.h:207
@ QS_SC_RECORDS
Definition: qs.h:208
@ QS_U1_RECORDS
Definition: qs.h:210
@ QS_EQ_RECORDS
Definition: qs.h:204
@ QS_ALL_RECORDS
Definition: qs.h:201
@ QS_UA_RECORDS
Definition: qs.h:214
void QS_str_fmt_(char_t const *str)
Definition: qs.c:922
void QS_queryCurrObj(uint8_t obj_kind)
Definition: qs_rx.c:338
void QS_u16_raw_(uint16_t d)
Definition: qs.c:653
void QS_tickX_(uint_fast8_t const tickRate, void const *const sender)
Definition: qutest.c:333
void QF_QS_CRIT_EXIT(void)
Definition: qs.c:976
void QS_u16_fmt_(uint8_t format, uint16_t d)
Definition: qs.c:568
void QS_rxParse(void)
Definition: qs_rx.c:391
void QS_usr_dict_pre_(enum_t const rec, char_t const *const name)
Definition: qs.c:875
void QS_f32_fmt_(uint8_t format, float32_t f)
Definition: qs_fp.c:49
void QS_u64_fmt_(uint8_t format, uint64_t d)
Definition: qs_64bit.c:71
uint32_t QS_getTestProbe_(void(*const api)(void))
Definition: qs_rx.c:1281
void QS_u32_raw_(uint32_t d)
Definition: qs.c:674
void QS_processTestEvts_(void)
Definition: qutest.c:298
void QS_initBuf(uint8_t sto[], uint_fast16_t stoSize)
Definition: qs.c:76
void QS_str_raw_(char_t const *str)
Definition: qs.c:715
void QS_onTestLoop(void)
QUTestUserRecords
Definition: qs.h:999
@ QUTEST_ON_POST
Definition: qs.h:1000
void QS_u64_raw_(uint64_t d)
Definition: qs_64bit.c:49
void QS_u32_fmt_(uint8_t format, uint32_t d)
Definition: qs.c:591
void QF_QS_ISR_EXIT(uint8_t const isrnest, uint8_t const prio)
Definition: qs.c:994
bool QS_RX_PUT(uint8_t const b)
Definition: qs_rx.c:284
uint8_t QSTimeCtr
Definition: qs.h:261
void QS_fun_dict_pre_(void(*const fun)(void), char_t const *name)
Definition: qs.c:860
void QS_sig_dict_pre_(enum_t const sig, void const *const obj, char_t const *name)
Definition: qs.c:825
@ QS_STR_T
Definition: qs.h:608
@ QS_U64_T
Definition: qs.h:614
@ QS_MEM_T
Definition: qs.h:609
@ QS_OBJ_T
Definition: qs.h:611
@ QS_F32_T
Definition: qs.h:606
@ QS_SIG_T
Definition: qs.h:610
@ QS_HEX_FMT
Definition: qs.h:615
@ QS_U8_T
Definition: qs.h:601
@ QS_I64_T
Definition: qs.h:613
@ QS_I8_T
Definition: qs.h:600
@ QS_FUN_T
Definition: qs.h:612
@ QS_F64_T
Definition: qs.h:607
@ QS_U32_T
Definition: qs.h:605
@ QS_I32_T
Definition: qs.h:604
@ QS_I16_T
Definition: qs.h:602
@ QS_U16_T
Definition: qs.h:603
void QS_u8_fmt_(uint8_t format, uint8_t d)
Definition: qs.c:547
QSpyObjKind
Definition: qs.h:860
@ SM_OBJ
Definition: qs.h:861
@ EQ_OBJ
Definition: qs.h:864
@ AO_OBJ
Definition: qs.h:862
@ TE_OBJ
Definition: qs.h:865
@ MAX_OBJ
Definition: qs.h:867
@ AP_OBJ
Definition: qs.h:866
@ MP_OBJ
Definition: qs.h:863
void QS_2u8_raw_(uint8_t d1, uint8_t d2)
Definition: qs.c:634
void QS_beginRec_(uint_fast8_t rec)
Definition: qs.c:376
QSCtr head
Definition: qs.h:881
void QS_rxInitBuf(uint8_t sto[], uint16_t stoSize)
Definition: qs_rx.c:252
uint_fast16_t QSCtr
Definition: qs.h:857
QSTimeCtr QS_onGetTime(void)
Definition: qs_rx.c:1314
QSpyUserOffsets
Definition: qs.h:218
@ QS_USER0
Definition: qs.h:219
@ QS_USER3
Definition: qs.h:222
@ QS_USER1
Definition: qs.h:220
@ QS_USER2
Definition: qs.h:221
@ QS_USER4
Definition: qs.h:223
void QS_onFlush(void)
QSCtr end
Definition: qs.h:880
uint8_t QS_onStartup(void const *arg)
uint8_t const * QS_getBlock(uint16_t *pNbytes)
Definition: qs.c:789
void QS_onTestTeardown(void)
QSpyRxRecords
Definition: qs.h:897
@ QS_RX_RESET
Definition: qs.h:900
@ QS_RX_EVENT
Definition: qs.h:914
@ QS_RX_LOC_FILTER
Definition: qs.h:909
@ QS_RX_FILL
Definition: qs.h:904
@ QS_RX_AO_FILTER
Definition: qs.h:910
@ QS_RX_TICK
Definition: qs.h:901
@ QS_RX_PEEK
Definition: qs.h:902
@ QS_RX_CURR_OBJ
Definition: qs.h:911
@ QS_RX_GLB_FILTER
Definition: qs.h:908
@ QS_RX_POKE
Definition: qs.h:903
@ QS_RX_INFO
Definition: qs.h:898
@ QS_RX_TEST_TEARDOWN
Definition: qs.h:906
@ QS_RX_TEST_PROBE
Definition: qs.h:907
@ QS_RX_TEST_SETUP
Definition: qs.h:905
@ QS_RX_COMMAND
Definition: qs.h:899
@ QS_RX_TEST_CONTINUE
Definition: qs.h:912
@ QS_RX_QUERY_CURR
Definition: qs.h:913
void QS_obj_dict_pre_(void const *const obj, char_t const *name)
Definition: qs.c:843
void QS_u8_raw_(uint8_t d)
Definition: qs.c:617
void QS_setCurrObj(uint8_t obj_kind, void *obj_ptr)
Definition: qs_rx.c:326
uint16_t QS_getByte(void)
Definition: qs.c:747
void QS_glbFilter_(int_fast16_t const filter)
Definition: qs.c:119
uint8_t prio
Definition: qs.h:244
QSpyRecords
Definition: qs.h:62
@ QS_ASSERT_FAIL
Definition: qs.h:161
@ QS_RESERVED_81
Definition: qs.h:175
@ QS_QF_TIMEEVT_AUTO_DISARM
Definition: qs.h:111
@ QS_MUTEX_UNLOCK
Definition: qs.h:137
@ QS_RESERVED_72
Definition: qs.h:166
@ QS_QF_INT_ENABLE
Definition: qs.h:124
@ QS_QF_RUN
Definition: qs.h:162
@ QS_QF_MPOOL_GET_ATTEMPT
Definition: qs.h:133
@ QS_QF_DELETE_REF
Definition: qs.h:118
@ QS_QF_ACTIVE_RECALL
Definition: qs.h:79
@ QS_RESERVED_90
Definition: qs.h:184
@ QS_QF_EQUEUE_GET_LAST
Definition: qs.h:92
@ QS_RESERVED_73
Definition: qs.h:167
@ QS_QF_TIMEEVT_DISARM
Definition: qs.h:113
@ QS_TEST_PROBE_GET
Definition: qs.h:151
@ QS_QEP_STATE_INIT
Definition: qs.h:69
@ QS_QEP_TRAN_HIST
Definition: qs.h:145
@ QS_QF_TIMEEVT_REARM
Definition: qs.h:114
@ QS_FUN_DICT
Definition: qs.h:154
@ QS_RESERVED_91
Definition: qs.h:185
@ QS_RESERVED_84
Definition: qs.h:178
@ QS_QF_PUBLISH
Definition: qs.h:102
@ QS_RESERVED_94
Definition: qs.h:188
@ QS_RESERVED_74
Definition: qs.h:168
@ QS_RESERVED_71
Definition: qs.h:165
@ QS_RESERVED_77
Definition: qs.h:171
@ QS_QF_ACTIVE_POST_LIFO
Definition: qs.h:83
@ QS_QEP_TRAN_EP
Definition: qs.h:146
@ QS_QEP_STATE_EXIT
Definition: qs.h:68
@ QS_TARGET_DONE
Definition: qs.h:157
@ QS_USER
Definition: qs.h:196
@ QS_QF_GC_ATTEMPT
Definition: qs.h:105
@ QS_QF_CRIT_ENTRY
Definition: qs.h:119
@ QS_QF_MPOOL_PUT
Definition: qs.h:99
@ QS_RESERVED_88
Definition: qs.h:182
@ QS_QF_EQUEUE_POST_ATTEMPT
Definition: qs.h:130
@ QS_RESERVED_97
Definition: qs.h:191
@ QS_QF_GC
Definition: qs.h:106
@ QS_QF_ACTIVE_GET
Definition: qs.h:84
@ QS_QF_CRIT_EXIT
Definition: qs.h:120
@ QS_QF_TIMEEVT_POST
Definition: qs.h:115
@ QS_QF_INT_DISABLE
Definition: qs.h:123
@ QS_OBJ_DICT
Definition: qs.h:153
@ QS_QF_MPOOL_GET
Definition: qs.h:98
@ QS_QF_TIMEEVT_DISARM_ATTEMPT
Definition: qs.h:112
@ QS_QF_ACTIVE_RECALL_ATTEMPT
Definition: qs.h:86
@ QS_QEP_INIT_TRAN
Definition: qs.h:70
@ QS_MUTEX_LOCK
Definition: qs.h:136
@ QS_RESERVED_92
Definition: qs.h:186
@ QS_TARGET_INFO
Definition: qs.h:156
@ QS_QEP_INTERN_TRAN
Definition: qs.h:71
@ QS_QEP_TRAN_XP
Definition: qs.h:147
@ QS_RX_STATUS
Definition: qs.h:158
@ QS_SCHED_IDLE
Definition: qs.h:141
@ QS_QF_EQUEUE_POST_LIFO
Definition: qs.h:90
@ QS_RESERVED_99
Definition: qs.h:193
@ QS_RESERVED_93
Definition: qs.h:187
@ QS_QEP_STATE_ENTRY
Definition: qs.h:67
@ QS_QEP_UNHANDLED
Definition: qs.h:75
@ QS_QF_ACTIVE_POST_ATTEMPT
Definition: qs.h:127
@ QS_QEP_TRAN
Definition: qs.h:72
@ QS_QF_EQUEUE_GET
Definition: qs.h:91
@ QS_QF_ISR_ENTRY
Definition: qs.h:121
@ QS_RESERVED_76
Definition: qs.h:170
@ QS_QF_NEW_ATTEMPT
Definition: qs.h:95
@ QS_QF_ISR_EXIT
Definition: qs.h:122
@ QS_QF_TICK
Definition: qs.h:107
@ QS_QF_ACTIVE_UNSUBSCRIBE
Definition: qs.h:81
@ QS_QEP_DISPATCH
Definition: qs.h:74
@ QS_QF_ACTIVE_DEFER
Definition: qs.h:78
@ QS_SCHED_LOCK
Definition: qs.h:138
@ QS_RESERVED_78
Definition: qs.h:172
@ QS_RESERVED_85
Definition: qs.h:179
@ QS_QF_NEW_REF
Definition: qs.h:103
@ QS_TEST_PAUSED
Definition: qs.h:150
@ QS_SCHED_UNLOCK
Definition: qs.h:139
@ QS_RESERVED_86
Definition: qs.h:180
@ QS_RESERVED_95
Definition: qs.h:189
@ QS_EMPTY
Definition: qs.h:64
@ QS_RESERVED_87
Definition: qs.h:181
@ QS_RESERVED_89
Definition: qs.h:183
@ QS_QF_ACTIVE_POST
Definition: qs.h:82
@ QS_SIG_DICT
Definition: qs.h:152
@ QS_RESERVED_83
Definition: qs.h:177
@ QS_RESERVED_79
Definition: qs.h:173
@ QS_RESERVED_82
Definition: qs.h:176
@ QS_QUERY_DATA
Definition: qs.h:159
@ QS_QF_TIMEEVT_ARM
Definition: qs.h:110
@ QS_QEP_IGNORED
Definition: qs.h:73
@ QS_USR_DICT
Definition: qs.h:155
@ QS_QF_NEW
Definition: qs.h:104
@ QS_QF_EQUEUE_POST
Definition: qs.h:89
@ QS_QF_ACTIVE_GET_LAST
Definition: qs.h:85
@ QS_SCHED_NEXT
Definition: qs.h:140
@ QS_PEEK_DATA
Definition: qs.h:160
@ QS_RESERVED_80
Definition: qs.h:174
@ QS_RESERVED_75
Definition: qs.h:169
@ QS_RESERVED_98
Definition: qs.h:192
@ QS_RESERVED_96
Definition: qs.h:190
@ QS_QF_ACTIVE_SUBSCRIBE
Definition: qs.h:80
@ QS_SCHED_RESUME
Definition: qs.h:142
QSCtr used
Definition: qs.h:883
void QS_onTestEvt(QEvt *e)
QSCtr tail
Definition: qs.h:882
void QS_obj_raw_(void const *const obj)
Definition: qs.c:696
void QF_QS_CRIT_ENTRY(void)
Definition: qs.c:968
uint8_t critNest
Definition: qs.h:887
void QS_mem_fmt_(uint8_t const *blk, uint8_t size)
Definition: qs.c:893
uint16_t QS_rxGetNfree(void)
Definition: qs_rx.c:308
void QS_f64_fmt_(uint8_t format, float64_t d)
Definition: qs_fp.c:81
void QS_onCommand(uint8_t cmdId, uint32_t param1, uint32_t param2, uint32_t param3)
QSpyIdGroups
Definition: qs.h:235
@ QS_EP_IDS
Definition: qs.h:238
@ QS_AO_IDS
Definition: qs.h:237
@ QS_EQ_IDS
Definition: qs.h:239
@ QS_ALL_IDS
Definition: qs.h:236
@ QS_AP_IDS
Definition: qs.h:240
Definition: qs.h:875
Definition: qs.h:244
Definition: qf.h:116
Definition: qep.h:151