FreeCalypso > hg > tcs211-c139
diff g23m/condat/ms/src/bmi/MmiMidiTest.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/bmi/MmiMidiTest.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,1275 @@ +/******************************************************************************* + + 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; +} + + +