C++程序  |  265行  |  6.36 KB

/*----------------------------------------------------------------------------
 *
 * File: 
 * eas_report.c
 *
 * Contents and purpose:
 * This file contains the debug message handling routines for the EAS library.
 * These routines should be modified as needed for your system.
 *
 * Copyright 2005 Sonic Network Inc.

 * 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.
 *
 *----------------------------------------------------------------------------
 * Revision Control:
 *	 $Revision: 659 $
 *	 $Date: 2007-04-24 13:36:35 -0700 (Tue, 24 Apr 2007) $
 *----------------------------------------------------------------------------
*/

#ifdef _lint
#include "lint_stdlib.h"
#else
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#endif

#include "eas_report.h"

static int severityLevel = 9999;

/* debug file */
static FILE *debugFile = NULL;
int flush = 0;

#ifndef _NO_DEBUG_PREPROCESSOR

/* structure should have an #include for each error message header file */
S_DEBUG_MESSAGES debugMessages[] =
{
#ifndef UNIFIED_DEBUG_MESSAGES
#include "eas_config_msgs.h"


#include "eas_host_msgs.h"
#include "eas_hostmm_msgs.h"
#include "eas_math_msgs.h"
#include "eas_midi_msgs.h"
#include "eas_mixer_msgs.h"
#include "eas_pcm_msgs.h"
#include "eas_public_msgs.h"
#include "eas_smf_msgs.h"
#include "eas_wave_msgs.h"
#include "eas_voicemgt_msgs.h"

#ifdef _FM_SYNTH
#include "eas_fmsynth_msgs.h"
#include "eas_fmengine_msgs.h"
#endif

#ifdef _WT_SYNTH
#include "eas_wtsynth_msgs.h"
#include "eas_wtengine_msgs.h"
#endif

#ifdef _ARM_TEST_MAIN
#include "arm_main_msgs.h"
#endif

#ifdef _EAS_MAIN
#include "eas_main_msgs.h"
#endif

#ifdef _EAS_MAIN_IPC
#include "eas_main_ipc_msgs.h"
#endif

#ifdef _METRICS_ENABLED
#include "eas_perf_msgs.h"
#endif

#ifdef _COMPRESSOR_ENABLED
#include "eas_compressor_msgs.h"
#endif

#ifdef _ENHANCER_ENABLED
#include "eas_enhancer_msgs.h"
#endif

#ifdef _WOW_ENABLED
#include "eas_wow_msgs.h"
#endif

#ifdef _SMAF_PARSER
#include "eas_smaf_msgs.h"
#endif

#ifdef _OTA_PARSER
#include "eas_ota_msgs.h"
#endif

#ifdef _IMELODY_PARSER
#include "eas_imelody_msgs.h"
#endif

#ifdef _WAVE_PARSER
#include "eas_wavefile_msgs.h"
#endif

#if defined(_CMX_PARSER) || defined(_MFI_PARSER)
#include "eas_cmf_msgs.h"
#endif

#if defined(_CMX_PARSER) || defined(_MFI_PARSER) || defined(_WAVE_PARSER)
#include "eas_imaadpcm_msgs.h"
#endif

#else
#include "eas_debugmsgs.h"
#endif

/* denotes end of error messages */
{ 0,0,0 }
};

/*----------------------------------------------------------------------------
 * EAS_ReportEx()
 *
 * This is the error message handler. The default handler outputs error
 * messages to stdout. Modify this as needed for your system.
 *----------------------------------------------------------------------------
*/
void EAS_ReportEx (int severity, unsigned long hashCode, int serialNum, ...)
{
	va_list vargs;
	int i;

	/* check severity level */
	if (severity > severityLevel)
		return;

	/* find the error message and output to stdout */
	/*lint -e{661} we check for NULL pointer - no fence post error here */
	for (i = 0; debugMessages[i].m_pDebugMsg; i++)
	{
		if ((debugMessages[i].m_nHashCode == hashCode) &&
		(debugMessages[i].m_nSerialNum == serialNum))
		{
			/*lint -e{826} <allow variable args> */
			va_start(vargs, serialNum);
			if (debugFile)
			{
				vfprintf(debugFile, debugMessages[i].m_pDebugMsg, vargs);
				if (flush)
					fflush(debugFile);
			}
			else
			{
				vprintf(debugMessages[i].m_pDebugMsg, vargs);
			}
			va_end(vargs);
			return;
		}
	}
	printf("Unrecognized error: Severity=%d; HashCode=%lu; SerialNum=%d\n", severity, hashCode, serialNum);
} /* end EAS_ReportEx */

#else
/*----------------------------------------------------------------------------
 * EAS_Report()
 *
 * This is the error message handler. The default handler outputs error
 * messages to stdout. Modify this as needed for your system.
 *----------------------------------------------------------------------------
*/
void EAS_Report (int severity, const char *fmt, ...)
{
	va_list vargs;

	/* check severity level */
	if (severity > severityLevel)
		return;

	/*lint -e{826} <allow variable args> */
	va_start(vargs, fmt);
	if (debugFile)
	{
		vfprintf(debugFile, fmt, vargs);
		if (flush)
			fflush(debugFile);
	}
	else
	{
		vprintf(fmt, vargs);
	}
	va_end(vargs);
} /* end EAS_Report */

/*----------------------------------------------------------------------------
 * EAS_ReportX()
 *
 * This is the error message handler. The default handler outputs error
 * messages to stdout. Modify this as needed for your system.
 *----------------------------------------------------------------------------
*/
void EAS_ReportX (int severity, const char *fmt, ...)
{
	va_list vargs;
	
	/* check severity level */
	if (severity > severityLevel)
		return;

	/*lint -e{826} <allow variable args> */
	va_start(vargs, fmt);
	if (debugFile)
	{
		vfprintf(debugFile, fmt, vargs);
		if (flush)
			fflush(debugFile);
	}
	else
	{
		vprintf(fmt, vargs);
	}
	va_end(vargs);
} /* end EAS_ReportX */
#endif

/*----------------------------------------------------------------------------
 * EAS_SetDebugLevel()
 *
 * Sets the level for debug message output
 *----------------------------------------------------------------------------
*/

void EAS_SetDebugLevel (int severity)
{
	severityLevel = severity;
} /* end EAS_SetDebugLevel */

/*----------------------------------------------------------------------------
 * EAS_SetDebugFile()
 *
 * Redirect debugger output to the specified file.
 *----------------------------------------------------------------------------
*/
void EAS_SetDebugFile (void *file, int flushAfterWrite)
{
	debugFile = (FILE*) file;
	flush = flushAfterWrite;
} /* end EAS_SetDebugFile */