1/*
2 *  Copyright 2001-2008 Texas Instruments - http://www.ti.com/
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/*
19 *  ======== gt.h ========
20 *  Purpose:
21 *      There are two definitions that affect which portions of trace
22 *      are acutally compiled into the client: GT_TRACE and GT_ASSERT. If
23 *      GT_TRACE is set to 0 then all trace statements (except for assertions)
24 *      will be compiled out of the client. If GT_ASSERT is set to 0 then
25 *      assertions will be compiled out of the client. GT_ASSERT can not be
26 *      set to 0 unless GT_TRACE is also set to 0 (i.e. GT_TRACE == 1 implies
27 *      GT_ASSERT == 1).
28 *
29 *! Revision History
30 *! ================
31 *! 02-Feb-2000 rr: Renamed this file to gtce.h. GT CLASS and trace definitions
32 *!                 are WinCE Specific.
33 *! 03-Jan-1997	ge	Replaced "GT_" prefix to GT_Config structure members
34 *!                 to eliminate preprocessor confusion with other macros.
35 */
36
37#ifndef GT_
38#define GT_
39
40#ifndef GT_TRACE
41#define GT_TRACE 0		/* 0 = "trace compiled out"; 1 = "trace active" */
42#endif
43
44#if !defined(GT_ASSERT) || GT_TRACE
45#define GT_ASSERT 1
46#endif
47
48struct GT_Config {
49	Fxn PRINTFXN;
50	Fxn PIDFXN;
51	Fxn TIDFXN;
52	Fxn ERRORFXN;
53};
54
55extern struct GT_Config *GT;
56
57struct GT_Mask {
58	String modName;
59	SmBits *flags;
60} ;
61
62/*
63 *  New GT Class defenitions.
64 *
65 *  The following are the explanations and how it could be used in the code
66 *
67 *  -   GT_ENTER    On Entry to Functions
68 *
69 *  -   GT_1CLASS   Display level of debugging status- Object/Automatic
70 *                  variables
71 *  -   GT_2CLASS   ---- do ----
72 *
73 *  -   GT_3CLASS   ---- do ---- + It can be used(recommended) for debug
74                    status in the ISR, IST
75 *  -   GT_4CLASS   ---- do ----
76 *
77 *  -   GT_5CLASS   Display entry for module init/exit functions
78 *
79 *  -   GT_6CLASS   Warn whenever SERVICES function fails
80 *
81 *  -   GT_7CLASS   Warn failure of Critical failures
82 *
83 */
84
85#define GT_ENTER	((SmBits)0x01)
86#define GT_1CLASS	((SmBits)0x02)
87#define GT_2CLASS	((SmBits)0x04)
88#define GT_3CLASS	((SmBits)0x08)
89#define GT_4CLASS	((SmBits)0x10)
90#define GT_5CLASS	((SmBits)0x20)
91#define GT_6CLASS	((SmBits)0x40)
92#define GT_7CLASS	((SmBits)0x80)
93
94#ifdef _LINT_
95
96/* LINTLIBRARY */
97
98/*
99 *  ======== GT_assert ========
100 */
101/* ARGSUSED */
102Void
103GT_assert(struct GT_Mask mask, Int expr)
104{
105}
106
107/*
108 *  ======== GT_config ========
109 */
110/* ARGSUSED */
111Void
112GT_config(struct GT_Config config)
113{
114}
115
116/*
117 *  ======== GT_create ========
118 */
119/* ARGSUSED */
120Void
121GT_create(struct GT_Mask * mask /* OUT */ , String modName)
122{
123}
124
125/*
126 *  ======== GT_curLine ========
127 *  Purpose:
128 *      Returns the current source code line number. Is useful for performing
129 *      branch testing using trace.  For example,
130 *
131 *      GT_1trace(curTrace, GT_1CLASS,
132 *          "in module XX_mod, executing line %u\n", GT_curLine());
133 */
134/* ARGSUSED */
135MdUns
136GT_curLine(Void)
137{
138	return ((MdUns) NULL);
139}
140
141/*
142 *  ======== GT_exit ========
143 */
144/* ARGSUSED */
145Void
146GT_exit(Void)
147{
148}
149
150/*
151 *  ======== GT_init ========
152 */
153/* ARGSUSED */
154Void
155GT_init(Void)
156{
157}
158
159/*
160 *  ======== GT_query ========
161 */
162/* ARGSUSED */
163bool
164GT_query(struct GT_Mask mask, SmBits class)
165{
166	return (false);
167}
168
169/*
170 *  ======== GT_set ========
171 *  sets trace mask according to settings
172 */
173
174/* ARGSUSED */
175Void
176GT_set(String settings)
177{
178}
179
180/*
181 *  ======== GT_setprintf ========
182 *  sets printf function
183 */
184
185/* ARGSUSED */
186Void
187GT_setprintf(Fxn fxn)
188{
189}
190
191/* ARGSUSED */
192Void
193GT_0trace(struct GT_Mask mask, SmBits class, String format)
194{
195}
196
197/* ARGSUSED */
198Void
199GT_1trace(struct GT_Mask mask, SmBits class, String format, ...)
200{
201}
202
203/* ARGSUSED */
204Void
205GT_2trace(struct GT_Mask mask, SmBits class, String format, ...)
206{
207}
208
209/* ARGSUSED */
210Void
211GT_3trace(struct GT_Mask mask, SmBits class, String format, ...)
212{
213}
214
215/* ARGSUSED */
216Void
217GT_4trace(struct GT_Mask mask, SmBits class, String format, ...)
218{
219}
220
221/* ARGSUSED */
222Void
223GT_5trace(struct GT_Mask mask, SmBits class, String format, ...)
224{
225}
226
227/* ARGSUSED */
228Void
229GT_6trace(struct GT_Mask mask, SmBits class, String format, ...)
230{
231}
232
233#else
234
235#define	GT_BOUND    26		/* 26 letters in alphabet */
236
237extern Void _GT_create(struct GT_Mask * mask, String modName);
238
239#define GT_exit()
240
241extern Void GT_init(Void);
242extern Void _GT_set(String str);
243extern Int _GT_trace(struct GT_Mask * mask, String format, ...);
244
245#if GT_ASSERT == 0
246
247#define GT_assert( mask, expr )
248#define GT_config( config )
249#define GT_configInit( config )
250#define GT_seterror( fxn )
251
252#else
253
254extern struct GT_Config _GT_params;
255
256#define GT_assert( mask, expr ) \
257	(!(expr) ? \
258	    (*GT->ERRORFXN)("assertion violation: %s, line %d\n", \
259			    __FILE__, __LINE__), NULL : NULL)
260
261#define GT_config( config )     (_GT_params = *(config))
262#define GT_configInit( config ) (*(config) = _GT_params)
263#define GT_seterror( fxn )      (_GT_params.ERRORFXN = (Fxn)(fxn))
264
265#endif
266
267#if GT_TRACE == 0
268
269#define GT_curLine()                ((MdUns)__LINE__)
270#define GT_create(mask, modName)
271#define GT_exit()
272#define GT_init()
273#define GT_set( settings )
274#define GT_setprintf( fxn )
275
276#define GT_query( mask, class )     false
277
278#define GT_0trace( mask, class, format )
279#define GT_1trace( mask, class, format, arg1 )
280#define GT_2trace( mask, class, format, arg1, arg2 )
281#define GT_3trace( mask, class, format, arg1, arg2, arg3 )
282#define GT_4trace( mask, class, format, arg1, arg2, arg3, arg4 )
283#define GT_5trace( mask, class, format, arg1, arg2, arg3, arg4, arg5 )
284#define GT_6trace( mask, class, format, arg1, arg2, arg3, arg4, arg5, arg6 )
285
286#else				/* GT_TRACE == 1 */
287
288extern String GT_format;
289extern SmBits *GT_tMask[GT_BOUND];
290
291#define GT_create(mask, modName)    _GT_create((mask), (modName))
292#define GT_curLine()                ((MdUns)__LINE__)
293#define GT_set( settings )          _GT_set( settings )
294#define GT_setprintf( fxn )         (_GT_params.PRINTFXN = (Fxn)(fxn))
295
296#define GT_query( mask, class ) ((*(mask).flags & (class)))
297
298#define GT_0trace( mask, class, format ) \
299    ((*(mask).flags & (class)) ? \
300    _GT_trace(&(mask), (format)) : 0)
301
302#define GT_1trace( mask, class, format, arg1 ) \
303    ((*(mask).flags & (class)) ? \
304    _GT_trace(&(mask), (format), (arg1)) : 0)
305
306#define GT_2trace( mask, class, format, arg1, arg2 ) \
307    ((*(mask).flags & (class)) ? \
308    _GT_trace(&(mask), (format), (arg1), (arg2)) : 0)
309
310#define GT_3trace( mask, class, format, arg1, arg2, arg3 ) \
311    ((*(mask).flags & (class)) ? \
312    _GT_trace(&(mask), (format), (arg1), (arg2), (arg3)) : 0)
313
314#define GT_4trace( mask, class, format, arg1, arg2, arg3, arg4 ) \
315    ((*(mask).flags & (class)) ? \
316    _GT_trace(&(mask), (format), (arg1), (arg2), (arg3), (arg4)) : 0)
317
318#define GT_5trace( mask, class, format, arg1, arg2, arg3, arg4, arg5 ) \
319    ((*(mask).flags & (class)) ? \
320    _GT_trace(&(mask), (format), (arg1), (arg2), (arg3), (arg4), (arg5)) : 0)
321
322#define GT_6trace( mask, class, format, arg1, arg2, arg3, arg4, arg5, arg6 ) \
323    ((*(mask).flags & (class)) ? \
324    _GT_trace(&(mask), (format), (arg1), (arg2), (arg3), (arg4), (arg5), \
325	(arg6)) : 0)
326
327#endif				/* GT_TRACE */
328
329#endif				/* _LINT_ */
330
331#endif				/* GTCE_ */
332
333