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