FreeCalypso > hg > fc-magnetite
view src/aci2/bmi/MmiMidiTest.c @ 114:3454a514891b
cfg-headers/2092 added
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 06 Oct 2016 17:18:43 +0000 |
parents | 93999a60b835 |
children |
line wrap: on
line source
/******************************************************************************* Texas Instruments ******************************************************************************** This software product is the property of Texas Instruments and may not be disclosed to any third party without the express permission of the owner. ******************************************************************************** $Project name: Test MMI $Module: MIDI TEST $File: MmiMidiTest.c $Revision: 1.0 $Author: Elsa Armanet-Said Texas Instruments Nice $Date: 17/05/04 ******************************************************************************** Description: This provides the start code for the MMI ******************************************************************************** $History: MmiMidiTest.c 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 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. Sep 29,2005 REF: SPR 34407 xdeepadh Bug:Back soft key takes more time to return to the previous screen in Midi application Fix:The list creation for Midi files has been modified Aug 29, 2005 REF: SPR 33999 xdeepadh Description:Midi Application - Play all files asks for a file to be selected Solution: When the files are not selected, the current playing index is set 0. 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. Dec 08, 2004 REF: CRR MMI-SPR-27284 Description: MIDI Player: Back Key malfunctions in MIDI application. Solution: A window is created to hold list window. When the user presses Back key, the newly created window is deleted along with list window, bringing the control back to Midi options screen. 17/05/04 $End *******************************************************************************/ /******************************************************************************* Include files *******************************************************************************/ #define ENTITY_MFW /* includes */ #include <string.h> #include <stdio.h> #include <stdlib.h> #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #if defined (NEW_FRAME) #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #include "gsm.h" #include "prim.h" #else #include "STDDEFS.H" #include "custom.h" #include "gsm.h" #include "vsi.h" #endif #include "message.h" /* included for aci_cmh.h .... */ #include "aci_cmh.h" /* included for mfw_sat.h, included for MmiDummy.h, included for MmiMenu.h */ #include "mfw_mfw.h" #include "mfw_win.h" #include "mfw_icn.h" /* included for mfw_mnu.h */ #include "mfw_mnu.h" #include "mfw_tim.h" #include "mfw_kbd.h" #include "mfw_sat.h" /* included for MmiDummy.h, included for MmiMenu.h */ #include "mfw_midi.h" #include "kpd/kpd_api.h" #include "MmiBlkLangDB.h" #include "mmiColours.h" #include "MmiDialogs.h" #include "MmiDummy.h" /* included for MmiMenu.h */ #include "MmiLists.h" #include "MmiMenu.h" #include "MmiSoftKeys.h" #include "AUIEditor.h" #include "MmiMidiTest.h" #include "MmiMain.h" #include "Mmisounds.h" /******************************************************************************* internal data *******************************************************************************/ /* * Internal events */ #define MT_CREATE_EDITOR 500 #define MT_EDITOR_CANCEL 501 #define MT_EDITOR_SELECT 502 #define MT_NAME_EDITOR 503 #define MT_MNU_INIT 504 /*local defines*/ #define MT_MAX_EDITOR_LENGTH 4 #define MT_INFO_SCRN_TIMEOUT 1500 #define MT_MAX_FILES 8 // Dec 08, 2004 REF: CRR MMI-SPR-27284 // Description: MIDI Player: Back Key malfunctions in MIDI application. // E_INIT event definition #define E_INIT 1 /*editor data structure*/ typedef struct{ T_MMI_CONTROL mmi_control; MfwHnd win; MfwHnd mt_win_editor; UBYTE mt_buffer[MT_MAX_EDITOR_LENGTH+1]; USHORT mt_voice_number; } T_MMI_MT_Editor_Data; /*menu data structure definition*/ typedef struct { T_MMI_CONTROL mmi_control; T_MFW_HND win; T_MFW_HND kbd; T_MFW_HND kbd_long; T_MFW_HND mt_menu; T_MFW_HND parent; // Dec 08, 2004 REF: CRR MMI-SPR-27284. Member "parent" added T_VOID_FUNC func_cb; T_VOID_FUNC cancel_cb; UBYTE mt_num_file; UBYTE mt_file_count; ListCbFunc mt_list_cb; UBYTE mt_list_idx; UBYTE IsMfwInit; ListMenuData * menu_list_data; //Sep 29,2005 REF: SPR 34407 xdeepadh }T_mt_menu; /*global menu data*/ T_mt_menu mt_menu_data = {0}; extern UBYTE mfw_player_exit_flag;//Flag to check playall is selected. extern int mfw_player_currently_playing_idx;//Stores the index of the current selected file extern UBYTE mfw_player_playback_loop_flag;//Flag to check whether loop is on /off // Nov 23, 2005 REF : DR OMAPS00057378 x0039928 // IsMidiInit variable decides whether to copy files from FFS to LFS extern UBYTE IsMidiInit; /******************************************************************************* Local prototypes *******************************************************************************/ static void midi_mt_menu_list_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData); static void mmi_midi_test_editor_cb(T_MFW_HND win, USHORT identifier, SHORT reason); //Sep 29,2005 REF: SPR 34407 xdeepadh static T_MFW_HND mmi_midi_test_build_Menu( MfwHnd parent_window); /*default static menu*/ static MfwMnuAttr menuMtSearchListAttr = { &menuArea, MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu */ -1, /* use default font */ NULL, /* with these items (filled in later) */ 0, /* number of items (filled in leter) */ COLOUR_LIST_XX, /* Colour */ TxtNull, /* Hdr Id */ NULL, /* Background */ MNUATTRSPARE /* unused */ }; /******************************************************************************* $Function: mmi_midi_test_show_info $Description: Display the Dialog $Returns: $Arguments: *******************************************************************************/ static MfwHnd mmi_midi_test_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback) { T_DISPLAY_DATA display_info; TRACE_FUNCTION ("mmi_midi_test_show_info()"); /* ** Create a timed dialog to display the Message "Failed" */ dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, str1, str2, COLOUR_STATUS); dlg_initDisplayData_events( &display_info, callback, MT_INFO_SCRN_TIMEOUT, KEY_LEFT | KEY_CLEAR | KEY_HUP); return info_dialog(parent, &display_info); } /******************************************************************************* $Function: midi_stop_player $Description:Stops the Midi file playing $Returns: $Arguments:m, menu being activated, i, item in menu *******************************************************************************/ GLOBAL int midi_stop_player (MfwMnu* m, MfwMnuItem* i) { TRACE_FUNCTION ("midi_stop_player()"); if(mfw_player_exit_flag == PLAYER_EXIT_FLAG_FALSE) mfw_player_exit_flag = PLAYER_EXIT_FLAG_TRUE; mfw_player_stop(sounds_midi_player_stop_cb); return 1; } /******************************************************************************* $Function: mmi_mt_add_selected_file $Description: display info message to let user know that file was selected $Returns: MFW_EVENT_CONSUMED $Arguments: *******************************************************************************/ static int mmi_mt_add_selected_file(MfwMnu* m, MfwMnuItem* i) { mmi_midi_test_show_info(0, TxtMidiFileSelected, TxtNull, NULL); return MFW_EVENT_CONSUMED; } /******************************************************************************* $Function: mmi_midi_test_editor_cb $Description: This function provides the callback functionality to an editor for Midi test $Returns: None $Arguments: *******************************************************************************/ static void mmi_midi_test_editor_cb(T_MFW_HND win, USHORT identifier, SHORT reason) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_MT_Editor_Data* dev_name_data = (T_MMI_MT_Editor_Data *)win_data->user; UBYTE * editor_buffer = NULL; SHORT max_edit_size = 0; T_MFW_HND editor_win; T_MFW_HND parent; TRACE_FUNCTION ("mmi_midi_test_editor_cb()"); if (identifier == MT_NAME_EDITOR) { editor_buffer = dev_name_data->mt_buffer; max_edit_size = MT_MAX_EDITOR_LENGTH; editor_win = dev_name_data->mt_win_editor; parent = dev_name_data->win; } else { TRACE_FUNCTION ("mmi_midi_test_editor_cb() : Unknown Identifier"); /* ** if this isn't one of the "recognised" editors leave now! */ return; } switch (reason) { case INFO_KCD_LEFT: { /* ** If there is no string entered, treat this as if it was a "Cancel" */ if (editor_buffer[0] == 0x00) { /* ** Send a "Cancel" to the Midi test window */ SEND_EVENT(parent, MT_EDITOR_CANCEL, identifier, NULL); } else { /* ** Send a "Select" to the Midi test window */ SEND_EVENT(parent, MT_EDITOR_SELECT, identifier, NULL); } } break; case INFO_KCD_RIGHT: if (strlen((char *)editor_buffer) == 0) { /* ** Send a "Cancel" to the Midi test window */ SEND_EVENT(parent, MT_EDITOR_CANCEL, identifier, NULL); } break; case INFO_KCD_HUP: /* ** Set the buffer to NULLS */ memset(editor_buffer, 0x00, max_edit_size); /* ** Send a "Cancel" to the Midi test window */ SEND_EVENT(parent, MT_EDITOR_CANCEL, identifier, NULL); break; default: /* otherwise no action to be performed */ break; } } /******************************************************************************* $Function: mmi_midi_test_editor_destroy $Description: This function performs the necessary steps to remove the window handling the voice number editor, tidying up all allocated resources. $Returns: MfwResOk : Success MfwResIllHnd : Illegal Window Handler provided $Arguments: win : Window to be destroyed *******************************************************************************/ MfwRes mmi_midi_test_editor_destroy(T_MFW_HND win) { T_MFW_WIN * win_data; T_MMI_MT_Editor_Data * data; TRACE_FUNCTION ("mmi_midi_test_editor_destroy"); if (win == (void *)0) return MfwResIllHnd; win_data = ((T_MFW_HDR *) win)->data; data = (T_MMI_MT_Editor_Data *)win_data->user; /* ** Destroy the Window */ win_delete(data->win); /* ** Free the dynamically allocated memory */ mfwFree((U8 *)data, (U16)sizeof(T_MMI_MT_Editor_Data)); return MfwResOk; } /******************************************************************************* $Function: mmi_midi_test_editor_cntrl $Description: This is the dialog control function for the voice number selection Window. It receives the signals from the MFW and determines what action, if any, to take. $Returns: None $Arguments: win : The pointer to the window handler, so the function can reference the dynamic user data, if any. event : The incoming event value : Generic incoming Parameter, it will be 'event' dependant parameter : Generic incoming Parameter, it will be 'event' dependant *******************************************************************************/ void mmi_midi_test_editor_cntrl (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_MT_Editor_Data * data = (T_MMI_MT_Editor_Data *)win_data->user; T_AUI_EDITOR_DATA editor_data; SHORT mfw_midi_retVal; int voice_limit; switch (event) { case MT_CREATE_EDITOR: #ifdef NEW_EDITOR //Clear the editor buffer memset(&editor_data,'\0',sizeof(editor_data)); /* ** Initialise the editor */ AUI_edit_SetDefault(&editor_data); AUI_edit_SetBuffer(&editor_data, ATB_DCS_ASCII, data->mt_buffer, MT_MAX_EDITOR_LENGTH); AUI_edit_SetTextStr(&editor_data, TxtSoftSelect, TxtSoftBack, TxtMidiEnterVoiceNumber, TxtNull); AUI_edit_SetAltTextStr(&editor_data, 1, TxtNull, TRUE, TxtCancel); AUI_edit_SetEvents(&editor_data, MT_NAME_EDITOR, TRUE, FOREVER, (T_AUI_EDIT_CB)mmi_midi_test_editor_cb); data->mt_win_editor = AUI_edit_Start(data->win, &editor_data); #endif break; case MT_EDITOR_CANCEL: if (value == MT_NAME_EDITOR) { /* ** The editor will have been destroyed. Reset the Window handler */ data->mt_win_editor = (void *)0; } else { TRACE_FUNCTION ("mmi_midi_test_editor_cntrl(), MT_EDITOR_CANCEL event received with unexpected value" ); } /* ** Destroy the editor Window */ TRACE_FUNCTION ("mmi_midi_test_editor_cntrl cancel"); mmi_midi_test_editor_destroy(data->win); break; case MT_EDITOR_SELECT: if (value == MT_NAME_EDITOR) { voice_limit=atoi((char*)data->mt_buffer); TRACE_EVENT_P1("voice_limit is %d",voice_limit); if(voice_limit >32 ||voice_limit <=0) { mmi_midi_test_show_info(0, TxtError, TxtNull, NULL); } else { //translate ASCII format into integer format mfw_midi_retVal = mfw_player_midi_set_voice_limit(voice_limit); if(mfw_midi_retVal != MFW_PLAYER_TEST_OK) { mmi_midi_test_show_info(0, TxtChConfigVoiceLimit, TxtSelected, NULL); } } } else { TRACE_FUNCTION ("mmi_midi_test_editor_cntrl(), MT_EDITOR_SELECT event received with unexpected value"); } TRACE_FUNCTION ("mmi_midi_test_editor_cntrl select"); /* ** Destroy the Editor Window */ mmi_midi_test_editor_destroy(data->win); break; default: TRACE_FUNCTION ("mmi_midi_test_editor_cntrl(), Unexpected Event!"); break; } } /******************************************************************************* $Function: midi_test_editor_create $Description: This function performs the necessary steps to create the a window to enter the number of voices. It will be removed, or rather remove itself on returning the data to the Mfw. $Returns: T_MFW_HND : Window Handle to the New Window, Null if failed. $Arguments: parent : pointer to the parent window. *******************************************************************************/ T_MFW_HND midi_test_editor_create(T_MFW_HND parent) { T_MMI_MT_Editor_Data *data; T_MFW_WIN * win; TRACE_FUNCTION ("midi_test_editor_create"); data = (T_MMI_MT_Editor_Data *)mfwAlloc((U16)sizeof(T_MMI_MT_Editor_Data)); if (data == (void *)0) return data; data->win = winCreate(parent, 0, E_WIN_VISIBLE, NULL); if (data->win == (void *)0) { /* ** Failed to start : Free Memory, and exit */ mfwFree((U8 *)data, (U16)sizeof(T_MMI_MT_Editor_Data)); data = (void *)0; return data; } else { /* ** Setup the Dialog control functions */ data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_midi_test_editor_cntrl; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (void *)data; } return data->win; } /******************************************************************************* $Function: mt_menu_win_cb $Description: menu window callback (implementation of softkeys) $Returns: $Arguments: *******************************************************************************/ static int mt_menu_win_cb (MfwEvt e, MfwWin *w) { T_mt_menu * data = (T_mt_menu *)w->user; MfwMnu * mnu; TRACE_FUNCTION ("mt_menu_win_cb "); switch (e) { case MfwWinVisible: mnu = (MfwMnu *)mfwControl(data->mt_menu); softKeys_displayId(TxtSoftSelect, TxtSoftBack, 0, mnu->curAttr->mnuColour ); break; default: return 0; } return 1; } /******************************************************************************* $Function: mt_menu_destroy $Description: destroy menu window $Returns: $Arguments: window to be destroyed *******************************************************************************/ static void mt_menu_destroy(MfwHnd window) { T_MFW_WIN * win_data = ((T_MFW_HDR *)window)->data; T_mt_menu * data = (T_mt_menu *)win_data->user; TRACE_FUNCTION ("mt_menu_destroy"); if (window == NULL) { return; } if (data) { win_delete(data->win); /* ** Free Memory */ mfwFree((void *)data, sizeof (T_mt_menu)); } } //Sep 29,2005 REF: SPR 34407 xdeepadh /******************************************************************************* $Function: midi_mt_menu_list_listmnu_cb $Description: destroy lists and menu in case of back softkey or menu exit $Returns: $Arguments: *******************************************************************************/ static void midi_mt_menu_list_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData) { T_MFW_WIN *win_data = ((T_MFW_HDR *)Parent)->data; T_mt_menu *data = (T_mt_menu *)win_data->user; TRACE_FUNCTION ("midi_mt_menu_list_listmnu_cb()"); if ((ListData->Reason EQ LISTS_REASON_BACK) || (ListData->Reason EQ LISTS_REASON_CLEAR) || (ListData->Reason EQ LISTS_REASON_HANGUP)) { /* ** Destroy the window --- Not sure if this is required! ... leave it out for now */ listsDestroy(ListData->win); /* ** Free the memory set aside for ALL the devices to be listed. */ if (data->menu_list_data != NULL) { FREE_MEMORY ((void *)data->menu_list_data->List, (U16)(data->mt_num_file * sizeof (T_MFW_MNU_ITEM))); FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData)); } mt_menu_destroy(data->win); } //Sep 29,2005 REF: SPR 34407 xdeepadh else if(ListData->Reason EQ LISTS_REASON_SELECT) { TRACE_EVENT_P1("list position is %d",ListData->ListPosition); mt_menu_data.mt_list_idx = ListData->ListPosition; //call mfw to save selected index mfw_player_save_selected_file_idx(mt_menu_data.mt_list_idx); //display a "file selected" text here mmi_midi_test_show_info(0, TxtMidiFileSelected, TxtNull, NULL); } return; } /******************************************************************************* $Function: midi_test_set_loop_on $Description: set loop on $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_set_loop_on (MfwMnu* m, MfwMnuItem* i) { SHORT mfw_midi_retVal; TRACE_FUNCTION ("midi_test_set_loop_on()"); mfw_midi_retVal = mfw_player_set_loop_on(); if(mfw_midi_retVal != MFW_PLAYER_TEST_OK) { TRACE_FUNCTION ("midi_test_set_loop_on(): Riviera Failed"); mmi_midi_test_show_info(0, TxtMidiOptionNotImplemented, TxtNull, NULL); } else { mmi_midi_test_show_info(0, TxtMidiLoopOn, TxtNull, NULL); } return 1; } /******************************************************************************* $Function: midi_test_set_loop_off $Description: set loop off $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_set_loop_off (MfwMnu* m, MfwMnuItem* i) { SHORT mfw_midi_retVal; TRACE_FUNCTION ("midi_test_set_loop_off()"); mfw_midi_retVal = mfw_player_set_loop_off(); if(mfw_midi_retVal != MFW_PLAYER_TEST_OK) { TRACE_FUNCTION ("midi_test_set_loop_off(): Riviera Failed"); mmi_midi_test_show_info(0, TxtMidiOptionNotImplemented, TxtNull, NULL); } else { mmi_midi_test_show_info(0, TxtMidiLoopOff, TxtNull, NULL); } return 1; } /******************************************************************************* $Function: midi_test_set_channel_mono $Description: set channels to mono $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_set_channel_mono (MfwMnu* m, MfwMnuItem* i) { SHORT mfw_midi_retVal; TRACE_FUNCTION ("midi_test_set_channel_mono()"); mfw_midi_retVal = mfw_player_set_channel_mono(); if(mfw_midi_retVal != MFW_PLAYER_TEST_OK) { TRACE_FUNCTION ("mfw_player_set_channel_mono(): Riviera Failed"); mmi_midi_test_show_info(0, TxtMidiOptionNotImplemented, TxtNull, NULL); } else { mmi_midi_test_show_info(0, TxtMidiMonoChannel, TxtNull, NULL); } return 1; } /******************************************************************************* $Function: midi_test_set_channel_stereo $Description: set channels to stereo $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_set_channel_stereo (MfwMnu* m, MfwMnuItem* i) { SHORT mfw_midi_retVal; TRACE_FUNCTION ("midi_test_set_channel_stereo()"); mfw_midi_retVal = mfw_player_set_channel_stereo(); if(mfw_midi_retVal != MFW_PLAYER_TEST_OK) { TRACE_FUNCTION ("mfw_player_set_channel_stereo(): Riviera Failed"); mmi_midi_test_show_info(0, TxtMidiOptionNotImplemented, TxtNull, NULL); } else { mmi_midi_test_show_info(0, TxtMidiStereoChannel, TxtNull, NULL); } return 1; } /******************************************************************************* $Function: midi_test_set_speaker $Description: set audiopath to speaker $Returns: $Arguments: menu, menu item *******************************************************************************/ GLOBAL int midi_test_set_speaker (MfwMnu* m, MfwMnuItem* i) { SHORT mfw_midi_retVal; TRACE_FUNCTION ("midi_test_set_speaker()"); mfw_midi_retVal=mfw_player_set_speaker(); if(mfw_midi_retVal != MFW_PLAYER_TEST_OK) { TRACE_FUNCTION ("midi_test_set_speaker(): Failed"); mmi_midi_test_show_info(0, TxtMidiOptionNotImplemented, TxtNull, NULL); } else { mmi_midi_test_show_info(0, TxtMidiSpeaker, TxtNull, NULL); } return 1; } /******************************************************************************* $Function: midi_test_set_headset $Description: set audiopath to headset $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_set_headset (MfwMnu* m, MfwMnuItem* i) { SHORT mfw_midi_retVal; TRACE_FUNCTION ("midi_test_set_headset()"); mfw_midi_retVal=mfw_player_set_headset(); if(mfw_midi_retVal != MFW_PLAYER_TEST_OK) { TRACE_FUNCTION ("midi_test_set_headset(): Failed"); mmi_midi_test_show_info(0, TxtMidiOptionNotImplemented, TxtNull, NULL); } else { mmi_midi_test_show_info(0, TxtMidiHeadset, TxtNull, NULL); } return 1; } /******************************************************************************* $Function: midi_test_cc_voice_limit $Description:Creates the Editor for entering the voice limit number $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_cc_voice_limit (MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_MT_Editor_Data * data = (T_MMI_MT_Editor_Data *)(win_data->user); TRACE_FUNCTION ("midi_test_cc_voice_limit()"); data->mt_win_editor = midi_test_editor_create(win); if (data->mt_win_editor != (void *)0) { SEND_EVENT(data->mt_win_editor, MT_CREATE_EDITOR, 0, (void *)NULL); } else { TRACE_FUNCTION ("midi_test_cc_voice_limit() : Unable to create Editor Win!"); } return 1; } /******************************************************************************* $Function: midi_test_play $Description:Starts Playing a midi file $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_play (MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_MT_Editor_Data * data = (T_MMI_MT_Editor_Data *)(win_data->user); T_AS_PLAYER_TYPE player_type; #ifdef FF_MIDI_LOAD_FROM_MEM T_MELODY melody_data; #else char* midi_file; #endif TRACE_FUNCTION ("midi_test_play()"); //If no file is selected inform the user if(mfw_player_currently_playing_idx < 0) { mmi_midi_test_show_info(0, TxtMidiSelectFile, TxtNull, NULL); return 1; } //flag set to 1 means we only play the currently selected file mfw_player_exit_flag = PLAYER_EXIT_FLAG_TRUE; //Play the midi player with high volume. #ifdef FF_MIDI_RINGER #ifdef FF_MIDI_LOAD_FROM_MEM melody_data=sounds_midi_return_memory_location(mfw_player_currently_playing_idx); player_type=mfw_ringer_deduce_player_type(melody_data.melody_name); mfw_player_start_memory(player_type,(UINT32*)melody_data.melody,melody_data.melody_size,(UBYTE)AS_VOLUME_HIGH,mfw_player_playback_loop_flag,sounds_midi_player_start_cb); #else midi_file=sounds_midi_return_file_name(mfw_player_currently_playing_idx); player_type=mfw_ringer_deduce_player_type(midi_file); mfw_player_start_file(player_type,midi_file,(UBYTE)AS_VOLUME_HIGH,mfw_player_playback_loop_flag,sounds_midi_player_start_cb); #endif #endif return 1; } /******************************************************************************* $Function: midi_test_play_all $Description:Plays all the midi files in the FFS one after the other $Returns: $Arguments:menu, menu item *******************************************************************************/ GLOBAL int midi_test_play_all (MfwMnu* m, MfwMnuItem* i) { T_MFW_HND win = mfw_parent(mfw_header()); T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_MMI_MT_Editor_Data * data = (T_MMI_MT_Editor_Data *)(win_data->user); T_AS_PLAYER_TYPE player_type; int numberOfMelodies=0; #ifdef FF_MIDI_LOAD_FROM_MEM T_MELODY melody_data; #else char* midi_file; #endif TRACE_FUNCTION ("midi_test_play_all()"); //Aug 29, 2005 REF: SPR 33999 xdeepadh //If the files are not populated, then populate the array and then playall the files. // Nov 23, 2005 REF : DR OMAPS00057378 x0039928 // IsMidiInit variable decides whether to copy files from FFS to LFS if(IsMidiInit==0) { sounds_midi_init(); IsMidiInit = 1; } numberOfMelodies = sounds_midi_return_file_number(); TRACE_EVENT_P1("numberOfMelodies for midi_test_play_all is %d",numberOfMelodies); if(numberOfMelodies <= 0) { mmi_midi_test_show_info(0, TxtMidiFileNotLoaded, TxtNull, NULL); return 1 ; } if(mfw_player_currently_playing_idx < 0) { //Aug 29, 2005 REF: SPR 33999 xdeepadh // When the files are not selected, the current playing index is set 0. mfw_player_currently_playing_idx = 0; } //set exit_flag to 0 to notify that we have to play all files mfw_player_exit_flag = PLAYER_EXIT_FLAG_FALSE; //Play the midi player with high volume. #ifdef FF_MIDI_RINGER #ifdef FF_MIDI_LOAD_FROM_MEM melody_data=sounds_midi_return_memory_location(mfw_player_currently_playing_idx); player_type=mfw_ringer_deduce_player_type(melody_data.melody_name); mfw_player_start_memory(player_type,(UINT32*)melody_data.melody,melody_data.melody_size,(UBYTE)AS_VOLUME_HIGH,FALSE,sounds_midi_player_start_cb); #else midi_file=sounds_midi_return_file_name(mfw_player_currently_playing_idx); player_type=mfw_ringer_deduce_player_type(midi_file); mfw_player_start_file(player_type,midi_file,(UBYTE)AS_VOLUME_HIGH,FALSE,sounds_midi_player_start_cb); #endif #endif return 1; } // Dec 08, 2004 REF: CRR MMI-SPR-27284 // Description: MIDI Player: Back Key malfunctions in MIDI application. // Solution: A window is created to hold list window. When the user presses Back key, the newly // created window is deleted along with list window, bringing the control back to Midi options // screen. /******************************************************************************* $Function: midi_test_files_exec_cb $Description: Call back function $Returns: none $Arguments: *******************************************************************************/ void midi_test_files_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter) { T_MFW_WIN * win_data = ((T_MFW_HDR *) win)->data; T_mt_menu * data = (T_mt_menu *)win_data->user; SHORT mfw_midi_retVal; int line; int max_file_number; int i; ListWinInfo * mnu_data = (ListWinInfo *)parameter; TRACE_FUNCTION (">>>>> midi_test_files_exec_cb()"); switch (event) { case E_INIT: TRACE_EVENT(">>>> midi_test_files_exec_cb() Event:E_INIT"); /* initialization of administrative data */ data->menu_list_data = (ListMenuData *)ALLOC_MEMORY(sizeof(ListMenuData)); if(data->menu_list_data == 0) { TRACE_EVENT("Failed memory alloc 1 "); return; } max_file_number = sounds_midi_return_file_number(); //In case no files have been loaded display info message //In case no files have been loaded return info message if(max_file_number == 0) { mmi_midi_test_show_info(0, TxtMidiFileNotLoaded, TxtNull, NULL); return; } data->menu_list_data->List = (T_MFW_MNU_ITEM *)ALLOC_MEMORY( max_file_number * sizeof(T_MFW_MNU_ITEM) ); if(data->menu_list_data->List == 0) { TRACE_EVENT("Failed memory alloc 2"); return; } //Sep 29,2005 REF: SPR 34407 xdeepadh for (i = 0; i < max_file_number ; i++) { mnuInitDataItem(&data->menu_list_data->List[i]); data->menu_list_data->List[i].flagFunc = item_flag_none; //Display the midi file names in the list data->menu_list_data->List[i].str = (char *)sounds_midi_return_file_name(data->mt_file_count++); } data->menu_list_data->ListLength =max_file_number; data->menu_list_data->ListPosition = 1; data->menu_list_data->CursorPosition = 1; data->menu_list_data->SnapshotSize = max_file_number; data->menu_list_data->Font = 0; data->menu_list_data->LeftSoftKey = TxtSoftSelect; data->menu_list_data->RightSoftKey = TxtSoftBack; data->menu_list_data->KeyEvents = KEY_ALL; data->menu_list_data->Reason = 0; data->menu_list_data->Strings = TRUE; data->menu_list_data->Attr = (MfwMnuAttr*)&menuMtSearchListAttr; //Apr 05, 2005 REF: ENH 29994 xdeepadh data->menu_list_data->Attr->hdrId = TxtMidiFileTitle; data->menu_list_data->autoDestroy = FALSE; listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)midi_mt_menu_list_listmnu_cb,0); break; default: break; } } // Dec 08, 2004 REF: CRR MMI-SPR-27284 // Description: MIDI Player: Back Key malfunctions in MIDI application. // Solution: A window is created to hold list window. When the user presses Back key, the newly // created window is deleted along with list window, bringing the control back to Midi options // screen. /******************************************************************************* $Function: midi_test_files_win_cb $Description: Window event handler $Returns: MFW_EVENT_REJECTED: MFW_EVENT_CONSUMED: $Arguments: *******************************************************************************/ static int midi_test_files_win_cb (MfwEvt e, MfwWin *w) { TRACE_FUNCTION ("midi_test_files_win_cb()"); switch (e) { case MfwWinVisible: /* window is visible */ break; case MfwWinFocussed: /* input focus / selected */ case MfwWinDelete: /* window will be deleted */ default: return MFW_EVENT_REJECTED; } return MFW_EVENT_CONSUMED; } // Dec 08, 2004 REF: CRR MMI-SPR-27284 // Description: MIDI Player: Back Key malfunctions in MIDI application. // Solution: A window is created to hold list window. When the user presses Back key, the newly // created window is deleted along with list window, bringing the control back to Midi options // screen. /******************************************************************************* $Function: midi_test_files_browse $Description: This function is called when the user selects "Browse Midi Files" option $Returns: MFW_EVENT_CONSUMED $Arguments: *******************************************************************************/ GLOBAL int midi_test_files_browse( MfwMnu *m, MfwMnuItem *i ) { T_MFW_HND win; T_MFW_HND parent_win = mfw_parent(mfw_header()); int numberOfMelodies=0; TRACE_FUNCTION ("midi_test_files_browse"); // Nov 23, 2005 REF : DR OMAPS00057378 x0039928 // IsMidiInit variable decides whether to copy files from FFS to LFS if(IsMidiInit==0) { sounds_midi_init(); IsMidiInit = 1; } // Nov 09, 2005 REF:DR OMAPS00049167 x0039928 // Fix : Call the player initialize routine to set the default parameters. mfw_player_init(); numberOfMelodies = sounds_midi_return_file_number(); TRACE_EVENT_P1("numberOfMelodies is %d",numberOfMelodies); if(numberOfMelodies <= 0) { mmi_midi_test_show_info(0, TxtMidiFileNotLoaded, TxtNull, NULL); } else { win = mmi_midi_test_build_Menu(parent_win); if (win NEQ NULL) { SEND_EVENT (win, E_INIT, 0, 0); } } return MFW_EVENT_CONSUMED; } //Sep 29,2005 REF: SPR 34407 xdeepadh /******************************************************************************* $Function: mmi_midi_test_build_Menu $Description: To hold list window $Returns: Window handle $Arguments: *******************************************************************************/ static T_MFW_HND mmi_midi_test_build_Menu( MfwHnd parent_window) { T_mt_menu * data = (T_mt_menu *)mfwAlloc(sizeof (T_mt_menu)); T_MFW_WIN * win; TRACE_FUNCTION ("mmi_midi_test_build_Menu"); /* * Create window handler */ data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)midi_test_files_win_cb); if (data->win EQ NULL) { return NULL; } TRACE_EVENT("list holder window created: " ); /* * connect the dialog data to the MFW-window */ data->mmi_control.dialog = (T_DIALOG_FUNC)midi_test_files_exec_cb; data->mmi_control.data = data; win = ((T_MFW_HDR *)data->win)->data; win->user = (void *)data; data->parent = parent_window; winShow(data->win); /* * return window handle */ return data->win; }