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 interval APIs.
13  */
14 
15 #ifndef TRC_INTERVAL_H
16 #define TRC_INTERVAL_H
17 
18 #if (TRC_USE_TRACEALYZER_RECORDER == 1) && (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #include <trcTypes.h>
25 
26 #define TRC_INTERVAL_CHANNEL_SET_INDEX 0u
27 
28 /**
29  * @defgroup trace_interval_apis Trace Interval APIs
30  * @ingroup trace_recorder_apis
31  * @{
32  */
33 
34 /**
35  * @brief Creates trace interval channel set.
36  *
37  * @param[in] szName Name.
38  * @param[out] pxIntervalChannelSetHandle Pointer to uninitialized trace interval channel set.
39  *
40  * @retval TRC_FAIL Failure
41  * @retval TRC_SUCCESS Success
42  */
43 	traceResult xTraceIntervalChannelSetCreate(const char* szName, TraceIntervalChannelSetHandle_t* pxIntervalChannelSetHandle);
44 
45 /**
46  * @brief Creates trace interval channel.
47  *
48  * @param[in] szName Name.
49  * @param[in] xIntervalChannelSetHandle Interval set that this channel belongs to.
50  * @param[out] pxIntervalChannelHandle Pointer to uninitialized trace interval channel.
51  *
52  * @retval TRC_FAIL Failure
53  * @retval TRC_SUCCESS Success
54  */
55 traceResult xTraceIntervalChannelCreate(const char *szName, TraceIntervalChannelSetHandle_t xIntervalChannelSetHandle, TraceIntervalChannelHandle_t *pxIntervalChannelHandle);
56 
57 /**
58  * @brief Starts trace interval instance.
59  *
60  * @param[in] xIntervalChannelHandle Interval handle.
61  * @param[in] uxValue Value that can be used to tell instances apart.
62  * @param[out] pxIntervalInstanceHandle Pointer to interval instance variable.
63  *
64  * @retval TRC_FAIL Failure
65  * @retval TRC_SUCCESS Success
66  */
67 traceResult xTraceIntervalStart(TraceIntervalChannelHandle_t xIntervalChannelHandle, TraceUnsignedBaseType_t uxValue, TraceIntervalInstanceHandle_t* pxIntervalInstanceHandle);
68 
69 /**
70  * @brief Stops trace interval instance.
71  *
72  * @param[in] xIntervalChannelHandle Interval handle.
73  * @param[in] xIntervalInstanceHandle Interval instance.
74  *
75  * @retval TRC_FAIL Failure
76  * @retval TRC_SUCCESS Success
77  */
78 traceResult xTraceIntervalStop(TraceIntervalChannelHandle_t xIntervalChannelHandle, TraceIntervalInstanceHandle_t xIntervalInstanceHandle);
79 
80 /**
81  * @brief Gets trace interval channel state.
82  *
83  * @param[in] xIntervalChannelHandle Pointer to initialized trace interval.
84  * @param[out] puxState State.
85  *
86  * @retval TRC_FAIL Failure
87  * @retval TRC_SUCCESS Success
88  */
89 #define xTraceIntervalGetState(xIntervalChannelHandle, puxState) xTraceEntryGetState((TraceEntryHandle_t)(xIntervalChannelHandle), TRC_INTERVAL_CHANNEL_SET_INDEX, puxState)
90 
91 /** @} */
92 
93 #ifdef __cplusplus
94 }
95 #endif
96 
97 #else
98 
99 #define xTraceIntervalChannelSetCreate(_szName, _pxIntervalChannelSetHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_szName), (void)(_pxIntervalChannelSetHandle), TRC_SUCCESS)
100 
101 #define xTraceIntervalChannelCreate(_szName, _xIntervalChannelSetHandle, _pxIntervalChannelHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4((void)(_szName), (void)(_xIntervalChannelSetHandle), (void)(_pxIntervalChannelHandle), TRC_SUCCESS)
102 
103 #define xTraceIntervalStart(_xIntervalHandle, _uxValue, _pxIntervalInstanceHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_4((void)(_xIntervalHandle), (void)(_uxValue), (void)(_pxIntervalInstanceHandle), TRC_SUCCESS)
104 
105 #define xTraceIntervalStop(_xIntervalHandle, _xIntervalInstanceHandle) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xIntervalHandle), (void)(_xIntervalInstanceHandle), TRC_SUCCESS)
106 
107 #define xTraceIntervalGetState(_xIntervalHandle, _puxState) TRC_COMMA_EXPR_TO_STATEMENT_EXPR_3((void)(_xIntervalHandle), (void)(_puxState), TRC_SUCCESS)
108 
109 #endif
110 
111 #endif
112