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