1/*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16/**
17 ************************************************************************
18 * @file         M4OSA_Debug.h
19 * @brief        Debug and Trace Macro
20 ************************************************************************
21*/
22
23
24#ifndef _M4OSA_DEBUG_H_
25#define _M4OSA_DEBUG_H_
26
27#include "M4OSA_Error.h"
28#include "M4OSA_Types.h"
29
30
31/* defaut value, defined only if not defined already. */
32#ifndef M4TRACE_ID
33#define M4TRACE_ID M4UNKNOWN_COREID
34#endif /* M4TRACE_ID undefined */
35
36
37#define M4OSA_SUPER_DEBUG_LEVEL 0
38
39#ifndef M4OSA_DEBUG_LEVEL
40#define M4OSA_DEBUG_LEVEL       0
41#endif
42
43
44#define M4OSA_SUPER_TRACE_LEVEL 0
45
46#ifndef M4OSA_TRACE_LEVEL
47#define M4OSA_TRACE_LEVEL       0
48#endif
49
50#ifdef __cplusplus
51extern "C"
52{
53#endif
54
55
56#if (M4OSA_DEBUG_LEVEL >= 1) || (M4OSA_SUPER_DEBUG_LEVEL >= 1)
57
58/* Debug macros */
59extern M4OSA_Void M4OSA_DEBUG_traceFunction(M4OSA_UInt32 line,
60                                            M4OSA_Char* fileName,
61                                            M4OSA_UInt32 level,
62                                            M4OSA_Char* stringCondition,
63                                            M4OSA_Char* message,
64                                            M4OSA_ERR returnedError);
65
66
67#define M4OSA_DEBUG_IFx(cond, errorCode, msg, level)\
68      if(cond)\
69      {\
70         M4OSA_DEBUG_traceFunction(__LINE__, (M4OSA_Char*)__FILE__, level,\
71                                   (M4OSA_Char*)#cond, (M4OSA_Char*)msg,
72                                   (errorCode));\
73         return(errorCode);\
74      }
75
76#define M4OSA_DEBUG(errorCode, msg)\
77         M4OSA_DEBUG_traceFunction(__LINE__, (M4OSA_Char*)__FILE__, 1,\
78                                   (M4OSA_Char*)#errorCode, (M4OSA_Char*)msg,
79                                   (errorCode));
80
81#else /*(M4OSA_DEBUG_LEVEL >= 1) || (M4OSA_SUPER_DEBUG_LEVEL >= 1)*/
82
83
84#define M4OSA_DEBUG(errorCode, msg)
85
86#endif /*(M4OSA_DEBUG_LEVEL >= 1) || (M4OSA_SUPER_DEBUG_LEVEL >= 1)*/
87
88
89
90#if (M4OSA_DEBUG_LEVEL >= 1) || (M4OSA_SUPER_DEBUG_LEVEL >= 1)
91 #define M4OSA_DEBUG_IF1(cond, errorCode, msg)\
92         M4OSA_DEBUG_IFx(cond, errorCode, msg, 1)
93#else
94 #define M4OSA_DEBUG_IF1(cond, errorCode, msg)
95#endif /*(M4OSA_DEBUG_LEVEL >= 1) || (M4OSA_SUPER_DEBUG_LEVEL >= 1)*/
96
97
98#if (M4OSA_DEBUG_LEVEL >= 2) || (M4OSA_SUPER_DEBUG_LEVEL >= 2)
99 #define M4OSA_DEBUG_IF2(cond, errorCode, msg)\
100         M4OSA_DEBUG_IFx(cond, errorCode, msg, 2)
101#else
102 #define M4OSA_DEBUG_IF2(cond, errorCode, msg)
103#endif /*(M4OSA_DEBUG_LEVEL >= 2) || (M4OSA_SUPER_DEBUG_LEVEL >= 2)*/
104
105
106#if (M4OSA_DEBUG_LEVEL >= 3) || (M4OSA_SUPER_DEBUG_LEVEL >= 3)
107 #define M4OSA_DEBUG_IF3(cond, errorCode, msg)\
108         M4OSA_DEBUG_IFx(cond, errorCode, msg, 3)
109#else
110 #define M4OSA_DEBUG_IF3(cond, errorCode, msg)
111#endif /*(M4OSA_DEBUG_LEVEL >= 3) || (M4OSA_SUPER_DEBUG_LEVEL >= 3)*/
112
113
114
115/* Trace macros */
116
117#if (M4OSA_TRACE_LEVEL >= 1) || (M4OSA_SUPER_TRACE_LEVEL >= 1)
118
119extern M4OSA_Void M4OSA_TRACE_traceFunction(M4OSA_UInt32 line,
120                                            M4OSA_Char* fileName,
121                                            M4OSA_CoreID coreID,
122                                            M4OSA_UInt32 level,
123                                            M4OSA_Char* stringMsg,
124                                            ... );
125
126
127
128#define M4OSA_TRACEx_0(msg, level)\
129      M4OSA_TRACE_traceFunction(__LINE__, (M4OSA_Char*)__FILE__,\
130                             (M4OSA_CoreID)M4TRACE_ID, level, (M4OSA_Char*)msg);
131
132
133#define M4OSA_TRACEx_1(msg, param1, level)\
134      M4OSA_TRACE_traceFunction(__LINE__, (M4OSA_Char*)__FILE__,\
135                     (M4OSA_CoreID)M4TRACE_ID, level, (M4OSA_Char*)msg, param1);
136
137
138#define M4OSA_TRACEx_2(msg, param1, param2, level)\
139      M4OSA_TRACE_traceFunction(__LINE__, (M4OSA_Char*)__FILE__,\
140                                (M4OSA_CoreID)M4TRACE_ID, level,\
141                                (M4OSA_Char*)msg, param1,\
142                                param2);
143
144
145#define M4OSA_TRACEx_3(msg, param1, param2, param3, level)\
146      M4OSA_TRACE_traceFunction(__LINE__, (M4OSA_Char*)__FILE__,\
147                                (M4OSA_CoreID)M4TRACE_ID, level, (M4OSA_Char*)msg,\
148                                param1,param2, param3);
149
150
151#define M4OSA_TRACEx_4(msg, param1, param2, param3, param4, level)\
152      M4OSA_TRACE_traceFunction(__LINE__, (M4OSA_Char*)__FILE__,\
153                                (M4OSA_CoreID)M4TRACE_ID, level,\
154                                (M4OSA_Char*)msg, param1,\
155                                param2, param3, param4);
156
157
158#define M4OSA_TRACEx_5(msg, param1, param2, param3, param4, param5, level)\
159      M4OSA_TRACE_traceFunction(__LINE__, (M4OSA_Char*)__FILE__,\
160                                (M4OSA_CoreID)M4TRACE_ID, level,\
161                                (M4OSA_Char*)msg, param1,\
162                                param2, param3, param4, param5);
163
164#endif /*(M4OSA_TRACE_LEVEL >= 1) || (M4OSA_SUPER_TRACE_LEVEL >= 1)*/
165
166
167
168#if (M4OSA_TRACE_LEVEL >= 1) || (M4OSA_SUPER_TRACE_LEVEL >= 1)
169#define M4OSA_TRACE1_0(msg)\
170        M4OSA_TRACEx_0(msg, 1)
171
172#define M4OSA_TRACE1_1(msg, param1)\
173        M4OSA_TRACEx_1(msg, param1, 1)
174
175#define M4OSA_TRACE1_2(msg, param1, param2)\
176        M4OSA_TRACEx_2(msg, param1, param2, 1)
177
178#define M4OSA_TRACE1_3(msg, param1, param2, param3)\
179        M4OSA_TRACEx_3(msg, param1, param2, param3, 1)
180
181#define M4OSA_TRACE1_4(msg, param1, param2, param3, param4)\
182        M4OSA_TRACEx_4(msg, param1, param2, param3, param4, 1)
183
184#define M4OSA_TRACE1_5(msg, param1, param2, param3, param4, param5)\
185        M4OSA_TRACEx_5(msg, param1, param2, param3, param4, param5, 1)
186
187#else /*(M4OSA_TRACE_LEVEL >= 1) || (M4OSA_SUPER_TRACE_LEVEL >= 1)*/
188
189#define M4OSA_TRACE1_0(msg)
190#define M4OSA_TRACE1_1(msg, param1)
191#define M4OSA_TRACE1_2(msg, param1, param2)
192#define M4OSA_TRACE1_3(msg, param1, param2, param3)
193#define M4OSA_TRACE1_4(msg, param1, param2, param3, param4)
194#define M4OSA_TRACE1_5(msg, param1, param2, param3, param4, param5)
195
196#endif /*(M4OSA_TRACE_LEVEL >= 1) || (M4OSA_SUPER_TRACE_LEVEL >= 1)*/
197
198
199#if (M4OSA_TRACE_LEVEL >= 2) || (M4OSA_SUPER_TRACE_LEVEL >= 2)
200#define M4OSA_TRACE2_0(msg)\
201        M4OSA_TRACEx_0(msg, 2)
202
203#define M4OSA_TRACE2_1(msg, param1)\
204        M4OSA_TRACEx_1(msg, param1, 2)
205
206#define M4OSA_TRACE2_2(msg, param1, param2)\
207        M4OSA_TRACEx_2(msg, param1, param2, 2)
208
209#define M4OSA_TRACE2_3(msg, param1, param2, param3)\
210        M4OSA_TRACEx_3(msg, param1, param2, param3, 2)
211
212#define M4OSA_TRACE2_4(msg, param1, param2, param3, param4)\
213        M4OSA_TRACEx_4(msg, param1, param2, param3, param4, 2)
214
215#define M4OSA_TRACE2_5(msg, param1, param2, param3, param4, param5)\
216        M4OSA_TRACEx_5(msg, param1, param2, param3, param4, param5, 2)
217
218#else /*(M4OSA_TRACE_LEVEL >= 2) || (M4OSA_SUPER_TRACE_LEVEL >= 2)*/
219
220#define M4OSA_TRACE2_0(msg)
221#define M4OSA_TRACE2_1(msg, param1)
222#define M4OSA_TRACE2_2(msg, param1, param2)
223#define M4OSA_TRACE2_3(msg, param1, param2, param3)
224#define M4OSA_TRACE2_4(msg, param1, param2, param3, param4)
225#define M4OSA_TRACE2_5(msg, param1, param2, param3, param4, param5)
226#endif /*(M4OSA_TRACE_LEVEL >= 2) || (M4OSA_SUPER_TRACE_LEVEL >= 2)*/
227
228
229#if (M4OSA_TRACE_LEVEL >= 3) || (M4OSA_SUPER_TRACE_LEVEL >= 3)
230#define M4OSA_TRACE3_0(msg)\
231        M4OSA_TRACEx_0(msg, 3)
232
233#define M4OSA_TRACE3_1(msg, param1)\
234        M4OSA_TRACEx_1(msg, param1, 3)
235
236#define M4OSA_TRACE3_2(msg, param1, param2)\
237        M4OSA_TRACEx_2(msg, param1, param2, 3)
238
239#define M4OSA_TRACE3_3(msg, param1, param2, param3)\
240        M4OSA_TRACEx_3(msg, param1, param2, param3, 3)
241
242#define M4OSA_TRACE3_4(msg, param1, param2, param3, param4)\
243        M4OSA_TRACEx_4(msg, param1, param2, param3, param4, 3)
244
245#define M4OSA_TRACE3_5(msg, param1, param2, param3, param4, param5)\
246        M4OSA_TRACEx_5(msg, param1, param2, param3, param4, param5, 3)
247
248#else /*(M4OSA_TRACE_LEVEL >= 3) || (M4OSA_SUPER_TRACE_LEVEL >= 3)*/
249
250#define M4OSA_TRACE3_0(msg)
251#define M4OSA_TRACE3_1(msg, param1)
252#define M4OSA_TRACE3_2(msg, param1, param2)
253#define M4OSA_TRACE3_3(msg, param1, param2, param3)
254#define M4OSA_TRACE3_4(msg, param1, param2, param3, param4)
255#define M4OSA_TRACE3_5(msg, param1, param2, param3, param4, param5)
256
257#endif /*(M4OSA_TRACE_LEVEL >= 3) || (M4OSA_SUPER_TRACE_LEVEL >= 3)*/
258
259
260
261#ifdef __cplusplus
262}
263#endif
264
265#endif /* _M4OSA_DEBUG_H_ */
266
267