debug.h
Go to the documentation of this file.
1 /**
2  * @file debug.h
3  * @brief Debugging facilities
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2025 Oryx Embedded SARL. All rights reserved.
10  *
11  * This program is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU General Public License
13  * as published by the Free Software Foundation; either version 2
14  * of the License, or (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software Foundation,
23  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24  *
25  * @author Oryx Embedded SARL (www.oryx-embedded.com)
26  * @version 2.5.0
27  **/
28 
29 #ifndef _DEBUG_H
30 #define _DEBUG_H
31 
32 //Dependencies
33 #include <stdio.h>
34 #include "os_port.h"
35 
36 //Trace level definitions
37 #define TRACE_LEVEL_OFF 0
38 #define TRACE_LEVEL_FATAL 1
39 #define TRACE_LEVEL_ERROR 2
40 #define TRACE_LEVEL_WARNING 3
41 #define TRACE_LEVEL_INFO 4
42 #define TRACE_LEVEL_DEBUG 5
43 #define TRACE_LEVEL_VERBOSE 6
44 
45 //Default trace level
46 #ifndef TRACE_LEVEL
47  #define TRACE_LEVEL TRACE_LEVEL_DEBUG
48 #endif
49 
50 //Trace output redirection
51 #ifndef TRACE_PRINTF
52  #define TRACE_PRINTF(...) osSuspendAllTasks(), fprintf(stderr, __VA_ARGS__), osResumeAllTasks()
53 #endif
54 
55 #ifndef TRACE_ARRAY
56  #define TRACE_ARRAY(p, a, n) osSuspendAllTasks(), debugDisplayArray(stderr, p, a, n), osResumeAllTasks()
57 #endif
58 
59 #ifndef TRACE_MPI
60  #define TRACE_MPI(p, a) osSuspendAllTasks(), mpiDump(stderr, p, a), osResumeAllTasks()
61 #endif
62 
63 #ifndef TRACE_EC_SCALAR
64  #define TRACE_EC_SCALAR(p, a, n) osSuspendAllTasks(), ecScalarDump(stderr, p, a, n), osResumeAllTasks()
65 #endif
66 
67 //Debugging macros
68 #if (TRACE_LEVEL >= TRACE_LEVEL_FATAL)
69  #define TRACE_FATAL(...) TRACE_PRINTF(__VA_ARGS__)
70  #define TRACE_FATAL_ARRAY(p, a, n) TRACE_ARRAY(p, a, n)
71  #define TRACE_FATAL_MPI(p, a) TRACE_MPI(p, a)
72  #define TRACE_FATAL_EC_SCALAR(p, a, n) TRACE_EC_SCALAR(p, a, n)
73 #else
74  #define TRACE_FATAL(...)
75  #define TRACE_FATAL_ARRAY(p, a, n)
76  #define TRACE_FATAL_MPI(p, a)
77  #define TRACE_FATAL_EC_SCALAR(p, a, n)
78 #endif
79 
80 #if (TRACE_LEVEL >= TRACE_LEVEL_ERROR)
81  #define TRACE_ERROR(...) TRACE_PRINTF(__VA_ARGS__)
82  #define TRACE_ERROR_ARRAY(p, a, n) TRACE_ARRAY(p, a, n)
83  #define TRACE_ERROR_MPI(p, a) TRACE_MPI(p, a)
84  #define TRACE_ERROR_EC_SCALAR(p, a, n) TRACE_EC_SCALAR(p, a, n)
85 #else
86  #define TRACE_ERROR(...)
87  #define TRACE_ERROR_ARRAY(p, a, n)
88  #define TRACE_ERROR_MPI(p, a)
89  #define TRACE_ERROR_EC_SCALAR(p, a, n)
90 #endif
91 
92 #if (TRACE_LEVEL >= TRACE_LEVEL_WARNING)
93  #define TRACE_WARNING(...) TRACE_PRINTF(__VA_ARGS__)
94  #define TRACE_WARNING_ARRAY(p, a, n) TRACE_ARRAY(p, a, n)
95  #define TRACE_WARNING_MPI(p, a) TRACE_MPI(p, a)
96  #define TRACE_WARNING_EC_SCALAR(p, a, n) TRACE_EC_SCALAR(p, a, n)
97 #else
98  #define TRACE_WARNING(...)
99  #define TRACE_WARNING_ARRAY(p, a, n)
100  #define TRACE_WARNING_MPI(p, a)
101  #define TRACE_WARNING_EC_SCALAR(p, a, n)
102 #endif
103 
104 #if (TRACE_LEVEL >= TRACE_LEVEL_INFO)
105  #define TRACE_INFO(...) TRACE_PRINTF(__VA_ARGS__)
106  #define TRACE_INFO_ARRAY(p, a, n) TRACE_ARRAY(p, a, n)
107  #define TRACE_INFO_NET_BUFFER(p, b, o, n)
108  #define TRACE_INFO_MPI(p, a) TRACE_MPI(p, a)
109  #define TRACE_INFO_EC_SCALAR(p, a, n) TRACE_EC_SCALAR(p, a, n)
110 #else
111  #define TRACE_INFO(...)
112  #define TRACE_INFO_ARRAY(p, a, n)
113  #define TRACE_INFO_NET_BUFFER(p, b, o, n)
114  #define TRACE_INFO_MPI(p, a)
115  #define TRACE_INFO_EC_SCALAR(p, a, n)
116 #endif
117 
118 #if (TRACE_LEVEL >= TRACE_LEVEL_DEBUG)
119  #define TRACE_DEBUG(...) TRACE_PRINTF(__VA_ARGS__)
120  #define TRACE_DEBUG_ARRAY(p, a, n) TRACE_ARRAY(p, a, n)
121  #define TRACE_DEBUG_NET_BUFFER(p, b, o, n)
122  #define TRACE_DEBUG_MPI(p, a) TRACE_MPI(p, a)
123  #define TRACE_DEBUG_EC_SCALAR(p, a, n) TRACE_EC_SCALAR(p, a, n)
124 #else
125  #define TRACE_DEBUG(...)
126  #define TRACE_DEBUG_ARRAY(p, a, n)
127  #define TRACE_DEBUG_NET_BUFFER(p, b, o, n)
128  #define TRACE_DEBUG_MPI(p, a)
129  #define TRACE_DEBUG_EC_SCALAR(p, a, n)
130 #endif
131 
132 #if (TRACE_LEVEL >= TRACE_LEVEL_VERBOSE)
133  #define TRACE_VERBOSE(...) TRACE_PRINTF(__VA_ARGS__)
134  #define TRACE_VERBOSE_ARRAY(p, a, n) TRACE_ARRAY(p, a, n)
135  #define TRACE_VERBOSE_NET_BUFFER(p, b, o, n)
136  #define TRACE_VERBOSE_MPI(p, a) TRACE_MPI(p, a)
137  #define TRACE_VERBOSE_EC_SCALAR(p, a, n) TRACE_EC_SCALAR(p, a, n)
138 #else
139  #define TRACE_VERBOSE(...)
140  #define TRACE_VERBOSE_ARRAY(p, a, n)
141  #define TRACE_VERBOSE_NET_BUFFER(p, b, o, n)
142  #define TRACE_VERBOSE_MPI(p, a)
143  #define TRACE_VERBOSE_EC_SCALAR(p, a, n)
144 #endif
145 
146 //C++ guard
147 #ifdef __cplusplus
148 extern "C" {
149 #endif
150 
151 //Debug related functions
152 void debugInit(uint32_t baudrate);
153 
154 void debugDisplayArray(FILE *stream,
155  const char_t *prepend, const void *data, size_t length);
156 
157 //Deprecated definitions
158 #define TRACE_LEVEL_NO_TRACE TRACE_LEVEL_OFF
159 
160 //C++ guard
161 #ifdef __cplusplus
162 }
163 #endif
164 
165 #endif
uint8_t data[]
Definition: ethernet.h:222
void debugDisplayArray(FILE *stream, const char_t *prepend, const void *data, size_t length)
Display the contents of an array.
Definition: debug.c:41
void debugInit(uint32_t baudrate)
uint8_t length
Definition: tcp.h:375
char char_t
Definition: compiler_port.h:55
RTOS abstraction layer.