1 /*
2 * Percepio Trace Recorder for Tracealyzer v4.8.1
3 * Copyright 2023 Percepio AB
4 * www.percepio.com
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 */
8 
9 /**
10  * @file
11  *
12  * @brief Public trace diagnostic APIs.
13  */
14 
15 #ifndef TRC_DIAGNOSTICS_H
16 #define TRC_DIAGNOSTICS_H
17 
18 #if (TRC_USE_TRACEALYZER_RECORDER == 1)
19 
20 #if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
21 
22 #include <trcTypes.h>
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 #define TRC_DIAGNOSTICS_COUNT 5UL
29 
30 typedef enum TraceDiagnosticsType
31 {
32 	TRC_DIAGNOSTICS_ENTRY_SYMBOL_LONGEST_LENGTH = 0x00UL,
33 	TRC_DIAGNOSTICS_ENTRY_SLOTS_NO_ROOM = 0x01UL,
34 	TRC_DIAGNOSTICS_BLOB_MAX_BYTES_TRUNCATED = 0x02UL,
35 	TRC_DIAGNOSTICS_STACK_MONITOR_NO_SLOTS = 0x03UL,
36 	TRC_DIAGNOSTICS_ASSERTS_TRIGGERED = 0x04UL,
37 } TraceDiagnosticsType_t;
38 
39 typedef struct TraceDiagnostics /* Aligned */
40 {
41 	TraceBaseType_t metrics[TRC_DIAGNOSTICS_COUNT];
42 } TraceDiagnosticsData_t;
43 
44 /**
45  * @internal Initialize diagnostics
46  *
47  * @param[in] pxBuffer Diagnostics buffer
48  *
49  * @retval TRC_FAIL Failure
50  * @retval TRC_SUCCESS Success
51  */
52 traceResult xTraceDiagnosticsInitialize(TraceDiagnosticsData_t* pxBuffer);
53 
54 /**
55  * @brief Retrieve diagnostics value
56  *
57  * @param[in] xType Diagnostics type
58  * @param[out] pxValue Pointer to value
59  *
60  * @retval TRC_FAIL Failure
61  * @retval TRC_SUCCESS Success
62  */
63 traceResult xTraceDiagnosticsGet(TraceDiagnosticsType_t xType, TraceBaseType_t* pxValue);
64 
65 /**
66  * @brief Set diagnostics value
67  *
68  * @param[in] xType Diagnostics type
69  * @param[in] xValue Value
70  *
71  * @retval TRC_FAIL Failure
72  * @retval TRC_SUCCESS Success
73  */
74 traceResult xTraceDiagnosticsSet(TraceDiagnosticsType_t xType, TraceBaseType_t xValue);
75 
76 /**
77  * @brief Add to diagnostics value
78  *
79  * @param[in] xType Diagnostics type
80  * @param[in] xValue Value
81  *
82  * @retval TRC_FAIL Failure
83  * @retval TRC_SUCCESS Success
84  */
85 traceResult xTraceDiagnosticsAdd(TraceDiagnosticsType_t xType, TraceBaseType_t xValue);
86 
87 /**
88  * @brief Increase diagnostics value
89  *
90  * @param[in] xType Diagnostics type
91  *
92  * @retval TRC_FAIL Failure
93  * @retval TRC_SUCCESS Success
94  */
95 traceResult xTraceDiagnosticsIncrease(TraceDiagnosticsType_t xType);
96 
97 /**
98  * @brief Decrease diagnostics value
99  *
100  * @param[in] xType Diagnostics type
101  *
102  * @retval TRC_FAIL Failure
103  * @retval TRC_SUCCESS Success
104  */
105 traceResult xTraceDiagnosticsDecrease(TraceDiagnosticsType_t xType);
106 
107 /**
108  * @brief Set a new diagnostics value if higher than previous value
109  *
110  * @param[in] xType Dagnostics type
111  * @param[in] xValue Value
112  *
113  * @retval TRC_FAIL Failure
114  * @retval TRC_SUCCESS Success
115  */
116 traceResult xTraceDiagnosticsSetIfHigher(TraceDiagnosticsType_t xType, TraceBaseType_t xValue);
117 
118 /**
119  * @brief Set a new diagnostics value if lower than previous value
120  *
121  * @param[in] xType Dagnostics type
122  * @param[in] xValue Value
123  *
124  * @retval TRC_FAIL Failure
125  * @retval TRC_SUCCESS Success
126  */
127 traceResult xTraceDiagnosticsSetIfLower(TraceDiagnosticsType_t xType, TraceBaseType_t xValue);
128 
129 /**
130  * @brief Check the diagnostics status
131  *
132  * @retval TRC_FAIL Failure
133  * @retval TRC_SUCCESS Success
134  */
135 traceResult xTraceDiagnosticsCheckStatus(void);
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif /* (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING) */
142 
143 #endif /* (TRC_USE_TRACEALYZER_RECORDER == 1) */
144 
145 #endif /* TRC_DIAGNOSTICS_H */
146