FreeCalypso > hg > fc-tourmaline
diff src/ui/mfw/mfw_ffs.c @ 3:67bfe9f274f6
src/ui: import of src/ui3 from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:33:10 +0000 |
parents | |
children | 92abb46dc1ba |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ui/mfw/mfw_ffs.c Fri Oct 16 06:33:10 2020 +0000 @@ -0,0 +1,734 @@ +/* ++--------------------------------------------------------------------+ +| 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