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