/*
* Copyright (c) 2010, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* @file timm_osal_trace.c
* This file contains methods that provides the functionality
* for logging errors/warings/information/etc.
*
* @path \
*
*/
/* -------------------------------------------------------------------------- */
/* =========================================================================
*!
*! Revision History
*! ===================================
*!
* ========================================================================= */
/******************************************************************************
* Includes
******************************************************************************/
/*#include "typedefs.h"*/
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include "timm_osal_trace.h"
#ifdef _Android
#define LOG_TAG "DOMX"
#include <utils/Log.h>
#include <cutils/properties.h>
#endif
/**
* The OSAL debug trace detail can be set at compile time by defining the flag
* TIMM_OSAL_DEBUG_TRACE_DETAIL=<Details>
* detail - 0 - no detail
* 1 - function name
* 2 - function name, line number
* Prefix is added to every debug trace message
*/
#ifndef TIMM_OSAL_DEBUG_TRACE_DETAIL
#define TIMM_OSAL_DEBUG_TRACE_DETAIL 2
#endif
#define DEFAULT_TRACE_LEVEL TIMM_OSAL_TRACE_LEVEL_ERROR
static int trace_level = -1;
/* strip out leading ../ stuff that happens to __FILE__ for out-of-tree builds */
static const char *simplify_path(const char *file)
{
while (file)
{
char c = file[0];
if ((c != '.') && (c != '/') && (c != '\\'))
break;
file++;
}
return file;
}
void TIMM_OSAL_UpdateTraceLevel(void)
{
char *val = getenv("TIMM_OSAL_DEBUG_TRACE_LEVEL");
if (val)
{
trace_level = strtol(val, NULL, 0);
}
else
{
#ifdef _Android
char value[PROPERTY_VALUE_MAX];
int val;
property_get("debug.domx.trace_level", value, "0");
val = atoi(value);
if ( (!val) || (val < 0) )
{
trace_level = DEFAULT_TRACE_LEVEL;
}
else
trace_level = val;
#else
trace_level = DEFAULT_TRACE_LEVEL;
#endif
}
}
void __TIMM_OSAL_TraceFunction(const __TIMM_OSAL_TRACE_LOCATION * loc,
const char *fmt, ...)
{
if (trace_level == -1)
{
char *val = getenv("TIMM_OSAL_DEBUG_TRACE_LEVEL");
trace_level =
val ? strtol(val, NULL, 0) : DEFAULT_TRACE_LEVEL;
}
if (trace_level >= loc->level)
{
va_list ap;
va_start(ap, fmt); /* make ap point to first arg after 'fmt' */
#ifdef _Android
#if 0 // Original for reference
#if ( TIMM_OSAL_DEBUG_TRACE_DETAIL > 1 )
ALOGD("%s:%d\t%s()\t", simplify_path(loc->file), loc->line,
loc->function);
#endif
#else // Prints function_name for ERROR, WARNING and ENTRY/EXIT
if ( (loc->level == TIMM_OSAL_TRACE_LEVEL_ERROR) || (loc->level == TIMM_OSAL_TRACE_LEVEL_WARNING) || (loc->level == TIMM_OSAL_TRACE_LEVEL_ENTERING) )
ALOGD("%s:%d\t%s()\t", simplify_path(loc->file), loc->line,
loc->function);
#endif
char string[1000];
vsprintf(string, fmt, ap);
ALOGD("%s",string);
#else
#if 0 // Original for reference
#if ( TIMM_OSAL_DEBUG_TRACE_DETAIL > 1 )
printf("%s:%d\t%s()\t", simplify_path(loc->file), loc->line,
loc->function);
#endif
#else // Prints function_name for ERROR, WARNING and ENTRY/EXIT
if ( (loc->level == 1) || (loc->level == 2) || (loc->level == 5) )
printf("%s:%d\t%s()\t", simplify_path(loc->file), loc->line,
loc->function);
#endif
vprintf(fmt, ap);
#endif
va_end(ap);
}
}