1/*
2 * Copyright (c) 2010, Texas Instruments Incorporated
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * *  Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 *
12 * *  Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * *  Neither the name of Texas Instruments Incorporated nor the names of
17 *    its contributors may be used to endorse or promote products derived
18 *    from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33/*
34*  @file timm_osal_trace.h
35*  The timm_osal_types header file defines the primative osal type definitions.
36*  @path
37*
38*/
39/* -------------------------------------------------------------------------- */
40/* =========================================================================
41 *!
42 *! Revision History
43 *! ===================================
44 *! 0.1: Created the first draft version, ksrini@ti.com
45 * ========================================================================= */
46
47#ifndef _TIMM_OSAL_TRACES_H_
48#define _TIMM_OSAL_TRACES_H_
49
50#ifdef __cplusplus
51extern "C"
52{
53#endif				/* __cplusplus */
54
55/*******************************************************************************
56* Traces
57*******************************************************************************/
58
59
60/******************************************************************************
61* Debug Trace defines
62******************************************************************************/
63
64	typedef enum TIMM_OSAL_TRACEGRP_TYPE
65	{
66		TIMM_OSAL_TRACEGRP_SYSTEM = 1,
67		TIMM_OSAL_TRACEGRP_OMXBASE = (1 << 1),
68		TIMM_OSAL_TRACEGRP_DOMX = (1 << 2),
69		TIMM_OSAL_TRACEGRP_OMXVIDEOENC = (1 << 3),
70		TIMM_OSAL_TRACEGRP_OMXVIDEODEC = (1 << 4),
71		TIMM_OSAL_TRACEGRP_OMXCAM = (1 << 5),
72		TIMM_OSAL_TRACEGRP_OMXIMGDEC = (1 << 6),
73		TIMM_OSAL_TRACEGRP_DRIVERS = (1 << 7),
74		TIMM_OSAL_TRACEGRP_SIMCOPALGOS = (1 << 8)
75	} TIMM_OSAL_TRACEGRP;
76
77
78/**
79* The OSAL debug trace level can be set at runtime by defining the environment
80* variable TIMM_OSAL_DEBUG_TRACE_LEVEL=<Level>.  The default level is 1
81* The debug levels are:
82* Level 0 - No trace
83* Level 1 - Error   [Errors]
84* Level 2 - Warning [Warnings that are useful to know about]
85* Level 3 - Info    [General information]
86* Level 4 - Debug   [most-commonly used statement for us developers]
87* Level 5 - Trace   ["ENTERING <function>" and "EXITING <function>" statements]
88*
89* Example: if TIMM_OSAL_DEBUG_TRACE_LEVEL=3, then level 1,2 and 3 traces messages
90* are enabled.
91*/
92
93/**
94 * Information about the trace location/type, passed as a single pointer to
95 * internal trace function.  Not part of the public API
96 */
97	typedef struct
98	{
99		const char *file;
100		const char *function;
101		const int line;
102		const short level;
103		const short tracegrp;	/* TIMM_OSAL_TRACEGRP */
104	} __TIMM_OSAL_TRACE_LOCATION;
105
106/**
107 * Trace implementation function.  Not part of public API.  Default
108 * implementation uses printf(), but you can use LD_PRELOAD to plug in
109 * alternative trace system at runtime.
110 */
111	void __TIMM_OSAL_TraceFunction(const __TIMM_OSAL_TRACE_LOCATION * loc,
112	    const char *fmt, ...);
113
114/**
115 * Internal trace macro.  Not part of public API.
116 */
117#define __TIMM_OSAL_Trace(level, tracegrp, fmt, ...)                          \
118    do {                                                                      \
119        static const __TIMM_OSAL_TRACE_LOCATION loc = {                       \
120                __FILE__, __FUNCTION__, __LINE__, (level), (tracegrp)         \
121        };                                                                    \
122        __TIMM_OSAL_TraceFunction(&loc, fmt"\n", ##__VA_ARGS__);              \
123    } while(0)
124
125/**
126* TIMM_OSAL_Error() -- Fatal errors
127*/
128#define TIMM_OSAL_Error(fmt,...)  TIMM_OSAL_ErrorExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
129
130/**
131* TIMM_OSAL_Warning() -- Warnings that are useful to know about
132*/
133#define TIMM_OSAL_Warning(fmt,...)  TIMM_OSAL_WarningExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
134
135/**
136* TIMM_OSAL_Info() -- general information
137*/
138#define TIMM_OSAL_Info(fmt,...)  TIMM_OSAL_InfoExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
139
140/**
141* TIMM_OSAL_Debug() -- debug traces, most-commonly useful for developers
142*/
143#define TIMM_OSAL_Debug(fmt,...)  TIMM_OSAL_DebugExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
144
145/**
146* TIMM_OSAL_Entering() -- "ENTERING <function>" statements
147* TIMM_OSAL_Exiting()  -- "EXITING <function>" statements
148*/
149#define TIMM_OSAL_Entering(fmt,...)  TIMM_OSAL_EnteringExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
150#define TIMM_OSAL_Exiting(fmt,...)  TIMM_OSAL_ExitingExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
151
152/*******************************************************************************
153** New Trace to be used by Applications
154*******************************************************************************/
155
156/**
157* TIMM_OSAL_ErrorExt() -- Fatal errors
158*/
159#define TIMM_OSAL_ErrorExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(1, tracegrp, "ERROR: "fmt, ##__VA_ARGS__)
160
161/**
162* TIMM_OSAL_WarningExt() -- Warnings that are useful to know about
163*/
164#define TIMM_OSAL_WarningExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(2, tracegrp, "WARNING: "fmt, ##__VA_ARGS__)
165
166/**
167* TIMM_OSAL_InfoExt() -- general information
168*/
169#define TIMM_OSAL_InfoExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(3, tracegrp, "INFO: "fmt, ##__VA_ARGS__)
170
171/**
172* TIMM_OSAL_DebugExt() -- most-commonly used statement for us developers
173*/
174#define TIMM_OSAL_DebugExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(4, tracegrp, "TRACE: "fmt, ##__VA_ARGS__)
175
176/**
177* TIMM_OSAL_EnteringExt() -- "ENTERING <function>" statements
178* TIMM_OSAL_ExitingExt()  -- "EXITING <function>" statements
179*/
180#define TIMM_OSAL_EnteringExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(5, tracegrp, "ENTER: "fmt, ##__VA_ARGS__)
181#define TIMM_OSAL_ExitingExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(5, tracegrp, "EXIT: "fmt, ##__VA_ARGS__)
182
183
184#ifdef __cplusplus
185}
186#endif				/* __cplusplus */
187
188#endif				/* _TIMM_OSAL_TRACES_H_ */
189