1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details. 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================= 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Texas Instruments OMAP(TM) Platform Software 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* in the license agreement under which this software has been supplied. 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */ 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file OMX_TI_Debug.h 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements the TI-specific OMX Debug interface 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path $(CSLPATH)\inc 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 0.1 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------------- */ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ============================================================================= 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! ================================================================ 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 10-Mar-2009 lm: Revisions appear in reverse chronological order; 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! that is, newest first. The date format is dd-Mon-yyyy. 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */ 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_TI_DEBUG__H 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_TI_DEBUG__H 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <ctype.h> 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <utils/Log.h> 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin The OMX TI Debug interface allows debug messages to be classified by 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin domain and importance. There are no preset classifications required, but 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rather these are arbitrary. Nonetheless, all modules using this interface 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin must adhere to these domain and level conventions. 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin While it would make sense that errors should be printed at the highest 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin level, we separated errors into their own domain, as even error printing 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin could have additional details that are not always desirable to print. 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin In order to facilitate using the debug interface, a set of macros are 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin defined for the common domains and levels. 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Features of the TI Debug interface: 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin - debug messages are maskable: only messages for domains marked, and that 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin have levels at least of the mask's level will be printed 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin - there are two output files supported. Error domain output is going to 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin the error file, whereas other outputs usually go into the other output 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin file. This also allows only printing error messages. 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin - colors can be specified for each domain - through this file or the 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin macros 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin - line number information can be added (via a compile time option) 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Compile time flags: 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DEBUG__ - enable OMX Debug print calls 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_COLOR__ - enable color output 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_FN__ - print function 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_FILE__ - print file 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_LINE__ - print line number 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_LEVEL__ - print level 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_DOMAIN__ - print domain 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_4ISERROR__ - print level 4 messages into the error file 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __OMX_DBG_ANDROID__ - always outputs to Android log. Otherwise, Android 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin log is only used if output is stderr or stdout. 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Output format is: 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin file:function():line domain<level> message 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* You can change this file here to globally set the debug configurations 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __OMX_DEBUG__ 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef __OMX_DBG_COLOR__ 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef __OMX_DBG_FILE__ 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __OMX_DBG_FN__ 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __OMX_DBG_LINE__ 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef __OMX_DBG_DOMAIN__ 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef __OMX_DBG_LEVEL__ 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef __OMX_DBG_4ISERROR__ 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#undef __OMX_DBG_ANDROID__ 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX Debug levels specify the importance of the debug print 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 0 - very verbose -- any details, such as system return values, etc. 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 1 - quite verbose -- details 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2 - verbose -- main details 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 3 - normal -- what an average user would want to see 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 4 - quiet -- only important messages -- this would not be 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * normally used by OMX components except for error 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * messages as they don't output anything normally. 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This could be used by applications and tests. 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5 - very quiet -- crucial/error messages - goes to error file 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* this is used as a bitmask currently, so must be 2^n-1 */ 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_MAX_LEVEL 0x0F 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX Debug domains specify the system that the messages relate to 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_ERROR 0x1ul /* an error */ 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_PRINT 0x10ul /* generic prints */ 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_SYSTEM 0x100ul /* generic OS systems: memory, etc. */ 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_STATE 0x1000ul /* state transitions */ 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_BUFFER 0x10000ul /* buffer transfer between */ 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_DSP 0x100000ul /* DSP communication/transfer */ 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_COMM 0x1000000ul /* communication */ 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_DOM_MGR 0x10000000ul /* communication with managers */ 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_BASEMASK 0x33333333ul /* all domains at normal verbosity */ 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Generic DEBUG Settings 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstruct OMX_TI_Debug 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FILE *out; /* standard output file */ 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FILE *err; /* error output file - used for the error domain 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin and crucial messages */ 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FILE *out_opened; /* opened output file */ 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FILE *err_opened; /* opened error file */ 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 mask; /* debug mask */ 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}; 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * :TRICKY: do { } while (0) makes this behave like any other C function call 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * even though it contains several statements 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* This macro sets the debug mask in the debug structure based on a mask 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin string */ 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_SET_MASK(dbg, mask_str) \ 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (mask_str) { \ 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sscanf((mask_str), "%lx", &(dbg).mask); \ 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (strlen(mask_str) < 8) { \ 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).mask &= ~0ul >> (32 - 4 * strlen(mask_str)); \ 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).mask |= OMX_DBG_BASEMASK << (4 * strlen(mask_str)); \ 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { \ 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).mask = OMX_DBG_BASEMASK; \ 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* This macro initializes the debug structure. Default configuration is 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin stdout/stderr output and base mask. */ 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_INIT_BASE(dbg) \ 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).err = stderr; \ 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).out = stdout; \ 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).out_opened = (dbg).err_opened = NULL; \ 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).mask = OMX_DBG_BASEMASK; \ 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* This macro initializes the debug structure. Default configuration is 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin stdout/stderr output and base mask. If the OMX_DBG_CONFIG environment 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin variable is defined, the file given by this variable is opened and each line 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin is compared to the tag string followed by _OUT, _ERR or _LEVEL to specify 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin the output and error file names, or the debug level. If the debug level 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin string is less than 8 hexadecimal digits, the remaining domain mask levels 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin are set to the base mask (3). */ 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_INITALL(dbg, tag_str, file) \ 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).err = stderr; \ 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).out = stdout; \ 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).out_opened = (dbg).err_opened = NULL; \ 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).mask = OMX_DBG_BASEMASK; \ 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *config_file = getenv("OMX_DBG_CONFIG"); \ 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FILE *config = (config_file && *config_file) ? fopen(config_file, "rt") : NULL; \ 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (config) { \ 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char line[80], *ptr, *end, out[75], err[75]; \ 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin out[0] = err[0] = '\0'; \ 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (fgets(line, sizeof(line), config)) { \ 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (ptr = line; isspace(*ptr); ptr++); \ 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!strncmp(ptr, tag_str, strlen(tag_str))) { \ 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptr += strlen(tag_str); \ 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin end = ptr + strlen(ptr); \ 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (end > ptr && isspace(end[-1])) *--end = '\0'; \ 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (file && !strncmp(ptr, "_ERR", 4) && isspace(ptr[4])) { \ 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptr += 4; \ 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (isspace(*ptr)) ptr++; \ 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(err, ptr); \ 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if (file && !strncmp(ptr, "_OUT", 4) && isspace(ptr[4])) { \ 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptr += 4; \ 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (isspace(*ptr)) ptr++; \ 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy(out, ptr); \ 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if (!strncmp(ptr, "_LEVEL", 6) && isspace(ptr[6])) { \ 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptr += 6; \ 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (isspace(*ptr)) ptr++; \ 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_SET_MASK(dbg, ptr); \ 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (file) { \ 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!strcmp(out, "stdout")) {} \ 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (!strcmp(out, "stderr")) (dbg).out = stderr; \ 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (!strcmp(out, "null")) (dbg).out = NULL; \ 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (*out) (dbg).out_opened = (dbg).out = fopen(out, "w"); \ 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!strcmp(err, "stderr")) {} \ 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (!strcmp(err, "stdout")) (dbg).err = stdout; \ 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (!strcmp(err, "null")) (dbg).err = NULL; \ 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (!strcmp(err, out)) (dbg).err = (dbg).out; \ 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (*err) (dbg).err_opened = (dbg).err = fopen(err, "w"); \ 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fclose(config); \ 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_INIT(dbg, tag_str) OMX_DBG_INITALL(dbg, tag_str, 1) 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_INIT_MASK(dbg, tag_str) OMX_DBG_INITALL(dbg, tag_str, 0) 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Use this macro to copy a OMX_TI_Debug config received. */ 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_SETCONFIG(dbg, pConfig) \ 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct OMX_TI_Debug *pConfDbg = (struct OMX_TI_Debug *) pConfig; \ 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).mask = pConfDbg->mask; \ 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).out = pConfDbg->out; \ 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).err = pConfDbg->err; \ 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Use this macro to copy a OMX_TI_Debug config to be sent. */ 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_GETCONFIG(dbg, pConfig) \ 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct OMX_TI_Debug *pConfDbg = (struct OMX_TI_Debug *) pConfig; \ 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pConfDbg->mask = dbg.mask; \ 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pConfDbg->out = dbg.out; \ 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pConfDbg->err = dbg.err; \ 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pConfDbg->err_opened = pConfDbg->out_opened = NULL; \ 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Use this macro to close any opened file that was opened by OMX_DBG. */ 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_CLOSE(dbg) \ 262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((dbg).err_opened) { \ 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((dbg).err == (dbg).err_opened) (dbg).err = stderr; \ 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fclose((dbg).err_opened); \ 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((dbg).out_opened) { \ 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((dbg).out == (dbg).out_opened) (dbg).out = stdout; \ 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((dbg).err == (dbg).out_opened) (dbg).err = stderr; \ 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fclose((dbg).out_opened); \ 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (dbg).err_opened = (dbg).out_opened = NULL; \ 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DEBUG__ 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GENERIC OMX TI DEBUG STATEMENT 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * file - output of the debug message 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * level - level of the debug message 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * domain - domain of the debug message 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * mask - debug print mask, only messages for domains marked, and that have 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * levels at least of the mask's level will be printed 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * format, list - debug message 286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DEBUG_ANDROID__ 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_PRINT(file, domain, level, mask, format, list...) \ 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do {\ 292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((file) && (OMX_U32) (level * domain) >= (OMX_U32) ((mask) & (domain * OMX_DBG_MAX_LEVEL))) \ 293dbcc6073c88ced818ea3e742f36191088222ca26Steve Block ALOGD(OMX_DBG_FN_FMT OMX_DBG_LINE_FMT OMX_DBG_FMT \ 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin format OMX_DBG_FN OMX_DBG_LINE, ##list); \ 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_PRINT(file, domain, level, mask, format, list...) \ 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do {\ 299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((file) && (OMX_U32) (level * domain) >= (OMX_U32) ((mask) & (domain * OMX_DBG_MAX_LEVEL))) { \ 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (file == stderr || file == stdout) { \ 301dbcc6073c88ced818ea3e742f36191088222ca26Steve Block ALOGD(OMX_DBG_FN_FMT OMX_DBG_LINE_FMT OMX_DBG_FMT \ 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin format OMX_DBG_FN OMX_DBG_LINE, ##list); \ 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { \ 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf((file), \ 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_FILE OMX_DBG_FN_FMT OMX_DBG_LINE_FMT OMX_DBG_FMT \ 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin format OMX_DBG_FN OMX_DBG_LINE, ##list); \ 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_PRINT(file, domain, level, mask, format, list...) \ 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do {\ 314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((file) && (OMX_U32) (level * domain) >= (OMX_U32) ((mask) & (domain * OMX_DBG_MAX_LEVEL))) \ 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf((file), \ 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_FILE OMX_DBG_FN_FMT OMX_DBG_LINE_FMT OMX_DBG_FMT \ 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin format OMX_DBG_FN OMX_DBG_LINE, ##list); \ 318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Alternate mask understanding implementation. Use this if we cannot specify a 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin level for each domain */ 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_PRINT(file, domain, level, mask, format, list...) \ 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do {\ 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (file && (mask & domain) && level >= (mask & OMX_MASK_LEVEL)) \ 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(file, \ 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_FILE OMX_DBG_FN_FMT OMX_DBG_LINE_FMT OMX_DBG_FMT \ 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin format, OMX_DBG_FN OMX_DBG_LINE ##list); \ 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* empty definitions */ 335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_PRINT(file, domain, level, mask, format, list...) 336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX BAIL Shortcut macros 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_BAIL_IF_ERROR(_eError, dbg, cmd, format, list...) \ 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (_eError) { \ 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd(dbg, format, ##list); \ 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_BAIL_IF_ERROR(_eError); \ 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } \ 347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_SET_ERROR_BAIL(_eError, _eErrorValue, dbg, cmd, format, list...) \ 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmd(dbg, format, ##list); \ 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_SET_ERROR_BAIL(_eError, _eErrorValue); \ 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_CHECK_CMD(dbg, _ptr1, _ptr2, _ptr3) \ 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin do { \ 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!_ptr1) OMX_ERROR4(dbg, "NULL parameter (" #_ptr1 ").\n"); \ 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(!_ptr2) OMX_ERROR4(dbg, "NULL parameter (" #_ptr2 ").\n"); \ 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(!_ptr3) OMX_ERROR4(dbg, "NULL parameter (" #_ptr3 ").\n"); \ 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CONF_CHECK_CMD(_ptr1, _ptr2, _ptr3); \ 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } while (0) 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * GENERIC OMX TI DEBUG Shortcut macros 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* This variant uses a shortcut for the domain notation, but is not traceable 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin by source understanders. It also adds the color to the format string. */ 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMXDBG_PRINT(file, domain, level, mask, format, list...) \ 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_PRINT(file, OMX_DBG_DOM_##domain, level, mask, \ 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DBG_COL_##domain OMX_DBG_DOM_##domain##_STR OMX_DBG_LEVEL(level) format OMX_DBG_COL_WHITE, ##list) 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Shortcuts */ 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_ERROR0(dbg, format, list...) OMXDBG_PRINT((dbg).err, ERROR, 0, (dbg).mask, format, ##list) 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_ERROR1(dbg, format, list...) OMXDBG_PRINT((dbg).err, ERROR, 1, (dbg).mask, format, ##list) 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_ERROR2(dbg, format, list...) OMXDBG_PRINT((dbg).err, ERROR, 2, (dbg).mask, format, ##list) 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_ERROR3(dbg, format, list...) OMXDBG_PRINT((dbg).err, ERROR, 3, (dbg).mask, format, ##list) 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_ERROR4(dbg, format, list...) OMXDBG_PRINT((dbg).err, ERROR, 4, (dbg).mask, format, ##list) 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_ERROR5(dbg, format, list...) OMXDBG_PRINT((dbg).err, ERROR, 5, (dbg).mask, format, ##list) 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_TRACE0(dbg, format, list...) OMXDBG_PRINT((dbg).out, SYSTEM, 0, (dbg).mask, format, ##list) 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_TRACE1(dbg, format, list...) OMXDBG_PRINT((dbg).out, SYSTEM, 1, (dbg).mask, format, ##list) 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_TRACE2(dbg, format, list...) OMXDBG_PRINT((dbg).out, SYSTEM, 2, (dbg).mask, format, ##list) 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_TRACE3(dbg, format, list...) OMXDBG_PRINT((dbg).out, SYSTEM, 3, (dbg).mask, format, ##list) 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_TRACE4(dbg, format, list...) OMXDBG_PRINT((dbg).OMX_DBG_LEVEL4, SYSTEM, 4, (dbg).mask, format, ##list) 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_TRACE5(dbg, format, list...) OMXDBG_PRINT((dbg).err, SYSTEM, 5, (dbg).mask, format, ##list) 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRINT0(dbg, format, list...) OMXDBG_PRINT((dbg).out, PRINT, 0, (dbg).mask, format, ##list) 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRINT1(dbg, format, list...) OMXDBG_PRINT((dbg).out, PRINT, 1, (dbg).mask, format, ##list) 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRINT2(dbg, format, list...) OMXDBG_PRINT((dbg).out, PRINT, 2, (dbg).mask, format, ##list) 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRINT3(dbg, format, list...) OMXDBG_PRINT((dbg).out, PRINT, 3, (dbg).mask, format, ##list) 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRINT4(dbg, format, list...) OMXDBG_PRINT((dbg).OMX_DBG_LEVEL4, PRINT, 4, (dbg).mask, format, ##list) 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRINT5(dbg, format, list...) OMXDBG_PRINT((dbg).err, PRINT, 5, (dbg).mask, format, ##list) 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRBUFFER0(dbg, format, list...) OMXDBG_PRINT((dbg).out, BUFFER, 0, (dbg).mask, format, ##list) 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRBUFFER1(dbg, format, list...) OMXDBG_PRINT((dbg).out, BUFFER, 1, (dbg).mask, format, ##list) 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRBUFFER2(dbg, format, list...) OMXDBG_PRINT((dbg).out, BUFFER, 2, (dbg).mask, format, ##list) 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRBUFFER3(dbg, format, list...) OMXDBG_PRINT((dbg).out, BUFFER, 3, (dbg).mask, format, ##list) 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRBUFFER4(dbg, format, list...) OMXDBG_PRINT((dbg).OMX_DBG_LEVEL4, BUFFER, 4, (dbg).mask, format, ##list) 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRBUFFER5(dbg, format, list...) OMXDBG_PRINT((dbg).err, BUFFER, 5, (dbg).mask, format, ##list) 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRMGR0(dbg, format, list...) OMXDBG_PRINT((dbg).out, MGR, 0, (dbg).mask, format, ##list) 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRMGR1(dbg, format, list...) OMXDBG_PRINT((dbg).out, MGR, 1, (dbg).mask, format, ##list) 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRMGR2(dbg, format, list...) OMXDBG_PRINT((dbg).out, MGR, 2, (dbg).mask, format, ##list) 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRMGR3(dbg, format, list...) OMXDBG_PRINT((dbg).out, MGR, 3, (dbg).mask, format, ##list) 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRMGR4(dbg, format, list...) OMXDBG_PRINT((dbg).OMX_DBG_LEVEL4, MGR, 4, (dbg).mask, format, ##list) 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRMGR5(dbg, format, list...) OMXDBG_PRINT((dbg).err, MGR, 5, (dbg).mask, format, ##list) 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRDSP0(dbg, format, list...) OMXDBG_PRINT((dbg).out, DSP, 0, (dbg).mask, format, ##list) 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRDSP1(dbg, format, list...) OMXDBG_PRINT((dbg).out, DSP, 1, (dbg).mask, format, ##list) 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRDSP2(dbg, format, list...) OMXDBG_PRINT((dbg).out, DSP, 2, (dbg).mask, format, ##list) 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRDSP3(dbg, format, list...) OMXDBG_PRINT((dbg).out, DSP, 3, (dbg).mask, format, ##list) 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRDSP4(dbg, format, list...) OMXDBG_PRINT((dbg).OMX_DBG_LEVEL4, DSP, 4, (dbg).mask, format, ##list) 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRDSP5(dbg, format, list...) OMXDBG_PRINT((dbg).err, DSP, 5, (dbg).mask, format, ##list) 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRCOMM0(dbg, format, list...) OMXDBG_PRINT((dbg).out, COMM, 0, (dbg).mask, format, ##list) 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRCOMM1(dbg, format, list...) OMXDBG_PRINT((dbg).out, COMM, 1, (dbg).mask, format, ##list) 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRCOMM2(dbg, format, list...) OMXDBG_PRINT((dbg).out, COMM, 2, (dbg).mask, format, ##list) 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRCOMM3(dbg, format, list...) OMXDBG_PRINT((dbg).out, COMM, 3, (dbg).mask, format, ##list) 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRCOMM4(dbg, format, list...) OMXDBG_PRINT((dbg).OMX_DBG_LEVEL4, COMM, 4, (dbg).mask, format, ##list) 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRCOMM5(dbg, format, list...) OMXDBG_PRINT((dbg).err, COMM, 5, (dbg).mask, format, ##list) 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRSTATE0(dbg, format, list...) OMXDBG_PRINT((dbg).out, STATE, 0, (dbg).mask, format, ##list) 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRSTATE1(dbg, format, list...) OMXDBG_PRINT((dbg).out, STATE, 1, (dbg).mask, format, ##list) 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRSTATE2(dbg, format, list...) OMXDBG_PRINT((dbg).out, STATE, 2, (dbg).mask, format, ##list) 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRSTATE3(dbg, format, list...) OMXDBG_PRINT((dbg).out, STATE, 3, (dbg).mask, format, ##list) 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRSTATE4(dbg, format, list...) OMXDBG_PRINT((dbg).OMX_DBG_LEVEL4, STATE, 4, (dbg).mask, format, ##list) 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_PRSTATE5(dbg, format, list...) OMXDBG_PRINT((dbg).err, STATE, 5, (dbg).mask, format, ##list) 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Compile Time Customizations 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Context 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DBG_FN__ 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FN_FMT "%s()" 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FN , __FUNCTION__ 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FN_FMT 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FN 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DBG_LINE__ 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LINE_FMT ":%d" 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LINE , __LINE__ 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LINE_FMT 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LINE 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DBG_FILE__ 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __OMX_DBG_FN__ 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FILE __FILE__ ":" 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #else 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FILE __FILE__ 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FILE 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if defined(__OMX_DBG_LEVEL__) 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LEVEL(level) "<" #level "> " 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#elif defined(__OMX_DBG_DOMAIN__) 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LEVEL(level) " " 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LEVEL(level) 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DBG_DOMAIN__ 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_ERROR_STR "ERR" 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_BUFFER_STR "BUF" 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_COMM_STR "COM" 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_DSP_STR "DSP" 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_SYSTEM_STR "SYS" 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_MGR_STR "MGR" 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_STATE_STR "STA" 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_PRINT_STR "GEN" 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_ERROR_STR 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_BUFFER_STR 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_COMM_STR 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_DSP_STR 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_SYSTEM_STR 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_MGR_STR 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_STATE_STR 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_DOM_PRINT_STR 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DBG_4ISERROR__ 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LEVEL4 err 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_LEVEL4 out 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if defined(__OMX_DBG_LINE__) || defined(__OMX_DBG_FN__) || defined(__OMX_DBG_FILE__) 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FMT " " 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_FMT 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Color (ANSI escape sequences) 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __OMX_DBG_COLOR__ 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_RED "\x1b[1;31;40m" 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_GREEN "\x1b[1;32;40m" 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_YELLOW "\x1b[1;33;40m" 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_BLUE "\x1b[1;34;40m" 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_MAGENTA "\x1b[1;35;40m" 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_CYAN "\x1b[1;36;40m" 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_WHITE "\x1b[1;37;40m" 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_BLUE 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_CYAN 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_GREEN 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_MAGENTA 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_RED 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_WHITE 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define OMX_DBG_COL_YELLOW 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Domain colors - these can be predefined differently 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_ERROR 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_ERROR OMX_DBG_COL_RED 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_SYSTEM 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_SYSTEM OMX_DBG_COL_WHITE 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_PRINT 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_PRINT OMX_DBG_COL_WHITE 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_BUFFER 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_BUFFER OMX_DBG_COL_GREEN 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_MGR 535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_MGR OMX_DBG_COL_MAGENTA 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_DSP 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_DSP OMX_DBG_COL_CYAN 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_COMM 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_COMM OMX_DBG_COL_YELLOW 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef OMX_DBG_COL_STATE 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_DBG_COL_STATE OMX_DBG_COL_BLUE 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 547b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef OMX_MEMDEBUG 548b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define mem_array_size=500; 549b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 550b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid *arr[mem_array_size]; 551b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint lines[mem_array_size]; 552b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint bytes[mem_array_size]; 553b65f253fdc60f6208a54911bee793d225f23cdf8James Dongchar file[mem_array_size][50]; 554b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 555b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define newmalloc(x) mymalloc(__LINE__,__FILE__,x) 556b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define newfree(z) myfree(z,__LINE__,__FILE__) 557b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 558b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid * mymalloc(int line, char *s, int size); 559b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint myfree(void *dp, int line, char *s); 560b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 561b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid * mymalloc(int line, char *s, int size) 562b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{ 563b65f253fdc60f6208a54911bee793d225f23cdf8James Dong void *p; 564b65f253fdc60f6208a54911bee793d225f23cdf8James Dong int e=0; 565b65f253fdc60f6208a54911bee793d225f23cdf8James Dong p = malloc(size); 566b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(p==NULL){ 567b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, ERROR, 4, 0, "Memory not available\n"); 568b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* ddexit(1); */ 569b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 570b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else{ 571b65f253fdc60f6208a54911bee793d225f23cdf8James Dong while((lines[e]!=0)&& (e<(mem_array_size - 1)) ){ 572b65f253fdc60f6208a54911bee793d225f23cdf8James Dong e++; 573b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 574b65f253fdc60f6208a54911bee793d225f23cdf8James Dong arr[e]=p; 575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lines[e]=line; 576b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bytes[e]=size; 577b65f253fdc60f6208a54911bee793d225f23cdf8James Dong strcpy(file[e],s); 578b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, BUFFER, 2, 0, 579b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "Allocating %d bytes on address %p, line %d file %s pos %d\n", size, p, line, s, e); 580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 581b65f253fdc60f6208a54911bee793d225f23cdf8James Dong return p; 582b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 583b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 584b65f253fdc60f6208a54911bee793d225f23cdf8James Dongint myfree(void *dp, int line, char *s){ 585b65f253fdc60f6208a54911bee793d225f23cdf8James Dong int q; 586b65f253fdc60f6208a54911bee793d225f23cdf8James Dong for(q=0;q<mem_array_size;q++){ 587b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(arr[q]==dp){ 588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, PRINT, 2, 0, "Deleting %d bytes on address %p, line %d file %s\n", 589b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bytes[q],dp, line, s); 590b65f253fdc60f6208a54911bee793d225f23cdf8James Dong free(dp); 591b65f253fdc60f6208a54911bee793d225f23cdf8James Dong dp = NULL; 592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong lines[q]=0; 593b65f253fdc60f6208a54911bee793d225f23cdf8James Dong strcpy(file[q],""); 594b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(mem_array_size==q){ 598b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, PRINT, 2, 0, "\n\nPointer not found. Line:%d File%s!!\n\n",line, s); 599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 601b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else 603b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 604b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define newmalloc(x) malloc(x) 605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define newfree(z) free(z) 606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 607b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 608b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 609b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 611