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 counter APIs.
13  */
14 
15 #ifndef TRC_COUNTER_H
16 #define TRC_COUNTER_H
17 
18 #if (TRC_USE_TRACEALYZER_RECORDER == 1) && (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
19 
20 #define TRC_COUNTER_VALUE_INDEX 0
21 #define TRC_COUNTER_LOWER_LIMIT_INDEX 1
22 #define TRC_COUNTER_UPPER_LIMIT_INDEX 2
23 
24 #include <trcTypes.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 /**
31  * @defgroup trace_counter_apis Trace Counter APIs
32  * @ingroup trace_recorder_apis
33  * @{
34  */
35 
36 typedef struct TraceCounterData /* Aligned */
37 {
38 	TraceCounterCallback_t xCallbackFunction;
39 } TraceCounterData_t;
40 
41 /**
42  * @brief Initializes the Counter trace system
43  *
44  * @param[in] pxBuffer Pointer to memory that is used by the counter system
45  *
46  * @retval TRC_FAIL Failure
47  * @retval TRC_SUCCESS Success
48  */
49 traceResult xTraceCounterInitialize(TraceCounterData_t *pxBuffer);
50 
51 /**
52  * @brief Sets trace counter callback.
53  *
54  * @param[in] xCallback Callback
55  *
56  * @retval TRC_FAIL Failure
57  * @retval TRC_SUCCESS Success
58  */
59 traceResult xTraceCounterSetCallback(TraceCounterCallback_t xCallback);
60 
61 /**
62  * @brief Creates trace counter.
63  *
64  * @param[in] szName Name.
65  * @param[in] xInitialValue Initial value.
66  * @param[in] xLowerLimit Lower limit.
67  * @param[in] xUpperLimit Upper limit.
68  * @param[out] pxCounterHandle Uninitialized trace counter handle.
69  *
70  * @retval TRC_FAIL Failure
71  * @retval TRC_SUCCESS Success
72  */
73 traceResult xTraceCounterCreate(const char* szName, TraceBaseType_t xInitialValue, TraceBaseType_t xLowerLimit, TraceBaseType_t xUpperLimit, TraceCounterHandle_t* pxCounterHandle);
74 
75 /**
76  * @brief Adds value to trace counter.
77  *
78  * @param[in] xCounterHandle Initialized trace counter handle.
79  * @param[in] xValue Value.
80  *
81  * @retval TRC_FAIL Failure
82  * @retval TRC_SUCCESS Success
83  */
84 #define xTraceCounterAdd(xCounterHandle, xValue) xTraceCounterSet(xCounterHandle, (TraceBaseType_t)(xTraceEntryGetStateReturn((TraceEntryHandle_t)(xCounterHandle), TRC_COUNTER_VALUE_INDEX)) + (xValue))
85 
86 /**
87  * @brief Sets trace counter value.
88  *
89  * @param[in] xCounterHandle Initialized trace counter handle.
90  * @param[in] xValue Value.
91  *
92  * @retval TRC_FAIL Failure
93  * @retval TRC_SUCCESS Success
94  */
95 traceResult xTraceCounterSet(TraceCounterHandle_t xCounterHandle, TraceBaseType_t xValue);
96 
97 /**
98  * @brief Gets trace counter value.
99  *
100  * @param[in] xCounterHandle Initialized trace counter handle.
101  * @param[out] pxValue Returned value.
102  *
103  * @retval TRC_FAIL Failure
104  * @retval TRC_SUCCESS Success
105  */
106 #define xTraceCounterGet(xCounterHandle, pxValue) xTraceEntryGetState((TraceEntryHandle_t)(xCounterHandle), TRC_COUNTER_VALUE_INDEX, (TraceUnsignedBaseType_t*)(pxValue))
107 
108 /**
109  * @brief Increases trace counter value.
110  *
111  * @param[in] xCounterHandle Initialized trace counter handle
112  *
113  * @retval TRC_FAIL Failure
114  * @retval TRC_SUCCESS Success
115  */
116 #define xTraceCounterIncrease(xCounterHandle) xTraceCounterAdd(xCounterHandle, 1)
117 
118 /**
119  * @brief Decreases trace counter value.
120  *
121  * @param[in] xCounterHandle Initialized trace counter handle
122  *
123  * @retval TRC_FAIL Failure
124  * @retval TRC_SUCCESS Success
125  */
126 #define xTraceCounterDecrease(xCounterHandle) xTraceCounterAdd(xCounterHandle, -1)
127 
128 /**
129  * @brief Gets trace counter upper limit.
130  *
131  * @param[in] xCounterHandle Initialized trace counter handle
132  * @param[out] pxValue Returned value
133  *
134  * @retval TRC_FAIL Failure
135  * @retval TRC_SUCCESS Success
136  */
137 #define xTraceCounterGetUpperLimit(xCounterHandle, pxValue) xTraceEntryGetState((TraceEntryHandle_t)(xCounterHandle), TRC_COUNTER_UPPER_LIMIT_INDEX, (TraceUnsignedBaseType_t*)(pxValue))
138 
139 /**
140  * @brief Gets trace counter lower limit.
141  *
142  * @param[in] xCounterHandle Initialized trace counter handle
143  * @param[out] pxValue Returned value
144  *
145  * @retval TRC_FAIL Failure
146  * @retval TRC_SUCCESS Success
147  */
148 #define xTraceCounterGetLowerLimit(xCounterHandle, pxValue) xTraceEntryGetState((TraceEntryHandle_t)(xCounterHandle), TRC_COUNTER_LOWER_LIMIT_INDEX, (TraceUnsignedBaseType_t*)(pxValue))
149 
150 /**
151  * @brief Gets trace counter name.
152  *
153  * @param[in] xCounterHandle Initialized trace counter handle.
154  * @param[out] pszName Returned name.
155  *
156  * @retval TRC_FAIL Failure
157  * @retval TRC_SUCCESS Success
158  */
159 #define xTraceCounterGetName(xCounterHandle, pszName) xTraceEntryGetSymbol((TraceEntryHandle_t)(xCounterHandle), pszName)
160 
161 /** @} */
162 
163 #ifdef __cplusplus
164 }
165 #endif
166 
167 #else
168 
169 #define xTraceCounterSetCallback(_xCallback) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)(_xCallback), TRC_SUCCESS)
170 
171 #define xTraceCounterCreate(_szName, _xInitialValue, _xLowerLimit, _xUpperLimit, _pxCounterHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_6((void)(_szName), (void)(_xInitialValue), (void)(_xLowerLimit), (void)(_xUpperLimit), (void)(_pxCounterHandle), TRC_SUCCESS)
172 
173 #define xTraceCounterAdd(_xCounterHandle, _xValue) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xCounterHandle), (void)(_xValue), TRC_SUCCESS)
174 
175 #define xTraceCounterSet(_xCounterHandle, _xValue) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xCounterHandle), (void)(_xValue), TRC_SUCCESS)
176 
177 #define xTraceCounterGet(_xCounterHandle, _pxValue) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xCounterHandle), (void)(_pxValue), TRC_SUCCESS)
178 
179 #define xTraceCounterIncrease(_xCounterHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)(_xCounterHandle), TRC_SUCCESS)
180 
181 #define xTraceCounterDecrease(_xCounterHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_2((void)(_xCounterHandle), TRC_SUCCESS)
182 
183 #define xTraceCounterGetUpperLimit(_xCounterHandle, _pxValue) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xCounterHandle), (void)(_pxValue), TRC_SUCCESS)
184 
185 #define xTraceCounterGetLowerLimit(_xCounterHandle, _pxValue) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xCounterHandle), (void)(_pxValue), TRC_SUCCESS)
186 
187 #define xTraceCounterGetName(_xCounterHandle, _pszName) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xCounterHandle), (void)(_pszName), TRC_SUCCESS)
188 
189 #endif
190 
191 #endif
192