FreeCalypso > hg > fc-tourmaline
diff src/ui/bmi/mmiMidiTest.c @ 3:67bfe9f274f6
src/ui: import of src/ui3 from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:33:10 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui/bmi/mmiMidiTest.c Fri Oct 16 06:33:10 2020 +0000 @@ -0,0 +1,1432 @@ +/******************************************************************************* + + 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 + + Aug 01, 2007 REF:DRT OMAPS00137370 x0045876 + Description: MM: MIDI/IMY file is not played correctly after listening a + MP3 in the Browse Midi list. + Solution: Param Voice_Limit is changed when MP3 or AAC file is played. So before + playing MIDI file, Voice_Limit should be initialized properly. + Mar 30, 2007 REF: OMAPS00122691 x0039928 + Description: COMBO: No melody heard on parsing over different volums in tones menu + Solution: Filename is passed with complete path to the audio service api. + + Jan 30, 2007 DR: OMAPS00108892 x0pleela + Description: TCMIDITEST.23(Apps) - Play All File feature fails when different Configurations + like Mono/Stereo, Loop On/Off are selected + Solution: When Loop On is enabled, and when user selected to Play all files, an error message + will be displayed saying Loop ON, cannot play all files. Changes aremade in functions + midi_test_play_all() and midi_test_set_loop_on() + + + Sep 11, 2006 DR: OMAPS00094182 xrashmic + Description: midi and mp3 files is not being populated on accessing corresponding menu, but only during bootup + Solution: Populate files on accessing the "browse files" list + + June 19, 2006 REF: DRT OMAPS00076378 x0012849 : Jagannatha + Description: MIDI files should play while browsing + Solution: The Menu up and down key event will be handled and the current + file will be played while browsing the files. + + 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" +#include "MmiBookShared.h" //Sep 11, 2006 DR: OMAPS00094182 xrashmic +/******************************************************************************* + + 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 + +#define TIME_HALFSECOND 500 + +/*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 +// June 19, 2006 REF: DRT OMAPS00076378 x0012849 +// This timer is created so that a file is played only if the item is +// selected for more than half a second +static MfwHnd midiBrowseTimer; +// This variable is created to know Currently list of MIDI files are showed or not. +static BOOL isMidiListON = FALSE; +/******************************************************************************* + + 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 */ + (U8)-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_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 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; + 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, NULL); + 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); + + /* Aug 01, 2007 DRT: OMAPS00137370 x0045876 */ + /* To display message, when Voice Limit is changed through Menu */ + 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; + +} + +/*a0393213 lint warning removal - This function is not used currently. So it's put under the flag. If it is required just remove the flag.*/ +#ifdef MMI_LINT_WARNING_REMOVAL +/******************************************************************************* + + $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; +} +#endif + +/******************************************************************************* + + $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)); + } +} + + + +// June 19, 2006 REF: DRT OMAPS00076378 x0012849 +/******************************************************************************* + + $Function: midi_test_menu_status + + $Description: Returns TRUE if the list of MIDI files is showed currently on display. + + $Returns: TRUE or FALSE + + $Arguments: None + +*******************************************************************************/ +BOOL midi_test_menu_status() +{ + return isMidiListON; +} + + + +//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); + // June 19, 2006 REF: DRT OMAPS00076378 x0012849 + /*At this point the MIDI list is destroyed*/ + isMidiListON = FALSE; + /* At this point the play need to be stopped. If user wants the file need to + be played while going across menu then 'play' or 'play all' need to be selected */ + midi_stop_player (NULL, NULL); + if (midiBrowseTimer != NULL) + { + // Delete the timer. It's not required any more. + timDelete (midiBrowseTimer); + } + } + //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()"); + + //x0pleela 29 Jan, 2007 DR: OMAPS00108892 + //Check if it is playing all files. + //If playing, and user wants to activate Loop On, display error message. + //But keep playing all the files + if( mfw_player_exit_flag == PLAYER_EXIT_FLAG_FALSE ) + { + //Display an error message + mmi_midi_test_show_info(0, TxtLoopOn, TxtCantBeActivated, NULL); + return 1; + } + + 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_AS_PLAYER_TYPE player_type; +#ifdef FF_MIDI_LOAD_FROM_MEM + T_MELODY melody_data; +#else + char* midi_file; +#ifdef FF_MMI_FILEMANAGER + char temp[FILENAME_MAX_LEN]; + UINT16 midi_file_uc[FILENAME_MAX_LEN]; +#endif +#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); + strcpy(temp, "/FFS/mmi/tones/"); + strcat(temp, midi_file); + player_type=mfw_ringer_deduce_player_type(midi_file); +#ifdef FF_MMI_FILEMANAGER + convert_u8_to_unicode(temp, midi_file_uc); + mfw_player_start_file(player_type,midi_file_uc,(UBYTE)AS_VOLUME_HIGH,mfw_player_playback_loop_flag,sounds_midi_player_start_cb); +#else + mfw_player_start_file(player_type,midi_file,(UBYTE)AS_VOLUME_HIGH,mfw_player_playback_loop_flag,sounds_midi_player_start_cb); +#endif +#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_AS_PLAYER_TYPE player_type; + int numberOfMelodies=0; +#ifdef FF_MIDI_LOAD_FROM_MEM + T_MELODY melody_data; +#else + char* midi_file; +#ifdef FF_MMI_FILEMANAGER + char temp[FILENAME_MAX_LEN]; + UINT16 midi_file_uc[FILENAME_MAX_LEN]; +#endif +#endif + + TRACE_FUNCTION ("midi_test_play_all()"); + + //x0pleela 31 Jan, 2007 DR: OMAPS00108892 + //Reset the index to -1 to avoid playing only the last file. + mfw_player_currently_playing_idx = -1; + + //x0pleela 29 Jan, 2007 DR: OMAPS00108892 + //Check if Loop is On. If so, display error message. Else allow playing all files + if( mfw_player_playback_loop_flag ) + { + //Display an error message + mmi_midi_test_show_info(0, TxtLoopOn, TxtCantPlayAllFiles, NULL); + return 1 ; + } + //Sep 11, 2006 DR: OMAPS00094182 xrashmic + sounds_midi_init(); + + 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); + strcpy(temp, "/FFS/mmi/tones/"); + strcat(temp, midi_file); + player_type=mfw_ringer_deduce_player_type(midi_file); +#ifdef FF_MMI_FILEMANAGER + convert_u8_to_unicode(temp, midi_file_uc); + mfw_player_start_file(player_type,midi_file_uc,(UBYTE)AS_VOLUME_HIGH,FALSE,sounds_midi_player_start_cb); +#else + mfw_player_start_file(player_type,midi_file,(UBYTE)AS_VOLUME_HIGH,FALSE,sounds_midi_player_start_cb); +#endif +#endif +#endif + return 1; +} + + + +// June 19, 2006 REF: DRT OMAPS00076378 x0012849 +/******************************************************************************* + + $Function: midi_test_play_browsing + + $Description: Play the currently choosen file. + + $Returns: MFW_EVENT_CONSUMED always + + $Arguments: e, event, tc timer context +*******************************************************************************/ + +static int midi_test_play_browsing( MfwEvt e, MfwTim *tc ) +{ + midi_test_play(NULL, NULL); + if (midiBrowseTimer != NULL ) + { + timStop(midiBrowseTimer); + } + 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_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; + int max_file_number; + int i; + + ListWinInfo * mnu_data = (ListWinInfo *)parameter; + + TRACE_FUNCTION (">>>>> midi_test_files_exec_cb()"); + + switch (event) + { + // June 19, 2006 REF: DRT OMAPS00076378 x0012849 + // To know whether the list is created or not. + T_MFW MidiListCreationStatus; + 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; + // June 19, 2006 REF: DRT OMAPS00076378 x0012849 + MidiListCreationStatus = + listDisplayListMenu (win, data->menu_list_data, + (ListCbFunc)midi_mt_menu_list_listmnu_cb,0); + if (LISTS_OK == MidiListCreationStatus) + { + /*If control reached this point then List of files are showed on display*/ + isMidiListON = TRUE; + /*Create one timer and play the file only if that timer expires*/ + /*Play the first file if user hasn't pressed the up and down for half a second */ + mfw_player_currently_playing_idx = 0; + midiBrowseTimer = timCreate( 0, TIME_HALFSECOND, (MfwCb)midi_test_play_browsing); + timStart( midiBrowseTimer ); + } + break; + case E_START_MELODY: + // June 19, 2006 REF: DRT OMAPS00076378 x0012849 + /*Stop playing the current file*/ + midi_stop_player (NULL, NULL); + mfw_player_currently_playing_idx = mnu_data->MenuData.ListPosition; + if (midiBrowseTimer != NULL ) + { + timStop(midiBrowseTimer); + timStart(midiBrowseTimer); + } + 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"); +//Sep 11, 2006 DR: OMAPS00094182 xrashmic + sounds_midi_init(); +// 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; +} +//Sep 11, 2006 DR: OMAPS00094182 xrashmic +/******************************************************************************* + + $Function: mmi_midi_test_Application_cb + + $Description: Callback function called on exiting the midi appilcation + + $Returns: None + + $Arguments: parent_win : Parent window + identifier : + reason: +*******************************************************************************/ +static void mmi_midi_test_Application_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason) +{ + TRACE_FUNCTION("mmi_midi_test_Application_cb"); + sounds_midi_exit(); +} + +/******************************************************************************* + + $Function: mmi_midi_test_Application + + $Description: Launcing the Midi application menu + + $Returns: Always returns MFW_EVENT_CONSUMED (1) + + $Arguments: m : pointer to the mnu data for the menu which caused this function to be called. + i : pointer to the item data from the menu. +*******************************************************************************/ +GLOBAL int mmi_midi_test_Application (MfwMnu* m, MfwMnuItem* i) +{ + T_MFW_HND win; + T_MFW_HND parent_win = mfw_parent(mfw_header()); + TRACE_FUNCTION("mmi_midi_test_Application"); + win=bookMenuStart(parent_win, MidiTestAppMenuAttributes(),0); + SEND_EVENT(win, ADD_CALLBACK, NULL, (void *)mmi_midi_test_Application_cb); + return MFW_EVENT_CONSUMED; +}