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