view src/ui/bmi/mmiMP3Test.c @ 51:04aaa5622fa7

disable deep sleep when Iota LEDB is on TI's Iota chip docs say that CLK13M must be running in order for LEDB to work, and practical experience on Mot C139 which uses Iota LEDB for its keypad backlight concurs: if Calypso enters deep sleep while the keypad backlight is turned on, the light flickers visibly as the chipset goes into and out of deep sleep. TI's original L1 sleep manager code had logic to disable deep sleep when LT_Status() returns nonzero, but that function only works for B-Sample and C-Sample LT, always returns 0 on BOARD 41 - no check of Iota LEDB status anywhere. Change this code for our current hardware: disable deep sleep when Iota LEDB has been turned on through LLS.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 19 Oct 2020 05:11:29 +0000
parents 67bfe9f274f6
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: MMI Application to test the different Audio file formats.
 $Module:   Test  Audio Player
 $File:       MmiMp3Test.c
 $Revision:   1.0

 $Author:   Elsa Armanet-Said Texas Instruments Nice
 $Date:       17/05/04

********************************************************************************

 Description:

    This provides the MP3 Test Application interface.

********************************************************************************
 $History: MmiMp3Test.c

 	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

  	Jun 06, 2006 REF: ERT OMAPS00070659  x0039928  
       Bug:MP3 RWD and FWD function - MOT
       Fix: Forward and Rewind functionalities are handled.
       
	Jun 02,2006 REF: DR OMAPS00079746  x0039928  
       Bug:MMI displays 'Playing' when trying to play a wrong file
       Fix: MP3 playback error is handled.

  	Nov 16,2005 REF: DR OMAPS00049192  x0039928  
       Bug:MP3: The screen is not refreshed after the mp3 file completes playing
       Fix: The window is destroyed in mmi_mp3_test_start_cb() after AUDIO_OK 
       event is received in the mfw callback.

  17/05/04    
        Sep 29,2005 REF: SPR 34407 xdeepadh  
	Bug:Back soft key takes more time to return to the previous screen in MP3 application
	Fix:The list creation for  MP3 files has been modified


  	Sep 27,2005 REF: SPR 34402 xdeepadh  
	Bug:Mono option is always highlighted even when Stereo is selected
	Fix:The channel setting will be saved in the FFS, which will be retrieved 
	later and the selected channel will be higlighted.

  	Jul 18, 2005    REF: SPR 31695   xdeepadh
	Bug:Problems with MP3 test application
	Fix:The window handling of MP3 Test Application has been done properly.

 $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_mp3test.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 "MmiMP3Test.h"
#include "MmiMain.h"
#include "Mmiicons.h"
#include "Icons\IcnDefs.h"
 //Sep 27,2005 REF: SPR 34402 xdeepadh  
#include "MmiBookShared.h" 
#include "mfw_ffs.h"

/*******************************************************************************

                                internal data

*******************************************************************************/

/*
 * Internal events
 */
//	E_INIT event definition
#define E_INIT 1

#if (BOARD == 71)
#define MP3_INIT 1
#define MP3_RETURN 2
#endif

//Sep 27,2005 REF: SPR 34402 xdeepadh  
//defines for channels
#define PLAYER_CHANNEL_MONO		0
#define PLAYER_CHANNEL_STEREO	1

//Jul 18, 2005    REF: SPR 31695   xdeepadh
//Defines for Player events
#define PLAYER_INIT           500
#define PLAYER_DESTROY       501
#define PLAYER_PLAY           502

/*local defines*/
#define PLAYER_INFO_SCRN_TIMEOUT  1500

#if (BOARD == 71)
#define MP3_FORWARD_REWIND_TIME 10
#endif

typedef struct
{
	T_MMI_CONTROL	mmi_control;
	MfwHnd			win;
	MfwHnd       		info_win; //Jul 18, 2005    REF: SPR 31695   xdeepadh
	MfwHnd  			parent_win;//Jul 18, 2005    REF: SPR 31695   xdeepadh
	MfwHnd			mfwwin;	
	MfwHnd			callwin;		
	MfwHnd                 kbd;
#if (BOARD == 71)	
	MfwHnd			menu;
#endif
}	T_MMI_Player_Win_data;

/*menu data structure definition*/
typedef struct
{
  T_MMI_CONTROL                      mmi_control;
  T_MFW_HND                             win;
	T_MFW_HND			parent;		//Jul 18, 2005    REF: SPR 31695   xdeepadh
  T_MFW_HND                             kbd;
  T_MFW_HND                             kbd_long;
  T_MFW_HND                             player_menu;
   T_VOID_FUNC                          func_cb;
   UBYTE						player_num_file;
   UBYTE						player_file_count;
   ListCbFunc					player_list_cb;
   UBYTE						player_list_idx;
 ListMenuData   * 			menu_list_data; //Sep 29,2005 REF: SPR 34407 xdeepadh  
}T_player_menu;

