/*
* Copyright 2001-2008 Texas Instruments - http://www.ti.com/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* ======== gt.h ========
* Purpose:
* There are two definitions that affect which portions of trace
* are acutally compiled into the client: GT_TRACE and GT_ASSERT. If
* GT_TRACE is set to 0 then all trace statements (except for assertions)
* will be compiled out of the client. If GT_ASSERT is set to 0 then
* assertions will be compiled out of the client. GT_ASSERT can not be
* set to 0 unless GT_TRACE is also set to 0 (i.e. GT_TRACE == 1 implies
* GT_ASSERT == 1).
*
*! Revision History
*! ================
*! 02-Feb-2000 rr: Renamed this file to gtce.h. GT CLASS and trace definitions
*! are WinCE Specific.
*! 03-Jan-1997 ge Replaced "GT_" prefix to GT_Config structure members
*! to eliminate preprocessor confusion with other macros.
*/
#ifndef GT_
#define GT_
#ifndef GT_TRACE
#define GT_TRACE 0 /* 0 = "trace compiled out"; 1 = "trace active" */
#endif
#if !defined(GT_ASSERT) || GT_TRACE
#define GT_ASSERT 1
#endif
struct GT_Config {
Fxn PRINTFXN;
Fxn PIDFXN;
Fxn TIDFXN;
Fxn ERRORFXN;
};
extern struct GT_Config *GT;
struct GT_Mask {
String modName;
SmBits *flags;
} ;
/*
* New GT Class defenitions.
*
* The following are the explanations and how it could be used in the code
*
* - GT_ENTER On Entry to Functions
*
* - GT_1CLASS Display level of debugging status- Object/Automatic
* variables
* - GT_2CLASS ---- do ----
*
* - GT_3CLASS ---- do ---- + It can be used(recommended) for debug
status in the ISR, IST
* - GT_4CLASS ---- do ----
*
* - GT_5CLASS Display entry for module init/exit functions
*
* - GT_6CLASS Warn whenever SERVICES function fails
*
* - GT_7CLASS Warn failure of Critical failures
*
*/
#define GT_ENTER ((SmBits)0x01)
#define GT_1CLASS ((SmBits)0x02)
#define GT_2CLASS ((SmBits)0x04)
#define GT_3CLASS ((SmBits)0x08)
#define GT_4CLASS ((SmBits)0x10)
#define GT_5CLASS ((SmBits)0x20)
#define GT_6CLASS ((SmBits)0x40)
#define GT_7CLASS ((SmBits)0x80)
#ifdef _LINT_
/* LINTLIBRARY */
/*
* ======== GT_assert ========
*/
/* ARGSUSED */
Void
GT_assert(struct GT_Mask mask, Int expr)
{
}
/*
* ======== GT_config ========
*/
/* ARGSUSED */
Void
GT_config(struct GT_Config config)
{
}
/*
* ======== GT_create ========
*/
/* ARGSUSED */
Void
GT_create(struct GT_Mask * mask /* OUT */ , String modName)
{
}
/*
* ======== GT_curLine ========
* Purpose:
* Returns the current source code line number. Is useful for performing
* branch testing using trace. For example,
*
* GT_1trace(curTrace, GT_1CLASS,
* "in module XX_mod, executing line %u\n", GT_curLine());
*/
/* ARGSUSED */
MdUns
GT_curLine(Void)
{
return ((MdUns) NULL);
}
/*
* ======== GT_exit ========
*/
/* ARGSUSED */
Void
GT_exit(Void)
{
}
/*
* ======== GT_init ========
*/
/* ARGSUSED */
Void
GT_init(Void)
{
}
/*
* ======== GT_query ========
*/
/* ARGSUSED */
bool
GT_query(struct GT_Mask mask, SmBits class)
{
return (false);
}
/*
* ======== GT_set ========
* sets trace mask according to settings
*/
/* ARGSUSED */
Void
GT_set(String settings)
{
}
/*
* ======== GT_setprintf ========
* sets printf function
*/
/* ARGSUSED */
Void
GT_setprintf(Fxn fxn)
{
}
/* ARGSUSED */
Void
GT_0trace(struct GT_Mask mask, SmBits class, String format)
{
}
/* ARGSUSED */
Void
GT_1trace(struct GT_Mask mask, SmBits class, String format, ...)
{
}
/* ARGSUSED */
Void
GT_2trace(struct GT_Mask mask, SmBits class, String format, ...)
{
}
/* ARGSUSED */
Void
GT_3trace(struct GT_Mask mask, SmBits class, String format, ...)
{
}
/* ARGSUSED */
Void
GT_4trace(struct GT_Mask mask, SmBits class, String format, ...)
{
}
/* ARGSUSED */
Void
GT_5trace(struct GT_Mask mask, SmBits class, String format, ...)
{
}
/* ARGSUSED */
Void
GT_6trace(struct GT_Mask mask, SmBits class, String format, ...)
{
}
#else
#define GT_BOUND 26 /* 26 letters in alphabet */
extern Void _GT_create(struct GT_Mask * mask, String modName);
#define GT_exit()
extern Void GT_init(Void);
extern Void _GT_set(String str);
extern Int _GT_trace(struct GT_Mask * mask, String format, ...);
#if GT_ASSERT == 0
#define GT_assert( mask, expr )
#define GT_config( config )
#define GT_configInit( config )
#define GT_seterror( fxn )
#else
extern struct GT_Config _GT_params;
#define GT_assert( mask, expr ) \
(!(expr) ? \
(*GT->ERRORFXN)("assertion violation: %s, line %d\n", \
__FILE__, __LINE__), NULL : NULL)
#define GT_config( config ) (_GT_params = *(config))
#define GT_configInit( config ) (*(config) = _GT_params)
#define GT_seterror( fxn ) (_GT_params.ERRORFXN = (Fxn)(fxn))
#endif
#if GT_TRACE == 0
#define GT_curLine() ((MdUns)__LINE__)
#define GT_create(mask, modName)
#define GT_exit()
#define GT_init()
#define GT_set( settings )
#define GT_setprintf( fxn )
#define GT_query( mask, class ) false
#define GT_0trace( mask, class, format )
#define GT_1trace( mask, class, format, arg1 )
#define GT_2trace( mask, class, format, arg1, arg2 )
#define GT_3trace( mask, class, format, arg1, arg2, arg3 )
#define GT_4trace( mask, class, format, arg1, arg2, arg3, arg4 )
#define GT_5trace( mask, class, format, arg1, arg2, arg3, arg4, arg5 )
#define GT_6trace( mask, class, format, arg1, arg2, arg3, arg4, arg5, arg6 )
#else /* GT_TRACE == 1 */
extern String GT_format;
extern SmBits *GT_tMask[GT_BOUND];
#define GT_create(mask, modName) _GT_create((mask), (modName))
#define GT_curLine() ((MdUns)__LINE__)
#define GT_set( settings ) _GT_set( settings )
#define GT_setprintf( fxn ) (_GT_params.PRINTFXN = (Fxn)(fxn))
#define GT_query( mask, class ) ((*(mask).flags & (class)))
#define GT_0trace( mask, class, format ) \
((*(mask).flags & (class)) ? \
_GT_trace(&(mask), (format)) : 0)
#define GT_1trace( mask, class, format, arg1 ) \
((*(mask).flags & (class)) ? \
_GT_trace(&(mask), (format), (arg1)) : 0)
#define GT_2trace( mask, class, format, arg1, arg2 ) \
((*(mask).flags & (class)) ? \
_GT_trace(&(mask), (format), (arg1), (arg2)) : 0)
#define GT_3trace( mask, class, format, arg1, arg2, arg3 ) \
((*(mask).flags & (class)) ? \
_GT_trace(&(mask), (format), (arg1), (arg2), (arg3)) : 0)
#define GT_4trace( mask, class, format, arg1, arg2, arg3, arg4 ) \
((*(mask).flags & (class)) ? \
_GT_trace(&(mask), (format), (arg1), (arg2), (arg3), (arg4)) : 0)
#define GT_5trace( mask, class, format, arg1, arg2, arg3, arg4, arg5 ) \
((*(mask).flags & (class)) ? \
_GT_trace(&(mask), (format), (arg1), (arg2), (arg3), (arg4), (arg5)) : 0)
#define GT_6trace( mask, class, format, arg1, arg2, arg3, arg4, arg5, arg6 ) \
((*(mask).flags & (class)) ? \
_GT_trace(&(mask), (format), (arg1), (arg2), (arg3), (arg4), (arg5), \
(arg6)) : 0)
#endif /* GT_TRACE */
#endif /* _LINT_ */
#endif /* GTCE_ */