Home | History | Annotate | Download | only in inc
      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 (at) 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