FreeCalypso > hg > fc-tourmaline
view src/ui/mfw/mfw_ffs.c @ 49:4e178a0e90f6
LICENSE added
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 18 Oct 2020 03:39:10 +0000 |
parents | 67bfe9f274f6 |
children | 92abb46dc1ba |
line wrap: on
line source
/* +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) $Workfile:: mfw_ffs.c $| | $Author:: $Revision:: 1 $| | CREATED: $Modtime:: $| | STATE : code | +--------------------------------------------------------------------+ MODULE : mfw_ffs PURPOSE : This module contains FFS Interface functions. HISTORY: Feb 19 2007, x0061088(Prachi) LOCOSTO-DRT-OMAPS00112518 Description:Can't access Fileviewer when too many pictures has been taken (no space in FFS). After taking maximum snapshot(up to out of memory) cant access ETM . ETM shows error "Maximum open file reached" Solution: As the relience flag is enabled, to solve this issue, function Flash_formatted() is now checking the return value of ffs_opendir() to close the mmi/ directory properly. Also MMI is calling mfw_close_dir() to close mmi/jpeg/ directory while exiting from camera application. Jan 10, 2007 DR: OMAPS00110568 x0039928 Description: Remove duplication of FFS.Flashdata from GDI Solution: Added two new functions get_ffs_tty_status() and get_ffs_ttypftype() Nov 07, 2006 ER: OMAPS00102732 x0pleela Description: FFS Support for Intel Sibley Flash - Intel 256+64 non-ADMUX (PF38F4050M0Y0C0Q) Solution: Closing the opened directory if readdir is not successful and the new code is under the compilation flag FF_MMI_RELIANCE_FFS Sep 08, 2006 DR: OMAPS00091250 x0pleela Description:The phone resets if no MEPD data is presented Solution: Added new function ffs_flash_write() which writes a string into FFS xrashmic 22 Aug, 2004 MMI-SPR-32798 Adding the support for screen capture using a dynamically assigned key. Apr 14, 2005 REF: CRR 29991 xpradipg Description: Optimisation 5: Remove the static allocation and use dynamic allocation/ deallocation for pb_list and black_list Solution: The static definition is removed and replaced with the dynamic allocation Oct 19, 2004 REF: CRR MMI-SPR-26002 xkundadu Issue description: Golite booting problem. Solution: If the FFS is not formatted, prevent writing into FFS. Aug 25, 2004 REF: CRR 20655 xnkulkar Description: Voice Memo functionality not working Solution: The voice recording functionality was failing because " mmi" folder is not present. As a solution, we create the "mmi" folder and then proceed with recording. */ #define ENTITY_MFW #include <stdio.h> #include <string.h> #include <stdlib.h> #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 "prim.h" #include "custom.h" #include "gsm.h" #include "vsi.h" #include "mfw_sys.h" #include "prim.h" #include "vsi.h" #include "mfw_mfw.h" #include "mfw_win.h" #include "mfw_kbd.h" /* SPR#1428 - SH - New Editor changes */ #ifndef NEW_EDITOR #include "mfw_edt.h" #endif //TISH modified for MSIM //#ifdef WIN32 //#include "MmiMain.h" //#endif #include "mfw_lng.h" #include "mfw_tim.h" #include "mfw_icn.h" #include "mfw_mnu.h" #include "mfw_phb.h" #include "mfw_cm.h" #include "mfw_sim.h" #include "mfw_nm.h" #include "mfw_phb.h" #include "ksd.h" #include "psa.h" #include "mfw_sms.h" #include "mfw_sat.h" #include "mfw_ffs.h" #include "dspl.h" #include "gdi.h" //ES!! #ifdef NEPTUNE_BOARD #include "ffs.h" #endif #define hCommACI _ENTITY_PREFIXED(hCommACI) #if( BOARD == 61 ) #ifdef PCM_2_FFS #define T_PSPDF_SMS 20 #define MAX_NO_SMS 20 #endif #endif // Apr 14, 2005 REF: CRR 29991 xpradipg // New file added for the blacklist. The total length along with the path aand // file name should not exceed 20 characters #ifdef FF_MMI_OPTIM #define BLACK_LIST_PATH_AND_FILE "/mmi/blacklist" #endif #if defined (NEW_FRAME) EXTERN T_HANDLE hCommACI; #else EXTERN T_VSI_CHANDLE hCommACI; #endif #ifdef TI_PS_HCOMM_CHANGE #define _hCommMMI hCommACI #else #define hCommMMI hCommACI #endif typedef enum { DATA, NO_DATA } WriteFlag; FlashData FFS_flashData; static WriteFlag write_flag; int flash_formatted(void); /* SPR#2487 - DS - Function to check if FFS is formatted */ //TISH, patch for call control CLIR //start UBYTE getCLIRState(void) { if (FFS_flashData.CLIR) TRACE_EVENT("FFS_flashData.CLIR EQ true"); else TRACE_EVENT("FFS_flashData.CLIR EQ false"); return FFS_flashData.CLIR; } //end /* +--------------------------------------------------------------------+ | PROJECT : MMI-Framework (8417) MODULE : MFW_FFS | | STATE : code ROUTINE : mfw_flash_write | +--------------------------------------------------------------------+ PURPOSE : To write a string into FFS. */ //x0pleela 08 Sep, 2006 DR: OMAPS00091250 void mfw_flash_write(char *Msg,...) { fd_t fd= -1; char log_ffs_buf[256]; va_list varpars; va_start (varpars, Msg); vsprintf(log_ffs_buf,Msg,varpars); va_end (varpars); fd = ffs_open((const char*)"/mmiMEPD", FFS_O_APPEND | FFS_O_WRONLY ); if(fd < 0) fd=ffs_open((const char*)"/mmiMEPD", FFS_O_CREATE |FFS_O_WRONLY ); if(fd > 0) { ffs_write(fd, log_ffs_buf, strlen(log_ffs_buf)); ffs_close(fd); } } effs_t flash_write(void) { // Oct 19, 2004 REF: CRR MMI-SPR-26002 xkundadu // Issue description: Golite booting problem. // Solution: If the FFS is not formatted, dont write into the FFS. if ( flash_formatted() == TRUE) { return (flash_data_write("/mmi","mmidata", &FFS_flashData, sizeof(FFS_flashData))); } else { TRACE_EVENT("ERROR flash_data_write(): NOT FORMATTED!"); // Return NOT formatted message. return EFFS_NOFORMAT; } } effs_t flash_update(void) { if (write_flag == DATA) { write_flag = NO_DATA; return (flash_write()); } else return EFFS_OK; } //TISH modified for MSIM #ifndef _WIN32_ // EF 22/10/02 for WIN32 simulation, set anykeyanswer on, and keylock off /* Marcus: Issue 1719: 11/02/2003: Changed return value from effs_t to int */ int flash_read(void) { #ifdef PCM_2_FFS int val = ffs_fread("/mmi/mmidata", &FFS_flashData, sizeof(FFS_flashData)); #else int val = FFS_fread("/mmi/mmidata", &FFS_flashData, sizeof(FFS_flashData)); #endif if (val == sizeof(FFS_flashData)) { val = EFFS_OK; /* Successful, return Zero as no data_size as in flash_data_read*/ } else { TRACE_ERROR("The FFS data could not be read!"); TRACE_EVENT_P1("val = %d", val); /* Error, presumably -ve as in FFS_ERRORS, or the actual number of bytes read */ } return val; } #else int flash_read() {FFS_flashData.settings_status|= SettingsAnyKeyAnswerOn; FFS_flashData.settings_status &= ~SettingsKeyPadLockOn; #ifdef TI_PS_FF_CONC_SMS FFS_flashData.ConcatenateStatus = TRUE; #else FFS_flashData.ConcatenateStatus = FALSE; #endif /*TI_PS_FF_CONC_SMS*/ } #endif effs_t flash_data_write(const char* dir_name, const char* file_name, void* data_pointer, int data_size) { T_FFS_DIR dir; int val; char file[200]; /* SPR#2487 - DS - If FFS is not formatted, return from function */ if (flash_formatted() == FALSE) { TRACE_EVENT("ERROR flash_data_write(): NOT FORMATTED!"); return EFFS_NOFORMAT; } #ifndef PCM_2_FFS val = FFS_opendir(dir_name, &dir); #else val = ffs_opendir((const signed char *)dir_name, &dir); #endif if(val < 0) { #ifndef PCM_2_FFS val = FFS_mkdir(dir_name); #else val = ffs_mkdir(dir_name); #endif switch(val) { case EFFS_OK: case EFFS_EXISTS: break; default: TRACE_ERROR("The FFS directory could not be created!"); TRACE_EVENT_P2("val = %d dir name = %s", val, dir_name); return (effs_t)val; } } sprintf(file, "%s/%s", dir_name, file_name); #ifdef PCM_2_FFS val = ffs_fwrite( (const S8 *) file, data_pointer, data_size); #else val = FFS_fwrite( file, data_pointer, data_size); #endif if(val NEQ EFFS_OK) { TRACE_ERROR("The FFS file could not be created"); TRACE_EVENT_P2("val = %d file name = %s", val, file); } //x0pleela 07 Nov, 2006 DVT: OMAPS00102732 //Adding the MMI compilation flag FF_MMI_RELIANCE_FFS #if defined ( PCM_2_FFS ) || defined( FF_MMI_RELIANCE_FFS) ffs_closedir( &dir ); #endif return (effs_t)val; } /* Marcus: Issue 1719: 11/02/2003: Changed return value from effs_t to int */ int flash_data_read(const char* dir_name, const char* file_name, void* data_pointer, int data_size) { int val; char file[200]; sprintf(file, "%s/%s", dir_name, file_name); #ifdef PCM_2_FFS val = ffs_fread((const S8 *) file, data_pointer, data_size); #else val = FFS_fread( file, data_pointer, data_size); #endif if (val NEQ data_size) { TRACE_ERROR("The FFS data could not be read!"); TRACE_EVENT_P1("val = %d", val); /* Error, presumably -ve as in FFS_ERRORS, or the actual number of bytes read */ } return val; } /* SPR#2487 - DS - Function to check if FFS is formatted */ int flash_formatted(void) { T_FFS_DIR dir; int val; char sFileName[100]; /* Attempt to open "/mmi" directory */ #ifndef PCM_2_FFS val = FFS_opendir("/mmi", &dir); #else val = ffs_opendir("/mmi", &dir); #endif /* If return val is not EFFS_NOFORMAT then * assume that FFS is formatted. */ if (val == EFFS_NOFORMAT) return FALSE; else { //Feb 19 2007, x0061088(Prachi) LOCOSTO-DRT-OMAPS00112518 if (val >= 0) { while (ffs_readdir (&dir, sFileName, 100) > 0x0 ); //x0pleela 07 Nov, 2006 DVT: OMAPS00102732 //Adding the MMI compilation flag FF_MMI_RELIANCE_FFS //x0pleela 31 Oct, 2006 //Closing the directory aa per the new FFS logic #ifdef FF_MMI_RELIANCE_FFS ffs_closedir(&dir); #endif return TRUE; } else if (EFFS_NOTFOUND == val) { /* if the mmi directory was not found, but the FFS was formatted, */ /* create the mmi dir.*/ #ifndef PCM_2_FFS val = FFS_mkdir("/mmi"); #else val = ffs_mkdir("/mmi"); #endif switch(val) { case EFFS_OK: case EFFS_EXISTS: break; default: TRACE_ERROR("The /mmi directory could not be created!"); return FALSE; } } } return TRUE; } /* Aug 25, 2004 REF: CRR 20655 xnkulkar +--------------------------------------------------------------------+ | PROJECT: MMI-Framework (8417) MODULE: MFW_FFS | | STATE : code ROUTINE: flash_makedir | +--------------------------------------------------------------------+ PURPOSE : Creates a directory if not present */ void flash_makedir(char * dir_name) { T_FFS_DIR dir; #ifndef PCM_2_FFS int val = FFS_opendir(dir_name , &dir); #else int val = ffs_opendir(dir_name , &dir); #endif if(val < 0) { #ifndef PCM_2_FFS val = FFS_mkdir(dir_name); #else val = ffs_mkdir(dir_name); #endif switch(val) { case EFFS_OK: case EFFS_EXISTS: break; default: TRACE_ERROR("The FFS directory could not be created!"); TRACE_EVENT_P2("val = %d dir name = %s", val, dir_name); return; } } //x0pleela 07 Nov, 2006 DVT: OMAPS00102732 //Adding the MMI compilation flag FF_MMI_RELIANCE_FFS #if defined( PCM_2_FFS) || defined (FF_MMI_RELIANCE_FFS) ffs_closedir( &dir ); #endif } #ifdef MMI_EM_ENABLED #ifndef NEPTUNE_BOARD /* This portion is not valid for Neptune, hence excluding it.*/ U32 get_screen_size(void); void get_screen_capture(U8 *dest_data); U32 screen_capture_index=0; /******************************************************************************* $Function: screen_capture_write $Description: Implemented By Manju. Write the file into FFS xrashmic 22 Aug, 2004 MMI-SPR-32798 $Returns: none $Arguments: none *******************************************************************************/ void screen_capture_write(U8 *filename, U8 *buffer, S32 size) { fd_t fd= -1; fd = ffs_open((const char*)filename, FFS_O_CREATE | FFS_O_WRONLY); ffs_write(fd, buffer, size); ffs_close(fd); } /******************************************************************************* $Function: screen_capture $Description: Implemented By Manju. Writes the LCD buffer into a file in FFS. xrashmic 22 Aug, 2004 MMI-SPR-32798 $Returns: none $Arguments: none *******************************************************************************/ void screen_capture(void) { U8 *dest_data; U8 filename[16]; U32 dest_size; dest_size=get_screen_size(); dest_data=(U8*)mfwAlloc(dest_size); get_screen_capture(dest_data); sprintf((char*)filename,(const char*)"/sc%04d",screen_capture_index); screen_capture_write(filename, dest_data, dest_size); mfwFree(dest_data, dest_size); screen_capture_index++; } #endif /* ifndef NEPTUNE_BOARD*/ #endif // Apr 14, 2005 REF: CRR 29991 xpradipg #ifdef FF_MMI_OPTIM /******************************************************************************* $Function: flash_MMI_blackList_open $Description: This opens the blacklist file $Returns: value of the open result $Arguments: none *******************************************************************************/ int8 flash_MMI_blackList_open( ) { T_FFS_FD file=EFFS_NOFORMAT; /*a0393213 compiler warnings removal - variable status removed*/ if(flash_formatted()) { file = FFS_open(BLACK_LIST_PATH_AND_FILE, FFS_O_RDWR); if(file == EFFS_NOTFOUND) { TRACE_FUNCTION("the file does not exist and is created"); file = FFS_open(BLACK_LIST_PATH_AND_FILE, FFS_O_RDWR | FFS_O_CREATE); if(file < 0 ) { TRACE_FUNCTION("file creation failed"); return file; } return file; } } return file; } /******************************************************************************* $Function: flash_MMI_blackList_close $Description: This closes the file opened for read operation $Returns: zero for success and -1 for failure $Arguments: handle - handle of the file to be closed *******************************************************************************/ void flash_MMI_blackList_close(int8 handle) { FFS_close((T_FFS_FD)handle); } /******************************************************************************* $Function: flash_MMI_blackList_write $Description: This writes the blacklisted numbers onto the blacklist file if the file does not exist it creates and writes the data $Returns: zero for success and -1 for failure $Arguments: data - to be written into the file len - length of the data to be written *******************************************************************************/ int flash_MMI_blackList_write(U8 *data, SHORT len, SHORT offset) { T_FFS_FD file; /*a0393213 compiler warnings removal - variable status removed*/ TRACE_FUNCTION("flash_MMI_blackList_write()"); if(flash_formatted()) { file = FFS_open(BLACK_LIST_PATH_AND_FILE, FFS_O_RDWR); if(file == EFFS_NOTFOUND) { TRACE_FUNCTION("the file does not exist and is created"); file = FFS_open(BLACK_LIST_PATH_AND_FILE, FFS_O_RDWR | FFS_O_CREATE); if(file < 0 ) { TRACE_FUNCTION("file creation failed"); return file; } } TRACE_FUNCTION("the file exist and is opened"); #ifdef PCM_2_FFS ffs_seek(file, offset, FFS_SEEK_SET); ffs_write(file, (void*)data, len); ffs_close(file); #else FFS_seek(file, offset, FFS_SEEK_SET); FFS_write(file, (void*)data, len); FFS_close(file); #endif return 0; } else return -1; } /******************************************************************************* $Function: flash_MMI_blackList_read $Description: This reads the blacklisted numbers onto the data buffer $Returns: zero for success and -1 for failure $Arguments: data - buffer into which data is retrieved from the file len - length of the data to be retrieved from the file *******************************************************************************/ int flash_MMI_blackList_read(int8 file, U8* data, SHORT len,SHORT offset) { int status; TRACE_FUNCTION("file is opened and being read"); TRACE_EVENT_P1("the file is seekded at %d",offset); FFS_seek(file, offset, FFS_SEEK_SET); status = FFS_read(file, (void *)data, len); return status; } #endif #if( BOARD == 61 ) #ifdef PCM_2_FFS T_FFS_SIZE ffs_ReadRecord(const char *name, void * addr, int size, int index, int recsize) { int n; S32 result=0; T_FFS_STAT stat; char buf[T_PSPDF_SMS*MAX_NO_SMS]; ffs_stat((const signed char *)name, &stat); n = stat.size / recsize; if (index > n) return EFFS_NOTFOUND; if (stat.size <= (T_PSPDF_SMS*MAX_NO_SMS)) { result = ffs_file_read((const signed char *)name, &buf, stat.size); if (result == stat.size) { memcpy(addr, &buf[(index-1)*recsize], recsize); result = recsize; } } return result; } T_FFS_RET ffs_WriteRecord(const char *name, void * addr, int size, int index, int recsize) { int n; int result =0; T_FFS_STAT stat; char buf[T_PSPDF_SMS*MAX_NO_SMS]; ffs_stat((const signed char *)name, &stat); n = stat.size / recsize; if (index > n) return EFFS_NOTFOUND; if (stat.size <= (T_PSPDF_SMS*MAX_NO_SMS)) { result = ffs_file_read((const signed char *)name, &buf, stat.size); if (result == stat.size) { memcpy(&buf[(index-1)*recsize], addr, recsize); result = ffs_file_write((const signed char *)name, &buf, stat.size, (FFS_O_CREATE|FFS_O_TRUNC)); } } return result; } #endif #endif #ifdef FF_TTY_HCO_VCO /******************************************************************************* $Function: get_ffs_tty_status $Description: Gives the status of tty in Flash $Returns: tty status $Arguments: None *******************************************************************************/ uint8 get_ffs_tty_status(void) { return FFS_flashData.ttyAlwaysOn; } /******************************************************************************* $Function: get_ffs_tty_pftype $Description: This gives the tty profile type to be loaded $Returns: tty profile type $Arguments: None *******************************************************************************/ uint8 get_ffs_tty_pftype(void) { return FFS_flashData.ttyPfType; } #endif