Modify framebuffer and NGA framebuffer to read screen size from board model dtb file. Optimise memory usuage of frame buffer
Add example minigui application with hooks to profiler (which writes results to S:\). Modified NGA framebuffer to run its own dfc queue at high priority
/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
#include <f32file.h>
#include <f32fsys.h>
#include <f32ver.h>
#include <e32uid.h>
#include "svphostfsy.h"
#define HOST_SVP_DRIVE_SIZE 1024*1024*1024
// Fixed low mass-memory warning at startup
//#define HOST_SVP_DRIVE_FREE_SIZE 10*1024*1024
#define HOST_SVP_DRIVE_FREE_SIZE 100*1024*1024
LOCAL_C TInt GetMediaSize(TInt /*aDriveNumber*/,TInt64& aSize,TInt64& aFree)
//
// Return the size and free space on a drive.
//
{
DP(_L("** (SVPHOSTMNT) GetMediaSize"));
aSize = HOST_SVP_DRIVE_SIZE;
aFree = HOST_SVP_DRIVE_FREE_SIZE;
return(KErrNone);
}
LOCAL_C TInt GetVolume(TInt /*aDriveNumber*/,TDes& aName,TUint& aUniqueID)
//
// Return the volume name and uniqueID.
//
{
DP(_L("** (SVPHOSTMNT) GetVolume"));
aUniqueID=1234;
aName=(_L("SVPHOSTDRV"));
return(KErrNone);
}
void CanonicalizePathname(const TDesC& aName, TInt aDrive, TDes& n, THostFileName& aHostName)
{
DP(_L("** (SVPHOSTMNT) CanonicalizePathname (%S)"), &aName);
n += TDriveUnit(aDrive).Name();
n += aName;
TParse parse;
parse.Set(n,NULL,NULL);
n=parse.FullName();
aHostName.Copy(n);
DP(_L("-> (%S)"), &aHostName);
}
void CanonicalizePathname(const TDesC& aName, TInt aDrive, THostFileName& aHostName)
{
TUint16 buf[KMaxPath];
TPtr n(buf, KMaxPath);
CanonicalizePathname(aName, aDrive, n, aHostName);
}
//////////////////////////////////////////////////////////////////////////
// CSVPHostMountCB //
//////////////////////////////////////////////////////////////////////////
CSVPHostMountCB::CSVPHostMountCB()
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::CSVPHostMountCB()"));
__DECLARE_NAME(_S("CSVPHostMountCB"));
}
CSVPHostMountCB::~CSVPHostMountCB()
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::~CSVPHostMountCB()"));
iDevice.Close();
}
void CSVPHostMountCB::MountL(TBool /*aForceMount*/)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::MountL()"));
TInt err = iDevice.Open();
User::LeaveIfError(err);
TFileName driveName;
TInt d=Drive().DriveNumber();
iSize=HOST_SVP_DRIVE_SIZE;
User::LeaveIfError(GetVolume(d,driveName,iUniqueID));
HBufC* pN=driveName.AllocL();
DP(_L("** (SVPHOSTMNT) ->SetVolumeName()"));
SetVolumeName(pN);
DP(_L("** (SVPHOSTMNT) <-SetVolumeName()"));
}
TInt CSVPHostMountCB::ReMount()
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReMount()"));
TFileName n;
TInt d=Drive().DriveNumber();
TUint uniqueID;
TInt r=GetVolume(d,n,uniqueID);
if (r!=KErrNone)
return(r);
if (n==VolumeName() && uniqueID==iUniqueID)
return(KErrNone);
return(KErrGeneral);
}
void CSVPHostMountCB::Dismounted()
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::Dismounted()"));
}
void CSVPHostMountCB::VolumeL(TVolumeInfo& aVolume) const
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::VolumeL()"));
TInt64 s,f(0);
TFileName n;
TInt d=Drive().DriveNumber();
User::LeaveIfError(GetMediaSize(d,s,f));
aVolume.iFree=f;
}
void CSVPHostMountCB::SetVolumeL(TDes& /*aName*/)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::SetVolumeL()"));
User::Leave(KErrNotSupported);
}
void CSVPHostMountCB::IsFileInRom(const TDesC& /*aName*/,TUint8*& /*aFileStart*/)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::IsFileInRom()"));
}
void CSVPHostMountCB::MkDirL(const TDesC& aName)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::MkDirL()"));
TBuf<KMaxPath> name;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(aName, driveNumber, name);
TSVPHostFsMkDirInfo info(driveNumber, name, 0777);
User::LeaveIfError(SVP_HOST_FS_DEVICE().MkDir(info));
}
void CSVPHostMountCB::RmDirL(const TDesC& aName)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RmDirL()"));
TBuf<KMaxPath> name;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(aName, driveNumber, name);
TSVPHostFsRmDirInfo info(driveNumber, name);
User::LeaveIfError(SVP_HOST_FS_DEVICE().RmDir(info));
}
void CSVPHostMountCB::DeleteL(const TDesC& aName)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::DeleteL()"));
TBuf<KMaxPath> name;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(aName, driveNumber, name);
TSVPHostFsDeleteInfo info(driveNumber, name);
User::LeaveIfError(SVP_HOST_FS_DEVICE().Delete(info));
}
void CSVPHostMountCB::RenameL(const TDesC& anOldName,const TDesC& aNewName)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RenameL()"));
// TODO: do we allow renaming across drives?
TBuf<KMaxPath> oldName, newName;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(anOldName, driveNumber, oldName);
CanonicalizePathname(aNewName, driveNumber, newName);
TSVPHostFsRenameInfo info(driveNumber, oldName, newName);
User::LeaveIfError(SVP_HOST_FS_DEVICE().Rename(info));
}
void CSVPHostMountCB::ReplaceL(const TDesC& anOldName,const TDesC& aNewName)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReplaceL()"));
if(FileNamesIdentical(anOldName,aNewName))
{
return;
}
TBuf<KMaxPath> oldName, newName;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(anOldName, driveNumber, oldName);
CanonicalizePathname(aNewName, driveNumber, newName);
TSVPHostFsReplaceInfo info(driveNumber, oldName, newName);
User::LeaveIfError(SVP_HOST_FS_DEVICE().Replace(info));
}
void CSVPHostMountCB::ReadUidL(const TDesC& aName,TEntry& anEntry) const
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::ReadUidL()"));
TBuf<KMaxPath> name;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(aName, driveNumber, name);
TSVPHostFsFileOpenInfo fileOpenInfo(driveNumber, name,EFileRead,EFileOpen);
TInt err = SVP_HOST_FS_DEVICE().FileOpen(fileOpenInfo);
User::LeaveIfError(err);
TBuf8<sizeof(TCheckedUid)> uidBuf;
uidBuf.SetLength(sizeof(TCheckedUid));
TSVPHostFsFileReadInfo fileReadInfo(driveNumber, fileOpenInfo.iHandle,sizeof(TCheckedUid),0,(char*)uidBuf.Ptr());
if (KErrNone != SVP_HOST_FS_DEVICE().FileRead(fileReadInfo))
User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
DP(_L("** (SVPHOSTMNT) CSVPHostFileCB::ReadUidL sizeof(TCheckedUid) %d fileOpenInfo.iLength %d "), sizeof(TCheckedUid), fileReadInfo.iLength);
if (fileReadInfo.iLength!=sizeof(TCheckedUid))
User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
TCheckedUid uid(uidBuf);
anEntry.iType=uid.UidType();
User::LeaveIfError(SVP_HOST_FS_DEVICE().FileClose(driveNumber, fileOpenInfo.iHandle));
}
void CSVPHostMountCB::EntryL(const TDesC& aName,TEntry& anEntry) const
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::EntryL(%S)"), &aName);
TBuf<KMaxPath> name;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(aName, driveNumber, name);
TSVPHostFsEntryInfo info(driveNumber, name);
User::LeaveIfError(SVP_HOST_FS_DEVICE().Entry(info));
anEntry.iAtt=info.iAtt&KEntryAttMaskSupported;
anEntry.iSize=info.iSize;
fileTimeToTime(info.iModified,anEntry.iModified, info.iTimeType);
}
void timeToFileTime(TUint32& t,const TTime& aTime, TFileTimeType aType);
void CSVPHostMountCB::SetEntryL(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::SetEntryL()"));
//User::Leave(KErrNotSupported);
}
void CSVPHostMountCB::FileOpenL(const TDesC& aName,TUint aMode,TFileOpen anOpen,CFileCB* aFile)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::FileOpenL(%S)"), &aName);
CSVPHostFileCB& file=(*((CSVPHostFileCB*)aFile));
TBuf<KMaxPath> name;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(aName, driveNumber, name);
TSVPHostFsFileOpenInfo info(driveNumber, name,aMode,anOpen);
TInt err = SVP_HOST_FS_DEVICE().FileOpen(info);
User::LeaveIfError(err);
file.SetHandle(info.iHandle);
file.SetSize(info.iSize);
file.SetAtt(info.iAtt&KEntryAttMaskSupported);
TTime tempTime=file.Modified();
fileTimeToTime(info.iModified, tempTime, info.iTimeType);
file.SetModified(tempTime);
}
void CSVPHostMountCB::DirOpenL(const TDesC& aName ,CDirCB* aDir)
{
DP(_L("CFatMountCB::DirOpenL, drv:%d, %S"), DriveNumber(), &aName);
CSVPHostDirCB& dir=(*((CSVPHostDirCB*)aDir));
TBuf<KMaxPath> name;
TUint driveNumber = Drive().DriveNumber();
CanonicalizePathname(aName, driveNumber, name);
TSVPHostFsDirOpenInfo info(driveNumber, name);
TInt err = SVP_HOST_FS_DEVICE().DirOpen(info);
User::LeaveIfError(err);
dir.SetHandle(info.iHandle);
TFileName n(TDriveUnit(Drive().DriveNumber()).Name());
n.Append(aName);
dir.SetFullName(n);
}
void CSVPHostMountCB::RawReadL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aTrg*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/) const
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawReadL()"));
User::Leave(KErrNotSupported);
}
void CSVPHostMountCB::RawWriteL(TInt64 /*aPos*/,TInt /*aLength*/,const TAny* /*aSrc*/,TInt /*anOffset*/,const RMessagePtr2& /*aMessage*/)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawWriteL()"));
User::Leave(KErrNotSupported);
}
void CSVPHostMountCB::GetShortNameL(const TDesC& aLongName,TDes& aShortName)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::GetShortNameL(%S)"), &aLongName);
aShortName = aLongName;
}
void CSVPHostMountCB::GetLongNameL(const TDesC& aShortName,TDes& aLongName)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::GetLongNameL(%S)"), &aShortName);
aLongName = aShortName;
}
void CSVPHostMountCB::ReadSectionL(const TDesC& /*aName*/,TInt /*aPos*/,TAny* /*aTrg*/,TInt /*aLength*/,const RMessagePtr2& /*aMessage*/)
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::RawSectionL()"));
User::Leave(KErrNotSupported);
}
TBool CSVPHostMountCB::IsRomDrive() const
{
DP(_L("** (SVPHOSTMNT) CSVPHostMountCB::IsRomDrive()"));
return(EFalse);
}