diff -r 6bb05bdcbe09 -r 1fc153c72b60 sysstatemgmt/systemstatereferenceplugins/custcmd/src/ssmuiproviderdlldefault.cpp --- a/sysstatemgmt/systemstatereferenceplugins/custcmd/src/ssmuiproviderdlldefault.cpp Mon Mar 15 12:45:37 2010 +0200 +++ b/sysstatemgmt/systemstatereferenceplugins/custcmd/src/ssmuiproviderdlldefault.cpp Wed Mar 31 23:31:40 2010 +0300 @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -21,7 +21,7 @@ #include "ssmuiproviderdll.h" #include "ssmpanic.h" #include -#include +#include "ssmdebug.h" const TUid KPSStartupUid = {0x2000E65E}; const TUid KSecurityPinNotifierUid = {0x2000E667}; @@ -37,17 +37,20 @@ const TUint KRFStatusPropertyKey = 0x2001D2A9; const TUid KValidateRTCPropertyCategory = {0x2000D75B}; const TUint KValidateRTCPropertyKey = 0x2001D2AB; +//Number of clusterSize to be reserve for phone memory space +const TInt KNumberOfCluster = 2; _LIT(KTsyModuleName, "mm.tsy"); _LIT(KTsyPhoneName, "GsmPhone1"); CSsmUiSpecific::CSsmUiSpecific() -: iReferenceCount(1) +: iReferenceCount(1), iReservedPhoneMemory(0) { } EXPORT_C CSsmUiSpecific::~CSsmUiSpecific() { + iReservedPhoneMemoryFs.Close(); } EXPORT_C TUid CSsmUiSpecific::StartupPSUid() @@ -95,7 +98,7 @@ //Instantiate CSsmUiSpecific if TLS is null self = new (ELeave) CSsmUiSpecific(); CleanupStack::PushL(self); - + self->ConstructL(); //Copy CSsmUiSpecific pointer in TLS User::LeaveIfError(Dll::SetTls(self)); CleanupStack::Pop(self); @@ -203,3 +206,73 @@ return EDriveC; } +/** +Leaving construction inside ConstructL +*/ +void CSsmUiSpecific::ConstructL() + { + User::LeaveIfError( iReservedPhoneMemoryFs.Connect() ); + } + +/** +Reserve two ClusterSize in Phone Memory Space on H/W +and 512 bytes for __WINS__ +@return KErrNone if successful or systemwide error +*/ +EXPORT_C TInt CSsmUiSpecific::ReservePhoneMemorySpace() + { + TVolumeIOParamInfo volumeParamInfo; + const TInt phoneMemoryDriveID = PhoneMemoryRootDriveId(); + TInt errorCode = iReservedPhoneMemoryFs.VolumeIOParam(phoneMemoryDriveID, volumeParamInfo); + if( KErrNone == errorCode ) + { +#ifdef __WINS__ + //512 bytes for __WINS__ + const TInt reservedMemory = 512; +#else + //Reserving two clusterSize Phone memory + const TInt reservedMemory = KNumberOfCluster * (volumeParamInfo.iClusterSize); +#endif //__WINS__ + errorCode = iReservedPhoneMemoryFs.ReserveDriveSpace(phoneMemoryDriveID, reservedMemory); + + if ( KErrNone == errorCode ) + { + iReservedPhoneMemory = reservedMemory; + } + } + return errorCode; + } + +/** +Free reserved bytes from Phone Memory Space. If aSpaceToFree is 0 bytes +then free complete reserved memory +@param aSpaceToFree request to free memory +@return KErrNone if successful or systemwide error +*/ +EXPORT_C TInt CSsmUiSpecific::FreeReservedPhoneMemorySpace(const TInt aSpaceToFree) + { + TInt errorCode(KErrGeneral); + DEBUGPRINT3A("Reserved memory is = %d bytes, Request to free memory is = %d bytes", iReservedPhoneMemory, aSpaceToFree); + if(0 < iReservedPhoneMemory) + { + if(0 == aSpaceToFree) + { + //Free complete reserved phone memory + errorCode = iReservedPhoneMemoryFs.ReserveDriveSpace( PhoneMemoryRootDriveId(), 0 ); + DEBUGPRINT2A("Freeing memory completed with = %d", errorCode); + iReservedPhoneMemory = 0; + } + else + { + TInt newReserveSize = iReservedPhoneMemory - aSpaceToFree; + newReserveSize = newReserveSize >= 0 ? newReserveSize : 0; + errorCode = iReservedPhoneMemoryFs.ReserveDriveSpace( PhoneMemoryRootDriveId(), newReserveSize ); + DEBUGPRINT2A("Freeing partial phone memory completed with = %d", errorCode); + if(KErrNone == errorCode) + { + iReservedPhoneMemory = newReserveSize; + } + } + } + return errorCode; + }