/*----------------------------------------------------------------------------
 *
 * File: 
 * eas_config.c
 *
 * Contents and purpose:
 * This file contains the Configuration Module interface (CM). The CM
 * is a module compiled external to the library that sets the configuration
 * for this build. It allows the library to find optional components and
 * links to static memory allocations (when used in a static configuration).
 *
 * DO NOT MODIFY THIS FILE!
 *
 * NOTE: This module is not intended to be modified by the customer. It
 * needs to be included in the build process with the correct configuration
 * defines (see the library documentation for information on how to configure
 * the library).
 *			
 * Copyright Sonic Network Inc. 2004-2006

 * 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: 796 $
 *   $Date: 2007-08-01 00:15:25 -0700 (Wed, 01 Aug 2007) $
 *----------------------------------------------------------------------------
*/

#include "eas.h"
#include "eas_config.h"


#ifdef _MFI_PARSER
/*----------------------------------------------------------------------------
 * Vendor/Device ID for MFi Extensions
 *
 * Define the preprocessor symbols to establish the vendor ID and
 * device ID for the MFi PCM/ADPCM extensions. 
 *----------------------------------------------------------------------------
*/
const EAS_U8 eas_MFIVendorIDMSB = (MFI_VENDOR_ID >> 8) & 0xff;
const EAS_U8 eas_MFIVendorIDLSB = MFI_VENDOR_ID & 0xff;
const EAS_U8 eas_MFIDeviceID = MFI_DEVICE_ID;
#endif

/*----------------------------------------------------------------------------
 *
 * parserModules
 *
 * This structure is used by the EAS library to locate file parsing
 * modules. 
 *----------------------------------------------------------------------------
*/

/* define the external file parsers */
extern EAS_VOID_PTR EAS_SMF_Parser;

#ifdef _XMF_PARSER
extern EAS_VOID_PTR EAS_XMF_Parser;
#endif

#ifdef _SMAF_PARSER
extern EAS_VOID_PTR EAS_SMAF_Parser;
#endif

#ifdef _WAVE_PARSER
extern EAS_VOID_PTR EAS_Wave_Parser;
#endif

#ifdef _OTA_PARSER
extern EAS_VOID_PTR EAS_OTA_Parser;
#endif

#ifdef _IMELODY_PARSER
extern EAS_VOID_PTR EAS_iMelody_Parser;
#endif

#ifdef _RTTTL_PARSER
extern EAS_VOID_PTR EAS_RTTTL_Parser;
#endif

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
extern EAS_VOID_PTR EAS_CMF_Parser;
#endif

/* initalize pointers to parser interfaces */
/*lint -e{605} not pretty, but it works */
EAS_VOID_PTR const parserModules[] = 
{
	&EAS_SMF_Parser,
		
#ifdef _XMF_PARSER
	&EAS_XMF_Parser,
#endif

#ifdef _WAVE_PARSER
	&EAS_Wave_Parser,
#endif

#ifdef _SMAF_PARSER
	&EAS_SMAF_Parser,
#endif

#ifdef _OTA_PARSER
	&EAS_OTA_Parser,
#endif

#ifdef _IMELODY_PARSER
	&EAS_iMelody_Parser,
#endif

#ifdef _RTTTL_PARSER
	&EAS_RTTTL_Parser,
#endif

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
	&EAS_CMF_Parser
#endif
};
#define NUM_PARSER_MODULES (sizeof(parserModules) / sizeof(EAS_VOID_PTR))

/*----------------------------------------------------------------------------
 * Data Modules
 *----------------------------------------------------------------------------
*/

#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR eas_SMFData;
extern EAS_VOID_PTR eas_Data;
extern EAS_VOID_PTR eas_MixBuffer;
extern EAS_VOID_PTR eas_Synth;
extern EAS_VOID_PTR eas_MIDI;
extern EAS_VOID_PTR eas_PCMData;
extern EAS_VOID_PTR eas_MIDIData;

#ifdef _XMF_PARSER
extern EAS_VOID_PTR eas_XMFData;
#endif

#ifdef _SMAF_PARSER
extern EAS_VOID_PTR eas_SMAFData;
#endif

#ifdef _OTA_PARSER
extern EAS_VOID_PTR eas_OTAData;
#endif

