diff -r 000000000000 -r a41df078684a kerneltest/e32test/pccd/d_medt1.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/pccd/d_medt1.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,266 @@ +// Copyright (c) 1998-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: +// e32test\pccd\d_medt1.cpp +// +// + +#if defined(_UNICODE) +#if !defined(UNICODE) +#define UNICODE +#endif +#endif +#include +const TInt KTestDriverBufferMaxSize=0x1000; // 4K + +class DPhysicalDeviceMediaTest : public DPhysicalDeviceMedia + { +public: + DPhysicalDeviceMediaTest(); + virtual TInt Install(); + virtual TInt Remove(); + virtual void GetCaps(TDes8 &aDes) const; + virtual CBase *CreateL(TInt aDevice,const TDesC *anInfo,const TVersion &aVer); + virtual TInt Priority(); + }; + +class DMediaDriverTest : public DMediaDriver + { +public: + DMediaDriverTest(); + TInt DoCreate(TMediaDevice aMediaDevice); + void DoRead(TInt64 &aPos,TInt aLength,TMediaDrvDescData &aTrg); + void DoWrite(TInt64 &aPos,TInt aLength,TMediaDrvDescData &aSrc); + void DoFormat(TInt64 &aPos,TInt aLength); + TInt Enlarge(TInt aLength); + TInt ReduceSize(TInt64 &aPos,TInt aLength); + void Close(); + TInt PartitionInfo(TPartitionInfo &anInfo); + void Caps(TDes8& aCapsBuf); +private: + static void WriteCompleteCallBack(TAny *aMediaDriver,TInt aDelay); + static void FormatCompleteCallBack(TAny *aMediaDriver,TInt aDelay); +private: + TUint8 iBuf[KTestDriverBufferMaxSize]; + TTickLink iWriteTickLink; + TTickLink iFormatTickLink; + }; + +DPhysicalDeviceMediaTest::DPhysicalDeviceMediaTest() +// +// Constructor +// + { + iUnitsMask=0x1; // Support only one + iVersion=TVersion(KMediaDriverInterfaceMajorVersionNumber,KMediaDriverInterfaceMinorVersionNumber,KMediaDriverInterfaceBuildVersionNumber); + } + +TInt DPhysicalDeviceMediaTest::Install() +// +// Install the test Media PDD. +// + { + + TPtrC name=_L("Media.Tst1"); + return(SetName(&name)); + } + +TInt DPhysicalDeviceMediaTest::Remove() +// +// Remove the test Media PDD. +// + { + return(KErrNone); + } + +void DPhysicalDeviceMediaTest::GetCaps(TDes8 &/* aDes */) const +// +// Return the media drivers capabilities. +// + { + } + +CBase *DPhysicalDeviceMediaTest::CreateL(TInt aDevice,const TDesC * /* anInfo */,const TVersion &aVer) +// +// Create a test media driver. +// + { + if (User::QueryVersionSupported(iVersion,aVer)==EFalse) + User::Leave(KErrNotSupported); + DMediaDriverTest *mD=new(ELeave) DMediaDriverTest; + TInt ret=mD->DoCreate((TMediaDevice)aDevice); + if (ret!=KErrNone) + { + delete mD; + User::Leave(ret); + } + return(mD); + } + +TInt DPhysicalDeviceMediaTest::Priority() +// +// Return the priority of this media driver +// + { + + return(KMediaDriverPriorityLow); + } + +DMediaDriverTest::DMediaDriverTest() +// +// Constructor. +// + { + +// Mem::FillZ(&iBuf[0],sizeof(iBuf)); + } + +TInt DMediaDriverTest::DoCreate(TMediaDevice aMediaDevice) +// +// Create the media driver. +// + { + + if (!__IS_REMOVABLE(aMediaDevice)) + return(KErrNotSupported); + SetTotalSizeInBytes(KTestDriverBufferMaxSize); + return(KErrNone); + } + +void DMediaDriverTest::DoRead(TInt64 &aPos,TInt aLength,TMediaDrvDescData &aTrg) +// +// Read from specified area of media. +// + { + + TInt ret=KErrNone; + if (!aTrg.IsCurrentThread()) + ret=KErrGeneral; + else + { + if ((ret=aTrg.CurrentThreadDescCheck(aLength))==KErrNone) + { + TDes8 &t=*((TDes8*)aTrg.iPtr); + Mem::Copy((TAny*)(t.Ptr()+aTrg.iOffset),&iBuf[aPos.Low()],aLength); + t.SetLength(aLength+aTrg.iOffset); + } + } + Complete(KMediaDrvReadReq,ret); + } + +const TInt KWriteAsyncTime=100000; // 100mS +void DMediaDriverTest::DoWrite(TInt64 &aPos,TInt aLength,TMediaDrvDescData &aSrc) +// +// Write to specifed area of media. +// + { + + if (!aSrc.IsCurrentThread()) + Complete(KMediaDrvWriteReq,KErrGeneral); + else + { + Mem::Copy(&iBuf[aPos.Low()],((TDesC8*)aSrc.iPtr)->Ptr()+aSrc.iOffset,aLength); + iWriteTickLink.OneShotInMicroSeconds(KWriteAsyncTime,DMediaDriverTest::WriteCompleteCallBack,this); + } + } + +const TInt KFormatAsyncTime=5000000; // 5S +void DMediaDriverTest::DoFormat(TInt64 &aPos,TInt aLength) +// +// Format the specified area of the media. +// + { + + Mem::Fill(&iBuf[aPos.Low()],aLength,0xFF); + iFormatTickLink.OneShotInMicroSeconds(KFormatAsyncTime,DMediaDriverTest::FormatCompleteCallBack,this); + } + +TInt DMediaDriverTest::Enlarge(TInt /*aLength*/) +// +// Enlarge the drive +// + { + + return(KErrNotSupported); + } + +TInt DMediaDriverTest::ReduceSize(TInt64& /*aPos*/,TInt /*aLength*/) +// +// Reduce in size the drive +// + { + + return(KErrNotSupported); + } + +void DMediaDriverTest::Close() +// +// Close the media driver +// + {} + +TInt DMediaDriverTest::PartitionInfo(TPartitionInfo &anInfo) +// +// Return partition information on the media. +// + { + + anInfo.iPartitionCount=1; + anInfo.iEntry[0].iPartitionBaseAddr=0; + anInfo.iEntry[0].iPartitionLen=anInfo.iMediaSizeInBytes=TotalSizeInBytes(); + return(KErrNone); + } + +void DMediaDriverTest::Caps(TDes8& aCapsBuf) +// +// Return the capabilities of the media + { + + TLocalDriveCapsV2 caps; + caps.iType=EMediaRam; + caps.iBattery=EBatNotSupported; + caps.iDriveAtt=KDriveAttLocal|KDriveAttRemovable; + caps.iMediaAtt=KMediaAttFormattable; + caps.iFileSystemId=KDriveFileSysFAT; + caps.iHiddenSectors=0; + aCapsBuf.FillZ(aCapsBuf.MaxLength()); + aCapsBuf.Copy((TUint8 *)&caps,Min(aCapsBuf.MaxLength(),sizeof(caps))); + } + +void DMediaDriverTest::WriteCompleteCallBack(TAny *aMediaDriver,TInt /*aDelay*/) +// +// Complete a write request +// + { + + DMediaDriverTest &md=*(DMediaDriverTest*)aMediaDriver; + md.Complete(KMediaDrvWriteReq,KErrNone); + return; + } + +void DMediaDriverTest::FormatCompleteCallBack(TAny *aMediaDriver,TInt /*aDelay*/) +// +// Complete a format request +// + { + + DMediaDriverTest &md=*(DMediaDriverTest*)aMediaDriver; + md.Complete(KMediaDrvFormatReq,KErrNone); + return; + } + +DECLARE_STANDARD_PDD() + { + return(new DPhysicalDeviceMediaTest); + } +