diff -r 345b1ca54e88 -r 039a3e647356 kerneltest/e32test/mediaext/t_nfe.cpp --- a/kerneltest/e32test/mediaext/t_nfe.cpp Wed Sep 15 13:42:27 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,406 +0,0 @@ -// Copyright (c) 1995-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\mediext\t_nfe.cpp -// -// - -#define __E32TEST_EXTENSION__ - -#include -#include - - -RTest test(_L("t_nfe")); - -#include -#include -#include "nfe.h" - - -TBusLocalDrive Drive; -TBool TheWaitFlag = EFalse; // wait for drive to be encrypted before exiting test -TBool TheFinaliseDriveFlag = EFalse; -TBool TheDisplayStatusFlag = EFalse; // display drive status and then exit (i.e. don't encrypt) -TBool TheEncryptDriveFlag = ETrue; - -TInt FindNfeDrive(TInt aDriveNum) -/** -Find the next NFE drive - -@return Local drive identifier. -*/ - { - TInt drive = KErrNotFound; - -// test.Printf(_L("Searching for NFE drive:\n")); - - for (TInt i = aDriveNum; i < KMaxLocalDrives && drive < 0; ++i) - { - RLocalDrive d; - TBool change = EFalse; - - if(d.Connect(i, change) == KErrNone) - { -// test.Printf(_L("Connected to local drive %d\n"), i); - TLocalDriveCapsV4 dc; - TPckg capsPack(dc); - capsPack.FillZ(); - - if(d.Caps(capsPack) != KErrNone) - continue; - if (dc.iType == EMediaNANDFlash || dc.iType == EMediaHardDisk) - { - TNfeDeviceInfo nfeDeviceInfo; - TPtr8 nfeDeviceInfoBuf((TUint8*) &nfeDeviceInfo, sizeof(nfeDeviceInfo)); - nfeDeviceInfoBuf.FillZ(); - - TInt r = d.QueryDevice((RLocalDrive::TQueryDevice) EQueryNfeDeviceInfo, nfeDeviceInfoBuf); - -// test.Printf(_L("EQueryNfeDeviceInfo on local drive %d returned %d\n"), i, r); - if (r == KErrNone) - { - test.Printf(_L("\nFound NFE on local drive %d\n"), i); - drive = i; - } - } - d.Close(); - } - } - return drive; - } - - - -const TDesC* DriveStatus(TNfeDiskStatus aStatus) - { - _LIT(KNfeUnmounted, "Unmounted"); - _LIT(KNfeDecrypted, "Decrypted"); - _LIT(KNfeDecrypting, "Decrypting"); - _LIT(KNfeEncrypted, "Encrypted"); - _LIT(KNfeEncrypting, "Encrypting"); - _LIT(KNfeWiping, "Wiping"); - _LIT(KNfeCorrupted, "Corrupted"); - _LIT(KNfeUnrecognised, "Unrecognised"); - - switch(aStatus) - { - case ENfeUnmounted: - return &KNfeUnmounted; - case ENfeDecrypted: - return &KNfeDecrypted; - case ENfeDecrypting: - return &KNfeDecrypting; - case ENfeEncrypted: - return &KNfeEncrypted; - case ENfeEncrypting: - return &KNfeEncrypting; - case ENfeWiping: - return &KNfeWiping; - case ENfeCorrupted: - return &KNfeCorrupted; - default: - return &KNfeUnrecognised; - - } - } - -TInt DriveStatus(TInt aNfeDrive, TNfeDiskStatus& aStatus, TInt &aProgress) - { - TInt r = RProperty::Get( - KNfeUID, - NFE_KEY(aNfeDrive, KNfeStatusToUiKey), - *(TInt*) &aStatus); - if (r != KErrNone) - return r; - r = RProperty::Get( - KNfeUID, - NFE_KEY(aNfeDrive, KNfeProgressToUiKey), - *(TInt*) &aProgress); - return r; - } - -void DisplayNfeDeviceInfo(TInt aNfeDrive, TNfeDeviceInfo& aDeviceInfo) - { - test.Printf(_L("Stats: \n")); - - RLocalDrive d; - TBool change = EFalse; - TInt r = d.Connect(aNfeDrive, change); - test (r == KErrNone); - - TPtr8 nfeDeviceInfoBuf((TUint8*) &aDeviceInfo, sizeof(aDeviceInfo)); - nfeDeviceInfoBuf.FillZ(); - r = d.QueryDevice((RLocalDrive::TQueryDevice) EQueryNfeDeviceInfo, nfeDeviceInfoBuf); - test (r == KErrNone || r == KErrNotSupported); - - d.Close(); - - test.Printf(_L("iDriveCount %d\n"), aDeviceInfo.iDriveCount); - test.Printf(_L("iMediaSizeInBytes %lx\n"), aDeviceInfo.iMediaSizeInBytes); - - for (TInt i=0; i= 0 && di.iDriveLetter <= 25 ? di.iDriveLetter +'A' : '?'); - test.Printf(_L("iState %d\n"), di.Status()); - - test.Printf(_L("State = %S\n"), DriveStatus(di.Status())); - - test.Printf(_L("iEncryptStartPos %lx\n"), di.iEncryptStartPos); - test.Printf(_L("iEncryptEndPos %lx\n"), di.iEncryptEndPos); - test.Printf(_L("iPartitionBaseAddr %lx\n"), di.iEntry.iPartitionBaseAddr); - test.Printf(_L("iPartitionLen %lx\n"), di.iEntry.iPartitionLen); - test.Printf(_L("iPartitionType %x\n"), di.iEntry.iPartitionType); - - test.Printf(_L("iReadRequestCount %d\n"), di.iReadRequestCount); - test.Printf(_L("iWriteRequestCount %d\n"), di.iWriteRequestCount); - test.Printf(_L("iCodePagingRequesCount %d\n"), di.iCodePagingRequesCount); - test.Printf(_L("iDataPagingReadRequestCount %d\n"), di.iDataPagingReadRequestCount); - test.Printf(_L("iDataPagingWriteRequestCount %d\n"), di.iDataPagingWriteRequestCount); - test.Printf(_L("iUniqueID %08X\n"), di.iUniqueID); - } - } - -void EncryptDrive(TInt aNfeDrive) - { - // subscribe to cmd acknowledgement property - KNfeToUiKey - RProperty propToUi; - test.Printf(_L("Attaching ToUi property")); - TInt r = propToUi.Attach(KNfeUID,NFE_KEY(aNfeDrive,KNfeToUiKey)); - test.Printf(_L("Attaching returned %d"), r); - if (r != KErrNone) - return; - - - TRequestStatus status; - propToUi.Subscribe( status ); - - - // Issue command - test.Printf(_L("Encrypting drive %c...\n"), aNfeDrive+'A'); - r = RProperty::Set( - KNfeUID, - NFE_KEY(aNfeDrive, KNfeToThreadKey), - ENfeEncryptDisk); - test.Printf(_L("Encrypting drive %c, r %d\n"), aNfeDrive+'A', r); - test (r == KErrNone); - - // wait for ack - User::WaitForRequest( status ); - r = status.Int(); - test.Printf(_L("cmd status %d"), r); - test (r == KErrNone); - } - -void DecryptDrive(TInt aNfeDrive) - { - // subscribe to cmd acknowledgement property - KNfeToUiKey - RProperty propToUi; - test.Printf(_L("Attaching ToUi property")); - TInt r = propToUi.Attach(KNfeUID,NFE_KEY(aNfeDrive,KNfeToUiKey)); - test.Printf(_L("Attaching returned %d"), r); - if (r != KErrNone) - return; - - - TRequestStatus status; - propToUi.Subscribe( status ); - - - // Issue command - test.Printf(_L("Decrypting drive %c...\n"), aNfeDrive+'A'); - r = RProperty::Set( - KNfeUID, - NFE_KEY(aNfeDrive, KNfeToThreadKey), - ENfeDecryptDisk); - test.Printf(_L("Decrypting drive %c, r %d\n"), aNfeDrive+'A', r); - test (r == KErrNone); - - // wait for ack - User::WaitForRequest( status ); - r = status.Int(); - test.Printf(_L("cmd status %d"), r); - test (r == KErrNone); - } - -void WaitForFinish(TInt aNfeDrive, TBool aEncrypt) - { - TNfeDiskStatus diskStatus = ENfeCorrupted; - TInt progress = 0; - - TInt r = DriveStatus(aNfeDrive, diskStatus, progress); - test (r == KErrNone); - - // Poll progress status. - while (diskStatus != (aEncrypt ? ENfeEncrypted : ENfeDecrypted )) - { - r = DriveStatus(aNfeDrive, diskStatus, progress); - test (r == KErrNone); - test.Printf(_L("Drive %c, r %d progress %3u%% status %S\n"), aNfeDrive+'A', r, progress, DriveStatus((TNfeDiskStatus) diskStatus)); - - - if (TheFinaliseDriveFlag && progress > 10) - { - TheFinaliseDriveFlag = EFalse; - RFs fs; - TInt r = fs.Connect(); - test_KErrNone(r); - - r = fs.FinaliseDrive(aNfeDrive, RFs::EFinal_RW); - test_KErrNone(r); - return; - } - - User::After( 1000 * 500 ); - } - test.Printf( _L("\nFinished\n") ); - } - -// -// E32Main -// - -TInt ParseCommandArguments() - { - TInt tokenCount = 0; - TChar driveToTest = 'C';; - - TBuf<0x100> cmd; - User::CommandLine(cmd); - TLex lex(cmd); - - for (TPtrC token=lex.NextToken(); token.Length() != 0;token.Set(lex.NextToken())) - { - tokenCount++; - // Get the drive letter - if (tokenCount == 1) - { - TChar ch = token[0]; - if (ch.IsAlpha()) - { - if(token.Length() > 0) - { - driveToTest=token[0]; - driveToTest.UpperCase(); - } - } - RDebug::Print(_L("drive=%C"), (TUint) driveToTest); - continue; - } - - else if (token.CompareF(_L("-d")) == 0) - { - TheEncryptDriveFlag = EFalse; - } - else if (token.CompareF(_L("-e")) == 0) - { - TheEncryptDriveFlag = ETrue; - } - else if (token.CompareF(_L("-f")) == 0) - { - TheFinaliseDriveFlag = ETrue; - } - else if (token.CompareF(_L("-w")) == 0) - { - TheWaitFlag = ETrue; - } - else if (token.CompareF(_L("-s")) == 0) - { - TheDisplayStatusFlag = ETrue; - } - } - - return driveToTest; - } - -TInt E32Main() - { - test.Title(); - test.Start(_L("NFE tests")); - - RFs fs; - - TInt r = fs.Connect(); - test_KErrNone(r); - - TChar driveToTest = ParseCommandArguments(); - - TInt drive; - r = fs.CharToDrive(driveToTest,drive); - test_KErrNone(r); - - - TVolumeInfo volumeInfo; - r = fs.Volume(volumeInfo, drive); - test(r == KErrNone); - - - - TNfeDiskStatus diskStatus = ENfeCorrupted; - TInt progress = 0; - - r = DriveStatus(drive, diskStatus, progress); - test.Printf(_L("drive %c diskStatus %S, progress %d r %d\n"), drive+'A', DriveStatus(diskStatus), progress, r); - - if (TheDisplayStatusFlag) - { - test.Printf(_L("*** press any key ***")); - test.Getch(); - test.End(); - test.Close(); - return 0; - } - - if (r == KErrNone && diskStatus == ENfeDecrypted && TheEncryptDriveFlag) - { - test.Next(_L("Encrypting NFE drive")); - EncryptDrive(drive); - r = DriveStatus(drive, diskStatus, progress); - test.Printf(_L("drive %c diskStatus %S, progress %d r %d\n"), drive+'A', DriveStatus(diskStatus), progress, r); - } - - if (r == KErrNone && diskStatus == ENfeEncrypted && !TheEncryptDriveFlag) - { - test.Next(_L("Decrypting NFE drive")); - DecryptDrive(drive); - r = DriveStatus(drive, diskStatus, progress); - test.Printf(_L("drive %c diskStatus %S, progress %d r %d\n"), drive+'A', DriveStatus(diskStatus), progress, r); - } - - - if (r == KErrNone && TheWaitFlag) - { - test.Next(_L("Waiting for finish")); - WaitForFinish(drive, TheEncryptDriveFlag); - } - - - for(TInt nfeDrive = FindNfeDrive(0); nfeDrive != KErrNotFound; nfeDrive = FindNfeDrive(++nfeDrive)) - { - TNfeDeviceInfo deviceInfo; - DisplayNfeDeviceInfo(nfeDrive, deviceInfo); - } - - fs.Close(); - - test.End(); - test.Close(); - - return 0; - } - -