timm_osal_trace.c revision c322989ae6ff6769490828de1b5eda12b749cce9
1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (c) 2010, Texas Instruments Incorporated 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * All rights reserved. 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Redistribution and use in source and binary forms, with or without 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * modification, are permitted provided that the following conditions 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * are met: 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions of source code must retain the above copyright 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer. 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions in binary form must reproduce the above copyright 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer in the 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * documentation and/or other materials provided with the distribution. 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Neither the name of Texas Instruments Incorporated nor the names of 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * its contributors may be used to endorse or promote products derived 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * from this software without specific prior written permission. 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* @file timm_osal_trace.c 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* This file contains methods that provides the functionality 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* for logging errors/warings/information/etc. 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* @path \ 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*/ 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* -------------------------------------------------------------------------- */ 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ========================================================================= 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! Revision History 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! =================================== 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * ========================================================================= */ 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************************** 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* Includes 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev******************************************************************************/ 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*#include "typedefs.h"*/ 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdarg.h> 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h> 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdlib.h> 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "timm_osal_trace.h" 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef _Android 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define LOG_TAG "DOMX" 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <utils/Log.h> 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* The OSAL debug trace detail can be set at compile time by defining the flag 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* TIMM_OSAL_DEBUG_TRACE_DETAIL=<Details> 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* detail - 0 - no detail 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 1 - function name 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* 2 - function name, line number 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev* Prefix is added to every debug trace message 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev*/ 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifndef TIMM_OSAL_DEBUG_TRACE_DETAIL 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define TIMM_OSAL_DEBUG_TRACE_DETAIL 2 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DEFAULT_TRACE_LEVEL 1 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic int trace_level = -1; 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* strip out leading ../ stuff that happens to __FILE__ for out-of-tree builds */ 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevstatic const char *simplify_path(const char *file) 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev while (file) 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char c = file[0]; 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if ((c != '.') && (c != '/') && (c != '\\')) 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev break; 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev file++; 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return file; 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevvoid __TIMM_OSAL_TraceFunction(const __TIMM_OSAL_TRACE_LOCATION * loc, 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev const char *fmt, ...) 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (trace_level == -1) 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char *val = getenv("TIMM_OSAL_DEBUG_TRACE_LEVEL"); 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev trace_level = 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev val ? strtol(val, NULL, 0) : DEFAULT_TRACE_LEVEL; 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (trace_level >= loc->level) 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev va_list ap; 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev va_start(ap, fmt); /* make ap point to first arg after 'fmt' */ 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef _Android 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if ( TIMM_OSAL_DEBUG_TRACE_DETAIL > 1 ) 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOGD("%s:%d\t%s()\t", simplify_path(loc->file), loc->line, 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev loc->function); 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev char string[1000]; 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vsprintf(string, fmt, ap); 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev LOGD("%s",string); 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if ( TIMM_OSAL_DEBUG_TRACE_DETAIL > 1 ) 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev printf("%s:%d\t%s()\t", simplify_path(loc->file), loc->line, 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev loc->function); 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev vprintf(fmt, ap); 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev va_end(ap); 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 131