blob: c45fbb71f643dc026a36609f05ac9c45c8030bd0 [file] [log] [blame]
/*----------------------------------------------------------------------------
*
* 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];
}