eas_config.c revision 7df30109963092559d3760c0661a020f9daf1030
1/*----------------------------------------------------------------------------
2 *
3 * File:
4 * eas_config.c
5 *
6 * Contents and purpose:
7 * This file contains the Configuration Module interface (CM). The CM
8 * is a module compiled external to the library that sets the configuration
9 * for this build. It allows the library to find optional components and
10 * links to static memory allocations (when used in a static configuration).
11 *
12 * DO NOT MODIFY THIS FILE!
13 *
14 * NOTE: This module is not intended to be modified by the customer. It
15 * needs to be included in the build process with the correct configuration
16 * defines (see the library documentation for information on how to configure
17 * the library).
18 *
19 * Copyright Sonic Network Inc. 2004-2006
20
21 * Licensed under the Apache License, Version 2.0 (the "License");
22 * you may not use this file except in compliance with the License.
23 * You may obtain a copy of the License at
24 *
25 *      http://www.apache.org/licenses/LICENSE-2.0
26 *
27 * Unless required by applicable law or agreed to in writing, software
28 * distributed under the License is distributed on an "AS IS" BASIS,
29 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
30 * See the License for the specific language governing permissions and
31 * limitations under the License.
32 *
33 *----------------------------------------------------------------------------
34 * Revision Control:
35 *   $Revision: 796 $
36 *   $Date: 2007-08-01 00:15:25 -0700 (Wed, 01 Aug 2007) $
37 *----------------------------------------------------------------------------
38*/
39
40#include "eas.h"
41#include "eas_config.h"
42
43
44#ifdef _MFI_PARSER
45/*----------------------------------------------------------------------------
46 * Vendor/Device ID for MFi Extensions
47 *
48 * Define the preprocessor symbols to establish the vendor ID and
49 * device ID for the MFi PCM/ADPCM extensions.
50 *----------------------------------------------------------------------------
51*/
52const EAS_U8 eas_MFIVendorIDMSB = (MFI_VENDOR_ID >> 8) & 0xff;
53const EAS_U8 eas_MFIVendorIDLSB = MFI_VENDOR_ID & 0xff;
54const EAS_U8 eas_MFIDeviceID = MFI_DEVICE_ID;
55#endif
56
57/*----------------------------------------------------------------------------
58 *
59 * parserModules
60 *
61 * This structure is used by the EAS library to locate file parsing
62 * modules.
63 *----------------------------------------------------------------------------
64*/
65
66/* define the external file parsers */
67extern EAS_VOID_PTR EAS_SMF_Parser;
68
69#ifdef _XMF_PARSER
70extern EAS_VOID_PTR EAS_XMF_Parser;
71#endif
72
73#ifdef _SMAF_PARSER
74extern EAS_VOID_PTR EAS_SMAF_Parser;
75#endif
76
77#ifdef _WAVE_PARSER
78extern EAS_VOID_PTR EAS_Wave_Parser;
79#endif
80
81#ifdef _OTA_PARSER
82extern EAS_VOID_PTR EAS_OTA_Parser;
83#endif
84
85#ifdef _IMELODY_PARSER
86extern EAS_VOID_PTR EAS_iMelody_Parser;
87#endif
88
89#ifdef _RTTTL_PARSER
90extern EAS_VOID_PTR EAS_RTTTL_Parser;
91#endif
92
93#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
94extern EAS_VOID_PTR EAS_CMF_Parser;
95#endif
96
97/* initalize pointers to parser interfaces */
98/*lint -e{605} not pretty, but it works */
99EAS_VOID_PTR const parserModules[] =
100{
101	&EAS_SMF_Parser,
102
103#ifdef _XMF_PARSER
104	&EAS_XMF_Parser,
105#endif
106
107#ifdef _WAVE_PARSER
108	&EAS_Wave_Parser,
109#endif
110
111#ifdef _SMAF_PARSER
112	&EAS_SMAF_Parser,
113#endif
114
115#ifdef _OTA_PARSER
116	&EAS_OTA_Parser,
117#endif
118
119#ifdef _IMELODY_PARSER
120	&EAS_iMelody_Parser,
121#endif
122
123#ifdef _RTTTL_PARSER
124	&EAS_RTTTL_Parser,
125#endif
126
127#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
128	&EAS_CMF_Parser
129#endif
130};
131#define NUM_PARSER_MODULES (sizeof(parserModules) / sizeof(EAS_VOID_PTR))
132
133/*----------------------------------------------------------------------------
134 * Data Modules
135 *----------------------------------------------------------------------------
136*/
137
138#ifdef _STATIC_MEMORY
139extern EAS_VOID_PTR eas_SMFData;
140extern EAS_VOID_PTR eas_Data;
141extern EAS_VOID_PTR eas_MixBuffer;
142extern EAS_VOID_PTR eas_Synth;
143extern EAS_VOID_PTR eas_MIDI;
144extern EAS_VOID_PTR eas_PCMData;
145extern EAS_VOID_PTR eas_MIDIData;
146
147#ifdef _XMF_PARSER
148extern EAS_VOID_PTR eas_XMFData;
149#endif
150
151#ifdef _SMAF_PARSER
152extern EAS_VOID_PTR eas_SMAFData;
153#endif
154
155#ifdef _OTA_PARSER
156extern EAS_VOID_PTR eas_OTAData;
157#endif
158
159#ifdef _IMELODY_PARSER
160extern EAS_VOID_PTR eas_iMelodyData;
161#endif
162
163#ifdef _RTTTL_PARSER
164extern EAS_VOID_PTR eas_RTTTLData;
165#endif
166
167#ifdef _WAVE_PARSER
168extern EAS_VOID_PTR eas_WaveData;
169#endif
170
171#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
172extern EAS_VOID_PTR eas_CMFData;
173#endif
174#endif
175
176/*----------------------------------------------------------------------------
177 *
178 * Effects Modules
179 *
180 * These declarations are used by the EAS library to locate
181 * effects modules.
182 *----------------------------------------------------------------------------
183*/
184
185#ifdef _ENHANCER_ENABLED
186extern EAS_VOID_PTR					EAS_Enhancer;
187#define EAS_ENHANCER_INTERFACE		&EAS_Enhancer
188#ifdef _STATIC_MEMORY
189extern EAS_VOID_PTR					eas_EnhancerData;
190#define EAS_ENHANCER_DATA			&eas_EnhancerData
191#else
192#define EAS_ENHANCER_DATA			NULL
193#endif
194#else
195#define EAS_ENHANCER_INTERFACE		NULL
196#define EAS_ENHANCER_DATA			NULL
197#endif
198
199#ifdef _COMPRESSOR_ENABLED
200extern EAS_VOID_PTR	 				EAS_Compressor;
201#define EAS_COMPRESSOR_INTERFACE	&EAS_Compressor
202#ifdef _STATIC_MEMORY
203extern EAS_VOID_PTR					eas_CompressorData;
204#define EAS_COMPRESSOR_DATA			&eas_CompressorData
205#else
206#define EAS_COMPRESSOR_DATA			NULL
207#endif
208#else
209#define EAS_COMPRESSOR_INTERFACE	NULL
210#define EAS_COMPRESSOR_DATA			NULL
211#endif
212
213#ifdef _MAXIMIZER_ENABLED
214extern EAS_VOID_PTR	 				EAS_Maximizer;
215#define EAS_MAXIMIZER_INTERFACE		&EAS_Maximizer
216#ifdef _STATIC_MEMORY
217extern EAS_VOID_PTR					eas_MaximizerData;
218#define EAS_MAXIMIZER_DATA			&eas_MaximizerData
219#else
220#define EAS_MAXIMIZER_DATA			NULL
221#endif
222#else
223#define EAS_MAXIMIZER_INTERFACE	NULL
224#define EAS_MAXIMIZER_DATA			NULL
225#endif
226
227
228#ifdef _REVERB_ENABLED
229extern EAS_VOID_PTR	 				EAS_Reverb;
230#define EAS_REVERB_INTERFACE		&EAS_Reverb
231#ifdef _STATIC_MEMORY
232extern EAS_VOID_PTR					eas_ReverbData;
233#define EAS_REVERB_DATA				&eas_ReverbData
234#else
235#define EAS_REVERB_DATA				NULL
236#endif
237#else
238#define EAS_REVERB_INTERFACE		NULL
239#define EAS_REVERB_DATA				NULL
240#endif
241
242#ifdef _CHORUS_ENABLED
243extern EAS_VOID_PTR	 				EAS_Chorus;
244#define EAS_CHORUS_INTERFACE		&EAS_Chorus
245#ifdef _STATIC_MEMORY
246extern EAS_VOID_PTR					eas_ChorusData;
247#define EAS_CHORUS_DATA				&eas_ChorusData
248#else
249#define EAS_CHORUS_DATA				NULL
250#endif
251#else
252#define EAS_CHORUS_INTERFACE		NULL
253#define EAS_CHORUS_DATA				NULL
254#endif
255
256#ifdef _WIDENER_ENABLED
257extern EAS_VOID_PTR	 				EAS_Widener;
258#define EAS_WIDENER_INTERFACE		&EAS_Widener
259#ifdef _STATIC_MEMORY
260extern EAS_VOID_PTR					eas_WidenerData;
261#define EAS_WIDENER_DATA			&eas_WidenerData
262#else
263#define EAS_WIDENER_DATA			NULL
264#endif
265#else
266#define EAS_WIDENER_INTERFACE		NULL
267#define EAS_WIDENER_DATA			NULL
268#endif
269
270#ifdef _GRAPHIC_EQ_ENABLED
271extern EAS_VOID_PTR	 				EAS_GraphicEQ;
272#define EAS_GRAPHIC_EQ_INTERFACE	&EAS_GraphicEQ
273#ifdef _STATIC_MEMORY
274extern EAS_VOID_PTR					eas_GraphicEQData;
275#define EAS_GRAPHIC_EQ_DATA			&eas_GraphicEQData
276#else
277#define EAS_GRAPHIC_EQ_DATA			NULL
278#endif
279#else
280#define EAS_GRAPHIC_EQ_INTERFACE	NULL
281#define EAS_GRAPHIC_EQ_DATA			NULL
282#endif
283
284#ifdef _WOW_ENABLED
285extern EAS_VOID_PTR	 				EAS_Wow;
286#define EAS_WOW_INTERFACE			&EAS_Wow
287#ifdef _STATIC_MEMORY
288#error "WOW module requires dynamic memory model"
289#else
290#define EAS_WOW_DATA				NULL
291#endif
292#else
293#define EAS_WOW_INTERFACE			NULL
294#define EAS_WOW_DATA				NULL
295#endif
296
297#ifdef _TONECONTROLEQ_ENABLED
298extern EAS_VOID_PTR					EAS_ToneControlEQ;
299#define EAS_TONECONTROLEQ_INTERFACE	&EAS_ToneControlEQ
300#ifdef _STATIC_MEMORY
301extern EAS_VOID_PTR					eas_ToneControlEQData;
302#define EAS_TONECONTROLEQ_DATA		&eas_ToneControlEQData
303#else
304#define EAS_TONECONTROLEQ_DATA		NULL
305#endif
306#else
307#define EAS_TONECONTROLEQ_INTERFACE	NULL
308#define EAS_TONECONTROLEQ_DATA		NULL
309#endif
310
311/*lint -e{605} not pretty, but it works */
312EAS_VOID_PTR const effectsModules[] =
313{
314	EAS_ENHANCER_INTERFACE,
315	EAS_COMPRESSOR_INTERFACE,
316	EAS_REVERB_INTERFACE,
317	EAS_CHORUS_INTERFACE,
318	EAS_WIDENER_INTERFACE,
319	EAS_GRAPHIC_EQ_INTERFACE,
320	EAS_WOW_INTERFACE,
321	EAS_MAXIMIZER_INTERFACE,
322	EAS_TONECONTROLEQ_INTERFACE
323};
324
325EAS_VOID_PTR const effectsData[] =
326{
327	EAS_ENHANCER_DATA,
328	EAS_COMPRESSOR_DATA,
329	EAS_REVERB_DATA,
330	EAS_CHORUS_DATA,
331	EAS_WIDENER_DATA,
332	EAS_GRAPHIC_EQ_DATA,
333	EAS_WOW_DATA,
334	EAS_MAXIMIZER_DATA,
335	EAS_TONECONTROLEQ_DATA
336};
337
338/*----------------------------------------------------------------------------
339 *
340 * Optional Modules
341 *
342 * These declarations are used by the EAS library to locate
343 * effects modules.
344 *----------------------------------------------------------------------------
345*/
346
347#ifdef _METRICS_ENABLED
348extern EAS_VOID_PTR					EAS_Metrics;
349#define EAS_METRICS_INTERFACE		&EAS_Metrics
350#ifdef _STATIC_MEMORY
351extern EAS_VOID_PTR					eas_MetricsData;
352#define EAS_METRICS_DATA			&eas_MetricsData
353#else
354#define EAS_METRICS_DATA			NULL
355#endif
356#else
357#define EAS_METRICS_INTERFACE		NULL
358#define EAS_METRICS_DATA			NULL
359#endif
360
361#ifdef MMAPI_SUPPORT
362extern EAS_VOID_PTR					EAS_TC_Parser;
363#define EAS_TONE_CONTROL_PARSER		&EAS_TC_Parser
364#ifdef _STATIC_MEMORY
365extern EAS_VOID_PTR					eas_TCData;
366#define EAS_TONE_CONTROL_DATA		&eas_TCData
367#else
368#define EAS_TONE_CONTROL_DATA		NULL
369#endif
370#else
371#define EAS_TONE_CONTROL_PARSER		NULL
372#define EAS_TONE_CONTROL_DATA		NULL
373#endif
374
375/*lint -e{605} not pretty, but it works */
376EAS_VOID_PTR const optionalModules[] =
377{
378	EAS_TONE_CONTROL_PARSER,
379	EAS_METRICS_INTERFACE
380};
381
382EAS_VOID_PTR const optionalData[] =
383{
384	EAS_TONE_CONTROL_DATA,
385	EAS_METRICS_DATA
386};
387
388/*----------------------------------------------------------------------------
389 * EAS_CMStaticMemoryModel()
390 *----------------------------------------------------------------------------
391 * Purpose:
392 * This function returns true if EAS has been configured for
393 * a static memory model. There are some limitations in the
394 * static memory model, see the documentation for more
395 * information.
396 *
397 * Outputs:
398 *  returns EAS_TRUE if a module is found
399 *----------------------------------------------------------------------------
400*/
401EAS_BOOL EAS_CMStaticMemoryModel (void)
402{
403#ifdef _STATIC_MEMORY
404	return EAS_TRUE;
405#else
406	return EAS_FALSE;
407#endif
408}
409
410/*----------------------------------------------------------------------------
411 * EAS_CMEnumModules()
412 *----------------------------------------------------------------------------
413 * Purpose:
414 * This function is used to find pointers to optional modules.
415 *
416 * Inputs:
417 *  module			- module number
418 *
419 * Outputs:
420 *  returns a pointer to the module function table or NULL if no module
421 *----------------------------------------------------------------------------
422*/
423EAS_VOID_PTR EAS_CMEnumModules (EAS_INT module)
424{
425
426	if (module >= (EAS_INT) NUM_PARSER_MODULES)
427		return NULL;
428	return parserModules[module];
429}
430
431/*----------------------------------------------------------------------------
432 * EAS_CMEnumData()
433 *----------------------------------------------------------------------------
434 * Purpose:
435 * This function is used to find pointers to static memory allocations.
436 *
437 * Inputs:
438 *  dataModule			- enumerated module number
439 *
440 * Outputs:
441 * Returns handle to data or NULL if not found
442 *----------------------------------------------------------------------------
443*/
444/*lint -esym(715, dataModule) used only when _STATIC_MEMORY is defined */
445EAS_VOID_PTR EAS_CMEnumData (EAS_INT dataModule)
446{
447
448#ifdef _STATIC_MEMORY
449	switch (dataModule)
450	{
451
452	/* main instance data for synthesizer */
453	case EAS_CM_EAS_DATA:
454		return &eas_Data;
455
456	/* mix buffer for mix engine */
457	case EAS_CM_MIX_BUFFER:
458		/*lint -e{545} lint doesn't like this because it sees the underlying type */
459		return &eas_MixBuffer;
460
461	/* instance data for synth */
462	case EAS_CM_SYNTH_DATA:
463		return &eas_Synth;
464
465	/* instance data for MIDI parser */
466	case EAS_CM_MIDI_DATA:
467		return &eas_MIDI;
468
469	/* instance data for SMF parser */
470	case EAS_CM_SMF_DATA:
471		return &eas_SMFData;
472
473#ifdef _XMF_PARSER
474	/* instance data for XMF parser */
475	case EAS_CM_XMF_DATA:
476		return &eas_XMFData;
477#endif
478
479#ifdef _SMAF_PARSER
480	/* instance data for SMAF parser */
481	case EAS_CM_SMAF_DATA:
482		return &eas_SMAFData;
483#endif
484
485	/* instance data for the PCM engine */
486	case EAS_CM_PCM_DATA:
487		/*lint -e{545} lint doesn't like this because it sees the underlying type */
488		return &eas_PCMData;
489
490	case EAS_CM_MIDI_STREAM_DATA:
491		return &eas_MIDIData;
492
493#ifdef _OTA_PARSER
494	/* instance data for OTA parser */
495	case EAS_CM_OTA_DATA:
496		return &eas_OTAData;
497#endif
498
499#ifdef _IMELODY_PARSER
500	/* instance data for iMelody parser */
501	case EAS_CM_IMELODY_DATA:
502		return &eas_iMelodyData;
503#endif
504
505#ifdef _RTTTL_PARSER
506	/* instance data for RTTTL parser */
507	case EAS_CM_RTTTL_DATA:
508		return &eas_RTTTLData;
509#endif
510
511#ifdef _WAVE_PARSER
512	/* instance data for WAVE parser */
513	case EAS_CM_WAVE_DATA:
514		return &eas_WaveData;
515#endif
516
517#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
518	/* instance data for CMF parser */
519	case EAS_CM_CMF_DATA:
520		return &eas_CMFData;
521#endif
522
523	default:
524		return NULL;
525	}
526
527#else
528	return NULL;
529#endif
530}
531
532/*----------------------------------------------------------------------------
533 * EAS_CMEnumFXModules()
534 *----------------------------------------------------------------------------
535 * Purpose:
536 * This function is used to find pointers to optional effects modules.
537 *
538 * Inputs:
539 *  module			- enumerated module number
540 *  pModule			- pointer to module interface
541 *
542 * Outputs:
543 *  Returns pointer to function table or NULL if not found
544 *----------------------------------------------------------------------------
545*/
546EAS_VOID_PTR EAS_CMEnumFXModules (EAS_INT module)
547{
548
549	if (module >= NUM_EFFECTS_MODULES)
550		return NULL;
551	return effectsModules[module];
552}
553
554/*----------------------------------------------------------------------------
555 * EAS_CMEnumFXData()
556 *----------------------------------------------------------------------------
557 * Purpose:
558 * This function is used to find pointers to static memory allocations.
559 *
560 * Inputs:
561 *  dataModule			- enumerated module number
562 *  pData				- pointer to handle variable
563 *
564 * Outputs:
565 * Returns handle to data or NULL if not found
566 *----------------------------------------------------------------------------
567*/
568EAS_VOID_PTR EAS_CMEnumFXData (EAS_INT dataModule)
569{
570
571	if (dataModule >= NUM_EFFECTS_MODULES)
572		return NULL;
573	return effectsData[dataModule];
574}
575
576/*----------------------------------------------------------------------------
577 * EAS_CMEnumOptModules()
578 *----------------------------------------------------------------------------
579 * Purpose:
580 * This function is used to find pointers to optional modules.
581 *
582 * Inputs:
583 *  module			- enumerated module number
584 *
585 * Outputs:
586 *  returns pointer to function table or NULL if no module
587 *----------------------------------------------------------------------------
588*/
589EAS_VOID_PTR EAS_CMEnumOptModules (EAS_INT module)
590{
591
592	/* sanity check */
593	if (module >= NUM_OPTIONAL_MODULES)
594		return EAS_FALSE;
595	return optionalModules[module];
596}
597
598/*----------------------------------------------------------------------------
599 * EAS_CMEnumOptData()
600 *----------------------------------------------------------------------------
601 * Purpose:
602 * This function is used to find pointers to static memory allocations.
603 *
604 * Inputs:
605 *  dataModule			- enumerated module number
606 *
607 * Outputs:
608 * Returns handle to data or NULL if not found
609 *----------------------------------------------------------------------------
610*/
611EAS_VOID_PTR EAS_CMEnumOptData (EAS_INT dataModule)
612{
613
614	if (dataModule >= NUM_OPTIONAL_MODULES)
615		return NULL;
616	return optionalData[dataModule];
617}
618
619
620