//	Nov 16,2005 REF: DR OMAPS00049192  x0039928  
// Global variable that holds the mmi return path and is found in mfw_mp3test.c
extern MMI_RETURN_PATH mmi_audio_player_return_path;

/*global menu data*/
T_player_menu player_menu_data = {0};
/*Boolean to check whether file being played is paused.*/
BOOL IsPaused = FALSE;
//UBYTE IsMfwInit = 0;
extern char* inputFileName; // input file
extern  UBYTE IsMP3On;
extern int audio_player_currently_playing_idx ;

#if (BOARD == 71)
static T_MFW_HND optionwin;
#endif

/*******************************************************************************

                                Local prototypes

*******************************************************************************/
static void mmi_audio_player_menu_list_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData);
static MfwHnd mmi_audio_player_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback);
//Sep 29,2005 REF: SPR 34407 xdeepadh  
static T_MFW_HND  mmi_audio_player_build_player_Menu( MfwHnd parent_window);


/*default static menu*/
static MfwMnuAttr menuPlayerSearchListAttr =
{
	&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 */
};

#if (BOARD == 71)
static const MfwMnuItem Mmi_mp3_OPTItems [] =
{
	{0,0,0,(char *)TxtPlayerPause,0,(MenuFunc)M_exePause,item_flag_none},
	{0,0,0,(char *)TxtPlayerForward,0,(MenuFunc)M_exeForward,item_flag_none},	
	{0,0,0,(char *)TxtPlayerRewind,0,(MenuFunc)M_exeRewind,item_flag_none}	
};


static const MfwMnuAttr Mmi_mp3_OPTAttrib =
{
    &SmsSend_R_OPTArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    (U8)-1,                                 /* use default font         */
    (MfwMnuItem*)Mmi_mp3_OPTItems,                      /* with these items         */
    sizeof(Mmi_mp3_OPTItems)/sizeof(MfwMnuItem), /* number of items     */
    COLOUR_LIST_SMS,	TxtNull, NULL, MNUATTRSPARE

};

/*******************************************************************************

 $Function:		mmi_mp3_test_opt_win_cb

 $Description:		

 $Returns:		MFW_EVENT_CONSUMED 

 $Arguments:		event		- window handle event
 				win			- Camera window

*******************************************************************************/
int mmi_mp3_test_opt_win_cb (MfwEvt evt, MfwHnd win)
{
    switch (evt)
				{
        case MfwWinVisible:  /* window is visible  */
	    displaySoftKeys(TxtSoftSelect,TxtSoftBack);
	    break;
	case MfwWinFocussed: /* input focus / selected   */
	case MfwWinDelete:   /* window will be deleted   */
        default:
	    return MFW_EVENT_REJECTED;
				}
    return MFW_EVENT_CONSUMED;

		    }

/*******************************************************************************

 $Function:    	mmi_mp3_test_opt_kbd_cb

 $Description:		

 $Returns:		execution status

 $Arguments:	e - event id
 				k - keyboard info
*******************************************************************************/
 
