FreeCalypso > hg > fc-magnetite
diff src/ui3/mfw/mfw_fm.c @ 420:e8ddbb0837ed
src/ui3: initial import of TCS3/LoCosto BMI & MFW code
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 21 Jan 2018 03:09:00 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui3/mfw/mfw_fm.c Sun Jan 21 03:09:00 2018 +0000 @@ -0,0 +1,3128 @@ +#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 + +