Percepio Trace Recorder v4.8.0.hotfix1
Loading...
Searching...
No Matches
trcStreamPort.h
1/*
2 * Trace Recorder for Tracealyzer v4.8.0.hotfix1
3 * Copyright 2023 Percepio AB
4 * www.percepio.com
5 *
6 * SPDX-License-Identifier: Apache-2.0
7 *
8 * This stream port provides trace streaming using ESP-IDF apptrace
9 * which depends on Xtensa TRAX for background memory access.
10 */
11
12#ifndef TRC_STREAM_PORT_H
13#define TRC_STREAM_PORT_H
14
15#include <trcDefines.h>
16#include <trcTypes.h>
17
18#if (TRC_USE_TRACEALYZER_RECORDER == 1)
19
20#if (TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/*******************************************************************************
27 * TRC_CFG_APPTRACE_TRAX_BLOCKING_MODE
28 * This stream port for streaming over XTensa Trax relies on apptrace that utilize
29 * an internal TRAX RAM buffer read by OpenOCD during execution.
30 *
31 * Possible values:
32 * - APPTRACE_TRAX_MODE_BLOCK_IF_FIFO_FULL
33 * - APPTRACE_TRAX_MODE_NO_BLOCK_SKIP (default)
34 *
35 * Using APPTRACE_TRAX_MODE_BLOCK_IF_FIFO_FULL ensure that you get a
36 * complete and valid trace. This may however cause blocking if your streaming
37 * interface isn't fast enough, which may disturb the real-time behavior.
38 *
39 * We therefore recommend APPTRACE_TRAX_MODE_NO_BLOCK_SKIP. In this mode,
40 * Tracealyzer will report lost events if the transfer is not
41 * fast enough. If there are problems, try increasing the apptrace buffer
42 * in sdkconfig.
43 ******************************************************************************/
44#if defined(CONFIG_PERCEPIO_RECORDER_CFG_TRAX_MODE_BLOCK_IF_FIFO_FULL)
45#define TRC_CFG_APPTRACE_TRAX_BLOCKING_MODE 1
46#elif defined(CONFIG_PERCEPIO_RECORDER_CFG_TRAX_MODE_NO_BLOCK_SKIP)
47#define TRC_CFG_APPTRACE_TRAX_BLOCKING_MODE 0
48#endif
49
50#ifdef CONFIG_PERCEPIO_RECORDER_TRC_STREAM_PORT_USE_INTERNAL_BUFFER
51#define TRC_USE_INTERNAL_BUFFER 1
52/* Aligned */
53#define TRC_STREAM_PORT_INTERNAL_BUFFER_SIZE ((((CONFIG_PERCEPIO_RECORDER_CFG_STREAM_PORT_INTERNAL_BUFFER_SIZE) + sizeof(TraceUnsignedBaseType_t) - 1) / sizeof(TraceUnsignedBaseType_t)) * sizeof(TraceUnsignedBaseType_t))
54/* Aligned */
55#else
56#define TRC_USE_INTERNAL_BUFFER 0
57#endif
58
59#ifdef PERCEPIO_RECORDER_TRC_STREAM_PORT_INTERNAL_EVENT_BUFFER_TRANSFER_MODE_CHUNKED
60#define TRC_INTERNAL_BUFFER_CHUNK_SIZE ((((CONFIG_PERCEPIO_RECORDER_CFG_STREAM_PORT_INTERNAL_BUFFER_CHUNK_SIZE) + sizeof(TraceUnsignedBaseType_t) - 1) / sizeof(TraceUnsignedBaseType_t)) * sizeof(TraceUnsignedBaseType_t))
61#else
62#define TRC_INTERNAL_BUFFER_CHUNK_SIZE 1024
63#endif
64
65#if CONFIG_PERCEPIO_RECORDER_TRC_STREAM_PORT_INTERNAL_BUFFER_WRITE_MODE_DIRECT == 1
66#define TRC_INTERNAL_EVENT_BUFFER_WRITE_MODE TRC_INTERNAL_EVENT_BUFFER_OPTION_WRITE_MODE_DIRECT
67#elif CONFIG_PERCEPIO_RECORDER_TRC_STREAM_PORT_INTERNAL_BUFFER_WRITE_MODE_COPY == 1
68#define TRC_INTERNAL_EVENT_BUFFER_WRITE_MODE TRC_INTERNAL_EVENT_BUFFER_OPTION_WRITE_MODE_COPY
69#endif
70
71#if CONFIG_PERCEPIO_RECORDER_TRC_STREAM_PORT_INTERNAL_EVENT_BUFFER_TRANSFER_MODE_ALL == 1
72#define TRC_INTERNAL_EVENT_BUFFER_TRANSFER_MODE TRC_INTERNAL_EVENT_BUFFER_OPTION_TRANSFER_MODE_ALL
73#elif CONFIG_PERCEPIO_RECORDER_TRC_STREAM_PORT_INTERNAL_EVENT_BUFFER_TRANSFER_MODE_CHUNKED == 1
74#define TRC_INTERNAL_EVENT_BUFFER_TRANSFER_MODE TRC_INTERNAL_EVENT_BUFFER_OPTION_TRANSFER_MODE_CHUNKED
75#endif
76
77#ifdef PERCEPIO_RECORDER_CFG_STREAM_PORT_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_SIZE_LIMIT
78#define TRC_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_SIZE_LIMIT (PERCEPIO_RECORDER_CFG_STREAM_PORT_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_SIZE_LIMIT)
79#else
80#define TRC_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_SIZE_LIMIT 10
81#endif
82
83#ifdef PERCEPIO_RECORDER_CFG_STREAM_PORT_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_COUNT_LIMIT
84#define TRC_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_COUNT_LIMIT (PERCEPIO_RECORDER_CFG_STREAM_PORT_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_COUNT_LIMIT)
85#else
86#define TRC_INTERNAL_BUFFER_CHUNK_TRANSFER_AGAIN_COUNT_LIMIT 10
87#endif
88
93{ /* Aligned */
94#if (TRC_USE_INTERNAL_BUFFER == 1)
95 uint8_t bufferInternal[TRC_STREAM_PORT_INTERNAL_BUFFER_SIZE]; /* Aligned */
96#else
97 TraceUnsignedBaseType_t dummy; /* Aligned */
98#endif
100
111traceResult xTraceStreamPortInitialize(TraceStreamPortBuffer_t* pxBuffer);
112
122#if (TRC_USE_INTERNAL_BUFFER == 1)
123 #if (TRC_INTERNAL_EVENT_BUFFER_WRITE_MODE == TRC_INTERNAL_EVENT_BUFFER_OPTION_WRITE_MODE_COPY)
124 #define xTraceStreamPortAllocate(uiSize, ppvData) ((void)(uiSize), xTraceStaticBufferGet(ppvData))
125 #else
126 #define xTraceStreamPortAllocate(uiSize, ppvData) ((void)(uiSize), xTraceInternalEventBufferAlloc(uiSize, ppvData))
127 #endif
128#else
129 #define xTraceStreamPortAllocate(uiSize, ppvData) ((void)(uiSize), xTraceStaticBufferGet(ppvData))
130#endif
131
144#if (TRC_USE_INTERNAL_BUFFER == 1)
145 #if (TRC_INTERNAL_EVENT_BUFFER_WRITE_MODE == TRC_INTERNAL_EVENT_BUFFER_OPTION_WRITE_MODE_COPY)
146 #define xTraceStreamPortCommit xTraceInternalEventBufferPush
147 #else
148 #define xTraceStreamPortCommit xTraceInternalEventBufferAllocCommit
149 #endif
150#else
151 #define xTraceStreamPortCommit xTraceStreamPortWriteData
152#endif
153
164traceResult xTraceStreamPortWriteData(void* pvData, uint32_t uiSize, int32_t* piBytesWritten);
165
176traceResult xTraceStreamPortReadData(void* pvData, uint32_t uiSize, int32_t* piBytesRead);
177
186traceResult xTraceStreamPortOnEnable(uint32_t uiStartOption);
187
188#define xTraceStreamPortOnDisable() ((void)TRC_SUCCESS)
189
190#define xTraceStreamPortOnTraceBegin() (TRC_SUCCESS)
191
192#define xTraceStreamPortOnTraceEnd() (TRC_SUCCESS)
193
194#ifdef __cplusplus
195}
196#endif
197
198#endif /*(TRC_CFG_RECORDER_MODE == TRC_RECORDER_MODE_STREAMING)*/
199
200#endif /*(TRC_USE_TRACEALYZER_RECORDER == 1)*/
201
202#endif /* TRC_STREAM_PORT_H */
A structure representing the trace stream port buffer.
Definition: trcStreamPort.h:93