/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 ************************************************************************
 * @file       M4PSW_DebugTrace.c
 * @brief      Default trace function for debugging macros
 * @note       This file gives the default implementation of the trace function
 *             used in the debug instrumentation macros, based on printf.
 *             Application writers are strongly encouraged to implement their
 *             own "M4OSA_DebugTrace".
 ************************************************************************
*/


#include <stdio.h> /*for printf */

#include "M4OSA_Types.h"
#include "M4OSA_Error.h"

/*#define NO_FILE */ /* suppresses the file name print out */


/**
 ************************************************************************
 * void M4OSA_DebugTrace(M4OSA_Int32 line, char* file, M4OSA_Int32 level,
 *                       M4OSA_Char* cond, char* msg, M4OSA_ERR err)
 * @brief    This function implements the trace for debug tests
 * @note    This function is to be called in the debug macros only.
 *            This implementation uses printf.
 * @param    line (IN): the line number in the source file
 * @param    file (IN): the source file name
 * @param    level (IN): the debug level
 * @param    msg (IN): the error message
 * @param    err (IN): the return value (error code)
 * @return    none
 ************************************************************************
*/

M4OSAL_TRACE_EXPORT_TYPE void M4OSA_DebugTrace(M4OSA_Int32 line,
                                               M4OSA_Char* file,
                                               M4OSA_Int32 level,
                                               M4OSA_Char* cond,
                                               M4OSA_Char* msg,
                                               M4OSA_ERR err)
{
    M4OSA_Int32 i;

    /* try to "indent" the resulting traces depending on the level */
    for (i =0 ; i < level; i ++)
    {
        printf(" ");
    }

#ifdef NO_FILE
    printf("Error: %li, on %s: %s\n",err,cond,msg);
#else /* NO_FILE     */
    printf("Error: %li, on %s: %s Line %lu in: %s\n",err,cond,msg,line,file);
#endif /* NO_FILE     */

}

M4OSAL_TRACE_EXPORT_TYPE M4OSA_Void M4OSA_DEBUG_traceFunction(M4OSA_UInt32 line,
                                                              M4OSA_Char* fileName,
                                                              M4OSA_UInt32 level,
                                                              M4OSA_Char* stringCondition,
                                                              M4OSA_Char* message,
                                                              M4OSA_ERR returnedError)
{
    M4OSA_DebugTrace(line, fileName, level, stringCondition, message, returnedError);
}