static int mmi_mp3_test_opt_kbd_cb (MfwEvt e, MfwKbd *k)
 {
    T_MFW_HND    win  = mfwParent(mfw_header());
    T_MFW_WIN  * win_data = ((T_MFW_HDR *)win)->data;
    T_MMI_Player_Win_data      * data = (T_MMI_Player_Win_data *)win_data->user;


    if (e & KEY_LONG)
	{
	    switch (k->code)
		{
		case KCD_HUP: /* back to previous menu */
		    mnuEscape(data->menu);
		    break;
		case KCD_RIGHT: /* Power Down */
		    return MFW_EVENT_REJECTED; /* handled by idle */
		default: /* no response to all other keys */
		    return MFW_EVENT_CONSUMED;
		}
	}
    else
	{
	switch (k->code)
	{
		case KCD_MNUUP: /* highlight previous entry */
		    mnuUp(data->menu);
		    break;
		case KCD_MNUDOWN: /* highlight next entry */
		    mnuDown(data->menu);
		    break;
		case KCD_MNUSELECT:
		case KCD_LEFT: /* activate this entry */
		    mnuSelect(data->menu);
		    break;
		case KCD_HUP: /* back to previous menu */
		case KCD_RIGHT: /* back to previous menu */
		    mnuEscape(data->menu);
				break;
		default: /* no response to all other keys */
		    return MFW_EVENT_CONSUMED;
		}
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:    	mmi_mp3_test_opt_mnu_cb

 $Description:	Menu callback function for the Option window

 $Returns:		Execution status

 $Arguments:	e - event id
 				m - menu handle
*******************************************************************************/

static int mmi_mp3_test_opt_mnu_cb (MfwEvt e, MfwMnu *m)
{
    switch (e)
	{
	case E_MNU_ESCAPE: /* back to previous menu */
		TRACE_EVENT("E_MNU_ESCAPE");
		SEND_EVENT (optionwin, MP3_RETURN, NULL, NULL);
		break;
	default: /* in mnuCreate() only E_MNU_ESCAPE has been enabled! */
	    return MFW_EVENT_REJECTED;
	}
	return MFW_EVENT_CONSUMED;
}

/*******************************************************************************

 $Function:    	mmi_mp3_test_opt_destroy

 $Description:		Destroy the Camera Option window
 				
 $Returns:		mfw window handle

 $Arguments:	own_window - current window

*******************************************************************************/

static void mmi_mp3_test_opt_destroy(MfwHnd own_window)
{
    T_MFW_WIN * win_data;
    T_MMI_Player_Win_data     * data;

    if (own_window)
	{
	    win_data = ((T_MFW_HDR *)own_window)->data;
	    data = (T_MMI_Player_Win_data *)win_data->user;

	    if (data)
		{

		   /*
		** Failed to start : Free Memory, and exit
		*/

		if(data->kbd != NULL)
				{
		           kbdDelete (data->kbd);
				}

		if(data->menu!= NULL)
      		{
		   mnuDelete(data->menu);
		    }

		     // Delete WIN handler
		     
			   win_delete (data->win);

		     // Free Memory
		  
		    FREE_MEMORY ((void *)data, sizeof (T_MMI_Player_Win_data));
	}
	else
			   {
		    TRACE_EVENT ("mmi_mp3_test_opt_destroy() called twice");
               }
		    }
}


/*******************************************************************************

 $Function:		mmi_mp3_test_opt_exec_cb

 $Description:		
 $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_mp3_test_opt_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
    T_MFW_WIN        * win_data = ((T_MFW_HDR *) win)->data;
    T_MMI_Player_Win_data  * data     = (T_MMI_Player_Win_data *)win_data->user;
     TRACE_FUNCTION ("mmi_mp3_test_opt_exec_cb()");
    switch (event)
			   {
	case MP3_INIT:
		/* initialization of administrative data */
			data->kbd =      kbdCreate(data->win,KEY_ALL,         (MfwCb)mmi_mp3_test_opt_kbd_cb);
			data->menu =     mnuCreate(data->win,(MfwMnuAttr *)&Mmi_mp3_OPTAttrib, E_MNU_ESCAPE, (MfwCb)mmi_mp3_test_opt_mnu_cb);
			mnuLang(data->menu,mainMmiLng);

			/* put the (new) dialog window on top of the window stack */
			mnuUnhide(data->menu);
			winShow(data->win);
			break;

	case MP3_RETURN:
		mmi_mp3_test_opt_destroy(optionwin);
		optionwin = NULL;
		dspl_ClearAll();
		ALIGNED_PROMPT(LEFT,Mmi_layout_line(1),0, TxtPlayerResume);
		displaySoftKeys(TxtSoftOptions, TxtStop);
	      break;

		default:
	    return;
	}
}


/*******************************************************************************

 $Function:		mmi_mp3_test_opt_win_create

 $Description:		

 $Returns:		

 $Arguments:		parent : pointer to the parent window.

*******************************************************************************/
T_MFW_HND mmi_mp3_test_opt_create(T_MFW_HND parent)
		{
	 T_MMI_Player_Win_data      * data = (T_MMI_Player_Win_data *)ALLOC_MEMORY (sizeof (T_MMI_Player_Win_data));
    T_MFW_WIN  * win;

    TRACE_FUNCTION ("mmi_mp3_test_opt_create()");

	    	/*
     * Create window handler
		    */

    data->win = 
	win_create (parent, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_mp3_test_opt_win_cb);
    if (data->win EQ NULL)
				{
	    return NULL;
	}
       	    /*
     * connect the dialog data to the MFW-window
		    */

    data->mmi_control.dialog = (T_DIALOG_FUNC)mmi_mp3_test_opt_exec_cb;
		    data->mmi_control.data = data;
		    win = ((T_MFW_HDR *)data->win)->data;
	    	win->user = (void *)data;
    data->parent_win             = parent;

		    /*
     * return window handle
		    */
	
    return data->win;
	}

/*******************************************************************************

 $Function:    	mmi_mp3_test_opt_start

 $Description:		
 				
 $Returns:		

 $Arguments:	parent_window -parent window handle
 				menuAttr - Menu attributes.

*******************************************************************************/

T_MFW_HND mmi_mp3_test_opt_start(T_MFW_HND parent_window, MfwMnuAttr *menuAttr)
{
//    T_MFW_HND win;

    TRACE_FUNCTION ("mmi_mp3_test_opt_start()");

    optionwin = (T_MFW_HND)mmi_mp3_test_opt_create (parent_window);

    if (optionwin NEQ NULL)
        {
	    SEND_EVENT (optionwin, MP3_INIT, NULL, (void *)menuAttr);
	}
    return optionwin;
	}

