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