FreeCalypso > hg > fc-magnetite
view src/ui3/mfw/mfw_fm.c @ 516:1ed9de6c90bd
src/g23m-gsm/sms/sms_for.c: bogus malloc removed
The new error handling code that was not present in TCS211 blob version
contains a malloc call that is bogus for 3 reasons:
1) The memory allocation in question is not needed in the first place;
2) libc malloc is used instead of one of the firmware's proper ways;
3) The memory allocation is made inside a function and then never freed,
i.e., a memory leak.
This bug was caught in gcc-built FreeCalypso fw projects (Citrine
and Selenite) because our gcc environment does not allow any use of
libc malloc (any reference to malloc produces a link failure),
but this code from TCS3.2 is wrong even for Magnetite: if this code
path is executed repeatedly over a long time, the many small allocations
made by this malloc call without a subsequent free will eventually
exhaust the malloc heap provided by the TMS470 environment, malloc will
start returning NULL, and the bogus code will treat it as an error.
Because the memory allocation in question is not needed at all,
the fix entails simply removing it.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 22 Jul 2018 06:04:49 +0000 |
parents | e8ddbb0837ed |
children |
line wrap: on
line source
#ifdef FF_MMI_FILEMANAGER /* ========================================================= * Texas Instruments OMAP(TM) Platform Software * (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. * * Use of this software is controlled by the terms and conditions found * in the license agreement under which this software has been supplied. * ========================================================== */ /*========================================================== * @file mfw_fmc * * This provides the functionality of File Manager Applications. * It supports file/Directory related operations on NOR, NAND and MMC * * @path \bmi\condat\ms\src\mfw * * @rev 00.01 */ /* ========================================================== */ /*=========================================================== *! *! Revision History *! =================================== Nov 12 2007 DRT :OMAPS00144861 x0056422 Description: MM: There are some issues with resume and stop callback in BT MMI code. Aug 27, 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 MP3 or AAC file, Voice_Limit should be saved. Jul 04, 2007 DRT:OMAPS00135749 x0062174(Nimitha) Description: Once the audio file has finished automatically play button has to be pressed twice, in order to be played again. Solution : The global variable aud_state_status is set to AUD_FM_NONE once the file playing stopped. April 27, 2007 DRT:OMAPS00128836 x0073106 Description: Unexpected behavior when copying images with the same names from a memory to another. Solution:In mfw_fm_copy_start () added a if condition if(rfs_stat() && image file). Apr 10, 2007 DRT: OMAPS00125309 x0039928 Description: MM - Mono option does not work => MMI changes required Solution: Selected Output channel from the settings menu is set for all the players. Apr 06, 2007 DRT: OMAPS00124877 x0039928 Description: MM: Voice limit Options doesn't work Solution: voice limit value is taken from the global variable set by menu options. Mar 28, 2007 ER: OMAPS00106188 x0039928 Description: Align Midi application menu choices and audio Player menu choices Mar 15, 2007 DRT: OMAPS00120201 x0039928 Description: JPEG dir not created in FFS in N5.23 pre release Solution: The directories are created after format for NOR-MS, NAND and T-FLASH *! 10-Apr-2006 mf: Modified x0020906. Change required per SRxxxx *! to provide File Manager Functionality. *! *! *! 17-Jan-2006 mf: Revisions appear in reverse chronological order; *! that is, newest first. The date format is dd-Mon-yyyy. * =========================================================== */ /****************************************************************************** Include Files *******************************************************************************/ #define ENTITY_MFW #include <string.h> #include <stdio.h> #include <stdlib.h> #define FF_MMI_RFS_ENABLED #if defined (NEW_FRAME) #include "typedefs.h" #include "vsi.h" #include "pei.h" #include "custom.h" #include "gsm.h" #else #include "STDDEFS.H" #include "custom.h" #include "gsm.h" #include "vsi.h" #endif #include "mfw_mfw.h" #include "mfw_phb.h" #include "mfw_phbi.h" #include "mfw_cm.h" #include "mfw_cmi.h" #include "mfw_nm.h" #include "mfw_sim.h" #include "mfw_sima.h" #include "mfw_nmi.h" #include "mfw_simi.h" #include "mfw_sms.h" #include "mfw_smsi.h" #include "mfw_win.h" #include "ksd.h" #include "psa.h" #if defined (FAX_AND_DATA) #include "aci_fd.h" #endif //#ifdef FF_MMI_RFS_ENABLED #include "rfs/rfs_api.h" //#else #include "ffs/ffs_api.h" //#endif #include "message.h" #include "prim.h" #include "aci_cmh.h" #include "cmh.h" #include "phb.h" #include "cmh_phb.h" #include "mfw_ss.h" #include "mfw_ssi.h" #include "mfw_win.h" #include "gdi.h" #include "prim.h" #ifndef PCM_2_FFS #include "pcm.h" #endif #ifdef FF_MMI_MIDI_FORMAT #include "bae/bae_options.h" #endif #include "mfw_fm.h" /**********************NOTE*************************** FFS header To be replaced with FS Abstraction Header ******************************************************/ #ifdef FF_MMI_A2DP_AVRCP #include "mfw_bt_api.h" #include "mfw_bt_private.h" #endif #ifdef INT_PHONEBOOK #include "ATBPbGI.h" #endif /******************************************************************************* Defines *******************************************************************************/ EXTERN MfwHdr * current_mfw_elem; static MSL_HANDLE msl_handle; static T_RV_RETURN_PATH fm_aud_return_path; T_MFW_AUD_PARA para_aud; extern UBYTE mfw_player_playback_loop_flag; extern T_AS_PLAYER_PARAMS player_para; extern INT16 player_channel; extern int aud_state_status; /* OMAPS00151698, x0056422 */ #ifdef FF_MMI_A2DP_AVRCP extern BMI_BT_STRUCTTYPE tGlobalBmiBtStruct; #endif //Daisy tang added for Real Resume feature 20071107 //start BOOL isPlayer_Real_Pause = FALSE; UINT32 last_file_size_played = 0; char last_inputFileName[FM_MAX_DIR_PATH_LENGTH]; T_WCHAR last_inputFileName_uc[FM_MAX_DIR_PATH_LENGTH]; T_AS_PLAYER_TYPE last_file_type; BOOL last_play_bar; UINT32 last_para_aud_pt; //end /******************************************************************************* Local prototypes *******************************************************************************/ void Msl_mslil_Callback(void* handle, U32 ucp_type, U32 tCMd, U32 tStatus); void mfw_fm_audPlay_cb(void *parameter); void mfw_fm_signal(T_MFW_EVENT event, void *para); BOOL mfw_fm_sign_exec (T_MFW_HDR * cur_elem, T_MFW_EVENT event, T_MFW_FM_PARA * para); /* June 28, 2007 DRT: OMAPS00135749 x0062174 */ EXTERN void mmi_set_aud_state_status( T_FM_AUD_STATE status); /******************************************************************************* $Function: mfw_fm_create $Description: This function initialises an Mfw fm entity and adds it to the Window Stack $Returns: T_MFW_HND : A handle for the entity $Arguments: hWin : Parent Window Handle event : Event Mask of the events to be handled cbfunc : Callback function to handle the events *******************************************************************************/ T_MFW_HND mfw_fm_create(T_MFW_HND hWin, T_MFW_EVENT event, T_MFW_CB cbfunc) { T_MFW_HDR *hdr; T_MFW_FM *fm_para; TRACE_FUNCTION("mfw_FM_create()"); hdr = (T_MFW_HDR *) mfwAlloc(sizeof (T_MFW_HDR)); fm_para = (T_MFW_FM *) mfwAlloc(sizeof (T_MFW_FM)); if (!hdr OR !fm_para) return FALSE; /* * initialisation of the handler */ fm_para->emask = event; fm_para->handler = cbfunc; hdr->data = fm_para; hdr->type = MfwTypfm; /* * installation of the handler */ return mfwInsert((T_MFW_HDR *)hWin, hdr); } /******************************************************************************* $Function: mfw_fm_delete $Description: This function clears down an Mfw entity and removes it from the Window Stack $Returns: T_MFW_RES : The result of the function $Arguments: T_MFW_HND : The Handle of the entity to be removed *******************************************************************************/ T_MFW_RES mfw_fm_delete(T_MFW_HND hnd) { TRACE_FUNCTION("mfw_FM_delete()"); if (!hnd OR !((T_MFW_HDR *)hnd)->data) return MFW_RES_ILL_HND; if (!mfwRemove((T_MFW_HDR *)hnd)) return MFW_RES_ILL_HND; mfwFree((U8 *)(((T_MFW_HDR *) hnd)->data),sizeof(T_MFW_FM)); mfwFree((U8 *)hnd,sizeof(T_MFW_HDR)); return MFW_RES_OK; } /******************************************************************************* $Function: mfw_fm_sign_exec $Description: This function sends the Mfw FM events from the Mfw to the BMI. $Returns: None $Arguments: None *******************************************************************************/ BOOL mfw_fm_sign_exec (T_MFW_HDR * cur_elem, T_MFW_EVENT event, T_MFW_FM_PARA * para) { TRACE_FUNCTION("mfw_fm_sign_exec()"); while (cur_elem) { /* * event handler is available */ if (cur_elem->type EQ MfwTypfm) { T_MFW_FM * fm_data; TRACE_EVENT("MfwTyFm"); /* * handler is FM management handler */ fm_data = (T_MFW_FM *)cur_elem->data; if (fm_data->emask & event) { /* * event is expected by the call back function */ fm_data->event = event; switch (event) { /* ** Generic Events */ case E_FM_THMB_INIT: case E_FM_THMB_DEINIT: case E_FM_THMB_GEN: case E_FM_IMG_INIT: case E_FM_IMG_DRAW: case E_FM_IMG_DEINIT: case E_FM_AUDIO_STOP: if(para!=NULL) memcpy (&fm_data->para, para, sizeof (T_MFW_FM_PARA)); break; } /* * if call back defined, call it */ if (fm_data->handler) { // store current mfw elem current_mfw_elem = cur_elem; if ((*(fm_data->handler)) (fm_data->event, (void *)&fm_data->para)) return TRUE; } } } cur_elem = cur_elem->next; } return FALSE; } /******************************************************************************* $Function: mfw_FM_signal $Description: This function sends the Mfw events from the Mfw to the BMI. $Returns: None $Arguments: T_MFW_EVENT : The event to be sent to the BMI void * : Pointer to the Event data *******************************************************************************/ void mfw_fm_signal(T_MFW_EVENT event, void *para) { UBYTE temp; temp = dspl_Enable(0); TRACE_FUNCTION("mfw_FM_signal()"); if (mfwSignallingMethod EQ 0) { /* * focus is on a window */ if (mfwFocus) { /* * send event to sim management * handler if available */ if (mfw_fm_sign_exec (mfwFocus, event, para)) { dspl_Enable(temp); return; } } /* * actual focussed window is not available * or has no network management registration * handler, then search all nodes from the root. */ if (mfwRoot) mfw_fm_sign_exec (mfwRoot, event, para); } else { MfwHdr * h = 0; /* * Focus set, then start here */ if (mfwFocus) h = mfwFocus; /* * Focus not set, then start root */ if (!h) h = mfwRoot; /* * No elements available, return */ while (h) { /* * Signal consumed, then return */ if (mfw_fm_sign_exec (h, event, para)) { dspl_Enable(temp); return; } /* * All windows tried inclusive root */ if (h == mfwRoot) { dspl_Enable(temp); return; } /* * get parent window */ h = mfwParent(mfwParent(h)); if (h) h = ((MfwWin * )(h->data))->elems; } mfw_fm_sign_exec (mfwRoot, event, para); } dspl_Enable(temp); return; } /******************************************************************************* $Function: mfw_fm_readDir $Description: Reads the objects from the given directory $Returns: FM_DIR_DOESNOTEXISTS/FM_READDIR_ERROR/FM_NO_ERROR $Arguments: dir_path : Current Directory Path dir_name : Current Directory Name num_objs : num of obejcts obj_list : object list source : Current Drive *******************************************************************************/ T_MFW_FM_STATUS mfw_fm_readDir(char *dir_path, char *dir_name, UBYTE *num_objs, T_FM_OBJ **obj_list, T_FM_DEVICE_TYPE source, T_FM_APP_TYPE app) { char curDir[FM_MAX_DIR_PATH_LENGTH]; /* x0083025 - OMAPS00156759 - Jan 29, 2008 */ #if defined(FF_MMI_UNICODE_SUPPORT)||defined (FF_MMI_RFS_ENABLED) T_WCHAR objName_uc[FM_MAX_OBJ_NAME_LENGTH]; T_WCHAR curObj_uc[FM_MAX_DIR_PATH_LENGTH]; #else char objName_u8[FM_MAX_OBJ_NAME_LENGTH]; #endif #ifdef FF_MMI_RFS_ENABLED char ext1[FM_MAX_EXT_LENGTH]; T_RFS_DIR f_dir; UINT16 curDir_uc[FM_MAX_DIR_PATH_LENGTH]; T_RFS_RET result; T_RFS_STAT f_stat; #else T_FFS_DIR f_dir; #endif int iCount=0; TRACE_FUNCTION("mfw_fm_readDir"); *num_objs = 0; memset(curDir, 0, FM_MAX_DIR_PATH_LENGTH); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: sprintf(curDir,"%s%s%s","/FFS",dir_path,dir_name); TRACE_EVENT_P1("Current Dir %s",curDir); break; case FM_NORMS_FLASH: sprintf(curDir,"%s%s%s","/NOR",dir_path,dir_name); TRACE_EVENT_P1("Current Dir %s",curDir); break; case FM_NAND_FLASH: sprintf(curDir,"%s%s%s","/NAND",dir_path,dir_name); TRACE_EVENT_P1("Current Dir %s",curDir); break; case FM_T_FLASH: sprintf(curDir,"%s%s%s","/MMC",dir_path,dir_name); TRACE_EVENT_P1("Current Dir %s",curDir); break; default: TRACE_EVENT("Default: Invalid value"); break; } convert_u8_to_unicode((const char *)curDir, curDir_uc); if (rfs_opendir (curDir_uc, &f_dir) < 0) { TRACE_EVENT_P1("Opening dir %s Failed",curDir); return FM_DIR_DOESNOTEXISTS; } for (iCount = 0; rfs_readdir (&f_dir, objName_uc, FM_MAX_OBJ_NAME_LENGTH) > 0x0; ) { if (objName_uc[0] == '\0') { return FM_READDIR_ERROR; } if( objName_uc[0] != '.' ) { /* x0083025 - OMAPS00156759 - Jan 29, 2008 */ wstrcpy(curObj_uc, curDir_uc); { // append '/' char to the end of string T_WCHAR *tmp = curObj_uc; while (*tmp) ++tmp; *tmp++ = '/'; *tmp = 0; } wstrcat(curObj_uc, objName_uc); result= rfs_stat(curObj_uc, &f_stat); if(result == RFS_EOK) { if(f_stat.file_dir.mode & RFS_IXUSR) { obj_list[iCount] = (T_FM_OBJ*)mfwAlloc(sizeof(T_FM_OBJ)); /* x0083025 - OMAPS00156759 - Jan 29, 2008 */ #ifdef FF_MMI_UNICODE_SUPPORT wstrcpy(obj_list[iCount]->name_uc, objName_uc); TRACE_EVENT_P1("%s", obj_list[iCount]->name_uc); #endif convert_unicode_to_u8(objName_uc, obj_list[iCount]->name); TRACE_EVENT_P1("%s", obj_list[iCount]->name); (*num_objs)++; iCount++; if((*num_objs) >= FM_MAX_OBJ ) { TRACE_EVENT("MAX COUNT Reached"); if(source == FM_NOR_FLASH) rfs_closedir(&f_dir); return FM_NO_ERROR; } } else { /* x0083025 - OMAPS00156759 - Jan 29, 2008 */ convert_unicode_to_u8(wstrchr(objName_uc,'.')+1, ext1); if(ext1) { switch(app) { case FM_IMAGE: if(strcmp(ext1, "jpg") == 0) { obj_list[iCount] = (T_FM_OBJ*)mfwAlloc(sizeof(T_FM_OBJ)); /* x0083025 - OMAPS00156759 - Jan 29, 2008 */ convert_unicode_to_u8(objName_uc, obj_list[iCount]->name); TRACE_EVENT_P1("%s", obj_list[iCount]->name); (*num_objs)++; iCount++; if((*num_objs) >= FM_MAX_OBJ ) { TRACE_EVENT("MAX COUNT Reached"); if(source == FM_NOR_FLASH) rfs_closedir(&f_dir); return FM_NO_ERROR; } } break; case FM_AUDIO: if( #ifdef FF_MP3_RINGER (strcmp(ext1, "mp3") == 0) #else (0) #endif #ifdef FF_AAC_RINGER || (strcmp(ext1, "aac") == 0) #else || (0) #endif #ifdef FF_MMI_MIDI_FORMAT #ifdef PAL_ENABLE_XMF || (strcmp(ext1, "xmf") == 0) #else || (0) #endif #ifdef PAL_ENABLE_IMELODY || (strcmp(ext1, "imy") == 0) #else || (0) #endif #ifdef PAL_ENABLE_SMAF_MA3 || (strcmp(ext1, "mmf") == 0) #else || (0) #endif #ifdef PAL_ENABLE_XMF || (strcmp(ext1, "mxmf") == 0) #else || (0) #endif #ifdef PAL_ENABLE_SMS || (strcmp(ext1, "sms") == 0) #else || (0) #endif #ifdef PAL_ENABLE_DIGITAL_AUDIO || (strcmp(ext1, "wav") == 0) #else || (0) #endif #ifdef PAL_ENABLE_MIDI_NORMALIZER || (strcmp(ext1, "mid") == 0) #else || (0) #endif #endif ) { obj_list[iCount] = (T_FM_OBJ*)mfwAlloc(sizeof(T_FM_OBJ)); /* x0083025 - OMAPS00156759 - Jan 29, 2008 */ #ifdef FF_MMI_UNICODE_SUPPORT wstrcpy(obj_list[iCount]->name_uc, objName_uc); TRACE_EVENT_P1("%s", obj_list[iCount]->name_uc); #else convert_unicode_to_u8(objName_uc, obj_list[iCount]->name); TRACE_EVENT_P1("%s", obj_list[iCount]->name); #endif (*num_objs)++; iCount++; if((*num_objs) >= FM_MAX_OBJ ) { TRACE_EVENT("MAX COUNT Reached"); if(source == FM_NOR_FLASH) rfs_closedir(&f_dir); return FM_NO_ERROR; } } break; } } } } } } TRACE_EVENT_P2("Dir %s contains %d Objects",curDir,iCount); if(source == FM_NOR_FLASH) rfs_closedir(&f_dir); #else sprintf(curDir,"%s%s",dir_path,dir_name); TRACE_EVENT_P1("Current Dir %s",curDir); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ if (ffs_opendir (curDir, &f_dir) < 0) { TRACE_EVENT_P1("Opening dir %s Failed",curDir); return FM_DIR_DOESNOTEXISTS; } /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ for (iCount = 0; ffs_readdir (&f_dir, objName_u8, FM_MAX_OBJ_NAME_LENGTH) > 0x0; iCount++) { if (objName_u8[0] == '\0') { return FM_READDIR_ERROR; } if( objName_u8[0] != '.' ) { obj_list[iCount] = (T_FM_OBJ*)mfwAlloc(sizeof(T_FM_OBJ)); strcpy(obj_list[iCount]->name, objName_u8); TRACE_EVENT_P1("%s", obj_list[iCount]->name); (*num_objs)++; if((*num_objs) >= FM_MAX_OBJ ) { TRACE_EVENT("MAX COUNT Reached"); break; } } } TRACE_EVENT_P2("Dir %s contains %d Objects",curDir,iCount); #endif return FM_NO_ERROR; } /******************************************************************************* $Function: mfw_fm_rename $Description: Renames the selcted object with the new name $Returns: FM_RENAME_ERROR/FM_NO_ERROR $Arguments: old_filename : Old filename new_filename : New filename source : Current Drive *******************************************************************************/ #ifdef FF_MMI_UNICODE_SUPPORT T_MFW_FM_STATUS mfw_fm_rename(T_WCHAR* old_filename, T_WCHAR* new_filename, T_FM_DEVICE_TYPE source) #else T_MFW_FM_STATUS mfw_fm_rename(char* old_filename, char * new_filename, T_FM_DEVICE_TYPE source) #endif { #ifdef FF_MMI_RFS_ENABLED T_RFS_RET rfsResult; char old_filename_mt[FM_MAX_DIR_PATH_LENGTH]; char new_filename_mt[FM_MAX_DIR_PATH_LENGTH]; UINT16 new_filename_uc[FM_MAX_DIR_PATH_LENGTH]; UINT16 old_filename_uc[FM_MAX_DIR_PATH_LENGTH]; #else #if defined(FF_MMI_UNICODE_SUPPORT) && !defined(FF_MMI_RFS_ENABLED) char old_filename_u8[FM_MAX_DIR_PATH_LENGTH]; char new_filename_u8[FM_MAX_DIR_PATH_LENGTH]; #endif T_FFS_RET ffsResult; #endif TRACE_FUNCTION("mfw_fm_rename"); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: strcpy(old_filename_mt, "/FFS"); strcpy(new_filename_mt, "/FFS"); break; case FM_NORMS_FLASH: strcpy(old_filename_mt, "/NOR"); strcpy(new_filename_mt, "/NOR"); break; case FM_NAND_FLASH: strcpy(old_filename_mt, "/NAND"); strcpy(new_filename_mt, "/NAND"); break; case FM_T_FLASH: strcpy(old_filename_mt, "/MMC"); strcpy(new_filename_mt, "/MMC"); break; } #ifdef FF_MMI_UNICODE_SUPPORT convert_u8_to_unicode(old_filename_mt,old_filename_uc); convert_u8_to_unicode(new_filename_mt, new_filename_uc); wstrcat(old_filename_uc, old_filename); wstrcat(new_filename_uc, new_filename); #else strcat(old_filename_mt, old_filename); strcat(new_filename_mt, new_filename); convert_u8_to_unicode(old_filename_mt,old_filename_uc); convert_u8_to_unicode(new_filename_mt, new_filename_uc); #endif rfsResult = rfs_rename(old_filename_uc, new_filename_uc); if(rfsResult != RFS_EOK) { return FM_RENAME_ERROR; } #else #ifdef FF_MMI_UNICODE_SUPPORT convert_unicode_to_u8(old_filename, old_filename_u8); convert_unicode_to_u8(new_filename, new_filename_u8; ffsResult = ffs_rename(old_filename_u8,new_filename_u8); #else ffsResult = ffs_rename(old_filename,new_filename); #endif if(ffsResult != EFFS_OK) { return FM_RENAME_ERROR; } #endif return FM_NO_ERROR; } /******************************************************************************* $Function: mfw_fm_rename_image $Description: Renames the selected image and its thumbnail with the new name $Returns: FM_RENAME_ERROR/FM_NO_ERROR $Arguments: path : Current directory path dirname : Current Directory name old_filename : Old filename new_filename : New filename source : Current Drive *******************************************************************************/ T_MFW_FM_STATUS mfw_fm_rename_image(char * path, char * dirname, char* old_filename, char * new_filename, T_FM_DEVICE_TYPE source) { T_MFW_FM_STATUS ffsResult; char t_oldfilename[FM_MAX_DIR_PATH_LENGTH]; char t_newfilename[FM_MAX_DIR_PATH_LENGTH]; #ifdef FF_MMI_UNICODE_SUPPORT T_WCHAR oldfilename_uc[FM_MAX_DIR_PATH_LENGTH]; T_WCHAR newfilename_uc[FM_MAX_DIR_PATH_LENGTH]; #endif TRACE_FUNCTION("mfw_fm_rename_image"); #ifdef FF_MMI_RFS_ENABLED sprintf(t_oldfilename,"%s%s/%s.jpg",path,dirname,old_filename); sprintf(t_newfilename,"%s%s/%s.jpg",path,dirname,new_filename); /* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/ #ifdef FF_MMI_UNICODE_SUPPORT convert_u8_to_unicode(t_oldfilename, oldfilename_uc); convert_u8_to_unicode(t_newfilename, newfilename_uc); ffsResult = mfw_fm_rename(oldfilename_uc,newfilename_uc,source); #else ffsResult = mfw_fm_rename(t_oldfilename,t_newfilename,source); #endif if(ffsResult != FM_NO_ERROR) { return FM_RENAME_ERROR; } switch(source) { case FM_NOR_FLASH: sprintf(t_oldfilename,"%s%s/%s.tmb",NORDIR,THUMB,old_filename); sprintf(t_newfilename,"%s%s/%s.tmb",NORDIR,THUMB,new_filename); break; case FM_NORMS_FLASH: sprintf(t_oldfilename,"%s%s/%s.tmb",NORMSDIR,THUMB,old_filename); sprintf(t_newfilename,"%s%s/%s.tmb",NORMSDIR,THUMB,new_filename); break; case FM_NAND_FLASH: sprintf(t_oldfilename,"%s%s/%s.tmb",NANDDIR,THUMB,old_filename); sprintf(t_newfilename,"%s%s/%s.tmb",NANDDIR,THUMB,new_filename); break; case FM_T_FLASH: sprintf(t_oldfilename,"%s%s/%s.tmb",TFLASHDIR,THUMB,old_filename); sprintf(t_newfilename,"%s%s/%s.tmb",TFLASHDIR,THUMB,new_filename); break; } #ifdef FF_MMI_UNICODE_SUPPORT convert_u8_to_unicode(t_oldfilename, oldfilename_uc); convert_u8_to_unicode(t_newfilename, newfilename_uc); ffsResult = mfw_fm_rename(oldfilename_uc,newfilename_uc,source); #else ffsResult = mfw_fm_rename(t_oldfilename,t_newfilename,source); #endif if(ffsResult != FM_NO_ERROR) { return FM_RENAME_ERROR; } #else sprintf(t_oldfilename,"%s%s/%s.jpg",path,dirname,old_filename); sprintf(t_newfilename,"%s%s/%s.jpg",path,dirname,new_filename); ffsResult = mfw_fm_rename(t_oldfilename,t_newfilename,source); if(ffsResult != FM_NO_ERROR) { return FM_RENAME_ERROR; } sprintf(t_oldfilename,"%s%s/%s.tmb",NORDIR,THUMB,old_filename); sprintf(t_newfilename,"%s%s/%s.tmb",NORDIR,THUMB,new_filename); ffsResult = mfw_fm_rename(t_oldfilename,t_newfilename,source); if(ffsResult != FM_NO_ERROR) { return FM_RENAME_ERROR; } #endif return FM_NO_ERROR; } /******************************************************************************* $Function: mfw_fm_createRootDir $Description: Creates the root jpeg, tones directory $Returns: FM_NO_ERROR $Arguments: source : Current Drive *******************************************************************************/ T_MFW_FM_STATUS mfw_fm_createRootDir(T_FM_DEVICE_TYPE source) { #ifdef FF_MMI_RFS_ENABLED T_RFS_RET ffsResult; T_RFS_DIR f_dir; UINT16 dir_path_uc[FM_MAX_DIR_PATH_LENGTH]; #else T_FFS_RET ffsResult; T_FFS_DIR f_dir; #endif char dir_path[FM_MAX_DIR_PATH_LENGTH]; TRACE_FUNCTION("mfw_fm_createRootDir"); #ifdef FF_MMI_RFS_ENABLED TRACE_EVENT_P1("Source %d",source); switch (source) { case FM_NOR_FLASH: sprintf(dir_path,"%s%s%s","/FFS",NORDIR,NORDIR_IMG); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); if(ffsResult > 0) rfs_closedir(&f_dir); else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/FFS",NORDIR,THUMB); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); if(ffsResult > 0) rfs_closedir(&f_dir); else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/FFS",NORDIR,NORDIR_AUD); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); if(ffsResult > 0) rfs_closedir(&f_dir); else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } break; case FM_NORMS_FLASH: sprintf(dir_path,"%s%s%s","/NOR",NORMSDIR,NORMSDIR_IMG); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/NOR",NORMSDIR,THUMB); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/NOR",NORMSDIR,NORMSDIR_AUD); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } break; case FM_NAND_FLASH: /**********************NOTE*************************** FS Abstraction API to be added ******************************************************/ sprintf(dir_path,"%s%s%s","/NAND",NANDDIR,NANDDIR_IMG); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/NAND",NANDDIR,THUMB); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/NAND",NANDDIR,NANDDIR_AUD); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } break; case FM_T_FLASH: /**********************NOTE*************************** FS Abstraction API to be added ******************************************************/ sprintf(dir_path,"%s%s%s","/MMC",TFLASHDIR,TFLASHDIR_IMG); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/MMC",TFLASHDIR,THUMB); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } sprintf(dir_path,"%s%s%s","/MMC",TFLASHDIR,TFLASHDIR_AUD); convert_u8_to_unicode(dir_path, dir_path_uc); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_opendir(dir_path_uc,&f_dir); TRACE_EVENT_P2("Opendir - ffsResult %d Dir path %s", ffsResult,dir_path); // if(ffsResult > 0) // rfs_closedir(&f_dir); // else if(RFS_ENOENT == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = rfs_mkdir(dir_path_uc, RFS_IRWXU); TRACE_EVENT_P2("Makedir - ffsResult %d Dir path %s", ffsResult,dir_path); } break; } #else sprintf(dir_path,"%s%s",NORDIR,NORDIR_IMG); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = ffs_opendir(dir_path,&f_dir); if(EFFS_NOTFOUND == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = ffs_mkdir(dir_path); } sprintf(dir_path,"%s%s",NORDIR,THUMB); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = ffs_opendir(dir_path,&f_dir); if(EFFS_NOTFOUND == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = ffs_mkdir(dir_path); } sprintf(dir_path,"%s%s",NORDIR,NORDIR_AUD); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = ffs_opendir(dir_path,&f_dir); if(EFFS_NOTFOUND == ffsResult) { /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffsResult = ffs_mkdir(dir_path); } #endif return FM_NO_ERROR; } /******************************************************************************* $Function: mfw_fm_newdir $Description: creates a new direcotry with the given name $Returns: FM_DIR_EXISTS/FM_NO_ERROR $Arguments: dirname : new directory name source : Current Drive *******************************************************************************/ T_MFW_FM_STATUS mfw_fm_newdir(char *dirname, T_FM_DEVICE_TYPE source) { #ifdef FF_MMI_RFS_ENABLED T_RFS_RET ffsResult; T_RFS_DIR f_dir; char pathname[FM_MAX_DIR_PATH_LENGTH]; UINT16 pathname_uc[FM_MAX_DIR_PATH_LENGTH]; #else T_FFS_RET ffsResult; T_FFS_DIR f_dir; #endif TRACE_FUNCTION("mfw_fm_newdir"); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: strcpy(pathname,"/FFS"); break; case FM_NORMS_FLASH: strcpy(pathname,"/NOR"); break; case FM_NAND_FLASH: strcpy(pathname,"/NAND"); break; case FM_T_FLASH: strcpy(pathname,"/MMC"); break; } strcat(pathname,dirname); convert_u8_to_unicode(pathname,pathname_uc); ffsResult = rfs_opendir(pathname_uc,&f_dir); if(RFS_ENOENT == ffsResult) { ffsResult = rfs_mkdir(pathname_uc,RFS_IRWXU); } else { return FM_DIR_EXISTS; } #else ffsResult = ffs_opendir(dirname,&f_dir); if(EFFS_NOTFOUND == ffsResult) { ffsResult = ffs_mkdir(dirname); } else { return FM_DIR_EXISTS; } #endif return FM_NO_ERROR; } /******************************************************************************* $Function: mfw_fm_readProperties $Description: Reads the properties of all the objects in the given directory $Returns: None $Arguments: dir_path : Current Directory Path dir_name : Current Directory Name num_objs : num of obejcts obj_list : object list obj_properties: Object properties source : Current Drive *******************************************************************************/ void mfw_fm_readProperties(char *dir_path, char *dir_name, UBYTE num_objs, T_FM_OBJ **obj_list, T_FM_OBJ_PROPERTIES **obj_properties,T_FM_DEVICE_TYPE source, T_FM_APP_TYPE app) { /* January 16, 2008 DRT:OMAPS00156759 (x0082844) Shubhro -> For Unicode Support--> Start*/ #if defined(FF_MMI_UNICODE_SUPPORT)||defined (FF_MMI_RFS_ENABLED) T_WCHAR curObj_uc[FM_MAX_DIR_PATH_LENGTH]; #else char curObj_u8[FM_MAX_DIR_PATH_LENGTH]; #endif /* January 16, 2008 DRT:OMAPS00156759 (x0082844) Shubhro --> End*/ char curPath[FM_MAX_DIR_PATH_LENGTH]; int iCount=0; #ifdef FF_MMI_RFS_ENABLED T_RFS_RET result; T_RFS_STAT f_stat; T_RTC_DATE_TIME time_and_date; #else T_FFS_RET result; T_FFS_STAT f_stat; #endif TRACE_FUNCTION("mfw_fm_readProperties"); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: sprintf(curPath,"%s%s%s/","/FFS",dir_path,dir_name); break; case FM_NORMS_FLASH: sprintf(curPath,"%s%s%s/","/NOR",dir_path,dir_name); break; case FM_NAND_FLASH: sprintf(curPath,"%s%s%s/","/NAND",dir_path,dir_name); break; case FM_T_FLASH: sprintf(curPath,"%s%s%s/","/MMC",dir_path,dir_name); break; } for (iCount = 0;iCount<num_objs; iCount++) { /* February 8, 2008 DRT:OMAPS00156759 (x0083025) For Unicode Support--> Start*/ convert_u8_to_unicode(curPath, curObj_uc); #ifdef FF_MMI_UNICODE_SUPPORT // If it's an image it's stored as char if (app == FM_AUDIO) { wstrcat(curObj_uc, obj_list[iCount]->name_uc); } else #endif { T_WCHAR filename_uc[FM_MAX_OBJ_NAME_LENGTH]; convert_u8_to_unicode(obj_list[iCount]->name, filename_uc); wstrcat(curObj_uc, filename_uc); } result= rfs_stat(curObj_uc, &f_stat); if(result == RFS_EOK) { if(f_stat.file_dir.mode & RFS_IXUSR) obj_list[iCount]->type=OBJECT_TYPE_FOLDER; else obj_list[iCount]->type=OBJECT_TYPE_FILE; } TRACE_EVENT_P2("Object %s type %d",curObj_uc, obj_list[iCount]->type); obj_properties[iCount] = (T_FM_OBJ_PROPERTIES *)mfwAlloc(sizeof(T_FM_OBJ_PROPERTIES)); obj_properties[iCount]->size = f_stat.file_dir.size; result = rfs_getdatetime(curObj_uc,NULL /* creation date and time */,&time_and_date /* last modified date and time */); sprintf(obj_properties[iCount]->date,"%d-%d-%d", time_and_date.day, time_and_date.month, 2000 + time_and_date.year); sprintf(obj_properties[iCount]->time,"%d.%d.%d", time_and_date.hour, time_and_date.minute, time_and_date.second); } #else sprintf(curPath,"%s%s/",dir_path,dir_name); for (iCount = 0;iCount<num_objs; iCount++) { sprintf(curObj_u8,"%s%s",curPath,obj_list[iCount]->name); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ result= ffs_stat( curObj_u8, (void *)&f_stat ); if(result == EFFS_OK) { switch(f_stat.type) { case OT_FILE: obj_list[iCount]->type=OBJECT_TYPE_FILE; break; case OT_DIR: obj_list[iCount]->type=OBJECT_TYPE_FOLDER; break; default: obj_list[iCount]->type=OBJECT_TYPE_NONE; break; } } TRACE_EVENT_P2("name %s, Object type %d", obj_list[iCount]->name,obj_list[iCount]->type); obj_properties[iCount] = (T_FM_OBJ_PROPERTIES*)mfwAlloc(sizeof(T_FM_OBJ_PROPERTIES)); obj_properties[iCount]->size=f_stat.size; } #endif } /******************************************************************************* $Function: mfw_fm_readFIleFolders $Description: Classifies all the objects as either File or Directory $Returns: None $Arguments: fm_curr_dir : Current directory source : Current Drive *******************************************************************************/ void mfw_fm_readFileFolders(char *dir_path, char *dir_name, UBYTE num_objs, T_FM_OBJ **obj_list, T_FM_DEVICE_TYPE source) { char curObj[FM_MAX_DIR_PATH_LENGTH]; char curPath[FM_MAX_DIR_PATH_LENGTH]; int iCount=0; #ifdef FF_MMI_RFS_ENABLED T_RFS_RET result; T_RFS_STAT f_stat; UINT16 curObj_uc[FM_MAX_DIR_PATH_LENGTH]; #else T_FFS_RET result; T_FFS_STAT f_stat; #endif TRACE_FUNCTION("mfw_fm_readFileFolders"); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: sprintf(curPath,"%s%s%s/","/FFS",dir_path,dir_name); break; case FM_NORMS_FLASH: sprintf(curPath,"%s%s%s/","/NOR",dir_path,dir_name); break; case FM_NAND_FLASH: sprintf(curPath,"%s%s%s/","/NAND",dir_path,dir_name); break; case FM_T_FLASH: sprintf(curPath,"%s%s%s/","/MMC",dir_path,dir_name); break; } for (iCount = 0;iCount<num_objs; iCount++) { sprintf(curObj,"%s%s",curPath,obj_list[iCount]->name); convert_u8_to_unicode(curObj, curObj_uc); result= rfs_stat(curObj_uc, &f_stat); if(result == RFS_EOK) { if(f_stat.file_dir.mode & RFS_IXUSR) obj_list[iCount]->type=OBJECT_TYPE_FOLDER; else obj_list[iCount]->type=OBJECT_TYPE_FILE; } TRACE_EVENT_P2("Object %s type %d",curObj, obj_list[iCount]->type); } #else sprintf(curPath,"%s%s/",dir_path,dir_name); for (iCount = 0;iCount<num_objs; iCount++) { sprintf(curObj,"%s%s",curPath,obj_list[iCount]->name); result= ffs_stat( curObj, (void *)&f_stat ); if(result == EFFS_OK) { switch(f_stat.type) { case OT_FILE: obj_list[iCount]->type=OBJECT_TYPE_FILE; break; case OT_DIR: obj_list[iCount]->type=OBJECT_TYPE_FOLDER; break; default: obj_list[iCount]->type=OBJECT_TYPE_NONE; break; } } TRACE_EVENT_P2("Object %s type %d",curObj, obj_list[iCount]->type); } #endif } /******************************************************************************* $Function: mfw_fm_getMemStat $Description: Extracts the memory usage details of a given drive $Returns: None $Arguments: nfree : free bytes nused : used bytes source : Current Drive *******************************************************************************/ void mfw_fm_getMemStat(int *nfree, int *nused,T_FM_DEVICE_TYPE source) { T_RFS_STAT f_stat; char curObj[FM_MAX_DIR_PATH_LENGTH]; UINT16 curObj_uc[FM_MAX_DIR_PATH_LENGTH]; TRACE_FUNCTION("mfw_fm_getMemStat"); memset(curObj, 0, FM_MAX_DIR_PATH_LENGTH); switch (source) { case FM_NOR_FLASH: strcpy(curObj,"/FFS"); break; case FM_NORMS_FLASH: strcpy(curObj,"/NOR"); break; case FM_NAND_FLASH: strcpy(curObj,"/NAND"); break; case FM_T_FLASH: strcpy(curObj,"/MMC"); break; } convert_u8_to_unicode(curObj, curObj_uc); rfs_stat(curObj_uc, &f_stat); /* warning fix */ *nfree = f_stat.mount_point.free_space; *nused = f_stat.mount_point.used_size; } /******************************************************************************* $Function: mfw_fm_format $Description: Formats the given drive $Returns: FM_NO_ERROR/FM_FORMAT_ERROR $Arguments: source : Current Drive *******************************************************************************/ T_MFW_FM_STATUS mfw_fm_format(T_FM_DEVICE_TYPE source) { T_RFS_RET result; UINT16 mount_point_uc[6]; TRACE_FUNCTION("mfw_fm_format"); memset(mount_point_uc, 0x00,6); switch (source) { case FM_NORMS_FLASH: convert_u8_to_unicode("/NOR", mount_point_uc); break; case FM_NAND_FLASH: convert_u8_to_unicode("/NAND", mount_point_uc); break; case FM_T_FLASH: convert_u8_to_unicode("/MMC", mount_point_uc); break; } result = rfs_preformat(mount_point_uc, 0xDEAD); if(result < RFS_EOK) return FM_FORMAT_ERROR; else { result = rfs_format(mount_point_uc, NULL, 0x2BAD); if (result < RFS_EOK) return FM_FORMAT_ERROR; else { /* Mar 15, 2007 DRT: OMAPS00120201 x0039928 */ /* Fix: Creating the default directories for the selected device after format */ mfw_fm_createRootDir(source); return FM_NO_ERROR; } } } /******************************************************************************* $Function: mfw_fm_remove $Description: Deletes the selected object $Returns: FM_DELETE_DIRNOTEMPTY/FM_DELETE_ERROR/FM_NO_ERROR $Arguments: source : Current Drive *******************************************************************************/ #ifdef FF_MMI_UNICODE_SUPPORT T_MFW_FM_STATUS mfw_fm_remove(T_WCHAR* objname_u16,T_FM_DEVICE_TYPE source) #else T_MFW_FM_STATUS mfw_fm_remove(char* objname,T_FM_DEVICE_TYPE source) #endif { #ifdef FF_MMI_RFS_ENABLED T_RFS_RET rfsResult; char objname_mt[FM_MAX_DIR_PATH_LENGTH]; T_WCHAR objname_uc[FM_MAX_DIR_PATH_LENGTH]; #else T_FFS_RET ffsResult; #endif TRACE_FUNCTION("mfw_fm_remove"); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: strcpy(objname_mt,"/FFS"); break; case FM_NORMS_FLASH: strcpy(objname_mt,"/NOR"); break; case FM_NAND_FLASH: strcpy(objname_mt,"/NAND"); break; case FM_T_FLASH: strcpy(objname_mt,"/MMC"); break; } #ifdef FF_MMI_UNICODE_SUPPORT convert_u8_to_unicode(objname_mt, objname_uc); wstrcat(objname_uc, objname_u16); #else strcat(objname_mt,objname); convert_u8_to_unicode(objname_mt, objname_uc); #endif TRACE_EVENT_P1("objname %s",objname_uc); rfsResult = rfs_remove(objname_uc); if(rfsResult != RFS_EOK) { return FM_DELETE_ERROR; } #else { #ifdef FF_MMI_UNICODE_SUPPORT char objname[FM_MAX_DIR_PATH_LENGTH]; convert_unicode_to_u8(objname_u16, objname); #endif TRACE_EVENT_P1("objname %s",objname); ffsResult = ffs_remove(objname); } if(ffsResult != EFFS_OK) { if(ffsResult == EFFS_DIRNOTEMPTY) return FM_DELETE_DIRNOTEMPTY; else return FM_DELETE_ERROR; } #endif return FM_NO_ERROR; } /******************************************************************************* $Function: mfw_fm_remove_image $Description: Deletes the selcted image and its thumbnail $Returns: FM_DELETE_ERROR/FM_NO_ERROR $Arguments: path : Current directory path dirname : Current Directory name old_filename : Old filename new_filename : New filename source : Current Drive *******************************************************************************/ T_MFW_FM_STATUS mfw_fm_remove_image(char * path, char * dirname, char* objname,T_FM_DEVICE_TYPE source) { char obj[FM_MAX_DIR_PATH_LENGTH]; T_MFW_FM_STATUS ffsResult; TRACE_FUNCTION("mfw_fm_delete_image"); sprintf(obj,"%s%s/%s.jpg",path,dirname,objname); TRACE_EVENT_P1("obj %s",obj); #ifdef FF_MMI_UNICODE_SUPPORT { T_WCHAR obj_uc[FM_MAX_DIR_PATH_LENGTH]; convert_u8_to_unicode(obj, obj_uc); ffsResult = mfw_fm_remove(obj_uc,source); } #else ffsResult = mfw_fm_remove(obj,source); #endif if(ffsResult != FM_NO_ERROR) { return FM_DELETE_ERROR; } switch(source) { case FM_NOR_FLASH: sprintf(obj,"%s%s/%s.tmb",NORDIR,THUMB,objname); break; case FM_NORMS_FLASH: sprintf(obj,"%s%s/%s.tmb",NORMSDIR,THUMB,objname); break; case FM_NAND_FLASH: sprintf(obj,"%s%s/%s.tmb",NANDDIR,THUMB,objname); break; case FM_T_FLASH: sprintf(obj,"%s%s/%s.tmb",TFLASHDIR,THUMB,objname); break; } #ifdef FF_MMI_UNICODE_SUPPORT { T_WCHAR obj_uc[FM_MAX_DIR_PATH_LENGTH]; convert_u8_to_unicode(obj, obj_uc); ffsResult = mfw_fm_remove(obj_uc,source); } #else ffsResult = mfw_fm_remove(obj,source); #endif if(ffsResult != FM_NO_ERROR) { return FM_DELETE_ERROR; } return FM_NO_ERROR; } /******************************************************************************* $Function: mfw_fm_copy_start $Description: starts copying the give file $Returns: FM_COPY_ERROR/FM_COPY_DONE/FM_COPY_PROGRESS $Arguments: data : Copy/Move operation related structure *******************************************************************************/ T_FM_COPY_STATE mfw_fm_copy_start(T_MFW_FM_COPYMOVE_STRUCT *data) { char *ext2; T_RFS_STAT f_stat; T_RFS_SIZE iResult = 0; UINT16 source_file_uc[FM_MAX_DIR_PATH_LENGTH]; UINT16 destination_file_uc[FM_MAX_DIR_PATH_LENGTH]; char source_file[FM_MAX_DIR_PATH_LENGTH]; char destination_file[FM_MAX_DIR_PATH_LENGTH]; TRACE_FUNCTION("mfw_fm_copy_start"); switch (data->source_type) { case FM_NOR_FLASH: strcpy(source_file,"/FFS"); break; case FM_NORMS_FLASH: strcpy(source_file,"/NOR"); break; case FM_NAND_FLASH: strcpy(source_file,"/NAND"); break; case FM_T_FLASH: strcpy(source_file,"/MMC"); break; } switch (data->destination_type) { case FM_NOR_FLASH: strcpy(destination_file,"/FFS"); break; case FM_NORMS_FLASH: strcpy(destination_file,"/NOR"); break; case FM_NAND_FLASH: strcpy(destination_file,"/NAND"); break; case FM_T_FLASH: strcpy(destination_file,"/MMC"); break; } #ifdef FF_MMI_UNICODE_SUPPORT convert_u8_to_unicode(source_file, source_file_uc); convert_u8_to_unicode(destination_file, destination_file_uc); wstrcat(source_file_uc, data->sourceFile); wstrcat(destination_file_uc, data->destinationFile); #else strcat(source_file, data->sourceFile); strcat(destination_file, data->destinationFile); convert_u8_to_unicode(source_file, source_file_uc); convert_u8_to_unicode(destination_file, destination_file_uc); #endif ext2=(char *)mmi_fm_get_ext(source_file);//April 27, 2007 DRT:OMAPS00128836 x0073106 if( ( (rfs_stat(destination_file_uc, &f_stat)) != RFS_ENOENT)//April 27, 2007 DRT:OMAPS00128836 x0073106 && (strcmp((const char*)ext2, "jpg") ==0 )) { return FM_COPY_NONE; } data->sourceFileID = (T_RFS_FD)rfs_open( source_file_uc, RFS_O_RDONLY, NULL); data->destFileID= (T_RFS_FD)rfs_open( destination_file_uc, RFS_O_WRONLY|RFS_O_CREAT, RFS_IRUSR|RFS_IWUSR); data->bytesRead = 0; if(data->sourceFileSize > FM_COPY_BUFFER_SIZE ) { data->buf_size = FM_COPY_BUFFER_SIZE; data->bytesRead = data->buf_size; } else { data->buf_size = data->sourceFileSize; data->bytesRead = data->buf_size; } iResult = (T_RFS_SIZE)rfs_read(data->sourceFileID, data->buf, data->buf_size ); TRACE_EVENT_P1("iResult %d",iResult); if(iResult < 0) { //Error Reading rfs_close( data->sourceFileID); rfs_close(data->destFileID ); return FM_COPY_ERROR; } iResult = (T_RFS_SIZE)rfs_write( data->destFileID, data->buf, data->buf_size); TRACE_EVENT_P1("iResult %d",iResult); if(iResult < 0) { //Error writing rfs_close( data->sourceFileID); rfs_close(data->destFileID ); return FM_COPY_ERROR; } if(data->bytesRead < data->sourceFileSize) { return FM_COPY_PROGRESS; } else { rfs_close( data->sourceFileID); rfs_close(data->destFileID ); return FM_COPY_DONE; } // return FM_COPY_ERROR; } /******************************************************************************* $Function: mfw_fm_copy_continue $Description: resumes copying the give file $Returns: FM_COPY_ERROR/FM_COPY_DONE/FM_COPY_PROGRESS $Arguments: data : Copy/Move operation related structure *******************************************************************************/ T_FM_COPY_STATE mfw_fm_copy_continue(T_MFW_FM_COPYMOVE_STRUCT *data) { T_RFS_SIZE iResult = 0; /* UINT16 source_file_uc[FM_MAX_DIR_PATH_LENGTH]; UINT16 destination_file_uc[FM_MAX_DIR_PATH_LENGTH]; char source_file[FM_MAX_DIR_PATH_LENGTH]; char destination_file[FM_MAX_DIR_PATH_LENGTH]; TRACE_FUNCTION("mfw_fm_copy_continue"); switch (data->source_type) { case FM_NOR_FLASH: strcpy(source_file,"/FFS"); break; case FM_NORMS_FLASH: strcpy(source_file,"/NOR"); break; case FM_NAND_FLASH: strcpy(source_file,"/NAND"); break; case FM_T_FLASH: strcpy(source_file,"/MMC"); break; } switch (data->destination_type) { case FM_NOR_FLASH: strcpy(destination_file,"/FFS"); break; case FM_NORMS_FLASH: strcpy(destination_file,"/NOR"); break; case FM_NAND_FLASH: strcpy(destination_file,"/NAND"); break; case FM_T_FLASH: strcpy(destination_file,"/MMC"); break; } strcat(source_file, data->sourceFile); strcat(destination_file, data->destinationFile); convert_u8_to_unicode(source_file, source_file_uc); convert_u8_to_unicode(destination_file, destination_file_uc); */ if( (data->bytesRead+ FM_COPY_BUFFER_SIZE) < data->sourceFileSize) { //More blocks to be read data->buf_size = FM_COPY_BUFFER_SIZE; data->bytesRead = data->bytesRead + data->buf_size; } else { //Last chunk to be read data->buf_size = data->sourceFileSize - data->bytesRead; data->bytesRead = data->bytesRead + FM_COPY_BUFFER_SIZE; } iResult = (T_RFS_SIZE)rfs_read(data->sourceFileID, data->buf, data->buf_size ); TRACE_EVENT_P1("iResult %d",iResult); if(iResult < 0) { //Error Reading rfs_close( data->sourceFileID); rfs_close(data->destFileID ); return FM_COPY_ERROR; } iResult = (T_RFS_SIZE)rfs_write( data->destFileID, data->buf, data->buf_size); TRACE_EVENT_P1("iResult %d",iResult); if(iResult < 0) { //Error Writing rfs_close( data->sourceFileID); rfs_close(data->destFileID ); return FM_COPY_ERROR; } if(data->bytesRead < data->sourceFileSize) { return FM_COPY_PROGRESS; } else { rfs_close(data->sourceFileID); rfs_close(data->destFileID ); return FM_COPY_DONE; } // return FM_COPY_ERROR; } //Image List /******************************************************************************* $Function: mfw_fm_checkThumbnail $Description: Checks for thumbnail $Returns: FM_FILE_DOESNOTEXISTS/FM_NO_ERROR $Arguments: obj : Current image source : Current Drive *******************************************************************************/ T_MFW_FM_STATUS mfw_fm_checkThumbnail( char * obj,T_FM_DEVICE_TYPE source) { char filename[FM_MAX_DIR_PATH_LENGTH]; #ifdef FF_MMI_RFS_ENABLED T_RFS_FD fd = 0; UINT16 filename_uc[FM_MAX_DIR_PATH_LENGTH]; #else T_FFS_FD fd = 0; #endif TRACE_FUNCTION("mfw_fm_check_thumbnail"); TRACE_EVENT_P1("File %s",obj); #ifdef FF_MMI_RFS_ENABLED memset(filename, 0, FM_MAX_DIR_PATH_LENGTH); switch(source) { case FM_NOR_FLASH: sprintf(filename,"%s%s%s/%s.tmb","/FFS",NORDIR,THUMB,obj); break; case FM_NORMS_FLASH: sprintf(filename,"%s%s%s/%s.tmb","/NOR",NORMSDIR,THUMB,obj); break; case FM_NAND_FLASH: sprintf(filename,"%s%s%s/%s.tmb","/NAND",NANDDIR,THUMB,obj); break; case FM_T_FLASH: sprintf(filename,"%s%s%s/%s.tmb","/MMC",TFLASHDIR,THUMB,obj); break; } convert_u8_to_unicode(filename, filename_uc); if ((fd = rfs_open (filename_uc, RFS_O_RDONLY, NULL)) == RFS_ENOENT) { TRACE_EVENT("Create the thmbnail."); return FM_FILE_DOESNOTEXISTS; } else { TRACE_EVENT_P1("Error %d",fd); rfs_close(fd); return FM_FILE_EXISTS; } #else sprintf(filename,"%s%s/%s.tmb",NORDIR,THUMB,obj); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ if ((fd = ffs_open (filename, FFS_O_RDONLY)) <= EFFS_NOTFOUND) { TRACE_EVENT("Create the thmbnail."); return FM_FILE_DOESNOTEXISTS; } else { TRACE_EVENT_P1("Error %d",fd); /**********************NOTE*************************** FFS API To be replaced with FS Abstraction API ******************************************************/ ffs_close(fd); return FM_FILE_EXISTS; } #endif // return FM_FILE_DOESNOTEXISTS; } /******************************************************************************* $Function: mfw_fm_imgViewer_create $Description: This function will create the handle of imageviewer UCP $Returns: Result of the UCP creation $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_create(void) { MSL_IMGVIEW_STATUS mslResult = MSL_IMGVIEW_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgViewer_create()"); mslResult = MSL_ImgView_Create(&msl_handle); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgViewer_init $Description: This function will initialise the imageviewer UCP $Returns: Result of the UCP initialization $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_init(void) { MSL_IMGVIEW_STATUS mslResult = MSL_IMGVIEW_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgViewer_init()"); mslResult = MSL_ImgView_Init(msl_handle); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgViewer_destroy $Description: This function destroy the imageviewer UCP $Returns: Result of the UCP destroy $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_destroy(void) { MSL_IMGVIEW_STATUS mslResult = MSL_IMGVIEW_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgViewer_destroy()"); mslResult = MSL_ImgView_Destroy(msl_handle); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgViewer_deinit $Description: This function will deinit the imageviewer UCP $Returns: Result of the UCP de-initialization $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_deinit(void) { MSL_IMGVIEW_STATUS mslResult = MSL_IMGVIEW_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgViewer_deinit()"); mslResult = MSL_ImgView_Deinit(msl_handle); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgViewer_pause $Description: This function will pause the imageviewer UCP. $Returns: Result of the UCP pause $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_pause(void) { MSL_IMGVIEW_STATUS mslResult = MSL_IMGVIEW_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgViewer_pause()"); mslResult = MSL_ImgView_Pause((MSL_HANDLE)msl_handle); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgViewer_view $Description: This function will start the rendering of the image on LCD. $Returns: Result of the drawing the image $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_view(void) { MSL_IMGVIEW_STATUS mslResult = MSL_IMGVIEW_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgViewer_view()"); mslResult = MSL_ImgView_View((MSL_HANDLE)msl_handle); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR;} /******************************************************************************* $Function: mfw_fm_imgViewer_setImageProperty $Description: This function will set the parameters for the imageviewer UCP $Returns: Result of the UCP updation of configurations $Arguments: filepath : Image path filename : Image name width : Image width height : Image height xoffset : Image x offset yoffset : Image y offset source : Current drive *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_setImageProperty( char * filepath, char *filename, int width, int height,int xoffset, int yoffset, T_FM_DEVICE_TYPE source) { MSL_IMGVIEW_STATUS mslResult; //The fullpath will be included. char tmb_name_p[FM_MAX_OBJ_NAME_LENGTH]; MSL_DISPLAY_CONFIGTYPE mfw_fm_dspl_config; MSL_FILE_CONFIGTYPE mfw_fm_file_config ; int rotation_degree = 0; int zoom_factor = 0; TRACE_FUNCTION ("mfw_fm_imgViewer_setImageProperty()"); mfw_fm_dspl_config.tImgFormat = MSL_COLOR_RGB565; mfw_fm_dspl_config.unDisplayImgHeight = height; mfw_fm_dspl_config.unDisplayImgWidth = width; mfw_fm_dspl_config.unDisplayXOffset = xoffset; mfw_fm_dspl_config.unDisplayYOffset = yoffset; mslResult = MSL_ImgView_SetConfig(msl_handle,MSL_DISPLAY_CONFIGINDEX,&mfw_fm_dspl_config); if(mslResult == MSL_IMGVIEW_STATUS_OK) mslResult = MSL_ImgView_SetConfig (msl_handle,MSL_ROTATE_CONFIGINDEX,&rotation_degree); if(mslResult == MSL_IMGVIEW_STATUS_OK) mslResult = MSL_ImgView_SetConfig(msl_handle,MSL_ZOOM_CONFIGINDEX,&zoom_factor); mfw_fm_file_config.sFileName = (char *) mfwAlloc(FM_MAX_OBJ_NAME_LENGTH); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: sprintf(tmb_name_p,"%s%s%s/%s.tmb","/FFS",NORDIR,THUMB, filename); // mfw_fm_file_config.tFileType = MSL_FILETYPE_FFS; break; case FM_NORMS_FLASH: sprintf(tmb_name_p,"%s%s%s/%s.tmb","/NOR",NORMSDIR,THUMB, filename); // mfw_fm_file_config.tFileType = MSL_FILETYPE_FFS; break; case FM_NAND_FLASH: sprintf(tmb_name_p,"%s%s%s/%s.tmb","/NAND",NANDDIR,THUMB, filename); /**********************NOTE*************************** Drive type to be updated ******************************************************/ // mfw_fm_file_config.tFileType = MSL_FILETYPE_RFS; break; case FM_T_FLASH: sprintf(tmb_name_p,"%s%s%s/%s.tmb","/MMC",TFLASHDIR,THUMB, filename); /**********************NOTE*************************** Drive type to be updated ******************************************************/ //mfw_fm_file_config.tFileType = MSL_FILETYPE_TFLASH; break; default: sprintf(tmb_name_p,"/%s/%s.tmb",THUMB, filename); } strcat(mfw_fm_file_config.sFileName,tmb_name_p); #else strcpy(mfw_fm_file_config.sFileName,tmb_name_p); #endif if(mslResult == MSL_IMGVIEW_STATUS_OK) mslResult = MSL_ImgView_SetConfig(msl_handle,MSL_DECFILE_CONFIGINDEX,&mfw_fm_file_config); mfwFree((U8 *)mfw_fm_file_config.sFileName,FM_MAX_OBJ_NAME_LENGTH); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgViewer_setConfigs $Description: This function will set the parameters for the imageviewer UCP $Returns: Result of the UCP updation of configurations $Arguments: filepath : Image path filename : Image name width : Image width height : Image height xoffset : Image x offset yoffset : Image y offset zFactor : Zoom factor rotation_degree : Rotate factor source : Current drive *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_setConfigs(char *filename,int width, int height,int xoffset, int yoffset,U32 zFactor,int rotation_degree,T_FM_DEVICE_TYPE source) { MSL_IMGVIEW_STATUS mslResult; MSL_DISPLAY_CONFIGTYPE mfw_fm_dspl_config; MSL_FILE_CONFIGTYPE mfw_fm_file_config ; int zoom_factor = zFactor; int rAngle = rotation_degree; TRACE_FUNCTION ("mfw_fm_imgViewer_setRotationConfigs()"); mfw_fm_dspl_config.unDisplayImgHeight = height; mfw_fm_dspl_config.unDisplayImgWidth = width; mfw_fm_dspl_config.unDisplayXOffset = xoffset; mfw_fm_dspl_config.unDisplayYOffset = yoffset; mslResult = MSL_ImgView_SetConfig(msl_handle,MSL_DISPLAY_CONFIGINDEX,&mfw_fm_dspl_config); mfw_fm_file_config.sFileName = (char *) mfwAlloc(FM_MAX_OBJ_NAME_LENGTH); #ifdef FF_MMI_RFS_ENABLED switch (source) { case FM_NOR_FLASH: strcpy(mfw_fm_file_config.sFileName,"/FFS"); // mfw_fm_file_config.tFileType = MSL_FILETYPE_FFS; break; case FM_NORMS_FLASH: strcpy(mfw_fm_file_config.sFileName,"/NOR"); // mfw_fm_file_config.tFileType = MSL_FILETYPE_FFS; break; case FM_NAND_FLASH: strcpy(mfw_fm_file_config.sFileName,"/NAND"); /**********************NOTE*************************** Drive type to be updated ******************************************************/ // mfw_fm_file_config.tFileType = MSL_FILETYPE_RFS; break; case FM_T_FLASH: strcpy(mfw_fm_file_config.sFileName,"/MMC"); /**********************NOTE*************************** Drive type to be updated ******************************************************/ //mfw_fm_file_config.tFileType = MSL_FILETYPE_TFLASH; break; } strcat(mfw_fm_file_config.sFileName,filename); #else strcpy(mfw_fm_file_config.sFileName,filename); #endif if(mslResult == MSL_IMGVIEW_STATUS_OK) mslResult = MSL_ImgView_SetConfig(msl_handle,MSL_DECFILE_CONFIGINDEX,&mfw_fm_file_config); if(mslResult == MSL_IMGVIEW_STATUS_OK) mslResult = MSL_ImgView_SetConfig(msl_handle,MSL_ZOOM_CONFIGINDEX,&zoom_factor); if(mslResult == MSL_IMGVIEW_STATUS_OK) mslResult = MSL_ImgView_SetConfig (msl_handle,MSL_ROTATE_CONFIGINDEX,&rAngle); mfwFree((U8 *)mfw_fm_file_config.sFileName,FM_MAX_OBJ_NAME_LENGTH); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_imgView_setcallback $Description: This function will set the callback for viewer UCP $Returns: Result of the updating the callback function $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgViewer_setcallback(void) { MSL_IMGVIEW_STATUS mslResult; TRACE_FUNCTION("mfw_fm_imgViewer_setcallback"); mslResult = MSL_ImgView_SetConfig(msl_handle,MSL_CALLBACKSET_CONFIGINDEX,(MSL_CALLBACK)Msl_mslil_Callback); if(mslResult == MSL_IMGVIEW_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_create $Description: This function will create the handle of thumbnail UCP $Returns: Result of the UCP create $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_create(void) { MSL_IMGTHMB_STATUS mslResult = MSL_IMGTHMB_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgThmb_create()"); mslResult = MSL_ImgThmb_Create(&msl_handle); if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_init $Description: This function will initialise of thumbnail UCP $Returns: Result of the UCP initialization $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_init(void) { MSL_IMGTHMB_STATUS mslResult = MSL_IMGTHMB_STATUS_OK; TRACE_FUNCTION ("mfw_fm_imgThmb_init()"); mslResult = MSL_ImgThmb_Init(msl_handle); if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_destroy $Description: This function will destroy the thumbnail UCP. $Returns: Result of the UCP destroy $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_destroy(void) { MSL_IMGTHMB_STATUS mslResult; TRACE_FUNCTION ("mfw_fm_imgThmb_destroy()"); mslResult = MSL_ImgThmb_Destroy(msl_handle); if (mslResult != MSL_IMGTHMB_STATUS_OK) { MSL_ImgThmb_Destroy(msl_handle); msl_handle=0; return FM_UCP_ERROR; } if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_deinit $Description: This function will deinit the thumbnail UCP. $Returns: Result of the UCP de-initialization $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_deinit(void) { MSL_IMGTHMB_STATUS mslResult; TRACE_FUNCTION ("mfw_fm_imgThmb_deinit()"); mslResult = MSL_ImgThmb_Deinit(msl_handle); if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_pause $Description: This function will pasue the thumbnail UCP. $Returns: Result of the UCP pause $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_pause(void) { MSL_IMGTHMB_STATUS mslResult; TRACE_FUNCTION ("mfw_fm_imgThmb_pause()"); mslResult = MSL_ImgThmb_Pause((MSL_HANDLE)msl_handle); if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_generate $Description: This function will generate the thumbnail file in filesystem. $Returns: Result of the thumbanil generation $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_generate(void) { MSL_IMGTHMB_STATUS mslResult; TRACE_FUNCTION ("mfw_fm_imgThmb_generate()"); mslResult = MSL_ImgThmb_Generate((MSL_HANDLE)msl_handle); if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_setparams $Description: This function will set the parameters for thumbnail UCP $Returns: Result of the UCP updation of configurations $Arguments: inFilepath : Image path inFilename : Image name width : Image width height : Image height source : Current drive *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_setparams(char * inFilepath, char* inFilename, int width,int height, T_FM_DEVICE_TYPE source) { MSL_IMGTHMB_STATUS mslResult = MSL_IMGTHMB_STATUS_OK; char tmb_name_p[FM_MAX_DIR_PATH_LENGTH]; MSL_RESCALE_CONFIGTYPE mfw_fm_rescaleconfig ; MSL_FILE_CONFIGTYPE mfw_fm_file_config ; TRACE_FUNCTION ("mfw_fm_imgThmb_setparams()"); mfw_fm_rescaleconfig.unRescaledImgHeight = height; mfw_fm_rescaleconfig.unRescaledImgWidth =width ; mslResult = MSL_ImgThmb_SetConfigs(msl_handle,MSL_RESCALE_CONFIGINDEX,&mfw_fm_rescaleconfig); mfw_fm_file_config.sFileName = (char *) mfwAlloc(FM_MAX_DIR_PATH_LENGTH); switch (source) { case FM_NOR_FLASH: sprintf(mfw_fm_file_config.sFileName,"%s%s%s.jpg","/FFS",inFilepath,inFilename); sprintf(tmb_name_p,"%s%s%s/%s.tmb","/FFS",NORDIR,THUMB, inFilename); // mfw_fm_file_config.tFileType = MSL_FILETYPE_FFS; break; case FM_NORMS_FLASH: sprintf(mfw_fm_file_config.sFileName,"%s%s%s.jpg","/NOR",inFilepath,inFilename); sprintf(tmb_name_p,"%s%s%s/%s.tmb","/NOR",NORMSDIR,THUMB, inFilename); // mfw_fm_file_config.tFileType = MSL_FILETYPE_FFS; break; case FM_NAND_FLASH: /**********************NOTE*************************** Drive type to be updated ******************************************************/ sprintf(mfw_fm_file_config.sFileName,"%s%s%s.jpg","/NAND",inFilepath,inFilename); sprintf(tmb_name_p,"%s%s%s/%s.tmb","/NAND",NANDDIR,THUMB, inFilename); mfw_fm_file_config.tFileType = MSL_FILETYPE_RFS; break; case FM_T_FLASH: /**********************NOTE*************************** Drive type to be updated ******************************************************/ sprintf(mfw_fm_file_config.sFileName,"%s%s%s.jpg","/MMC",inFilepath,inFilename); sprintf(tmb_name_p,"%s%s%s/%s.tmb","/MMC",TFLASHDIR,THUMB, inFilename); //mfw_fm_file_config.tFileType = MSL_FILETYPE_TFLASH; break; } if(mslResult == MSL_IMGTHMB_STATUS_OK) { mslResult = MSL_ImgThmb_SetConfigs(msl_handle,MSL_DECFILE_CONFIGINDEX,&mfw_fm_file_config); } sprintf(mfw_fm_file_config.sFileName,"%s",tmb_name_p); if(mslResult == MSL_IMGTHMB_STATUS_OK) { mslResult = MSL_ImgThmb_SetConfigs(msl_handle,MSL_ENCFILE_CONFIGINDEX,&mfw_fm_file_config); } mfwFree((U8 *)mfw_fm_file_config.sFileName,FM_MAX_DIR_PATH_LENGTH); if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_imgThmb_setcallback $Description: This function will set the callback for thumbnail UCP $Returns: Result of the UCP updation of configurations $Arguments: None *******************************************************************************/ T_FM_IMG_STATE mfw_fm_imgThmb_setcallback() { MSL_IMGTHMB_STATUS mslResult = MSL_IMGTHMB_STATUS_OK; TRACE_FUNCTION("mfw_fm_imgThmb_setcallback"); mslResult = MSL_ImgThmb_SetConfigs(msl_handle,MSL_CALLBACKSET_CONFIGINDEX,(MSL_CALLBACK)Msl_mslil_Callback); if(mslResult == MSL_IMGTHMB_STATUS_OK) return FM_UCP_NO_ERROR; else return FM_UCP_ERROR; } /******************************************************************************* $Function: mfw_fm_thmb_mslcb $Description: This function is the callback for the thumbnail UCP $Returns: None $Arguments: tCMd : Current command being executed by the MSL tStatus : Status of the current command *******************************************************************************/ void mfw_fm_thmb_mslcb( U32 tCMd,U32 tStatus) { T_MFW_FM_PARA para; TRACE_FUNCTION("mfw_fm_thmb_mslcb()"); switch(tCMd) { case MSL_CMD_INIT: TRACE_EVENT_P1("MSL_CMD_INIT %d",tStatus); if(tStatus ==MSL_IMGTHMB_STATUS_OK) { para.img_state=FM_UCP_NO_ERROR; } else { para.img_state=FM_UCP_ERROR; } mfw_fm_signal(E_FM_THMB_INIT, ¶); break; case MSL_CMD_GENERATE: TRACE_EVENT_P1("MSL_CMD_GENERATE %d",tStatus); switch(tStatus) { case MSL_IMGTHMB_STATUS_OK: para.img_state = FM_UCP_NO_ERROR; break; case MSL_IMGTHMB_ERROR_BAD_STREAM: para.img_state = FM_UCP_ERROR_BAD_STREAM; break; case MSL_IMGTHMB_ERROR_UNKNOWN: para.img_state = FM_UCP_ERROR_UNKNOWN; break; case MSL_IMGTHMB_ERROR_IOWRITE: para.img_state = FM_UCP_ERROR_NO_MEM; break; case MSL_IMGTHMB_ERROR_INVALID_ARGUMENT: para.img_state = FM_UCP_ERROR_INVALID_ARGUMENT; break; default : para.img_state = FM_UCP_ERROR; } mfw_fm_signal(E_FM_THMB_GEN, ¶); break; case MSL_CMD_DEINIT: TRACE_EVENT_P1("MSL_CMD_DEINIT %d",tStatus); if(tStatus ==MSL_IMGTHMB_STATUS_OK) { para.img_state=FM_UCP_NO_ERROR; } else { para.img_state=FM_UCP_ERROR; } mfw_fm_signal(E_FM_THMB_DEINIT, ¶); break; } } /******************************************************************************* $Function: mfw_fm_view_mslcb $Description: This function is the callback for the Viewer UCP $Returns: None $Arguments: tCMd : Current command being executed by the MSL tStatus : Status of the current command *******************************************************************************/ void mfw_fm_view_mslcb( U32 tCMd,U32 tStatus) { T_MFW_FM_PARA para; TRACE_FUNCTION("mfw_fm_view_mslcb()"); switch(tCMd) { case MSL_CMD_INIT: TRACE_EVENT_P1("MSL_CMD_INIT %d",tStatus); if(tStatus ==MSL_IMGVIEW_STATUS_OK) { para.img_state=FM_UCP_NO_ERROR; } else { para.img_state=FM_UCP_ERROR; } mfw_fm_signal(E_FM_IMG_INIT, ¶); break; case MSL_CMD_VIEW: TRACE_EVENT_P1("MSL_CMD_VIEW %d",tStatus); switch(tStatus ) { case MSL_IMGVIEW_STATUS_OK: para.img_state = FM_UCP_NO_ERROR; break; case MSL_IMGVIEW_ERROR_BAD_STREAM: para.img_state = FM_UCP_ERROR_BAD_STREAM; break; case MSL_IMGVIEW_ERROR_UNKNOWN: para.img_state = FM_UCP_ERROR_UNKNOWN; break; case MSL_IMGVIEW_ERROR_IOREAD: para.img_state = FM_UCP_ERROR_READ_FAILED; break; case MSL_IMGVIEW_ERROR_INVALID_ARGUMENT: para.img_state = FM_UCP_ERROR_INVALID_ARGUMENT; break; default : para.img_state = FM_UCP_ERROR; } mfw_fm_signal(E_FM_IMG_DRAW,¶); break; case MSL_CMD_DEINIT: TRACE_EVENT_P1("MSL_CMD_DEINIT %d",tStatus); if(tStatus ==MSL_IMGVIEW_STATUS_OK) { para.img_state=FM_UCP_NO_ERROR; } else { para.img_state=FM_UCP_ERROR; } mfw_fm_signal(E_FM_IMG_DEINIT, ¶); break; } } //Audio List /******************************************************************************* $Function: mfw_fm_audPlay_cb $Description: Callback fundtion for auio play/stop $Returns: None $Arguments: parameter : The structure conveying the stop indication data *******************************************************************************/ void mfw_fm_audPlay_cb(void *parameter) { T_MFW_FM_PARA para; T_AS_STOP_IND *stop_ind = (T_AS_STOP_IND *)parameter; /* OMAPS00151698, x0056422 */ T_AS_START_IND *start_ind = ( T_AS_START_IND *)parameter; /* OMAPS00151698, x0056422 */ T_AS_PROBAR_IND_MP3 *mp3_pb = (T_AS_PROBAR_IND_MP3 *)parameter; TRACE_FUNCTION("mfw_fm_audPlay_cb"); if(mmi_get_aud_state_status() == FM_AUD_NONE) { TRACE_EVENT_P1("AS_START_IND status %d ",start_ind->status); mmi_set_aud_state_status(FM_AUD_PLAY); /* OMAPS00151698, x0056422 */ #ifdef FF_MMI_A2DP_AVRCP //if BT connected and aud is initialized, and the command wasnt from BT, then send callback tGlobalBmiBtStruct.tAudioState = FM_AUD_PLAY; if((tGlobalBmiBtStruct.bConnected != BMI_BT_NOTCONNECTED) && (start_ind->status == AS_OK)) { if( NULL != tGlobalBmiBtStruct.BmiEventCallback) tGlobalBmiBtStruct.BmiEventCallback(BMI_EVENT_USER_PLAY); tGlobalBmiBtStruct.tCmdSrc == BMI_BT_COMMAND_NONE; } #endif // FF_MMI_A2DP_AVRCP } switch(stop_ind->header.msg_id ) { /* OMAPS00151698, x0056422 */ case AS_PAUSE_IND: TRACE_EVENT_P1("AS_PAUSE_IND status %d",stop_ind->status); mmi_set_aud_state_status( FM_AUD_PAUSE); /* OMAPS00151698, x0056422 */ #ifdef FF_MMI_A2DP_AVRCP tGlobalBmiBtStruct.tAudioState = FM_AUD_PAUSE; if(tGlobalBmiBtStruct.bConnected != BMI_BT_NOTCONNECTED) { if(NULL != tGlobalBmiBtStruct.BmiEventCallback) tGlobalBmiBtStruct.BmiEventCallback(BMI_EVENT_USER_PAUSE); tGlobalBmiBtStruct.tCmdSrc = BMI_BT_COMMAND_NONE; } #endif//FF_MMI_A2DP_AVRCP break; /* OMAPS00151698, x0056422 */ case AS_STOP_IND: TRACE_EVENT_P2("AS_STOP_IND status %d end %d",stop_ind->status, stop_ind->end_of_media); mfw_unset_stereo_path(mfw_get_current_audioDevice()); //Daisy tang added for Real Resume feature 20071107 if(isPlayer_Real_Pause) { last_file_size_played = stop_ind->file_size; last_para_aud_pt = para_aud.aud_pt; } switch((int)(stop_ind->status)) { case AS_NOT_SUPPORTED: para.aud_state = FM_AUD_ERROR_NOTSUPPORTED; break; case AS_MEMORY_ERR: para.aud_state = FM_AUD_ERROR_MEM; break; case AS_INTERNAL_ERR: para.aud_state = FM_AUD_ERROR_INTERNAL; break; case AS_INVALID_PARAM: para.aud_state = FM_AUD_ERROR_INVALIDPARAM; break; case AS_NOT_READY: para.aud_state = FM_AUD_ERROR_NOTREADY; break; case AS_MESSAGING_ERR: para.aud_state = FM_AUD_ERROR_MSGING; break; case AS_FFS_ERR: para.aud_state = FM_AUD_ERROR_FFS; break; case AS_PLAYER_ERR: para.aud_state = FM_AUD_ERROR_PLAYER; break; case AS_DENIED: para.aud_state = FM_AUD_ERROR_DENIED; break; case AS_AUDIO_ERR: para.aud_state = FM_AUD_ERROR_AUDIO; break; case AS_NOT_ALLOWED: para.aud_state = FM_AUD_ERROR_NOTALLOWED; break; default: para.aud_state = FM_AUD_NONE; } /* June 28, 2007 DRT: OMAPS00135749 x0062174 */ mmi_set_aud_state_status( FM_AUD_NONE); /* OMAPS00151698, x0056422 */ #ifdef FF_MMI_A2DP_AVRCP tGlobalBmiBtStruct.tAudioState = FM_AUD_NONE; /* x0056422, updated changes from this ID */ /*OMAPS001448610 : This callback code is removed since L1 sends the callback to BT for stop playback irrespective of whether the stop is due to end of media or is user prompted. */ tGlobalBmiBtStruct.tCmdSrc = BMI_BT_COMMAND_NONE; #endif//FF_MMI_A2DP_AVRCP /* OMAPS00151698, x0056422 */ mfw_fm_signal(E_FM_AUDIO_STOP, ¶); break; case AS_PROBAR_IND: TRACE_EVENT_P2("pt %d tt %d",mp3_pb->u32TotalTimePlayed, mp3_pb->u32totalTimeEst); para_aud.aud_pt = mp3_pb->u32TotalTimePlayed + last_para_aud_pt; //Daisy tang added for Real Resume feature 20071107 para_aud.aud_tt = mp3_pb->u32totalTimeEst; mfw_fm_signal(E_FM_AUDIO_PROG, NULL); break; } return; } /******************************************************************************* $Function: mfw_fm_aud_get_type $Description: Deduces the type of audio file $Returns: audio file type $Arguments: file_name : audio file *******************************************************************************/ T_FM_OBJ_TYPE mfw_fm_aud_get_type(char * file_name) { T_AS_PLAYER_TYPE player_type; UINT16 filename_uc[47]; TRACE_FUNCTION("mfw_fm_aud_get_type"); convert_u8_to_unicode(file_name, filename_uc); as_deduce_player_type(filename_uc,&player_type); switch(player_type) { case AS_PLAYER_TYPE_MIDI: TRACE_EVENT("AS_PLAYER_TYPE_MIDI"); return OBJECT_TYPE_AUDIO_MIDI; case AS_PLAYER_TYPE_MP3: TRACE_EVENT("AS_PLAYER_TYPE_MP3"); return OBJECT_TYPE_AUDIO_MP3; case AS_PLAYER_TYPE_AAC: TRACE_EVENT("AS_PLAYER_TYPE_AAC"); return OBJECT_TYPE_AUDIO_AAC; default: TRACE_EVENT("Default"); return OBJECT_TYPE_FILE; } } /******************************************************************************* $Function: mfw_fm_audPlay $Description: Plays the selected audio file $Returns: None $Arguments: file_name : audio file file_type : audio file type *******************************************************************************/ #ifdef FF_MMI_UNICODE_SUPPORT T_FM_AUD_STATE mfw_fm_audPlay(T_WCHAR * filename_uc, T_FM_OBJ_TYPE file_type, BOOL play_bar) { #else T_FM_AUD_STATE mfw_fm_audPlay(char * file_name, T_FM_OBJ_TYPE file_type, BOOL play_bar) { UINT16 filename_uc[FM_MAX_DIR_PATH_LENGTH]; convert_u8_to_unicode(file_name, filename_uc); #endif T_AS_RET status; T_AS_PLAYER_TYPE player_type; int i=0; TRACE_FUNCTION("mfw_fm_audPlay"); //Daisy tang added for Real Resume feature 20071107 //start #ifdef FF_MMI_UNICODE_SUPPORT for(i==0;i<FM_MAX_DIR_PATH_LENGTH;i++) { last_inputFileName_uc[i]=filename_uc[i]; } #else strcpy(last_inputFileName, file_name); #endif last_file_type = file_type; last_play_bar = play_bar; last_file_size_played = 0; last_para_aud_pt = 0; //end switch(file_type) { case OBJECT_TYPE_AUDIO_MIDI: TRACE_EVENT("AS_PLAYER_TYPE_MIDI"); /* Aug 27, 2007 DRT: OMAPS00137370 x0045876 */ /* Voice Limit parameter should be saved to a temp var before playing MP3 or AAC file */ player_para.midi.voice_limit = mfw_player_midi_get_voice_limit(); /* Apr 10, 2007 DRT: OMAPS00125309 x0039928 */ /* MONO is 1 and STEREO is 2 for midi player*/ player_para.midi.output_channels = player_channel; player_type = AS_PLAYER_TYPE_MIDI; break; case OBJECT_TYPE_AUDIO_MP3: TRACE_EVENT("AS_PLAYER_TYPE_MP3"); /* Aug 27, 2007 DRT: OMAPS00137370 x0045876 */ /* Voice Limit parameter should be saved to a temp var before playing MP3 or AAC file */ mfw_player_set_voice_limit (player_para.midi.voice_limit); /* Apr 10, 2007 DRT: OMAPS00125309 x0039928 */ /* MONO is 0 and STEREO is 1 for mp3 player*/ player_para.mp3.mono_stereo = player_channel - 1; player_para.mp3.size_file_start = 0; player_type = AS_PLAYER_TYPE_MP3; break; case OBJECT_TYPE_AUDIO_AAC: TRACE_EVENT("AS_PLAYER_TYPE_AAC"); /* Aug 27, 2007 DRT: OMAPS00137370 x0045876 */ /* Voice Limit parameter should be saved to a temp var before playing MP3 or AAC file */ mfw_player_set_voice_limit (player_para.midi.voice_limit); /* Apr 10, 2007 DRT: OMAPS00125309 x0039928 */ /* MONO is 0 and STEREO is 1 for aac player*/ player_para.aac.mono_stereo = player_channel - 1 ; player_para.aac.size_file_start= 0; player_type = AS_PLAYER_TYPE_AAC; break; default: /* Aug 27, 2007 DRT: OMAPS00137370 x0045876 */ /* Voice Limit parameter should be saved to a temp var before playing MP3 or AAC file */ player_para.midi.voice_limit = mfw_player_midi_get_voice_limit(); /* Apr 10, 2007 DRT: OMAPS00125309 x0039928 */ /* MONO is 1 and STEREO is 2 for midi player*/ player_para.midi.output_channels = player_channel; player_type = AS_PLAYER_TYPE_MIDI; break; } as_player_set_params(player_type,&player_para); mfw_set_stereo_path(mfw_get_current_audioDevice()); fm_aud_return_path.addr_id = 0; fm_aud_return_path.callback_func = mfw_fm_audPlay_cb; status=as_play_file(player_type,filename_uc,AS_VOLUME_HIGH,mfw_player_playback_loop_flag,play_bar,&fm_aud_return_path); if(status == AS_OK) return FM_AUD_NO_ERROR; else return FM_AUD_ERROR; } /******************************************************************************* $Function: mfw_fm_audStop $Description: Stops playing the selected audio file $Returns: None $Arguments: file_name : audio file file_type : audio file type *******************************************************************************/ T_FM_AUD_STATE mfw_fm_audStop(void) { T_AS_RET status; TRACE_EVENT("mfw_fm_audStop"); fm_aud_return_path.addr_id = 0; fm_aud_return_path.callback_func = mfw_fm_audPlay_cb; status=as_stop(&fm_aud_return_path); if(status == AS_OK) return FM_AUD_NO_ERROR; else return FM_AUD_ERROR; } T_FM_AUD_STATE mfw_fm_audPause(void) { T_AS_RET status; TRACE_EVENT("mfw_fm_audPause"); fm_aud_return_path.addr_id = 0; fm_aud_return_path.callback_func = mfw_fm_audPlay_cb; status=as_pause(&fm_aud_return_path); if(status == AS_OK) return FM_AUD_NO_ERROR; else return FM_AUD_ERROR; } T_FM_AUD_STATE mfw_fm_audResume(void) { T_AS_RET status; TRACE_EVENT("mfw_fm_audResume"); fm_aud_return_path.addr_id = 0; fm_aud_return_path.callback_func = mfw_fm_audPlay_cb; mmi_set_aud_state_status( FM_AUD_PLAY); /* OMAPS00151698, x0056422 */ #ifdef FF_MMI_A2DP_AVRCP tGlobalBmiBtStruct.tAudioState = FM_AUD_PLAY; if(tGlobalBmiBtStruct.bConnected != BMI_BT_NOTCONNECTED) { /*OMAPS001448610 : This check for Headset/handset command is to be removed since the handling is now exactly the same. */ if(NULL != tGlobalBmiBtStruct.BmiEventCallback) tGlobalBmiBtStruct.BmiEventCallback(BMI_EVENT_USER_RESUME); tGlobalBmiBtStruct.tCmdSrc = BMI_BT_COMMAND_NONE; } #endif//FF_MMI_A2DP_AVRCP /* OMAPS00151698, x0056422 */ status=as_resume(&fm_aud_return_path); if(status == AS_OK) return FM_AUD_NO_ERROR; else return FM_AUD_ERROR; } //Daisy tang added for Real Resume feature 20071107 //start T_FM_AUD_STATE mfw_fm_audRealPause(void) { T_AS_RET status; TRACE_EVENT("mfw_fm_audRealPause"); isPlayer_Real_Pause = TRUE; fm_aud_return_path.addr_id = 0; fm_aud_return_path.callback_func = mfw_fm_audPlay_cb; status=as_stop(&fm_aud_return_path); if(status == AS_OK) return FM_AUD_NO_ERROR; else return FM_AUD_ERROR; } T_FM_AUD_STATE mfw_fm_audRealResume(void) { T_AS_RET status; T_AS_PLAYER_TYPE player_type; UINT16 filename_uc[FM_MAX_DIR_PATH_LENGTH]; int i=0; TRACE_FUNCTION("mfw_fm_audRealResume"); if(!isPlayer_Real_Pause) return FM_AUD_ERROR; if((last_file_type NEQ OBJECT_TYPE_AUDIO_MP3) AND (last_file_type NEQ OBJECT_TYPE_AUDIO_AAC)) return FM_AUD_ERROR; isPlayer_Real_Pause = FALSE; switch(last_file_type) { case OBJECT_TYPE_AUDIO_MP3: TRACE_EVENT("AS_PLAYER_TYPE_MP3"); /* Aug 27, 2007 DRT: OMAPS00137370 x0045876 */ /* Voice Limit parameter should be saved to a temp var before playing MP3 or AAC file */ mfw_player_set_voice_limit (player_para.midi.voice_limit); /* Apr 10, 2007 DRT: OMAPS00125309 x0039928 */ /* MONO is 0 and STEREO is 1 for mp3 player*/ player_para.mp3.mono_stereo = player_channel - 1; player_para.mp3.size_file_start = last_file_size_played;//Daisy tang added for MP3 feature 20071107 player_type = AS_PLAYER_TYPE_MP3; break; case OBJECT_TYPE_AUDIO_AAC: TRACE_EVENT("AS_PLAYER_TYPE_AAC"); /* Aug 27, 2007 DRT: OMAPS00137370 x0045876 */ /* Voice Limit parameter should be saved to a temp var before playing MP3 or AAC file */ mfw_player_set_voice_limit (player_para.midi.voice_limit); /* Apr 10, 2007 DRT: OMAPS00125309 x0039928 */ /* MONO is 0 and STEREO is 1 for aac player*/ player_para.aac.mono_stereo = player_channel - 1 ; player_para.aac.size_file_start= last_file_size_played;//Daisy tang added for MP3 feature 20071107 player_type = AS_PLAYER_TYPE_AAC; break; } as_player_set_params(player_type,&player_para); mfw_set_stereo_path(mfw_get_current_audioDevice()); fm_aud_return_path.addr_id = 0; fm_aud_return_path.callback_func = mfw_fm_audPlay_cb; #ifdef FF_MMI_UNICODE_SUPPORT for(i==0;i<FM_MAX_DIR_PATH_LENGTH;i++) { filename_uc[i]=last_inputFileName_uc[i]; } #else convert_u8_to_unicode(last_inputFileName, filename_uc); #endif status=as_play_file(player_type,filename_uc,AS_VOLUME_HIGH,mfw_player_playback_loop_flag,last_play_bar,&fm_aud_return_path); if(status == AS_OK) return FM_AUD_NO_ERROR; else return FM_AUD_ERROR; } //end #endif