/*
 INTEL CONFIDENTIAL
 Copyright 2009 Intel Corporation All Rights Reserved.
 The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission.

 No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing.
 */


#ifndef VBP_TRACE_H_
#define VBP_TRACE_H_



//#define VBP_TRACE


#ifdef VBP_TRACE /* if VBP_TRACE is defined*/

#ifndef ANDROID

#include <stdio.h>
#include <stdarg.h>

extern void vbp_trace_util(const char* cat, const char* fun, int line, const char* format, ...);
#define VBP_TRACE_UTIL(cat, format, ...) \
vbp_trace_util(cat, __FUNCTION__, __LINE__, format,  ##__VA_ARGS__)

#else 

#include <utils/Log.h>
#define VBP_TRACE_UTIL(cat, format,  ...) \
__android_log_print(ANDROID_LOG_VERBOSE, "mixvbp : "cat, "%s() : %d: "format, \
__FUNCTION__, __LINE__, ##__VA_ARGS__)

#endif


#define ETRACE(format, ...) VBP_TRACE_UTIL("ERROR:   ",  format, ##__VA_ARGS__)
#define WTRACE(format, ...) VBP_TRACE_UTIL("WARNING: ",  format, ##__VA_ARGS__)
#define ITRACE(format, ...) VBP_TRACE_UTIL("INFO:    ",  format, ##__VA_ARGS__)
#define VTRACE(format, ...) VBP_TRACE_UTIL("VERBOSE: ",  format, ##__VA_ARGS__)

#else /* if VBP_TRACE is not defined */

#define ETRACE(format, ...)
#define WTRACE(format, ...)
#define ITRACE(format, ...)
#define VTRACE(format, ...)


#endif /* VBP_TRACE*/


#endif /*VBP_TRACE_H_*/


