1855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/*
2855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
3855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
4855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
5855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * you may not use this file except in compliance with the License.
6855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * You may obtain a copy of the License at
7855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
8855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
9855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *
10855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
11855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
12855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * See the License for the specific language governing permissions and
14855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * limitations under the License.
15855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi */
16855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
17855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
18855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @file        M4PSW_Trace.c
19855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief        Trace function for trace macros
20855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note        This file gives the implementation of the trace function used
21855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                in the trace instrumentation macros
22855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
23855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
24855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
25855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
26855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <stdio.h> /*for printf */
27855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include <stdarg.h> /* ANSI C macros and defs for variable args */
28855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "utils/Log.h"
29855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
30855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Types.h"
31855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#include "M4OSA_Debug.h"
32855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
33855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define NO_FILE /* suppresses the file name print out */
34855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
35855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#define MAX_STRING_SIZE 1024
36855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
37855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi/**
38855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
39855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * void M4OSA_Trace(M4OSA_Int32 line, M4OSA_Char* file ,M4OSA_Int32 level,
40855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *                                                      M4OSA_Char* format, ...)
41855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @brief    This function implements the trace for debug tests
42855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @note    This implementation uses printf. First the variables are retrieved using
43855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *            ANSI C defs and macros which enable to access a variable number of arguments.
44855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi *            Then the printf is done (with some ornemental adds).
45855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param    level (IN): the debug level
46855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param    format (IN): the "printf" formated string
47855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @param    ... (IN): as many parameters as required ...
48855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi * @return    none
49855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi ************************************************************************
50855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi*/
51855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
52855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSAL_TRACE_EXPORT_TYPE void M4OSA_Trace(M4OSA_Int32 line, M4OSA_Char* file ,
53855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                     M4OSA_Int32 level, M4OSA_Char* format, ...)
54855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
55855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char message[MAX_STRING_SIZE];
56855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 i;
57855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    va_list marker; /* pointer to list of arguments */
58855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
59855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* get the var arguments into the string message to be able to print */
60855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    va_start(marker,format); /* set ptr to first argument in the list of arguments passed to the function */
61855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    vsprintf((char *)message, (const char *)format,marker );  /* formats and writes the data into message */
62855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    va_end(marker); /* reset pointer to NULL */
63855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
64855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* do the actual print */
65855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef NO_FILE
66f24e48bbbc93da7655aabe04adf42eff2efcf69eJames Dong    __android_log_print(ANDROID_LOG_INFO, "M4OSA_Trace", "%s", (char*)message);
67855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else /* NO_FILE     */
68f24e48bbbc93da7655aabe04adf42eff2efcf69eJames Dong    __android_log_print(ANDROID_LOG_INFO, "M4OSA_Trace", "%s", "%s at %lu in %s",
69855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                   (char *)message, line, file);
70855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* NO_FILE     */
71855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
72855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
73855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
74855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray KundargiM4OSAL_TRACE_EXPORT_TYPE M4OSA_Void M4OSA_TRACE_traceFunction(M4OSA_UInt32 line,
75855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                              M4OSA_Char* fileName,
76855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                              M4OSA_CoreID coreID,
77855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                              M4OSA_UInt32 level,
78855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                                              M4OSA_Char* stringMsg, ...)
79855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi{
80855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Char message[MAX_STRING_SIZE];
81855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    M4OSA_Int32 i;
82855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    va_list marker; /* pointer to list of arguments */
83855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
84855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* get the var arguments into the string message to be able to print */
85855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    va_start(marker,stringMsg); /* set ptr to first argument in the list of arguments passed to the function */
86855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    vsprintf((char *)message, (const char *)stringMsg,marker );  /* formats and writes the data into message */
87855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    va_end(marker); /* reset pointer to NULL */
88855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
89855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi    /* do the actual print */
90855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#ifdef NO_FILE
91f24e48bbbc93da7655aabe04adf42eff2efcf69eJames Dong    __android_log_print(ANDROID_LOG_INFO, "M4OSA_TRACE_traceFunction", "%s", (char*)message);
92855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#else /* NO_FILE     */
93f24e48bbbc93da7655aabe04adf42eff2efcf69eJames Dong    __android_log_print(ANDROID_LOG_INFO, "M4OSA_TRACE_traceFunction", "%s", "%s at %lu in %s",
94855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi                                            (char *)message, line, (char*)file);
95855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi#endif /* NO_FILE     */
96855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
97855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi}
98855ec7c4be7ad642721909d5837a8d25a117c22fDharmaray Kundargi
99