/*----------------------------------------------------------------------------
 *
 * File:
 * eas_config.h
 *
 * Contents and purpose:
 * This header declares 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).
 *
 * 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).
 *
 * DO NOT MODIFY THIS FILE!
 *
 * 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: 82 $
 *   $Date: 2006-07-10 11:45:19 -0700 (Mon, 10 Jul 2006) $
 *----------------------------------------------------------------------------
*/

// sentinel
#ifndef _EAS_CONFIG_H
#define _EAS_CONFIG_H

#include "eas_types.h"

/* list of enumerators for optional modules */
typedef enum {
    EAS_CM_FILE_PARSERS = 1
} E_CM_ENUM_MODULES;

/* list of enumerators for module and memory pointers */
typedef enum {
    EAS_CM_EAS_DATA = 1,
    EAS_CM_MIX_BUFFER,
    EAS_CM_SYNTH_DATA,
    EAS_CM_MIDI_DATA,
    EAS_CM_SMF_DATA,
    EAS_CM_XMF_DATA,
    EAS_CM_SMAF_DATA,
    EAS_CM_PCM_DATA,
    EAS_CM_MIDI_STREAM_DATA,
    EAS_CM_METRICS_DATA,
    EAS_CM_OTA_DATA,
    EAS_CM_IMELODY_DATA,
    EAS_CM_RTTTL_DATA,
    EAS_CM_WAVE_DATA,
    EAS_CM_CMF_DATA
} E_CM_DATA_MODULES;

typedef struct
{
    int maxSMFStreams;
    void *pSMFData;
    void *pSMFStream;
} S_EAS_SMF_PTRS;

typedef struct
{
    int maxSMAFStreams;
    void *pSMAFData;
    void *pSMAFStream;
} S_EAS_SMAF_PTRS;

/*----------------------------------------------------------------------------
 * 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);

/*----------------------------------------------------------------------------
 * 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);

/*----------------------------------------------------------------------------
 * 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
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumData (EAS_INT dataModule);

/*----------------------------------------------------------------------------
 * 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);

/*----------------------------------------------------------------------------
 * 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);

/*----------------------------------------------------------------------------
 * 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);

/*----------------------------------------------------------------------------
 * 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);

#endif /* end _EAS_CONFIG_H */