diff g23m/condat/ms/src/mfw/mfw_midi.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/g23m/condat/ms/src/mfw/mfw_midi.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,996 @@
+/*
++--------------------------------------------------------------------+
+| PROJECT:	MMI-Framework (8417)		$Workfile::	mfw_midi.c	    $|
+| $Author::	NDH							$Revision::	1			    $|
+| CREATED:	21.05.04		     		$Modtime::	21.05.04 14:58	$|
+| STATE  :	code														 |
++--------------------------------------------------------------------+
+
+   MODULE  : MFW_MIDI
+
+   PURPOSE : This module contains Midi Riveria Interface functions.
+
+   HISTORY  :
+
+   	Nov 21, 2005    REF:ER OMAPS00057430 nekkareb
+   	Description:   AAC Ringer Implementation
+	Solution: The Midi Ringer application has been enhanced to support AAC as ringer.
+
+   	Nov 23, 2005 REF : DR OMAPS00057378   x0039928
+	Bug: All MIDI files are not displayed in MMI in locosto-lite
+	Fix: Buffer memory allocated to copy the file contents is freed
+	properly and copying file from FFS to LFS is not terminated if error is
+	returned for just any one file, instead it tries to copy other files.
+
+	Nov 09, 2005    REF:DR OMAPS00049167  x0039928	
+	Description:   The midi files cannot be heard if the audio channel selected is 'Mono'	
+	Solution: Midi Player params are made global so that settings are retained across.
+	
+   	Nov 04, 2005    REF:DRT OMAPS00053737  xdeepadh
+	Description:   MIDI Ringer Linear Flash Support.
+	Solution: The Midi Ringer application has been enhanced to loadand play the midi files from LFS.
+	   
+   	Nov 02, 2005    REF:ER OMAPS00039044  xdeepadh
+	Description:   Mp3 Ringer Implementation
+	Solution: The Midi Ringer application has been enhanced to support mp3 as ringer.
+	The interface  function names have been modified.
+	
+	Aug 17, 2005      REF: CHG 33822 xdeepadh
+	Description: Configuring the Audio path from Midi Test Application Menu
+	Solution: Loading the audio profile for headset and handheld.
+	
+	Aug 05, 2005     xdeepadh
+	Description: Configuring the audio path for midi
+
+	Apr 05, 2005    REF: ENH 29994 xdeepadh
+	Description: Implementation of Generic Midi Ringer and Modification of existing Midi Test Application
+	Solution: Generic Midi Ringer and Midi Test Application were implemented.
+
+*/
+
+#define ENTITY_MFW
+/*
+** Include Files
+*/
+
+#include "rv_swe.h"
+
+/* includes */
+#include <string.h>
+#include "typedefs.h"
+#include "mfw_midi.h"
+#include "mfw_mfw.h"
+#include "mfw_sys.h"
+#ifdef FF_MMI_AUDIO_PROFILE
+#include "mfw_mme.h"
+#endif
+//Nov 04, 2005    REF:DRT OMAPS00053737  xdeepadh
+#ifdef FF_MIDI_LOAD_FROM_LFS
+#include "ffs/ffs_api.h"
+#endif	//FF_MIDI_LOAD_FROM_LFS
+
+/*Local defines*/
+
+#define MIDI_FIRST_FILE_INDEX 0
+#define MIDI_MAX_FILES 10
+/// Maximum length of the audio data filename (excluded EOS character).
+#define FILENAME_MAX_LEN 47
+/*
+** Local Variable Definitions
+*/
+static T_RV_RETURN_PATH midi_return_path;
+
+/* Global variables*/
+int mfw_player_currently_playing_idx=-1;
+UBYTE mfw_player_exit_flag=PLAYER_EXIT_FLAG_TRUE;
+UBYTE mfw_player_playback_loop_flag=FALSE;
+//Aug 05, 2005     xdeepadh
+#ifdef FF_MMI_AUDIO_PROFILE
+//Flag to indicate whether audio media is being played.
+extern UBYTE mfwAudPlay;
+extern void mfw_audio_set_device(int type);
+#endif //FF_MMI_AUDIO_PROFILE
+
+// Nov 09, 2005    REF:DR OMAPS00049167  x0039928
+// Fix : Declare player_para as global variable.
+#ifdef FF_MMI_TEST_MIDI	
+T_AS_PLAYER_PARAMS player_para;
+#endif
+
+/*
+** Public function Definitions
+*/
+
+/*******************************************************************************
+
+ $Function:     mfw_player_init
+
+ $Description: initialize global variables
+
+ $Returns:
+
+ $Arguments: 
+
+*******************************************************************************/
+void mfw_player_init(void)
+{
+    // Nov 09, 2005    REF:DR OMAPS00049167  x0039928
+    // Fix : Initialize the player parameter to the default values.
+    #ifdef FF_MMI_TEST_MIDI
+     	TRACE_FUNCTION("mfw_player_init");
+	player_para.midi.output_channels = MIDI_CHANNEL_MONO;	
+	player_para.midi.voice_limit = FF_MIDI_VOICE_LIMIT;
+	as_player_set_params(AS_PLAYER_TYPE_MIDI,&player_para);
+     #endif
+ }
+
+/*
+** Public function Definitions
+*/
+
+/*******************************************************************************
+
+ $Function:    mfw_player_set_loop_on
+
+ $Description:		Sets the playback of the midi file in loop on mode(repeat).
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments: 		None
+
+*******************************************************************************/
+SHORT mfw_player_set_loop_on(void)
+{
+	TRACE_FUNCTION("mfw_player_set_loop_on");
+	mfw_player_playback_loop_flag = TRUE;
+	return MFW_PLAYER_TEST_OK;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_player_set_loop_off
+
+ $Description:		Sets the playback of the midi file in loop off mode(once)
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments:		 None
+
+*******************************************************************************/
+SHORT mfw_player_set_loop_off(void)
+{
+	TRACE_FUNCTION("mfw_player_set_loop_off");
+	mfw_player_playback_loop_flag = FALSE;
+	return MFW_PLAYER_TEST_OK;
+}
+
+
+
+/*******************************************************************************
+
+ $Function:     mfw_player_set_channel_mono
+
+ $Description:Sets the channel to mono
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments: None 
+
+*******************************************************************************/
+SHORT mfw_player_set_channel_mono(void)
+{
+#ifdef FF_MMI_TEST_MIDI
+	T_AS_RET player_return;
+	TRACE_EVENT("mfw_player_set_channel_mono");
+	player_para.midi.output_channels=MIDI_CHANNEL_MONO;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_MIDI,&player_para);
+	if(player_return==AS_OK)
+         return MFW_PLAYER_TEST_OK;
+#else
+         return MFW_PLAYER_TEST_OK;
+
+#endif
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_player_set_channel_stereo
+
+ $Description:Sets channel to stereo
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments:  None
+
+*******************************************************************************/
+SHORT mfw_player_set_channel_stereo(void)
+{
+#ifdef FF_MMI_TEST_MIDI
+	T_AS_RET player_return;
+	TRACE_EVENT("mfw_player_set_channel_stereo");
+	player_para.midi.output_channels=MIDI_CHANNEL_STEREO;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_MIDI,&player_para);
+	if(player_return==AS_OK)
+         return MFW_PLAYER_TEST_OK;
+#else
+         return MFW_PLAYER_TEST_OK;
+
+#endif
+}
+
+/*******************************************************************************
+
+ $Function:            mfw_player_midi_set_voice_limit
+
+ $Description:		Sets the voicelimit
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments: 		voice_limit:The voice limit to be set
+
+*******************************************************************************/
+SHORT mfw_player_midi_set_voice_limit(int voice_limit)
+	{
+#ifdef FF_MMI_TEST_MIDI
+	T_AS_RET player_return;
+	TRACE_EVENT_P1("mfw_player_midi_set_voice_limit is %d",voice_limit);
+	player_para.midi.voice_limit=voice_limit;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_MIDI,&player_para);
+	if(player_return==AS_OK)
+	return MFW_PLAYER_TEST_OK;
+#else
+    return MFW_PLAYER_TEST_OK;
+#endif
+}
+
+/*******************************************************************************
+
+ $Function:             mfw_player_save_selected_file_idx
+
+ $Description:          save index of file which have been selected
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments: 		index: index to be saved
+
+*******************************************************************************/
+SHORT mfw_player_save_selected_file_idx(int index)
+	{
+     //default index is set to 0 and inputFileName to NULL at global initialisation
+     //save current index of selected file
+     	TRACE_EVENT_P1("mfw_player_save_selected_file_idx is %d",index);
+     mfw_player_currently_playing_idx = index;
+    return MFW_PLAYER_TEST_OK;
+
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_player_set_speaker
+
+ $Description:Sets the player_device to Speaker
+
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments:  None
+
+*******************************************************************************/
+ SHORT mfw_player_set_speaker()
+{
+#ifdef FF_MMI_TEST_MIDI
+	//	Aug 17, 2005      REF: CHG 33822 xdeepadh
+	//Load the profile for the Handheld.
+#ifdef FF_MMI_AUDIO_PROFILE
+	mfw_audio_set_device(MFW_AUD_HANDHELD);
+	return MFW_PLAYER_TEST_OK ;
+#else
+	T_AS_RET player_return;
+	TRACE_EVENT("mfw_player_set_speaker");
+	player_para.common.output_device=AS_DEVICE_SPEAKER;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_COMMON,&player_para);
+	if(player_return==AS_OK)
+	return MFW_PLAYER_TEST_OK ;
+
+#endif //FF_MMI_AUDIO_PROFILE
+
+#else
+	 return MFW_PLAYER_TEST_OK;
+
+#endif //FF_MMI_TEST_MIDI
+}
+/*******************************************************************************
+
+ $Function:     mfw_player_set_headset
+
+ $Description:Sets the player_device to Headset
+
+ $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments:  None
+
+*******************************************************************************/
+ SHORT mfw_player_set_headset()
+    {
+#ifdef FF_MMI_TEST_MIDI
+//	Aug 17, 2005      REF: CHG 33822 xdeepadh
+//Load the profile for the Headset.
+#ifdef FF_MMI_AUDIO_PROFILE
+		mfw_audio_set_device(MFW_AUD_HEADSET);
+		return MFW_PLAYER_TEST_OK ;
+#else
+    	T_AS_RET player_return;
+	TRACE_EVENT("mfw_player_set_headset");
+	player_para.common.output_device=AS_DEVICE_HEADSET;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_COMMON,&player_para);
+	if(player_return==AS_OK)
+		return MFW_PLAYER_TEST_OK ;
+#endif	//FF_MMI_AUDIO_PROFILE
+#else
+         return MFW_PLAYER_TEST_OK;
+
+#endif //FF_MMI_TEST_MIDI
+}
+
+#ifdef FF_MIDI_RINGER
+//Nov 02, 2005    REF:ER OMAPS00039044  xdeepadh
+//The function names have been modified to be generic
+/*******************************************************************************
+
+ $Function:     mfw_ringer_set_audiopath
+
+ $Description:Sets the player_device to Speaker
+
+
+  $Returns:		MFW_PLAYER_TEST_OK
+
+ $Arguments:  None
+
+*******************************************************************************/
+ SHORT mfw_ringer_set_audiopath()
+     {
+#ifdef FF_MMI_TEST_MIDI
+    	T_AS_RET player_return;
+	TRACE_EVENT("mfw_ringer_set_audiopath");
+	player_para.common.output_device=AS_DEVICE_SPEAKER;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_COMMON,&player_para);
+	if(player_return==AS_OK)
+		return MFW_PLAYER_TEST_OK ;
+#else
+         return MFW_PLAYER_TEST_OK;
+
+ #endif
+}
+/*******************************************************************************
+
+ $Function:     mfw_ringer_set_memory
+
+ $Description:Set the ringer memory address for the given ringer mode.
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INVALID_PARAM	The player_type,ringer_mode  parameter value is invalid.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+ $Arguments:  	                player_type:Type of the player based on the file.
+ 				ringer_mode: ringer mode
+ 				memory_pointer:pointer to midi file location
+ 				size:size of the midi file
+
+*******************************************************************************/
+
+SHORT mfw_ringer_set_memory(T_AS_PLAYER_TYPE  player_type,T_AS_RINGER_MODE ringer_mode,UINT32 *memory_pointer,UINT32 size)
+{
+	T_AS_RET ringer_return;
+	TRACE_FUNCTION("mfw_ringer_set_memory");
+	TRACE_EVENT_P1("player_type is %d",player_type);
+	ringer_return=as_ringer_set_memory(ringer_mode,player_type,memory_pointer, size);
+	return ringer_return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_ringer_set_file
+
+ $Description:Set the ringer filename for the given ringer mode.
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INVALID_PARAM	The player_type or ringer_mode parameter value is invalid.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+ $Arguments:
+ 				player_type:Type of the player based on the file.
+ 				ringer_mode: ringer mode
+ 				filename:Name of the midi file
+
+*******************************************************************************/
+SHORT mfw_ringer_set_file(T_AS_PLAYER_TYPE  player_type,T_AS_RINGER_MODE ringer_mode, const char* filename)
+{
+	T_AS_RET ringer_return;
+	char temp_file_name[FILENAME_MAX_LEN];
+	TRACE_FUNCTION("mfw_ringer_set_file");
+	
+	//Nov 04, 2005    REF:DRT OMAPS00053737  xdeepadh	
+#ifdef FF_MIDI_LOAD_FROM_LFS 	//Set the linear file for Ringer
+
+	//Provide the complete path of the file
+	strcpy(temp_file_name, LFS_CONTENT_DIR);
+	strcat(temp_file_name, filename );
+	TRACE_EVENT_P1(" linear temp_filename  %s",temp_file_name);
+	ringer_return=as_ringer_set_linear_file(ringer_mode,player_type,temp_file_name);
+	
+#else			//Set the FFS  file for Ringer
+	//Provide the complete path of the file
+	strcpy(temp_file_name, RINGER_CONTENT_DIR);
+	strcat(temp_file_name, "/");
+	strcat(temp_file_name, filename );
+	TRACE_EVENT_P1(" ffs temp_filename  %s",temp_file_name);
+	ringer_return=as_ringer_set_file(ringer_mode,player_type,temp_file_name);
+#endif   //FF_MIDI_LOAD_FROM_LFS
+	return ringer_return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_ringer_set_volume
+
+ $Description:Set the ringer volume for the given ringer mode.
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INVALID_PARAM	The ringer_mode or volume parameter value is invalid.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+ $Arguments:  	ringer_mode: ringer mode
+ 				volume:Volume which has to be set for the given ringer mode
+
+*******************************************************************************/
+
+SHORT mfw_ringer_set_volume(T_AS_RINGER_MODE ringer_mode,T_AS_VOLUME volume)
+{
+	T_AS_RET ringer_return;
+	TRACE_FUNCTION("mfw_ringer_set_volume");
+	TRACE_EVENT_P1("the volume to be set is %d",volume);
+	ringer_return=as_ringer_set_volume(ringer_mode,volume);
+	return ringer_return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_ringer_start
+
+ $Description:		Play a particular ringer file
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INVALID_PARAM	The ringer_mode parameter value is invalid.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+ $Arguments:
+ 				ringer_mode: ringer mode
+ 				loop:playback in loop
+ 				callback_fn:callback function
+
+*******************************************************************************/
+
+SHORT mfw_ringer_start(T_AS_RINGER_MODE ringer_mode,BOOLEAN loop,void (*callback_fn)(void *))
+{
+	T_AS_RET ringer_return;
+	TRACE_EVENT("mfw_ringer_start");
+	//Aug 05, 2005     xdeepadh
+	#ifdef FF_MMI_AUDIO_PROFILE
+	//Configure the audio path to current Audio device.
+	mfw_set_stereo_path(mfw_get_current_audioDevice());
+ 	mfwAudPlay =  TRUE; //File is playing
+	#endif //FF_MMI_AUDIO_PROFILE
+	mfw_ringer_configure_callback_fn(callback_fn);
+	ringer_return=as_ring(ringer_mode,loop,&midi_return_path);
+	return ringer_return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_ringer_stop
+
+ $Description:Stop the current ringer melody playback.
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+ $Arguments:  	callback_fn:callback function
+
+*******************************************************************************/
+	
+SHORT mfw_ringer_stop(void (*callback_fn)(void *))
+	{
+	T_AS_RET ringer_return;
+	TRACE_EVENT("mfw_ringer_stop");
+	mfw_ringer_configure_callback_fn(callback_fn);
+	ringer_return=as_stop(&midi_return_path);
+	return ringer_return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_ringer_get_info
+
+ $Description:		Gets the ringer information for the given ringer mode.
+
+ $Returns:
+				pointer to T_AS_RINGER_INFO	
+ $Arguments:  	ringer_mode: ringer mode
+ 				ringer_info: The ringer details will be stored here.
+
+*******************************************************************************/
+T_AS_RINGER_INFO* mfw_ringer_get_info(T_AS_RINGER_MODE ringer_mode,const T_AS_RINGER_INFO* ringer_info)
+{
+	T_AS_RET ringer_return;
+	TRACE_FUNCTION("mfw_ringer_get_info");
+	ringer_return=as_ringer_get(ringer_mode,&ringer_info);
+	TRACE_EVENT_P1("ringer_info volume is %d",ringer_info->volume);
+	TRACE_EVENT_P1("ringer info name is %s",ringer_info->data.filename);
+	if(ringer_return==AS_OK)
+		return (T_AS_RINGER_INFO*)ringer_info;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_ringer_configure_callback_fn
+
+ $Description:		Configure the Riviera Return Path
+
+ $Returns:None
+
+ $Arguments:  Callback function
+
+*******************************************************************************/
+
+static void mfw_ringer_configure_callback_fn(void (*callback_fn)(void *))
+{
+
+	TRACE_EVENT("mfw_ringer_configure_callback_fn");
+	midi_return_path.addr_id = 0;
+	midi_return_path.callback_func = callback_fn;
+
+	return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_player_start_memory
+
+ $Description:Start the playback melody stored in the given memory location according to the given player type.
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INVALID_PARAM	The player_type or volume parameter value is invalid.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+ $Arguments:  	player_type:Type of the player based on the file.
+ 				address:pointer to midi file location to be played
+ 				size:size of the midi file
+ 				volume:Volume with which to play the midi file
+ 				loop:playback in loop
+ 				callback_fn:callback function
+
+*******************************************************************************/
+
+SHORT mfw_player_start_memory(T_AS_PLAYER_TYPE player_type,const UINT32 * address, UINT32 size,T_AS_VOLUME volume,BOOLEAN  loop,void (*callback_fn)(void *))
+	{
+	T_AS_RET player_return;
+	TRACE_EVENT("mfw_player_start_memory");
+	//Aug 05, 2005     xdeepadh
+	#ifdef FF_MMI_AUDIO_PROFILE
+	//Configure the audio path to current Audio device.
+	mfw_set_stereo_path(mfw_get_current_audioDevice());
+ 	mfwAudPlay =  TRUE; //File is playing
+	#endif //FF_MMI_AUDIO_PROFILE
+	mfw_ringer_configure_callback_fn(callback_fn);
+	player_return=as_play_memory(player_type,address,size,volume,loop,&midi_return_path);
+	return player_return;
+
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_player_start_file
+
+ $Description:Start the playback melody stored in the given file according to the given player type.
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INVALID_PARAM	The player_type or volume parameter value is invalid.
+				AS_FILE_ERROR	The melody file can not be accessed, or contain unrecognized data.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+
+ $Arguments:  	player_type:Type of the player based on the file.
+ 				filename:Name of the midi file to be played
+ 				volume:Volume with which to play the midi file
+ 				loop:playback in loop
+ 				callback_fn:callback function
+	 
+*******************************************************************************/
+
+SHORT mfw_player_start_file(T_AS_PLAYER_TYPE player_type,const char * filename,T_AS_VOLUME volume, BOOLEAN loop,void (*callback_fn)(void *))
+{
+	T_AS_RET player_return;
+	char temp_file_name[FILENAME_MAX_LEN];
+	TRACE_EVENT("mfw_player_start_file");
+	//Aug 05, 2005     xdeepadh
+	#ifdef FF_MMI_AUDIO_PROFILE
+	//Configure the audio path to current Audio device.
+	mfw_set_stereo_path(mfw_get_current_audioDevice());
+ 	mfwAudPlay =  TRUE; //File is playing
+	#endif //FF_MMI_AUDIO_PROFILE
+	mfw_ringer_configure_callback_fn(callback_fn);
+	
+//Nov 04, 2005    REF:DRT OMAPS00053737  xdeepadh	
+#ifdef FF_MIDI_LOAD_FROM_LFS   //Play the linear file for Player
+
+	//Since, the file can be with or without the full path ,
+	//Verify the file for full path , else provide the complete path.
+	strcpy(temp_file_name, LFS_CONTENT_DIR);
+
+	//The complete path is provided
+	if(strncmp(filename,temp_file_name,strlen(temp_file_name))==0)
+	{
+		player_return=as_play_linear_file(player_type,filename,volume,loop,&midi_return_path);
+	}
+		//Provide the  complete path 
+	else
+	{
+		strcat(temp_file_name, filename );
+		player_return=as_play_linear_file(player_type,temp_file_name,volume,loop,&midi_return_path);
+	}
+	
+#else			//Play the FFS  file for Player
+
+	//Since, the file can be with or without the full path ,
+	//Verify the file for full path , else provide the complete path.
+	strcpy(temp_file_name, RINGER_CONTENT_DIR);
+        //The complete path is provided
+	if(strncmp(filename,temp_file_name,strlen(temp_file_name))==0)
+	{
+		player_return=as_play_file(player_type,filename,volume,loop,&midi_return_path);
+	}
+		//Provide the  complete path 
+	else
+	{
+		strcat(temp_file_name, "/");
+		strcat(temp_file_name, filename );
+		player_return=as_play_file(player_type,temp_file_name,volume,loop,&midi_return_path);
+	}
+#endif	//FF_MIDI_LOAD_FROM_LFS
+
+	return player_return;
+}
+
+/*******************************************************************************
+
+ $Function:     		mfw_ringer_deduce_player_type
+
+ $Description:		Deduces  the player type
+
+ $Returns: 		T_AS_PLAYER_TYPE
+
+
+ $Arguments:  	filename:Name of the midi file
+
+*******************************************************************************/
+
+T_AS_PLAYER_TYPE mfw_ringer_deduce_player_type(const char * filename)
+{
+	T_AS_PLAYER_TYPE player_type;
+	TRACE_EVENT("mfw_ringer_deduce_player_type");
+	as_deduce_player_type(filename,&player_type);
+	return player_type;
+}
+
+
+/*******************************************************************************
+
+ $Function:     mfw_player_stop
+
+ $Description:Stop the current melody player
+
+ $Returns:
+				AS_OK	The call is successful.
+				AS_INTERNAL_ERROR	Not able to send the message request.
+
+
+ $Arguments:  	callback_fn:callback function
+
+*******************************************************************************/
+
+SHORT mfw_player_stop(void (*callback_fn)(void *))
+{
+	T_AS_RET player_return;
+	TRACE_EVENT("mfw_player_stop");
+	mfw_ringer_configure_callback_fn(callback_fn);
+	player_return=as_stop(&midi_return_path);
+	return player_return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_player_midi_set_params
+
+ $Description:Set the specific parameters for the player of given player_type.
+
+ $Returns:		AS_OK if call is succesfull.
+ 				AS_INVALID_PARAM if the player_type parameter value is invalid.
+
+ $Arguments:  	Voicelimit:Voice limit to be set
+ 				channel:channel to be set
+
+*******************************************************************************/
+
+SHORT mfw_player_midi_set_params(INT16 voicelimit,INT16 channel)
+{
+	T_AS_PLAYER_PARAMS player_para;
+	T_AS_RET player_return;
+	TRACE_FUNCTION("mfw_player_midi_set_params");
+	//Set the Voice limit and channel for Idle mode
+	player_para.midi.voice_limit=voicelimit  ;
+	player_para.midi.output_channels=channel;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_MIDI,&player_para);
+	return player_return;
+}
+
+/*******************************************************************************
+
+ $Function:     mfw_player_mp3_set_params
+
+ $Description:Set the specific parameters for the player of given player_type.(mp3)
+
+ $Returns:		AS_OK if call is succesfull.
+ 				AS_INVALID_PARAM if the player_type parameter value is invalid.
+
+ $Arguments:  		size_file_start:size of the file where the melody must start 
+ 				mono_stereo:channel to be set
+
+*******************************************************************************/
+#ifdef FF_MP3_RINGER
+SHORT mfw_player_mp3_set_params(UINT32  size_file_start,BOOLEAN  mono_stereo)
+{
+	T_AS_PLAYER_PARAMS player_para;
+	T_AS_RET player_return;
+	TRACE_FUNCTION("mfw_player_mp3_set_params");
+	//Set the Voice limit and channel for Idle mode
+	player_para.mp3.mono_stereo = mono_stereo  ;
+	player_para.mp3.size_file_start = size_file_start;
+	player_return=as_player_set_params(AS_PLAYER_TYPE_MP3,&player_para);
+	return player_return;
+}
+#endif 		//FF_MP3_RINGER
+
+
+//Nov 22, 2005    ER: OMAPS00057430, AAC Ringer support, nekkareb
+/*******************************************************************************
+
+ $Function:     mfw_player_aac_set_params
+
+ $Description:Set the specific parameters for the player of given player_type.(aac)
+
+ $Returns:	AS_OK if call is succesfull.
+ 			AS_INVALID_PARAM if the player_type parameter value is invalid.
+
+ $Arguments:  size_file_start:size of the file where the melody must start 
+ 			 mono_stereo:channel to be set
+
+*******************************************************************************/
+#ifdef FF_AAC_RINGER
+SHORT mfw_player_aac_set_params(UINT32  size_file_start,BOOLEAN  mono_stereo)
+{
+	T_AS_PLAYER_PARAMS player_para;
+	T_AS_RET player_return;
+	
+	TRACE_FUNCTION("mfw_player_aac_set_params");
+	
+	//Set the Voice limit and channel for Idle mode
+	player_para.aac.mono_stereo = mono_stereo  ;
+	player_para.aac.size_file_start = size_file_start;
+	
+	player_return=as_player_set_params(AS_PLAYER_TYPE_AAC,&player_para);
+	return player_return;
+}
+#endif 	//FF_AAC_RINGER
+
+
+ /*******************************************************************************
+
+ $Function:     mfw_player_get_params
+
+ $Description:gets the specific parametersfor the player  of given player_type.
+
+ $Returns:		AS_OK if call is succesfull.
+ 				AS_INVALID_PARAM if the player_type parameter value is invalid.
+
+ $Arguments:  	player_type:Type of the player based on the file.
+ 				player_para:The structure containing current parameters for the player type
+
+*******************************************************************************/
+
+SHORT mfw_player_get_params(T_AS_PLAYER_TYPE player_type,const T_AS_PLAYER_PARAMS* player_para)
+{
+	T_AS_RET player_return;
+	TRACE_FUNCTION("mfw_player_get_params");
+	player_return=as_player_get_params(player_type,&player_para);
+	return player_return;
+}
+
+//Nov 04, 2005    REF:DRT OMAPS00053737  xdeepadh
+#ifdef FF_MIDI_LOAD_FROM_LFS
+// ------------------------- LFS utilities ---------------------------
+//These functions should be to load the LFS files, in the absence of ETM
+/*******************************************************************************
+
+ $Function:     ram_load_file
+
+ $Description:		This function allocates the size of the file from the RTEST memory bank.
+				Then, it reads the file into that buffer.
+
+ $Returns:		A pointer to the allocated T_RAM_FILE data structure, or NULL
+				 if there was an error.
+
+ $Arguments:  		filename: A pointer to the RAM file descriptor
+ 				
+*******************************************************************************/
+T_RAM_FILE *ram_load_file(char* filename)
+{
+    T_FFS_FD file;
+    T_FFS_RET f_result;
+// Nov 23, 2005 REF : DR OMAPS00057378   x0039928
+// stat variable declared local.
+    T_FFS_STAT stat;
+    T_RAM_FILE *file_buf = NULL;
+
+TRACE_EVENT( "FFS getting file length");
+    if ((f_result = ffs_stat(filename, &stat)) < EFFS_OK)
+    {
+        TRACE_EVENT( "FFS could not read file length.");
+        return NULL;
+    }
+
+    TRACE_EVENT( "FFS creating T_RAM_FILE");
+	file_buf = (T_RAM_FILE *)mfwAlloc(sizeof(T_RAM_FILE));
+    if (file_buf == NULL)
+    {
+        TRACE_EVENT_P1( "Error to get memory for T_RAM_FILE, size =%d", sizeof(T_RAM_FILE));
+        return NULL;
+    }
+
+   TRACE_EVENT( "FFS creating file buffer");
+	file_buf->data= (void *)mfwAlloc(stat.size);
+    if ((file_buf->data == NULL))
+    {
+        TRACE_EVENT_P1( "Error to get memory for data, size =%d", stat.size);
+        mfwFree((U8*)file_buf,sizeof(T_RAM_FILE));
+        return NULL;
+    }
+
+    file_buf->dataSize = stat.size;
+
+    TRACE_EVENT( "FFS opening file");
+    if ((file = ffs_open (filename, FFS_O_RDONLY)) <= EFFS_OK)
+    {
+        TRACE_EVENT("Cannot open file");
+	   mfwFree((U8*)file_buf->data,stat.size);
+	   mfwFree((U8*)file_buf,sizeof(T_RAM_FILE));	
+              return NULL;
+    }
+
+    TRACE_EVENT( "FFS reading file");
+    if ((ffs_read(file, file_buf->data, stat.size)) != stat.size)
+    {
+        TRACE_EVENT( "Cannot read file");
+        ffs_close (file);
+        mfwFree((U8*)file_buf->data,stat.size);
+	   mfwFree((U8*)file_buf,sizeof(T_RAM_FILE));	
+    	return NULL;
+    }
+
+   TRACE_EVENT( "FFS closing file");
+    if ((ffs_close (file)) != EFFS_OK)
+    {
+        TRACE_EVENT( "Cannot close file");
+          mfwFree((U8*)file_buf->data,stat.size);
+	   mfwFree((U8*)file_buf,sizeof(T_RAM_FILE));	
+    	return NULL;
+    }
+
+    return file_buf;
+}
+
+/*******************************************************************************
+
+ $Function:     ram_write_lfs
+
+ $Description:		This function creates an lfs file and writes the midi data content into it.
+
+ $Returns:		T_RV_TEST_RET
+
+ $Arguments:  		ram_file: A pointer to the RAM file descriptor
+ 				filename: Filename for the LFS file
+ 				
+*******************************************************************************/
+
+T_RV_TEST_RET ram_write_lfs(T_RAM_FILE * ram_file,char* filename )
+{
+    fd_t lfs_file = NULL;
+    int return_val = 0;
+    effs_t return_value = 0;
+    char temp_file[100];
+    strcpy(temp_file,LFS_CONTENT_DIR);
+    strcat(temp_file,filename);
+    TRACE_EVENT_P1("LFS fiel filename:%s", temp_file);
+    // Create a file
+    lfs_file = lfs_open(temp_file, FFS_O_CREATE, (unsigned int *)&ram_file->dataSize);
+    if( lfs_file < EFFS_OK)
+    {
+    	TRACE_EVENT_P1( "LFS fiel open failed with error:%d", lfs_file);
+    // Nov 23, 2005 REF : DR OMAPS00057378   x0039928
+    // Buffer memory allocated is freed in case of error.
+	ram_remove_file(ram_file);
+	return -1;
+    }
+
+    // Write the buffer in LFS
+    return_val = lfs_write(lfs_file, ram_file->data, ram_file->dataSize);
+    if (return_val < EFFS_OK)
+    {
+        TRACE_EVENT_P1( "LFS file write failed with error:%d",return_val);
+    // Nov 23, 2005 REF : DR OMAPS00057378   x0039928
+    // Buffer memory allocated is freed in case of error.
+	 ram_remove_file(ram_file);
+	 return -1;
+    }
+	
+    // Close the LFS file
+    return_value = lfs_close(lfs_file);
+    if(return_value < EFFS_OK)
+   {
+	TRACE_EVENT_P1( "LFS file close failed with error%d:",return_value);
+    // Nov 23, 2005 REF : DR OMAPS00057378   x0039928
+    // Buffer memory allocated is freed in case of error.
+	ram_remove_file(ram_file);
+	return -1;
+    }
+    ram_remove_file(ram_file);
+	return 0;
+}
+
+/*******************************************************************************
+
+ $Function:     ram_remove_file
+
+ $Description:		This function frees the memory - associated to the file - allocated
+ 				 during the call to ram_load_file() function.
+ $Returns:		None
+
+ $Arguments:  		file_buf A pointer to the RAM file descriptor
+ 				
+*******************************************************************************/
+void ram_remove_file(T_RAM_FILE* file_buf)
+{
+    TRACE_EVENT("FFS removing file from memory");
+    if (file_buf)
+    {
+        if (file_buf->data)
+        {
+    // Nov 23, 2005 REF : DR OMAPS00057378   x0039928
+    // stat.size is replaced with file_buf->dataSize as now it is declared local.
+               mfwFree((U8*)file_buf->data,file_buf->dataSize);
+	           
+        }
+        mfwFree((U8*)file_buf,sizeof(T_RAM_FILE));	
+    }
+}
+
+#endif 	//FF_MIDI_LOAD_FROM_LFS
+#endif