#ifdef _IMELODY_PARSER
extern EAS_VOID_PTR eas_iMelodyData;
#endif

#ifdef _RTTTL_PARSER
extern EAS_VOID_PTR eas_RTTTLData;
#endif

#ifdef _WAVE_PARSER
extern EAS_VOID_PTR eas_WaveData;
#endif

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
extern EAS_VOID_PTR eas_CMFData;
#endif
#endif

/*----------------------------------------------------------------------------
 *
 * Effects Modules
 *
 * These declarations are used by the EAS library to locate  
 * effects modules. 
 *----------------------------------------------------------------------------
*/

#ifdef _ENHANCER_ENABLED
extern EAS_VOID_PTR					EAS_Enhancer;
#define EAS_ENHANCER_INTERFACE		&EAS_Enhancer
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_EnhancerData;
#define EAS_ENHANCER_DATA			&eas_EnhancerData
#else
#define EAS_ENHANCER_DATA			NULL
#endif
#else
#define EAS_ENHANCER_INTERFACE		NULL
#define EAS_ENHANCER_DATA			NULL
#endif

#ifdef _COMPRESSOR_ENABLED
extern EAS_VOID_PTR	 				EAS_Compressor;
#define EAS_COMPRESSOR_INTERFACE	&EAS_Compressor
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_CompressorData;
#define EAS_COMPRESSOR_DATA			&eas_CompressorData
#else
#define EAS_COMPRESSOR_DATA			NULL
#endif
#else
#define EAS_COMPRESSOR_INTERFACE	NULL
#define EAS_COMPRESSOR_DATA			NULL
#endif

#ifdef _MAXIMIZER_ENABLED
extern EAS_VOID_PTR	 				EAS_Maximizer;
#define EAS_MAXIMIZER_INTERFACE		&EAS_Maximizer
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_MaximizerData;
#define EAS_MAXIMIZER_DATA			&eas_MaximizerData
#else
#define EAS_MAXIMIZER_DATA			NULL
#endif
#else
#define EAS_MAXIMIZER_INTERFACE	NULL
#define EAS_MAXIMIZER_DATA			NULL
#endif


#ifdef _REVERB_ENABLED
extern EAS_VOID_PTR	 				EAS_Reverb;
#define EAS_REVERB_INTERFACE		&EAS_Reverb
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_ReverbData;
#define EAS_REVERB_DATA				&eas_ReverbData
#else
#define EAS_REVERB_DATA				NULL
#endif
#else
#define EAS_REVERB_INTERFACE		NULL
#define EAS_REVERB_DATA				NULL
#endif

#ifdef _CHORUS_ENABLED
extern EAS_VOID_PTR	 				EAS_Chorus;
#define EAS_CHORUS_INTERFACE		&EAS_Chorus
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_ChorusData;
#define EAS_CHORUS_DATA				&eas_ChorusData
#else
#define EAS_CHORUS_DATA				NULL
#endif
#else
#define EAS_CHORUS_INTERFACE		NULL
#define EAS_CHORUS_DATA				NULL
#endif

#ifdef _WIDENER_ENABLED
extern EAS_VOID_PTR	 				EAS_Widener;
#define EAS_WIDENER_INTERFACE		&EAS_Widener
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_WidenerData;
#define EAS_WIDENER_DATA			&eas_WidenerData
#else
#define EAS_WIDENER_DATA			NULL
#endif
#else
#define EAS_WIDENER_INTERFACE		NULL
#define EAS_WIDENER_DATA			NULL
#endif

#ifdef _GRAPHIC_EQ_ENABLED
extern EAS_VOID_PTR	 				EAS_GraphicEQ;
#define EAS_GRAPHIC_EQ_INTERFACE	&EAS_GraphicEQ
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_GraphicEQData;
#define EAS_GRAPHIC_EQ_DATA			&eas_GraphicEQData
#else
#define EAS_GRAPHIC_EQ_DATA			NULL
#endif
#else
#define EAS_GRAPHIC_EQ_INTERFACE	NULL
#define EAS_GRAPHIC_EQ_DATA			NULL
#endif

