FreeCalypso > hg > leo2moko-debug
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