1 /* ==================================================================== 2 * Texas Instruments OMAP(TM) Platform Software 3 * (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 4 * 5 * Use of this software is controlled by the terms and conditions found 6 * in the license agreement under which this software has been supplied. 7 * ==================================================================== */ 8 #ifndef OMX_DEBUG_H 9 #define OMX_DEBUG_H 10 11 #include "OMX_DebugMem.h" 12 13 #define OMX_NO_MESSAGES 0x00000000 14 #define OMX_ALL_MESSAGES 0xffff0000 15 16 #define OMX_MASK_FATAL 0x80000000 17 #define OMX_MASK_ERROR 0x40000000 18 #define OMX_MASK_WARN 0x20000000 19 #define OMX_MASK_INFO 0x10000000 20 #define OMX_MASK_DEBUG 0x08000000 21 #define OMX_MASK_TRACE 0x04000000 22 #define OMX_MASK_RESERVE1 0x02000000 23 #define OMX_MASK_RESERVE2 0x01000000 24 25 #define OMX_MASK_USERMASK 0x00FF0000 26 27 #define OMX_OPTION_FILE 0x00000001 28 #define OMX_OPTION_FUNC 0x00000002 29 #define OMX_OPTION_LINE 0x00000004 30 31 #define OMX_MASK_HANDLES 0x0000FFFF 32 33 34 35 /* 36 * ANSI escape sequences for outputing text in various colors 37 */ 38 #define DBG_TEXT_WHITE "\x1b[1;37;40m" 39 #define DBG_TEXT_YELLOW "\x1b[1;33;40m" 40 #define DBG_TEXT_MAGENTA "\x1b[1;35;40m" 41 #define DBG_TEXT_GREEN "\x1b[1;32;40m" 42 #define DBG_TEXT_CYAN "\x1b[1;36;40m" 43 #define DBG_TEXT_RED "\x1b[1;31;40m" 44 45 46 /* Setup log format (adds newline if no newline provided) */ 47 // do not use this one directly.... 48 #define OMX_LOG_PRINT(HANDLE, STR, ARG...) \ 49 (OMX_Log(HANDLE, __FILE__, __LINE__, __FUNCTION__, STR, ##ARG)) 50 51 #ifdef OMX_DEBUG 52 #define OMX_DPRINT(HANDLE, STR, ARG...) OMX_LOG_PRINT(OMX_MASK_DEBUG | HANDLE, STR, ##ARG) 53 #define OMX_TPRINT(HANDLE, STR, ARG...) OMX_LOG_PRINT(OMX_MASK_TRACE | HANDLE, STR, ##ARG) 54 #else 55 #define OMX_DPRINT(HANDLE, STR, ARG...) 56 #define OMX_TPRINT(HANDLE, STR, ARG...) 57 #endif 58 59 /* Later this will be able to be turned on/off separately as a trace */ 60 #define OMX_DENTER(handle) OMX_TPRINT((handle), "+++ENTERING") 61 #define OMX_DEXIT(handle,retVal) OMX_TPRINT((handle), "---EXITING(0x%x)", (retVal)) 62 63 #define OMX_DBG_INT(handle, intVar) OMX_DPRINT(OMX_MASK_DEBUG | (handle), #intVar ": %d", (intVar)) 64 #define OMX_DBG_PTR(handle, ptrVar) OMX_DPRINT(OMX_MASK_DEBUG | (handle), #ptrVar ": 0x%08x", (ptrVar)) 65 #define OMX_DBG_STR(handle, strVar) OMX_DPRINT(OMX_MASK_DEBUG | (handle), #strVar ": %s", (strVar)) 66 67 68 /* Error/warning printing defines to be used by all sub-components */ 69 #define OMX_INFOPRINT(handle, str,arg...) (OMX_LOG_PRINT(OMX_MASK_INFO | (handle), "(INFO) "str, ##arg)) 70 #define OMX_WARNPRINT(handle, str,arg...) (OMX_LOG_PRINT(OMX_MASK_WARN | (handle), "(WARN) "str, ##arg)) 71 #define OMX_ERRPRINT(handle, str,arg...) (OMX_LOG_PRINT(OMX_MASK_ERROR | (handle), "(ERROR) "str, ##arg)) 72 #define OMX_FATALPRINT(handle, str,arg...) (OMX_LOG_PRINT(OMX_MASK_FATAL | (handle), "(FATAL) "str, ##arg)) 73 74 /* assert macros */ 75 #ifdef OMX_DEBUG 76 #define OMX_ASSERT(COND) ((!(COND))?OMX_FATALPRINT(0,"OMX_ASSERT("#COND")"),abort():0) 77 #else 78 #define OMX_ASSERT(COND) 79 #endif 80 81 #define OMX_LOG_ADD_MASK(HANDLE,NEW_BITS) (OMX_Log_SetMask((HANDLE), OMX_Log_GetMask(HANDLE) | (NEW_BITS))) 82 #define OMX_LOG_CLEAR_MASK(HANDLE,NEW_BITS) (OMX_Log_SetMask((HANDLE), OMX_Log_GetMask(HANDLE) & ~(NEW_BITS))) 83 84 #define OMX_LOG_ADD_OPTIONS(HANDLE,NEW_BITS) (OMX_Log_SetOptions((HANDLE), OMX_Log_GetOptions(HANDLE) | (NEW_BITS))) 85 #define OMX_LOG_CLEAR_OPTIONS(HANDLE,NEW_BITS) (OMX_Log_SetOptions((HANDLE), OMX_Log_GetOptions(HANDLE) & ~(NEW_BITS))) 86 87 typedef unsigned int OMX_DBG_HANDLE; 88 89 OMX_DBG_HANDLE OMX_Log_GetDebugHandle(const char *description); 90 void OMX_Log_ReleaseDebugHandle(OMX_DBG_HANDLE hDebug); 91 unsigned int OMX_Log_GetMask(OMX_DBG_HANDLE hDebug); 92 unsigned int OMX_Log_SetMask(OMX_DBG_HANDLE hDebug, unsigned int uiNewMask); 93 94 unsigned int OMX_Log_GetOptions(OMX_DBG_HANDLE hDebug); 95 unsigned int OMX_Log_SetOptions(OMX_DBG_HANDLE hDebug, unsigned int uiNewOptions); 96 97 void OMX_Log(unsigned int mask, const char *szFileName, int iLineNum, 98 const char *szFunctionName, const char *strFormat, ...); 99 100 const char *OMX_GetErrorString(OMX_ERRORTYPE error); 101 102 OMX_ERRORTYPE OMX_Log_LoadConfigFile(char* szConfigFile); 103 104 105 /* 106 * The following macros are intended to make accessing a debug handle easier. 107 * 108 * For example, for the Util library, you would create a header file called 109 * OMX_Util_Private.h. This file will be included in all source files 110 * compiled into the Util library. The header file uses the 'define' macro 111 * to generate a prototype for the getDebugHandle() function: 112 * 113 * DEFINE_DEBUG_HANDLE_FN(UTIL); 114 * 115 * Now, in your private header file, define easier macros for printing: 116 * 117 * #define UTIL_DPRINT(str,args...) OMX_DPRINT(ACCESS_DEBUG_HANDLE(UTIL),str,##args) 118 * #define UTIL_WARNPRINT(str,args...) OMX_WARNPRINT(ACCESS_DEBUG_HANDLE(UTIL),str,##args) 119 * #define UTIL_ERRPRINT(str,args...) OMX_ERRPRINT(ACCESS_DEBUG_HANDLE(UTIL),str,##args) 120 * 121 * Finally, in a source file which will be compiled into the lib, for example 122 * OMX_Util_Private.c, you implement the function with the 'implement' macro: 123 * 124 * IMPLEMENT_DEBUG_HANDLE_FN(UTIL) 125 * 126 */ 127 #define DEFINE_DEBUG_HANDLE_FN(MOD) OMX_DBG_HANDLE getDebugHandle_##MOD(void); 128 129 #define ACCESS_DEBUG_HANDLE(MOD) getDebugHandle_##MOD() 130 131 #define IMPLMENT_DEBUG_HANDLE_FN(MOD) \ 132 OMX_DBG_HANDLE getDebugHandle_##MOD(void) \ 133 { \ 134 static OMX_DBG_HANDLE hDebug = 0; \ 135 if(!hDebug) { \ 136 hDebug = OMX_Log_GetDebugHandle(#MOD); \ 137 OMX_DPRINT(0,"Component "#MOD": hDebug %d",hDebug); \ 138 } \ 139 return hDebug; \ 140 } 141 142 143 144 #endif 145 146