#ifdef _WOW_ENABLED
extern EAS_VOID_PTR	 				EAS_Wow;
#define EAS_WOW_INTERFACE			&EAS_Wow
#ifdef _STATIC_MEMORY
#error "WOW module requires dynamic memory model"
#else
#define EAS_WOW_DATA				NULL
#endif
#else
#define EAS_WOW_INTERFACE			NULL
#define EAS_WOW_DATA				NULL
#endif

#ifdef _TONECONTROLEQ_ENABLED
extern EAS_VOID_PTR					EAS_ToneControlEQ;
#define EAS_TONECONTROLEQ_INTERFACE	&EAS_ToneControlEQ
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_ToneControlEQData;
#define EAS_TONECONTROLEQ_DATA		&eas_ToneControlEQData
#else
#define EAS_TONECONTROLEQ_DATA		NULL
#endif
#else
#define EAS_TONECONTROLEQ_INTERFACE	NULL
#define EAS_TONECONTROLEQ_DATA		NULL
#endif

/*lint -e{605} not pretty, but it works */
EAS_VOID_PTR const effectsModules[] = 
{
	EAS_ENHANCER_INTERFACE,
	EAS_COMPRESSOR_INTERFACE,
	EAS_REVERB_INTERFACE,
	EAS_CHORUS_INTERFACE,
	EAS_WIDENER_INTERFACE,
	EAS_GRAPHIC_EQ_INTERFACE,
	EAS_WOW_INTERFACE,
	EAS_MAXIMIZER_INTERFACE,
	EAS_TONECONTROLEQ_INTERFACE
};

EAS_VOID_PTR const effectsData[] =
{
	EAS_ENHANCER_DATA,
	EAS_COMPRESSOR_DATA,
	EAS_REVERB_DATA,
	EAS_CHORUS_DATA,
	EAS_WIDENER_DATA,
	EAS_GRAPHIC_EQ_DATA,
	EAS_WOW_DATA,
	EAS_MAXIMIZER_DATA,
	EAS_TONECONTROLEQ_DATA
};

/*----------------------------------------------------------------------------
 *
 * Optional Modules
 *
 * These declarations are used by the EAS library to locate  
 * effects modules. 
 *----------------------------------------------------------------------------
*/

#ifdef _METRICS_ENABLED
extern EAS_VOID_PTR					EAS_Metrics;
#define EAS_METRICS_INTERFACE		&EAS_Metrics
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_MetricsData;
#define EAS_METRICS_DATA			&eas_MetricsData
#else
#define EAS_METRICS_DATA			NULL
#endif
#else
#define EAS_METRICS_INTERFACE		NULL
#define EAS_METRICS_DATA			NULL
#endif

#ifdef MMAPI_SUPPORT
extern EAS_VOID_PTR					EAS_TC_Parser;
#define EAS_TONE_CONTROL_PARSER		&EAS_TC_Parser
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_TCData;
#define EAS_TONE_CONTROL_DATA		&eas_TCData
#else
#define EAS_TONE_CONTROL_DATA		NULL
#endif
#else
#define EAS_TONE_CONTROL_PARSER		NULL
#define EAS_TONE_CONTROL_DATA		NULL
#endif

/*lint -e{605} not pretty, but it works */
EAS_VOID_PTR const optionalModules[] = 
{
	EAS_TONE_CONTROL_PARSER,
	EAS_METRICS_INTERFACE
};

EAS_VOID_PTR const optionalData[] =
{
	EAS_TONE_CONTROL_DATA,
	EAS_METRICS_DATA
};