#endif
/*******************************************************************************

 $Function:     mmi_audio_player_menu_destroy

 $Description: destroy menu window

 $Returns:

 $Arguments:

*******************************************************************************/
static void mmi_audio_player_menu_destroy(MfwHnd window)
{
	T_MFW_WIN     * win_data  = ((T_MFW_HDR *)window)->data;
	T_player_menu * data = (T_player_menu *)win_data->user;
    TRACE_FUNCTION ("mmi_audio_player_menu_destroy()");


	if (window == NULL)
	{
		return;
	}

	if (data)
	{
		win_delete(data->win);
		
		/*
		** Free Memory
		*/
		mfwFree((void *)data, sizeof (T_player_menu));

	}

}
//Sep 29,2005 REF: SPR 34407 xdeepadh  
/*******************************************************************************
 $Function:     mmi_audio_player_menu_list_listmnu_cb

 $Description: destroy lists and menu in case of back softkey or menu exit

 $Returns:

 $Arguments:

*******************************************************************************/
static void mmi_audio_player_menu_list_listmnu_cb(T_MFW_HND Parent, ListMenuData * ListData)
{
	T_MFW_WIN			*win_data	= ((T_MFW_HDR *)Parent)->data;
	T_player_menu	*data		= (T_player_menu *)win_data->user;
	char *fileExt;

	TRACE_FUNCTION ("mmi_audio_player_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->player_num_file* sizeof (T_MFW_MNU_ITEM)));
			FREE_MEMORY ((void *)data->menu_list_data, sizeof (ListMenuData));
		}

     		 mmi_audio_player_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);
		//call mfw to save selected index
		mfw_audio_player_save_selected_file_idx(ListData->ListPosition);
		fileExt =(char*) mfw_audio_player_GetExtension(inputFileName);	

		//Decide whether to play Mp3 or AAC
		if ( (strcmp(fileExt, "mp3") == 0))
		{
			IsMP3On = MFW_PLAYER_MP3;
		}
#ifdef FF_MMI_TEST_AAC		
		else if ( (strcmp(fileExt, "aac") == 0))
		{
			IsMP3On = MFW_PLAYER_AAC;
		}
#endif	
		data->player_list_idx = ListData->ListPosition;
		mmi_audio_player_show_info(0, TxtPlayerFileSelected, TxtNull, NULL);
	}

	return;
}

