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	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