• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
51 extern "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 	typedef enum TIMM_OSAL_TRACE_LEVEL_TYPE
78 	{
79 		TIMM_OSAL_TRACE_LEVEL_ERROR = 1,
80 		TIMM_OSAL_TRACE_LEVEL_WARNING = 2,
81 		TIMM_OSAL_TRACE_LEVEL_PROFILING = 3,
82 		TIMM_OSAL_TRACE_LEVEL_INFO = 4,
83 		TIMM_OSAL_TRACE_LEVEL_DEBUG = 5,
84 		TIMM_OSAL_TRACE_LEVEL_ENTERING = 6,
85 		TIMM_OSAL_TRACE_LEVEL_EXITING = TIMM_OSAL_TRACE_LEVEL_ENTERING
86 	} TIMM_OSAL_TRACE_LEVEL;
87 
88 
89 /**
90 * The OSAL debug trace level can be set at runtime by defining the environment
91 * variable TIMM_OSAL_DEBUG_TRACE_LEVEL=<Level>.  The default level is 1
92 * The debug levels are:
93 * Level 0 - No trace
94 * Level 1 - Error   [Errors]
95 * Level 2 - Warning [Warnings that are useful to know about]
96 * Level 3 - Profiling [performance analysis trace that must not impact use case perf]
97 * Level 4 - Info    [General information]
98 * Level 5 - Debug   [most-commonly used statement for us developers]
99 * Level 6 - Trace   ["ENTERING <function>" and "EXITING <function>" statements]
100 *
101 * Example: if TIMM_OSAL_DEBUG_TRACE_LEVEL=3, then level 1,2 and 3 traces messages
102 * are enabled.
103 */
104 
105 /**
106  * Information about the trace location/type, passed as a single pointer to
107  * internal trace function.  Not part of the public API
108  */
109 	typedef struct
110 	{
111 		const char *file;
112 		const char *function;
113 		const int line;
114 		const short level;
115 		const short tracegrp;	/* TIMM_OSAL_TRACEGRP */
116 	} __TIMM_OSAL_TRACE_LOCATION;
117 
118 
119 /**
120  * Trace level update function.  Updates trace level if env variable
121  * or Android property is set. Env variable has precedence over it
122  */
123 	void TIMM_OSAL_UpdateTraceLevel(void);
124 
125 /**
126  * Trace implementation function.  Not part of public API.  Default
127  * implementation uses printf(), but you can use LD_PRELOAD to plug in
128  * alternative trace system at runtime.
129  */
130 	void __TIMM_OSAL_TraceFunction(const __TIMM_OSAL_TRACE_LOCATION * loc,
131 	    const char *fmt, ...);
132 
133 /**
134  * Internal trace macro.  Not part of public API.
135  */
136 #define __TIMM_OSAL_Trace(level, tracegrp, fmt, ...)                          \
137     do {                                                                      \
138         static const __TIMM_OSAL_TRACE_LOCATION loc = {                       \
139                 __FILE__, __FUNCTION__, __LINE__, (level), (tracegrp)         \
140         };                                                                    \
141         __TIMM_OSAL_TraceFunction(&loc, fmt"\n", ##__VA_ARGS__);              \
142     } while(0)
143 
144 /**
145 * TIMM_OSAL_Error() -- Fatal errors
146 */
147 #define TIMM_OSAL_Error(fmt,...)  TIMM_OSAL_ErrorExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
148 
149 /**
150 * TIMM_OSAL_Warning() -- Warnings that are useful to know about
151 */
152 #define TIMM_OSAL_Warning(fmt,...)  TIMM_OSAL_WarningExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
153 
154 /**
155 * TIMM_OSAL_Profiling() -- performance analysis trace that must not impact use case perf]
156 */
157 #define TIMM_OSAL_Profiling(fmt,...)  TIMM_OSAL_ProfilingExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
158 
159 /**
160 * TIMM_OSAL_Info() -- general information
161 */
162 #define TIMM_OSAL_Info(fmt,...)  TIMM_OSAL_InfoExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
163 
164 /**
165 * TIMM_OSAL_Debug() -- debug traces, most-commonly useful for developers
166 */
167 #define TIMM_OSAL_Debug(fmt,...)  TIMM_OSAL_DebugExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
168 
169 /**
170 * TIMM_OSAL_Entering() -- "ENTERING <function>" statements
171 * TIMM_OSAL_Exiting()  -- "EXITING <function>" statements
172 */
173 #define TIMM_OSAL_Entering(fmt,...)  TIMM_OSAL_EnteringExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
174 #define TIMM_OSAL_Exiting(fmt,...)  TIMM_OSAL_ExitingExt(TIMM_OSAL_TRACEGRP_SYSTEM, fmt, ##__VA_ARGS__)
175 
176 /*******************************************************************************
177 ** New Trace to be used by Applications
178 *******************************************************************************/
179 
180 /**
181 * TIMM_OSAL_ErrorExt() -- Fatal errors
182 */
183 #define TIMM_OSAL_ErrorExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(TIMM_OSAL_TRACE_LEVEL_ERROR, tracegrp, "ERROR: "fmt, ##__VA_ARGS__)
184 
185 /**
186 * TIMM_OSAL_WarningExt() -- Warnings that are useful to know about
187 */
188 #define TIMM_OSAL_WarningExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(TIMM_OSAL_TRACE_LEVEL_WARNING, tracegrp, "WARNING: "fmt, ##__VA_ARGS__)
189 
190 /**
191 * TIMM_OSAL_ProfilingExt() -- performance analysis trace that must not impact use case perf]
192 */
193 #define TIMM_OSAL_ProfilingExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(TIMM_OSAL_TRACE_LEVEL_PROFILING, tracegrp, "PROFILING: "fmt, ##__VA_ARGS__)
194 
195 /**
196 * TIMM_OSAL_InfoExt() -- general information
197 */
198 #define TIMM_OSAL_InfoExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(TIMM_OSAL_TRACE_LEVEL_INFO, tracegrp, "INFO: "fmt, ##__VA_ARGS__)
199 
200 /**
201 * TIMM_OSAL_DebugExt() -- most-commonly used statement for us developers
202 */
203 #define TIMM_OSAL_DebugExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(TIMM_OSAL_TRACE_LEVEL_DEBUG, tracegrp, "TRACE: "fmt, ##__VA_ARGS__)
204 
205 /**
206 * TIMM_OSAL_EnteringExt() -- "ENTERING <function>" statements
207 * TIMM_OSAL_ExitingExt()  -- "EXITING <function>" statements
208 */
209 #define TIMM_OSAL_EnteringExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(TIMM_OSAL_TRACE_LEVEL_ENTERING, tracegrp, "ENTER: "fmt, ##__VA_ARGS__)
210 #define TIMM_OSAL_ExitingExt(tracegrp, fmt, ...)  __TIMM_OSAL_Trace(TIMM_OSAL_TRACE_LEVEL_EXITING, tracegrp, "EXIT: "fmt, ##__VA_ARGS__)
211 
212 
213 #ifdef __cplusplus
214 }
215 #endif				/* __cplusplus */
216 
217 #endif				/* _TIMM_OSAL_TRACES_H_ */
218