/*******************************************************************************

 $Function:     mmi_audio_player_files_win_cb

 $Description: Window event handler

 $Returns:	MFW_EVENT_REJECTED: 
 			MFW_EVENT_CONSUMED:

 $Arguments:	

*******************************************************************************/
static int mmi_audio_player_files_win_cb (MfwEvt e, MfwWin *w)    
{
  	TRACE_FUNCTION ("mmi_audio_player_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;
}	

/*******************************************************************************

 $Function:     mmi_audio_player_files_exec_cb

 $Description: Call back function

 $Returns:	none

 $Arguments:

*******************************************************************************/
void mmi_audio_player_files_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
    	T_MFW_WIN      * win_data = ((T_MFW_HDR *) win)->data;
    	T_player_menu   * data = (T_player_menu *)win_data->user;    
  int max_file_number;
  int i;
  
    	TRACE_FUNCTION ("mmi_audio_player_files_exec_cb");

    	switch (event)
  	{
    		case E_INIT:

    TRACE_EVENT(">>>> mmi_audio_player_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 = mfw_audio_player_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_audio_player_show_info(0, TxtPlayerFileNotLoaded, 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 Player file names in the list
		data->menu_list_data->List[i].str  = (char *)mfw_audio_player_return_file_name(data->player_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*)&menuPlayerSearchListAttr;
//Apr 05, 2005    REF: ENH 29994 xdeepadh	

 	        data->menu_list_data->Attr->hdrId = TxtPlayerTest;
    data->menu_list_data->autoDestroy    = FALSE;
  	    listDisplayListMenu(win, data->menu_list_data,(ListCbFunc)mmi_audio_player_menu_list_listmnu_cb,0);

                    	break;

  
  			default:
      			break;
  	}

}


/*******************************************************************************

 $Function:     mmi_audio_player_files_browse

 $Description: This function is called when the user selects "Browse Player Files" option

 $Returns:	MFW_EVENT_CONSUMED

 $Arguments:	
 			

*******************************************************************************/
GLOBAL int mmi_audio_player_files_browse( MfwMnu *m, MfwMnuItem *i )
{
  	T_MFW_HND win;
    	T_MFW_HND parent_win = mfw_parent(mfw_header());
	int numberOfMelodies=0;

	TRACE_FUNCTION ("mmi_audio_player_files_browse");
	//Sep 11, 2006 DR: OMAPS00094182 xrashmic	     
	     mfw_audio_player_init();

	numberOfMelodies = mfw_audio_player_return_file_number();
	TRACE_EVENT_P1("numberOfMelodies is %d",numberOfMelodies);

	if(numberOfMelodies <= 0)
	{
		mmi_audio_player_show_info(0, TxtPlayerFileNotLoaded, TxtNull, NULL);
		
	}
	else
	{
		win = mmi_audio_player_build_player_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_audio_player_build_player_Menu

 $Description: To hold list window

 $Returns:	Window handle

 $Arguments:	
*******************************************************************************/

static T_MFW_HND  mmi_audio_player_build_player_Menu( MfwHnd parent_window)
{
 	T_player_menu *  data = (T_player_menu *)mfwAlloc(sizeof (T_player_menu));
  	T_MFW_WIN  * win;

    	TRACE_FUNCTION ("mmi_audio_player_build_player_Menu");

    	/*
     	* Create window handler
     	*/

    	data->win = win_create (parent_window, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_audio_player_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)mmi_audio_player_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 27,2005 REF: SPR 34402 xdeepadh  
/*******************************************************************************

 $Function:     		mmi_audio_player_set_cur_selected_channels

 $Description: 	The Menu for Player channels  will be displayed,
 				by highlighting the selected menu item.

 $Returns:None

 $Arguments:None

*******************************************************************************/

void mmi_audio_player_set_cur_selected_channels(void)
{
	UBYTE			CurSel;
	T_MFW_HND 		setting_win;
	T_MFW_HND 		win = mfw_parent(mfw_header());
	
    setting_win =(T_MFW_HND) bookMenuStart(win, (MfwMnuAttr*)PlayerChannelAttributes(), 0);

	CurSel = FFS_flashData.player_channel_state;
	SEND_EVENT(setting_win, DEFAULT_OPTION, NULL, &CurSel);
}

#if (BOARD == 71)
/*******************************************************************************

 $Function:     mmi_audio_player_pause

 $Description: set player to pause

 $Returns:

 $Arguments:

*******************************************************************************/
int M_exePause (MfwMnu* m, MfwMnuItem* i)
{

		mfw_audio_player_pause();
		IsPaused=TRUE;
		mmi_mp3_test_opt_destroy(optionwin);
		optionwin = NULL;
		dspl_ClearAll();
		ALIGNED_PROMPT(LEFT,Mmi_layout_line(1),0, TxtPlayerPause);
		displaySoftKeys(TxtPlayerResume, TxtStop);


  return 1;
}


/*******************************************************************************

 $Function:     mmi_audio_player_forward

 $Description: set player to forward

 $Returns:

 $Arguments:

*******************************************************************************/
int M_exeForward (MfwMnu* m, MfwMnuItem* i)
{
		
		mmi_mp3_test_opt_destroy(optionwin);
		optionwin = NULL;
		dspl_ClearAll();
		ALIGNED_PROMPT(LEFT,Mmi_layout_line(1),0, TxtPlayerResume);
		displaySoftKeys(TxtSoftOptions, TxtStop);
		mfw_audio_player_forward(MP3_FORWARD_REWIND_TIME);
		mmi_audio_player_show_info(0, TxtPlayerForwarding, TxtNull, NULL);
		
  return 1;
}

/*******************************************************************************

 $Function:     mmi_audio_player_rewind

 $Description: set player to rewind

 $Returns:

 $Arguments:

*******************************************************************************/
int M_exeRewind (MfwMnu* m, MfwMnuItem* i)
{
		mmi_mp3_test_opt_destroy(optionwin);
		optionwin = NULL;
		dspl_ClearAll();
		ALIGNED_PROMPT(LEFT,Mmi_layout_line(1),0, TxtPlayerResume);
		displaySoftKeys(TxtSoftOptions, TxtStop);
		mfw_audio_player_rewind(MP3_FORWARD_REWIND_TIME);
		mmi_audio_player_show_info(0, TxtPlayerRewinding, TxtNull, NULL);

  return 1;
}
#endif

/*******************************************************************************

 $Function:     mmi_audio_player_set_channel_mono

 $Description: set channels to mono

 $Returns:

 $Arguments:

*******************************************************************************/
GLOBAL int mmi_audio_player_set_channel_mono (MfwMnu* m, MfwMnuItem* i)
{

  SHORT	mfw_audio_player_retVal;
   
  TRACE_FUNCTION ("mmi_audio_player_set_channel_mono()");
 
  mfw_audio_player_retVal = mfw_audio_player_set_channel_mono();
  if(mfw_audio_player_retVal != MFW_PLAYER_TEST_OK)
  {
	TRACE_FUNCTION ("mmi_audio_player_set_channel_mono(): Riviera Failed"); 
	mmi_audio_player_show_info(0, TxtPlayerTest, TxtNull, NULL);
  }
  else
  {
	// Sep 27,2005 REF: SPR 34402 xdeepadh  
	// The channel state will be written into the flash.
	FFS_flashData.player_channel_state = PLAYER_CHANNEL_MONO ;
	flash_write();
	mmi_audio_player_show_info(0, TxtPlayerMonoChannel, TxtNull, NULL);
  }

  return 1;
}

/*******************************************************************************

 $Function:     mmi_audio_player_set_channel_stereo

 $Description: set channels to stereo

 $Returns:

 $Arguments:

*******************************************************************************/
GLOBAL int mmi_audio_player_set_channel_stereo (MfwMnu* m, MfwMnuItem* i)
{

  SHORT	mfw_audio_player_retVal;

  TRACE_FUNCTION ("mmi_audio_player_set_channel_stereo()");
  mfw_audio_player_retVal = mfw_audio_player_set_channel_stereo();
  if(mfw_audio_player_retVal != MFW_PLAYER_TEST_OK)
  {
	TRACE_FUNCTION ("mmi_audio_player_set_channel_stereo(): Riviera Failed"); 
	mmi_audio_player_show_info(0, TxtPlayerTest, TxtNull, NULL);
  }
  else
  {
	// Sep 27,2005 REF: SPR 34402 xdeepadh  
	// The channel state will be written into the flash.
	FFS_flashData.player_channel_state = PLAYER_CHANNEL_STEREO;
	flash_write();
	mmi_audio_player_show_info(0, TxtPlayerStereoChannel, TxtNull, NULL);
  }

  return 1;
}


/*******************************************************************************

 $Function:     mmi_audio_player_show_info

 $Description:

 $Returns:

 $Arguments:

*******************************************************************************/
static MfwHnd mmi_audio_player_show_info(T_MFW_HND parent, int str1, int str2, T_VOID_FUNC callback)
{
	T_DISPLAY_DATA display_info;

       TRACE_FUNCTION ("mmi_audio_player_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, PLAYER_INFO_SCRN_TIMEOUT, KEY_LEFT | KEY_CLEAR | KEY_HUP);

	return info_dialog(parent, &display_info);
}


//Jul 18, 2005    REF: SPR 31695   xdeepadh

/*******************************************************************************

 $Function:     mmi_audio_player_play_destroy

 $Description:  Destruction of an dialog

 $Returns:    void

 $Arguments:  win

*******************************************************************************/
void mmi_audio_player_play_destroy (T_MFW_HND own_window)
{
		T_MFW_WIN     * win  = ((T_MFW_HDR *)own_window)->data;
		T_MMI_Player_Win_data * data   = (T_MMI_Player_Win_data *)win->user;

		TRACE_FUNCTION ("mmi_audio_player_play_destroy()");

		if (own_window == NULL)
		{
			TRACE_EVENT ("Error : Called with NULL Pointer");
			return;
		}

		if (data)
		{
			/*
			* Exit  KEYBOARD Handle
			*/
			kbd_delete (data->kbd);

			/*
			* Delete WIN Handler
			*/
			win_delete (data->info_win);
			/*
			* Free Memory
			*/
			FREE_MEMORY ((void *)data, sizeof (T_MMI_Player_Win_data));
		}
}

//Jul 18, 2005    REF: SPR 31695   xdeepadh

/*******************************************************************************

 $Function:     mmi_audio_player_play_kbd_cb

 $Description:  Keyboard event handler

 $Returns:    status int

 $Arguments:  window handle event, keyboard control block

*******************************************************************************/

static int mmi_audio_player_play_kbd_cb (T_MFW_EVENT event, T_MFW_KBD *keyboard)
{
  T_MFW_HND       win  = mfw_parent (mfw_header());
	T_MFW_WIN	*win_data = ((T_MFW_HDR *)win)->data;
	T_MMI_Player_Win_data	*data = (T_MMI_Player_Win_data *)win_data->user;

    TRACE_FUNCTION("mmi_audio_player_play_kbd_cb");

  switch (keyboard->code)
	{

		case KCD_LEFT:

	   if(IsPaused == FALSE)
	{
#if (BOARD == 71)
		if(IsMP3On == MFW_PLAYER_AAC)
		{
#endif		
			mfw_audio_player_pause();
			/*
			* Clear Screen
			*/
			dspl_ClearAll();
			/*
			* Print the information screen
			*/
			ALIGNED_PROMPT(LEFT,Mmi_layout_line(1),0, TxtPlayerPause);
			/*
			* Print softkeys
			*/
			displaySoftKeys(TxtPlayerResume, TxtStop);
			IsPaused=TRUE;
#if (BOARD == 71)
		}
		else
		{
			mmi_mp3_test_opt_start(data->win,(MfwMnuAttr*)&Mmi_mp3_OPTAttrib);
		}
#endif		
	}
			   else
			   {

		/*
		* Clear Screen
		*/
		dspl_ClearAll();
			      mfw_audio_player_resume();
		/*
		* Print the information screen
		*/
		ALIGNED_PROMPT(LEFT,Mmi_layout_line(1),0, TxtPlayerResume);

		/*
		* Print softkeys
		*/
#if (BOARD == 71)		
		if(IsMP3On == MFW_PLAYER_AAC)
#endif			
			displaySoftKeys(TxtPlayerPause, TxtStop);
#if (BOARD == 71)
		else	
			displaySoftKeys(TxtSoftOptions, TxtStop);
#endif
				  IsPaused = FALSE;
			   }
		   break;
	case KCD_HUP:
	case KCD_RIGHT:
				mfw_audio_player_stop();
				IsPaused = FALSE;/*a0393213 warnings removal- == made =*/
		//go back to the previous dialog
		SEND_EVENT (win, PLAYER_DESTROY, 0, 0);
	    break;

		default:
			break;
	}
	return MFW_EVENT_CONSUMED;
}
//Nov 16,2005 REF: DR OMAPS00049192  x0039928
/*******************************************************************************

 $Function:     mmi_audio_player_start_cb

 $Description:  Mmi callback function for mp3 test application
 				
 $Returns:    void

 $Arguments:  win, window handle 

*******************************************************************************/
void mmi_audio_player_start_cb(T_MFW_HND win, SHORT value)
{
// Jun 02,2006 REF: DR OMAPS00079746  x0039928
// Fix: MP3 playback error is handled.
    if (value < 0)
        mmi_audio_player_show_info(0, TxtError, TxtNull, NULL);

#if (BOARD == 71)	
   if(optionwin != NULL)
    {        mmi_mp3_test_opt_destroy(optionwin);
	 optionwin = NULL;
    }
#endif

    IsPaused = FALSE;/*a0393213 warnings removal- '==' made '='*/
 mmi_audio_player_play_destroy(win);
    dspl_Enable(TRUE);
}

//Nov 16,2005 REF: DR OMAPS00049192  x0039928
/*******************************************************************************

 $Function:     mmi_audio_player_callback_init

 $Description:  Initializes the mmi return callback path.
 				
 $Returns:    void

 $Arguments:  window handle, callback function 

*******************************************************************************/
//Nov 16,2005 REF: DR OMAPS00049192  x0039928
static void mmi_audio_player_callback_init(T_MFW_HND win, void (*callback)(T_MFW_HND, SHORT ))
{
    mmi_audio_player_return_path.focus_win = win;
    mmi_audio_player_return_path.callback = callback;
}

//Jul 18, 2005    REF: SPR 31695   xdeepadh
/*******************************************************************************

 $Function:     mmi_audio_player_play_exec_cb

 $Description:  Dialog function for Player test app dialog
 				
 $Returns:    void

 $Arguments:  win, window handle event, value, parameter

*******************************************************************************/
void mmi_audio_player_play_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
{
	  T_MFW_WIN      * win_data     = ((T_MFW_HDR *)win)->data;
	  T_MMI_Player_Win_data    * data         = (T_MMI_Player_Win_data *)win_data->user;
	  
	  TRACE_FUNCTION ("mmi_audio_player_play_exec_cb()");


  switch (event)
	{
		case PLAYER_INIT:
			TRACE_EVENT ("PLAYER_INIT()");
	// Nov 16,2005 REF: DR OMAPS00049192  x0039928
			// Initialize the callback function to the return path.
                     mmi_audio_player_callback_init(win, mmi_audio_player_start_cb);
		

			
			// Initialize dialog
			//Create  keyboard handler
				data->kbd = kbd_create (win, KEY_ALL, (T_MFW_CB)mmi_audio_player_play_kbd_cb);
			if (value EQ PLAYER_PLAY)
			{
				TRACE_EVENT ("PLAYER_PLAY()");

				mfw_audio_player_play();
				win_show (win);
			}
		break;
	
		case PLAYER_DESTROY:
			mmi_audio_player_play_destroy(win);
	break;
	}
}

//Jul 18, 2005    REF: SPR 31695   xdeepadh

/*******************************************************************************

 $Function:    mmi_audio_player_play_win_cb

 $Description:  Callback function for information dialog

 $Returns:    void

 $Arguments:  window handle event, win
*******************************************************************************/
static int mmi_audio_player_play_win_cb (T_MFW_EVENT event, T_MFW_WIN * win)
{
    T_MMI_Player_Win_data * data = (T_MMI_Player_Win_data *)win->user;

    TRACE_FUNCTION ("mmi_audio_player_play_win_cb()");

    if (data EQ NULL)
 	 return NULL;

    switch (event)
  {
  case E_WIN_VISIBLE:
      if (win->flags & E_WIN_VISIBLE)
	{
		/*
		* Clear Screen
		*/
		dspl_ClearAll();
		/*
		* Print the information screen
		*/
		ALIGNED_PROMPT(LEFT,Mmi_layout_line(1),0, TxtPlayerPlaying);
		/*
		* Print softkeys
		*/
#if (BOARD == 71)		
		if(IsMP3On == MFW_PLAYER_AAC)
#endif			
			displaySoftKeys(TxtPlayerPause, TxtStop);
#if (BOARD == 71)
		else
			displaySoftKeys(TxtSoftOptions,TxtStop );
#endif		
	}
	break;

	default:
	return 0;
  }
    return 1;
}

//Jul 18, 2005    REF: SPR 31695   xdeepadh
/*******************************************************************************

 $Function:     mmi_audio_player_play_create

 $Description:  Creation of window

 $Returns:    Dialogue info win

 $Arguments:  parent win

*******************************************************************************/
static T_MFW_HND mmi_audio_player_play_create (T_MFW_HND parent_win)
	{
  T_MFW_WIN     * win_data;
  T_MMI_Player_Win_data *  data = (T_MMI_Player_Win_data *)ALLOC_MEMORY (sizeof (T_MMI_Player_Win_data));

  TRACE_FUNCTION ("mmi_audio_player_play_create()");

  data->info_win = win_create (parent_win, 0, E_WIN_VISIBLE, (T_MFW_CB)mmi_audio_player_play_win_cb);

  if (data->info_win EQ NULL)
    return NULL;

       	/*
   * Create window handler
		*/
  data->mmi_control.dialog   = (T_DIALOG_FUNC)mmi_audio_player_play_exec_cb;
		data->mmi_control.data = data;
  data->parent_win           = parent_win;
  win_data                   = ((T_MFW_HDR *)data->info_win)->data;
  win_data->user             = (void *)data;

    /*
   * return window handle
   */
  return data->info_win;
}

//Jul 18, 2005    REF: SPR 31695   xdeepadh
/*******************************************************************************

 $Function:     mmi_audio_player_play_start

 $Description:  create a new voicememo dialog

 $Returns:    Dialogue info win

 $Arguments:  parent win, display info

*******************************************************************************/
T_MFW_HND mmi_audio_player_play_start (T_MFW_HND  parent_win, SHORT ID)
{
  T_MFW_HND win;

  win = mmi_audio_player_play_create (parent_win);
  

  if (win NEQ NULL)
  {
    SEND_EVENT (win, PLAYER_INIT, ID, 0);
  }
  return win;
}


//Jul 18, 2005    REF: SPR 31695   xdeepadh

/*******************************************************************************

 $Function:     mmi_audio_player_play

 $Description:

 $Returns:

 $Arguments:

*******************************************************************************/
GLOBAL int  mmi_audio_player_play (MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND win = mfw_parent(mfw_header());
	int max_file_number;
  
	TRACE_FUNCTION ("mmi_audio_player_play()");

	//If no file is selected inform the user
	//retrieve from MFW number of files loaded
	max_file_number = mfw_audio_player_return_file_number();
	//In case no files have been loaded return info message
	if(max_file_number == 0)
	{
		mmi_audio_player_show_info(0, TxtPlayerFileNotLoaded, TxtNull, NULL);
	}
	//If no file is selected inform the user
	else if(audio_player_currently_playing_idx < 0)

	{
		mmi_audio_player_show_info(0, TxtPlayerSelectFile, TxtNull, NULL);
				
	}
	else
	{
		//create a new Player playing screen
		mmi_audio_player_play_start (win, PLAYER_PLAY);
	}

  return 1;
}

	//Sep 11, 2006 DR: OMAPS00094182 xrashmic	     
/*******************************************************************************

 $Function:     mmi_audio_player_Application_cb

 $Description: Callback function called on exiting the audio player appilcation

 $Returns:	None

 $Arguments:	parent_win : Parent window
 			identifier :    
 			reason: 
*******************************************************************************/
static void mmi_audio_player_Application_cb(T_MFW_HND parent_win, UBYTE identifier, UBYTE reason)
{
	TRACE_FUNCTION("mmi_audio_player_Application_cb");
	mfw_audio_player_unpopulate_files();
}
/*******************************************************************************

 $Function:     mmi_audio_player_Application

 $Description: Launcing the audio player application menu

 $Returns:

 $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_audio_player_Application (MfwMnu* m, MfwMnuItem* i)
{
	T_MFW_HND 		win;
	T_MFW_HND 		parent_win = mfw_parent(mfw_header());
	TRACE_FUNCTION("mmi_audio_player_Application");
	win=bookMenuStart(parent_win, AudioPlayerAppMenuAttributes(),0);
	SEND_EVENT(win, ADD_CALLBACK, NULL, (void *)mmi_audio_player_Application_cb);
	return MFW_EVENT_CONSUMED;
}