/*----------------------------------------------------------------------------
 * EAS_CMStaticMemoryModel()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function returns true if EAS has been configured for 
 * a static memory model. There are some limitations in the
 * static memory model, see the documentation for more
 * information.
 *
 * Outputs:
 *  returns EAS_TRUE if a module is found
 *----------------------------------------------------------------------------
*/
EAS_BOOL EAS_CMStaticMemoryModel (void)
{
#ifdef _STATIC_MEMORY
	return EAS_TRUE;
#else
	return EAS_FALSE;
#endif
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumModules()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to optional modules. 
 *
 * Inputs:
 *  module			- module number
 *
 * Outputs:
 *  returns a pointer to the module function table or NULL if no module
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumModules (EAS_INT module)
{

	if (module >= (EAS_INT) NUM_PARSER_MODULES)
		return NULL;
	return parserModules[module];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumData()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to static memory allocations. 
 *
 * Inputs:
 *  dataModule			- enumerated module number
 *
 * Outputs:
 * Returns handle to data or NULL if not found
 *----------------------------------------------------------------------------
*/
/*lint -esym(715, dataModule) used only when _STATIC_MEMORY is defined */
EAS_VOID_PTR EAS_CMEnumData (EAS_INT dataModule)
{

#ifdef _STATIC_MEMORY
	switch (dataModule)
	{

	/* main instance data for synthesizer */
	case EAS_CM_EAS_DATA:
		return &eas_Data;

	/* mix buffer for mix engine */
	case EAS_CM_MIX_BUFFER:
		/*lint -e{545} lint doesn't like this because it sees the underlying type */
		return &eas_MixBuffer;

	/* instance data for synth */
	case EAS_CM_SYNTH_DATA:
		return &eas_Synth;

	/* instance data for MIDI parser */
	case EAS_CM_MIDI_DATA:
		return &eas_MIDI;
	
	/* instance data for SMF parser */
	case EAS_CM_SMF_DATA:
		return &eas_SMFData;

#ifdef _XMF_PARSER
	/* instance data for XMF parser */
	case EAS_CM_XMF_DATA:
		return &eas_XMFData;
#endif		

#ifdef _SMAF_PARSER
	/* instance data for SMAF parser */
	case EAS_CM_SMAF_DATA:
		return &eas_SMAFData;
#endif		

	/* instance data for the PCM engine */
	case EAS_CM_PCM_DATA:
		/*lint -e{545} lint doesn't like this because it sees the underlying type */
		return &eas_PCMData;

	case EAS_CM_MIDI_STREAM_DATA:
		return &eas_MIDIData;

#ifdef _OTA_PARSER
	/* instance data for OTA parser */
	case EAS_CM_OTA_DATA:
		return &eas_OTAData;
#endif		
		
#ifdef _IMELODY_PARSER
	/* instance data for iMelody parser */
	case EAS_CM_IMELODY_DATA:
		return &eas_iMelodyData;
#endif		

#ifdef _RTTTL_PARSER
	/* instance data for RTTTL parser */
	case EAS_CM_RTTTL_DATA:
		return &eas_RTTTLData;
#endif		

#ifdef _WAVE_PARSER
	/* instance data for WAVE parser */
	case EAS_CM_WAVE_DATA:
		return &eas_WaveData;
#endif		

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
	/* instance data for CMF parser */
	case EAS_CM_CMF_DATA:
		return &eas_CMFData;
#endif

	default:
		return NULL;
	}

#else
	return NULL;
#endif
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumFXModules()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to optional effects modules. 
 *
 * Inputs:
 *  module			- enumerated module number
 *  pModule			- pointer to module interface
 *
 * Outputs:
 *  Returns pointer to function table or NULL if not found
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumFXModules (EAS_INT module)
{

	if (module >= NUM_EFFECTS_MODULES)
		return NULL;
	return effectsModules[module];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumFXData()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to static memory allocations. 
 *
 * Inputs:
 *  dataModule			- enumerated module number
 *  pData				- pointer to handle variable
 *
 * Outputs:
 * Returns handle to data or NULL if not found
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumFXData (EAS_INT dataModule)
{

	if (dataModule >= NUM_EFFECTS_MODULES)
		return NULL;
	return effectsData[dataModule];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumOptModules()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to optional modules. 
 *
 * Inputs:
 *  module			- enumerated module number
 *
 * Outputs:
 *  returns pointer to function table or NULL if no module
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumOptModules (EAS_INT module)
{

	/* sanity check */
	if (module >= NUM_OPTIONAL_MODULES)
		return EAS_FALSE;
	return optionalModules[module];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumOptData()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to static memory allocations. 
 *
 * Inputs:
 *  dataModule			- enumerated module number
 *
 * Outputs:
 * Returns handle to data or NULL if not found
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumOptData (EAS_INT dataModule)
{

	if (dataModule >= NUM_OPTIONAL_MODULES)
		return NULL;
	return optionalData[dataModule];
}


