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