kerneltest/f32test/shostmassstorage/msman/test/cblockdevicetester.cpp
changeset 297 b2826f67641f
parent 0 a41df078684a
equal deleted inserted replaced
296:94f2adf59133 297:b2826f67641f
     1 // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    18 #include <e32cmn.h>
    18 #include <e32cmn.h>
    19 #include <f32file.h>
    19 #include <f32file.h>
    20 #include <e32test.h>
    20 #include <e32test.h>
    21 #include <e32math.h>
    21 #include <e32math.h>
    22 
    22 
    23 #include "tmslog.h"
       
    24 #include "cblockdevicetester.h"
    23 #include "cblockdevicetester.h"
    25 
    24 
    26 extern RTest test;
    25 extern RTest test;
    27 extern RFs fsSession;
    26 extern RFs fsSession;
    28 
    27 
    36 _LIT8(KTxtTestConfig,       "C");
    35 _LIT8(KTxtTestConfig,       "C");
    37 
    36 
    38 
    37 
    39 void TLocalBuffer::Init()
    38 void TLocalBuffer::Init()
    40     {
    39     {
    41     __MSFNSLOG
       
    42     TInt64 rndSeed = 123456789;
    40     TInt64 rndSeed = 123456789;
    43 
    41 
    44     //-- initialize buffer with random rubbish
    42     //-- initialize buffer with random rubbish
    45     iBuffer.SetMax();
    43     iBuffer.SetMax();
    46     for (TInt i = 0; i < KSize; ++i)
    44     for (TInt i = 0; i < KSize; ++i)
    63 
    61 
    64 
    62 
    65 RTargetMedia::RTargetMedia(TInt aDriveNumber)
    63 RTargetMedia::RTargetMedia(TInt aDriveNumber)
    66 :   iDriveNumber(aDriveNumber)
    64 :   iDriveNumber(aDriveNumber)
    67     {
    65     {
    68     __MSFNSLOG
       
    69     }
    66     }
    70 
    67 
    71 
    68 
    72 void RTargetMedia::OpenL()
    69 void RTargetMedia::OpenL()
    73     {
    70     {
    74     __MSFNSLOG
       
    75     User::LeaveIfError(iRawDisk.Open(fsSession, iDriveNumber));
    71     User::LeaveIfError(iRawDisk.Open(fsSession, iDriveNumber));
    76     }
    72     }
    77 
    73 
    78 
    74 
    79 void RTargetMedia::Close()
    75 void RTargetMedia::Close()
    80     {
    76     {
    81     __MSFNSLOG
       
    82     iRawDisk.Close();
    77     iRawDisk.Close();
    83     }
    78     }
    84 
    79 
    85 
    80 
    86 TInt RTargetMedia::MediaRawWrite(TPos aPos, const TDesC8& aData)
    81 TInt RTargetMedia::MediaRawWrite(TPos aPos, const TDesC8& aData)
    87     {
    82     {
    88     __MSFNSLOG
       
    89     return iRawDisk.Write(aPos, (TDesC8&)aData);
    83     return iRawDisk.Write(aPos, (TDesC8&)aData);
    90     }
    84     }
    91 
    85 
    92 
    86 
    93 TInt RTargetMedia::MediaRawRead(TPos aPos, TUint32 aLen, TDes8& aData)
    87 TInt RTargetMedia::MediaRawRead(TPos aPos, TUint32 aLen, TDes8& aData)
    94     {
    88     {
    95     __MSFNSLOG
       
    96     aData.SetMax();
    89     aData.SetMax();
    97     TPtr8 ptr = aData.LeftTPtr(aLen);
    90     TPtr8 ptr = aData.LeftTPtr(aLen);
    98     TInt err = iRawDisk.Read(aPos, ptr);
    91     TInt err = iRawDisk.Read(aPos, ptr);
    99     aData.SetLength(aLen);
    92     aData.SetLength(aLen);
   100     return err;
    93     return err;
   106     {
    99     {
   107     }
   100     }
   108 
   101 
   109 TInt RTargetDrive::OpenTestAreaL(const TDesC8& aData)
   102 TInt RTargetDrive::OpenTestAreaL(const TDesC8& aData)
   110     {
   103     {
   111     __MSFNSLOG
       
   112     RTargetMedia::OpenL();
   104     RTargetMedia::OpenL();
   113     iStartLba = 0x20;
   105     iStartLba = 0x20;
   114 
   106 
   115     iSource.Set(aData);
   107     iSource.Set(aData);
   116     test.Printf(_L("Test area located @ LBA=%x\n"), iStartLba);
   108     test.Printf(_L("Test area located @ LBA=%x\n"), iStartLba);
   119     }
   111     }
   120 
   112 
   121 
   113 
   122 TInt RTargetDrive::Update(TInt aPos, TUint aLen)
   114 TInt RTargetDrive::Update(TInt aPos, TUint aLen)
   123     {
   115     {
   124     __MSFNSLOG
       
   125     TPtrC8 ptr = iSource.Mid(aPos, aLen);
   116     TPtrC8 ptr = iSource.Mid(aPos, aLen);
   126     TPos targetPos = TargetPos(aPos);
   117     TPos targetPos = TargetPos(aPos);
   127     return MediaRawWrite(targetPos, ptr);
   118     return MediaRawWrite(targetPos, ptr);
   128     }
   119     }
   129 
   120 
   130 
   121 
   131 TInt RTargetDrive::Verify()
   122 TInt RTargetDrive::Verify()
   132     {
   123     {
   133     __MSFNLOG
       
   134     TInt res = MediaRawRead(StartPos(), iSource.Length(), iTmpBuffer);
   124     TInt res = MediaRawRead(StartPos(), iSource.Length(), iTmpBuffer);
   135     if (res)
   125     if (res)
   136         return res;
   126         return res;
   137 
   127 
   138     res = iTmpBuffer.Compare(iSource);
   128     res = iTmpBuffer.Compare(iSource);
   139     return res == 0 ? KErrNone : KErrCorrupt;
   129     return res == 0 ? KErrNone : KErrCorrupt;
   140     }
   130     }
   141 
   131 
   142 TInt RTargetDrive::Verify(TInt aPos, TUint aLen)
   132 TInt RTargetDrive::Verify(TInt aPos, TUint aLen)
   143     {
   133     {
   144     __MSFNSLOG
       
   145     TPos pos = TargetPos(aPos);
   134     TPos pos = TargetPos(aPos);
   146     TInt res = MediaRawRead(pos, aLen, iTmpBuffer);
   135     TInt res = MediaRawRead(pos, aLen, iTmpBuffer);
   147     if (res)
   136     if (res)
   148         return res;
   137         return res;
   149 
   138 
   155     }
   144     }
   156 
   145 
   157 
   146 
   158 TInt RTargetDrive::VerifyBlock(TLba aLba, TLba aBlocks)
   147 TInt RTargetDrive::VerifyBlock(TLba aLba, TLba aBlocks)
   159     {
   148     {
   160     __MSFNSLOG
       
   161     return Verify(TLbaUtils::Pos(aLba), TLbaUtils::Length(aBlocks));
   149     return Verify(TLbaUtils::Pos(aLba), TLbaUtils::Length(aBlocks));
   162     }
   150     }
   163 
   151 
   164 
   152 
   165 _LIT(KTxtControlFile, "ControlFile.txt");
   153 _LIT(KTxtControlFile, "ControlFile.txt");
   166 static const TChar KFillChar = 'x';
   154 static const TChar KFillChar = 'x';
   167 
   155 
   168 TTargetTestArea::TTargetTestArea(RTargetMedia& aMedia)
   156 TTargetTestArea::TTargetTestArea(RTargetMedia& aMedia)
   169 :   iTargetMedia(aMedia)
   157 :   iTargetMedia(aMedia)
   170     {
   158     {
   171     __MSFNLOG
       
   172     }
   159     }
   173 
   160 
   174 void TTargetTestArea::CreateControlFile()
   161 void TTargetTestArea::CreateControlFile()
   175     {
   162     {
   176     __MSFNLOG
       
   177     iStartLba = -1;
   163     iStartLba = -1;
   178     static const TInt KBlockSize = 0x200;
   164     static const TInt KBlockSize = 0x200;
   179     static const TInt KFileSize = KBlockSize * 8;
   165     static const TInt KFileSize = KBlockSize * 8;
   180 
   166 
   181     RFile file;
   167     RFile file;
   194     }
   180     }
   195 
   181 
   196 
   182 
   197 void TTargetTestArea::RemoveControlFile()
   183 void TTargetTestArea::RemoveControlFile()
   198     {
   184     {
   199     __MSFNLOG
       
   200     TInt err = fsSession.Delete(KTxtControlFile);
   185     TInt err = fsSession.Delete(KTxtControlFile);
   201     test(err == KErrNone);
   186     test(err == KErrNone);
   202     }
   187     }
   203 
   188 
   204 
   189 
   205 void TTargetTestArea::FindBlockStartL()
   190 void TTargetTestArea::FindBlockStartL()
   206     {
   191     {
   207     __MSFNLOG
       
   208     iTargetMedia.OpenL();
   192     iTargetMedia.OpenL();
   209     // search for first block
   193     // search for first block
   210     TBuf8<KBlockSize> readBlock;
   194     TBuf8<KBlockSize> readBlock;
   211     TBuf8<KBlockSize> refBlock;
   195     TBuf8<KBlockSize> refBlock;
   212     refBlock.Fill(KFillChar, KBlockSize);
   196     refBlock.Fill(KFillChar, KBlockSize);
   235     }
   219     }
   236 
   220 
   237 
   221 
   238 TInt TTargetTestArea::WriteBlockL(TBuf8<KBlockSize>& aBlock)
   222 TInt TTargetTestArea::WriteBlockL(TBuf8<KBlockSize>& aBlock)
   239     {
   223     {
   240     __MSFNLOG
       
   241     iTargetMedia.OpenL();
   224     iTargetMedia.OpenL();
   242     TInt err = iTargetMedia.MediaRawWrite(iStartLba * KBlockSize, aBlock);
   225     TInt err = iTargetMedia.MediaRawWrite(iStartLba * KBlockSize, aBlock);
   243     iTargetMedia.Close();
   226     iTargetMedia.Close();
   244     return err;
   227     return err;
   245     }
   228     }
   246 
   229 
   247 
   230 
   248 TInt TTargetTestArea::ReadBlockL(TBuf8<KBlockSize>& aBlock)
   231 TInt TTargetTestArea::ReadBlockL(TBuf8<KBlockSize>& aBlock)
   249     {
   232     {
   250     __MSFNLOG
       
   251     iTargetMedia.OpenL();
   233     iTargetMedia.OpenL();
   252     TInt err = iTargetMedia.MediaRawRead(iStartLba * KBlockSize, KBlockSize, aBlock);
   234     TInt err = iTargetMedia.MediaRawRead(iStartLba * KBlockSize, KBlockSize, aBlock);
   253     iTargetMedia.Close();
   235     iTargetMedia.Close();
   254     return err;
   236     return err;
   255     }
   237     }
   256 
   238 
   257 
   239 
   258 RBlockTargetMedia::RBlockTargetMedia(TInt aDriveNumber)
   240 RBlockTargetMedia::RBlockTargetMedia(TInt aDriveNumber)
   259 :   RTargetMedia(aDriveNumber)
   241 :   RTargetMedia(aDriveNumber)
   260     {
   242     {
   261     __MSFNSLOG
       
   262     }
   243     }
   263 
   244 
   264 
   245 
   265 void RBlockTargetMedia::OpenL()
   246 void RBlockTargetMedia::OpenL()
   266     {
   247     {
   267     __MSFNSLOG
       
   268     RTargetMedia::OpenL();
   248     RTargetMedia::OpenL();
   269 
   249 
   270     TInt64 rndSeed = 123456789;
   250     TInt64 rndSeed = 123456789;
   271 
   251 
   272     //-- initialize buffer with random rubbish
   252     //-- initialize buffer with random rubbish
   278     }
   258     }
   279 
   259 
   280 
   260 
   281 TInt RBlockTargetMedia::WriteBlock(TLba aLba)
   261 TInt RBlockTargetMedia::WriteBlock(TLba aLba)
   282     {
   262     {
   283     __MSFNSLOG
       
   284     TPos pos = TLbaUtils::Pos(aLba);
   263     TPos pos = TLbaUtils::Pos(aLba);
   285     return iRawDisk.Write(pos, (TDesC8&)iBlockData);
   264     return iRawDisk.Write(pos, (TDesC8&)iBlockData);
   286     }
   265     }
   287 
   266 
   288 
   267 
   289 TInt RBlockTargetMedia::ReadBlock(TLba aLba)
   268 TInt RBlockTargetMedia::ReadBlock(TLba aLba)
   290     {
   269     {
   291     __MSFNSLOG
       
   292     TBuf8<KBlockSize> blockData;
   270     TBuf8<KBlockSize> blockData;
   293     TPos pos = TLbaUtils::Pos(aLba);
   271     TPos pos = TLbaUtils::Pos(aLba);
   294     blockData.SetMax();
   272     blockData.SetMax();
   295     TInt err = iRawDisk.Read(pos, blockData);
   273     TInt err = iRawDisk.Read(pos, blockData);
   296     return err;
   274     return err;
   297     }
   275     }
   298 
   276 
   299 
   277 
   300 CBlockDeviceTester* CBlockDeviceTester::NewL(TInt aDriveNumber)
   278 CBlockDeviceTester* CBlockDeviceTester::NewL(TInt aDriveNumber)
   301     {
   279     {
   302     __MSFNSLOG
   280     CBlockDeviceTester* r = new (ELeave) CBlockDeviceTester(aDriveNumber);
   303 	CBlockDeviceTester* r = new (ELeave) CBlockDeviceTester(aDriveNumber);
   281     CleanupStack::PushL(r);
   304 	CleanupStack::PushL(r);
   282 
   305 
   283     r->ConstructL();
   306 	r->ConstructL();
   284     CleanupStack::Pop();
   307 	CleanupStack::Pop();
   285     return r;
   308 	return r;
       
   309     }
   286     }
   310 
   287 
   311 
   288 
   312 void CBlockDeviceTester::ConstructL()
   289 void CBlockDeviceTester::ConstructL()
   313     {
   290     {
   314     __MSFNLOG
       
   315     TVolumeInfo volumeInfo;
   291     TVolumeInfo volumeInfo;
   316 
   292 
   317     User::LeaveIfError(fsSession.Volume(volumeInfo, iDriveNumber));
   293     User::LeaveIfError(fsSession.Volume(volumeInfo, iDriveNumber));
   318     test.Printf(_L("Drive=%d Size = %lx\n"), iDriveNumber, volumeInfo.iSize);
   294     test.Printf(_L("Drive=%d Size = %lx\n"), iDriveNumber, volumeInfo.iSize);
   319     iDriveSizeInBlocks = volumeInfo.iSize / KBlockSize;
   295     iDriveSizeInBlocks = volumeInfo.iSize / KBlockSize;
   324 
   300 
   325 CBlockDeviceTester::CBlockDeviceTester(TInt aDriveNumber)
   301 CBlockDeviceTester::CBlockDeviceTester(TInt aDriveNumber)
   326 :   iDriveNumber(aDriveNumber),
   302 :   iDriveNumber(aDriveNumber),
   327     iTargetDrive(aDriveNumber)
   303     iTargetDrive(aDriveNumber)
   328     {
   304     {
   329     __MSFNLOG
       
   330     }
   305     }
   331 
   306 
   332 
   307 
   333 CBlockDeviceTester::~CBlockDeviceTester()
   308 CBlockDeviceTester::~CBlockDeviceTester()
   334     {
   309     {
   335     __MSFNLOG
       
   336     iTargetDrive.Close();
   310     iTargetDrive.Close();
   337     }
   311     }
   338 
   312 
   339 
   313 
   340 void CBlockDeviceTester::OpenDriveL()
   314 void CBlockDeviceTester::OpenDriveL()
   349 
   323 
   350 
   324 
   351 
   325 
   352 TInt CBlockDeviceTester::VerifyDrive()
   326 TInt CBlockDeviceTester::VerifyDrive()
   353     {
   327     {
   354     __MSFNLOG
       
   355     return iTargetDrive.Verify();
   328     return iTargetDrive.Verify();
   356     }
   329     }
   357 
   330 
   358 
   331 
   359 TInt CBlockDeviceTester::Update(TPos aPos, TUint aLen)
   332 TInt CBlockDeviceTester::Update(TPos aPos, TUint aLen)
   360     {
   333     {
   361     __MSFNLOG
       
   362     iLocalBuffer.Update(aPos, aLen);
   334     iLocalBuffer.Update(aPos, aLen);
   363     return iTargetDrive.Update(aPos, aLen);
   335     return iTargetDrive.Update(aPos, aLen);
   364     }
   336     }
   365 
   337 
   366 
   338 
   367 TInt CBlockDeviceTester::UpdateBlock(TLba aLba, TLba aBlocks)
   339 TInt CBlockDeviceTester::UpdateBlock(TLba aLba, TLba aBlocks)
   368     {
   340     {
   369     __MSFNLOG
       
   370     return Update(TLbaUtils::Pos(aLba), TLbaUtils::Length(aBlocks));
   341     return Update(TLbaUtils::Pos(aLba), TLbaUtils::Length(aBlocks));
   371     }
   342     }
   372 
   343 
   373 
   344 
   374 TInt CBlockDeviceTester::Verify(TPos aPos, TUint aLen)
   345 TInt CBlockDeviceTester::Verify(TPos aPos, TUint aLen)
   375     {
   346     {
   376     __MSFNLOG
       
   377     return iTargetDrive.Verify(aPos, aLen);
   347     return iTargetDrive.Verify(aPos, aLen);
   378     }
   348     }
   379 
   349 
   380 TInt CBlockDeviceTester::VerifyBlock(TLba aLba, TLba aBlocks)
   350 TInt CBlockDeviceTester::VerifyBlock(TLba aLba, TLba aBlocks)
   381     {
   351     {
   382     __MSFNLOG
       
   383     return iTargetDrive.VerifyBlock(aLba, aBlocks);
   352     return iTargetDrive.VerifyBlock(aLba, aBlocks);
   384     }
   353     }
   385 
   354 
   386 /**
   355 /**
   387  * CBotTester
   356  * CBotTester
   388  */
   357  */
   389 CBotTester* CBotTester::NewL(TInt aDriveNumber)
   358 CBotTester* CBotTester::NewL(TInt aDriveNumber)
   390     {
   359     {
   391     __MSFNSLOG
   360     CBotTester* r = new (ELeave) CBotTester(aDriveNumber);
   392 	CBotTester* r = new (ELeave) CBotTester(aDriveNumber);
   361     CleanupStack::PushL(r);
   393 	CleanupStack::PushL(r);
   362 
   394 
   363     r->ConstructL();
   395 	r->ConstructL();
   364     CleanupStack::Pop();
   396 	CleanupStack::Pop();
   365     return r;
   397 	return r;
       
   398     }
   366     }
   399 
   367 
   400 
   368 
   401 void CBotTester::ConstructL()
   369 void CBotTester::ConstructL()
   402     {
   370     {
   403     __MSFNLOG
       
   404 
   371 
   405     CBlockDeviceTester::ConstructL();
   372     CBlockDeviceTester::ConstructL();
   406 
   373 
   407     iCmdBuffer.Append(KTxtTestCaseOutPreamble);
   374     iCmdBuffer.Append(KTxtTestCaseOutPreamble);
   408     iCmdBuffer.Append(KTxtTestCase);
   375     iCmdBuffer.Append(KTxtTestCase);
   419 
   386 
   420 
   387 
   421 CBotTester::CBotTester(TInt aDriveNumber)
   388 CBotTester::CBotTester(TInt aDriveNumber)
   422 :   CBlockDeviceTester(aDriveNumber)
   389 :   CBlockDeviceTester(aDriveNumber)
   423     {
   390     {
   424     __MSFNLOG
       
   425     }
   391     }
   426 
   392 
   427 
   393 
   428 CBotTester::~CBotTester()
   394 CBotTester::~CBotTester()
   429     {
   395     {
   430     __MSFNLOG
       
   431     iTargetDrive.Close();
   396     iTargetDrive.Close();
   432     }
   397     }
   433 
   398 
   434 
   399 
   435 TInt CBotTester::SetTest(TTestCase aTestCase)
   400 TInt CBotTester::SetTest(TTestCase aTestCase)
   436     {
   401     {
   437     __MSFNLOG
       
   438     iCmdBuffer[KTestCaseDataOffset] = static_cast<TUint8>(aTestCase);
   402     iCmdBuffer[KTestCaseDataOffset] = static_cast<TUint8>(aTestCase);
   439 
   403 
   440     TPos pos = KSetTestPos;
   404     TPos pos = KSetTestPos;
   441     return iTargetDrive.MediaRawWrite(pos, iCmdBuffer);
   405     return iTargetDrive.MediaRawWrite(pos, iCmdBuffer);
   442     }
   406     }
   443 
   407 
   444 
   408 
   445 TInt CBotTester::WriteEnableFile()
   409 TInt CBotTester::WriteEnableFile()
   446     {
   410     {
   447     __MSFNLOG
       
   448     TPos pos = KWriteEnableFilePos;
   411     TPos pos = KWriteEnableFilePos;
   449     return iTargetDrive.MediaRawWrite(pos, iOutEnableBuffer);
   412     return iTargetDrive.MediaRawWrite(pos, iOutEnableBuffer);
   450     }
   413     }
   451 
   414 
   452 
   415 
   453 TInt CBotTester::InitReadEnableFile()
   416 TInt CBotTester::InitReadEnableFile()
   454     {
   417     {
   455     __MSFNLOG
       
   456     TPos pos = KReadEnableFilePos;
   418     TPos pos = KReadEnableFilePos;
   457     return iTargetDrive.MediaRawWrite(pos, iInEnableBuffer);
   419     return iTargetDrive.MediaRawWrite(pos, iInEnableBuffer);
   458     }
   420     }
   459 
   421 
   460 
   422 
   461 TInt CBotTester::ReadEnableFile()
   423 TInt CBotTester::ReadEnableFile()
   462     {
   424     {
   463     __MSFNLOG
       
   464     TBuf8<KInEnableBufferSize> readBuf(KInEnableBufferSize);
   425     TBuf8<KInEnableBufferSize> readBuf(KInEnableBufferSize);
   465     TPos pos = KReadEnableFilePos;
   426     TPos pos = KReadEnableFilePos;
   466     return iTargetDrive.MediaRawRead(pos, readBuf.Size(), readBuf);
   427     return iTargetDrive.MediaRawRead(pos, readBuf.Size(), readBuf);
   467     }
   428     }
   468 
   429 
   470 /**
   431 /**
   471  * CSbcErrTester
   432  * CSbcErrTester
   472  */
   433  */
   473 CSbcErrTester* CSbcErrTester::NewL(TInt aDriveNumber)
   434 CSbcErrTester* CSbcErrTester::NewL(TInt aDriveNumber)
   474     {
   435     {
   475     __MSFNSLOG
   436     CSbcErrTester* r = new (ELeave) CSbcErrTester(aDriveNumber);
   476 	CSbcErrTester* r = new (ELeave) CSbcErrTester(aDriveNumber);
   437     CleanupStack::PushL(r);
   477 	CleanupStack::PushL(r);
   438 
   478 
   439     r->ConstructL();
   479 	r->ConstructL();
   440     CleanupStack::Pop();
   480 	CleanupStack::Pop();
   441     return r;
   481 	return r;
       
   482     }
   442     }
   483 
   443 
   484 
   444 
   485 void CSbcErrTester::ConstructL()
   445 void CSbcErrTester::ConstructL()
   486     {
   446     {
   487     __MSFNLOG
       
   488 
       
   489     CBlockDeviceTester::ConstructL();
   447     CBlockDeviceTester::ConstructL();
   490 
   448 
   491     iCmdBuffer.Append(KTxtTestCaseOutPreamble);
   449     iCmdBuffer.Append(KTxtTestCaseOutPreamble);
   492     iCmdBuffer.Append(KTxtTestCase);
   450     iCmdBuffer.Append(KTxtTestCase);
   493     iCmdBuffer.AppendFill('t', iCmdBuffer.MaxLength() - iCmdBuffer.Length());
   451     iCmdBuffer.AppendFill('t', iCmdBuffer.MaxLength() - iCmdBuffer.Length());
   503 
   461 
   504 
   462 
   505 CSbcErrTester::CSbcErrTester(TInt aDriveNumber)
   463 CSbcErrTester::CSbcErrTester(TInt aDriveNumber)
   506 :   CBlockDeviceTester(aDriveNumber)
   464 :   CBlockDeviceTester(aDriveNumber)
   507     {
   465     {
   508     __MSFNLOG
       
   509     }
   466     }
   510 
   467 
   511 
   468 
   512 CSbcErrTester::~CSbcErrTester()
   469 CSbcErrTester::~CSbcErrTester()
   513     {
   470     {
   514     __MSFNLOG
       
   515     iTargetDrive.Close();
   471     iTargetDrive.Close();
   516     }
   472     }
   517 
   473 
   518 
   474 
   519 TInt CSbcErrTester::WriteTestFile()
   475 TInt CSbcErrTester::WriteTestFile()
   520     {
   476     {
   521     __MSFNLOG
       
   522     TPos pos = KWriteTestFilePos;
   477     TPos pos = KWriteTestFilePos;
   523     return iTargetDrive.MediaRawWrite(pos, iEnableBuffer);
   478     return iTargetDrive.MediaRawWrite(pos, iEnableBuffer);
   524     }
   479     }
   525 
   480 
   526 
   481 
   527 TInt CSbcErrTester::ReadTestFile()
   482 TInt CSbcErrTester::ReadTestFile()
   528     {
   483     {
   529     __MSFNLOG
       
   530     TBuf8<KEnableBufferSize> readBuf(KEnableBufferSize);
   484     TBuf8<KEnableBufferSize> readBuf(KEnableBufferSize);
   531     TPos pos = KReadTestFilePos;
   485     TPos pos = KReadTestFilePos;
   532     TInt err = iTargetDrive.MediaRawRead(pos, readBuf.Size(), readBuf);
   486     TInt err = iTargetDrive.MediaRawRead(pos, readBuf.Size(), readBuf);
   533     return err;
   487     return err;
   534     }
   488     }
   535 
   489 
   536 
   490 
   537 TInt CSbcErrTester::WriteSenseErrorFile(TTestSenseError aTestSenseError)
   491 TInt CSbcErrTester::WriteSenseErrorFile(TTestSenseError aTestSenseError)
   538     {
   492     {
   539     __MSFNLOG
       
   540     iSenseErrorBuffer[KTestCaseDataOffset] = static_cast<TUint8>(aTestSenseError);
   493     iSenseErrorBuffer[KTestCaseDataOffset] = static_cast<TUint8>(aTestSenseError);
   541     TPos pos = KSenseErrorFile;
   494     TPos pos = KSenseErrorFile;
   542     return iTargetDrive.MediaRawWrite(pos, iSenseErrorBuffer);
   495     return iTargetDrive.MediaRawWrite(pos, iSenseErrorBuffer);
   543     }
   496     }
   544 
   497 
   545 
   498 
   546 CWrPrTester* CWrPrTester::NewL(TInt aDriveNumber)
   499 CWrPrTester* CWrPrTester::NewL(TInt aDriveNumber)
   547     {
   500     {
   548     __MSFNSLOG
   501     CWrPrTester* r = new (ELeave) CWrPrTester(aDriveNumber);
   549 	CWrPrTester* r = new (ELeave) CWrPrTester(aDriveNumber);
   502     CleanupStack::PushL(r);
   550 	CleanupStack::PushL(r);
   503     r->ConstructL();
   551 	r->ConstructL();
   504     CleanupStack::Pop();
   552 	CleanupStack::Pop();
   505     return r;
   553 	return r;
       
   554     }
   506     }
   555 
   507 
   556 
   508 
   557 void CWrPrTester::ConstructL()
   509 void CWrPrTester::ConstructL()
   558     {
   510     {
   559     __MSFNLOG
       
   560     iCmdBuffer.Append(KTxtTestCaseOutPreamble);
   511     iCmdBuffer.Append(KTxtTestCaseOutPreamble);
   561     iCmdBuffer.Append(KTxtTestConfig);
   512     iCmdBuffer.Append(KTxtTestConfig);
   562     iCmdBuffer.AppendFill('c', iCmdBuffer.MaxLength() - iCmdBuffer.Length());
   513     iCmdBuffer.AppendFill('c', iCmdBuffer.MaxLength() - iCmdBuffer.Length());
   563 
   514 
   564     iInCmdBuffer.Append(KTxtTestCaseInPreamble);
   515     iInCmdBuffer.Append(KTxtTestCaseInPreamble);
   572 
   523 
   573 CWrPrTester::CWrPrTester(TInt aDriveNumber)
   524 CWrPrTester::CWrPrTester(TInt aDriveNumber)
   574 :   iTargetMedia(aDriveNumber),
   525 :   iTargetMedia(aDriveNumber),
   575     iTargetTestArea(iTargetMedia)
   526     iTargetTestArea(iTargetMedia)
   576     {
   527     {
   577     __MSFNLOG
       
   578     }
   528     }
   579 
   529 
   580 
   530 
   581 CWrPrTester::~CWrPrTester()
   531 CWrPrTester::~CWrPrTester()
   582     {
   532     {
   583     __MSFNLOG
       
   584     iTargetTestArea.RemoveControlFile();
   533     iTargetTestArea.RemoveControlFile();
   585     }
   534     }
   586 
   535 
   587 
   536 
   588 void CWrPrTester::SetWriteProtectL()
   537 void CWrPrTester::SetWriteProtectL()
   589     {
   538     {
   590     __MSFNLOG
       
   591     // first write WrPr CLR Control block to media to enable setting to be
   539     // first write WrPr CLR Control block to media to enable setting to be
   592     // cleared
   540     // cleared
   593     iInCmdBuffer[KTestCaseDataOffset] = ETestConfigMediaWpClr;
   541     iInCmdBuffer[KTestCaseDataOffset] = ETestConfigMediaWpClr;
   594     TInt err = iTargetTestArea.WriteBlockL(iInCmdBuffer);
   542     TInt err = iTargetTestArea.WriteBlockL(iInCmdBuffer);
   595     User::LeaveIfError(err);
   543     User::LeaveIfError(err);
   603     }
   551     }
   604 
   552 
   605 
   553 
   606 void CWrPrTester::ClrWriteProtectL()
   554 void CWrPrTester::ClrWriteProtectL()
   607     {
   555     {
   608     __MSFNLOG
       
   609     test.Printf(_L("Clearing WRITE PROTECT"));
   556     test.Printf(_L("Clearing WRITE PROTECT"));
   610     TInt err = KErrNone;
   557     TInt err = KErrNone;
   611     // Write protect so read the control file from the drive
   558     // Write protect so read the control file from the drive
   612     TBuf8<KCmdBufferSize> buffer;
   559     TBuf8<KCmdBufferSize> buffer;
   613     buffer.SetLength(KCmdBufferSize);
   560     buffer.SetLength(KCmdBufferSize);
   621     }
   568     }
   622 
   569 
   623 
   570 
   624 TInt CWrPrTester::SetRemovableL()
   571 TInt CWrPrTester::SetRemovableL()
   625     {
   572     {
   626     __MSFNLOG
       
   627     iCmdBuffer[KTestCaseDataOffset] = ETestConfigMediaRmbSet;
   573     iCmdBuffer[KTestCaseDataOffset] = ETestConfigMediaRmbSet;
   628     iTargetMedia.OpenL();
   574     iTargetMedia.OpenL();
   629     TInt err = iTargetMedia.MediaRawWrite(KCmdPos, iCmdBuffer);
   575     TInt err = iTargetMedia.MediaRawWrite(KCmdPos, iCmdBuffer);
   630     iTargetMedia.Close();
   576     iTargetMedia.Close();
   631     return err;
   577     return err;
   632     }
   578     }
   633 
   579 
   634 TInt CWrPrTester::ClrRemovableL()
   580 TInt CWrPrTester::ClrRemovableL()
   635     {
   581     {
   636     __MSFNLOG
       
   637     iCmdBuffer[KTestCaseDataOffset] = ETestConfigMediaRmbClr;
   582     iCmdBuffer[KTestCaseDataOffset] = ETestConfigMediaRmbClr;
   638     iTargetMedia.OpenL();
   583     iTargetMedia.OpenL();
   639     TInt err = iTargetMedia.MediaRawWrite(KCmdPos, iCmdBuffer);
   584     TInt err = iTargetMedia.MediaRawWrite(KCmdPos, iCmdBuffer);
   640     iTargetMedia.Close();
   585     iTargetMedia.Close();
   641     return err;
   586     return err;
   642     }
   587     }
   643 
   588 
   644 
   589 
   645 TInt CWrPrTester::WriteReadTestL()
   590 TInt CWrPrTester::WriteReadTestL()
   646     {
   591     {
   647     __MSFNLOG
       
   648     TInt err = KErrNone;
   592     TInt err = KErrNone;
   649     TBuf8<KCmdBufferSize> wrBuffer;
   593     TBuf8<KCmdBufferSize> wrBuffer;
   650 
   594 
   651     wrBuffer.SetMax();
   595     wrBuffer.SetMax();
   652     for (TInt i = 0; i < KCmdBufferSize; i++)
   596     for (TInt i = 0; i < KCmdBufferSize; i++)