kerneltest/e32test/mediaext/t_nfe.cpp
author hgs
Thu, 12 Aug 2010 11:55:14 +0100
changeset 244 a77889bee936
parent 123 fc55edbf3919
child 257 3e88ff8f41d5
permissions -rw-r--r--
201031_08
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
123
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     1
// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     2
// All rights reserved.
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     7
//
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     8
// Initial Contributors:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    10
//
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    11
// Contributors:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    12
//
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    13
// Description:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    14
// e32test\mediext\t_nfe.cpp
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    15
// 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    16
//
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    17
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    18
#define __E32TEST_EXTENSION__
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    19
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    20
#include <e32test.h>
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    21
#include <f32file.h>
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    22
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    23
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    24
RTest test(_L("t_nfe"));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    25
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    26
#include <d32locd.h>
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    27
#include <e32property.h>
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    28
#include "nfe.h"
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    29
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    30
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    31
TBusLocalDrive Drive;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    32
TBool TheWaitFlag = EFalse;				// wait for drive to be encrypted before exiting test
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    33
TBool TheFinaliseDriveFlag = EFalse;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    34
TBool TheDisplayStatusFlag = EFalse;	// display drive status and then exit (i.e. don't encrypt)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    35
TBool TheEncryptDriveFlag = ETrue;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    36
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    37
TInt FindNfeDrive(TInt aDriveNum)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    38
/** 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    39
Find the next NFE drive 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    40
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    41
@return		Local drive identifier.
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    42
*/
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    43
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    44
	TInt drive = KErrNotFound;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    45
	
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    46
//	test.Printf(_L("Searching for NFE drive:\n"));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    47
	
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    48
	for (TInt i = aDriveNum; i < KMaxLocalDrives && drive < 0; ++i)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    49
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    50
		RLocalDrive	d;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    51
		TBool		change = EFalse;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    52
		
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    53
		if(d.Connect(i, change) == KErrNone)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    54
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    55
//			test.Printf(_L("Connected to local drive %d\n"), i);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    56
			TLocalDriveCapsV4			dc;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    57
			TPckg<TLocalDriveCapsV4>	capsPack(dc);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    58
			capsPack.FillZ();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    59
			
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    60
			if(d.Caps(capsPack) != KErrNone)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    61
				continue;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    62
			if (dc.iType == EMediaNANDFlash || dc.iType == EMediaHardDisk)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    63
				{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    64
				TNfeDeviceInfo nfeDeviceInfo;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    65
				TPtr8 nfeDeviceInfoBuf((TUint8*) &nfeDeviceInfo, sizeof(nfeDeviceInfo));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    66
				nfeDeviceInfoBuf.FillZ();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    67
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    68
				TInt r = d.QueryDevice((RLocalDrive::TQueryDevice) EQueryNfeDeviceInfo, nfeDeviceInfoBuf);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    69
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    70
//				test.Printf(_L("EQueryNfeDeviceInfo on local drive %d returned %d\n"), i, r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    71
				if (r == KErrNone)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    72
					{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    73
					test.Printf(_L("\nFound NFE on local drive %d\n"), i);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    74
					drive = i;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    75
					}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    76
				}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    77
			d.Close();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    78
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    79
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    80
	return drive;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    81
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    82
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    83
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    84
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    85
const TDesC* DriveStatus(TNfeDiskStatus aStatus)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    86
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    87
	_LIT(KNfeUnmounted, "Unmounted");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    88
	_LIT(KNfeDecrypted, "Decrypted");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    89
	_LIT(KNfeDecrypting, "Decrypting");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    90
	_LIT(KNfeEncrypted, "Encrypted");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    91
	_LIT(KNfeEncrypting, "Encrypting");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    92
	_LIT(KNfeWiping, "Wiping");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    93
	_LIT(KNfeCorrupted, "Corrupted");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    94
	_LIT(KNfeUnrecognised, "Unrecognised");
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    95
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    96
	switch(aStatus)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    97
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    98
		case ENfeUnmounted:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
    99
			return &KNfeUnmounted;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   100
		case ENfeDecrypted:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   101
			return &KNfeDecrypted;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   102
		case ENfeDecrypting:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   103
			return &KNfeDecrypting;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   104
		case ENfeEncrypted:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   105
			return &KNfeEncrypted;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   106
		case ENfeEncrypting:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   107
			return &KNfeEncrypting;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   108
		case ENfeWiping:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   109
			return &KNfeWiping;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   110
		case ENfeCorrupted:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   111
			return &KNfeCorrupted;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   112
		default:
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   113
			return &KNfeUnrecognised;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   114
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   115
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   116
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   117
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   118
TInt DriveStatus(TInt aNfeDrive, TNfeDiskStatus& aStatus, TInt &aProgress)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   119
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   120
	TInt r = RProperty::Get(
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   121
		KNfeUID, 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   122
		NFE_KEY(aNfeDrive, KNfeStatusToUiKey),
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   123
		*(TInt*) &aStatus); 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   124
	if (r != KErrNone)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   125
		return r;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   126
	r = RProperty::Get(
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   127
		KNfeUID, 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   128
		NFE_KEY(aNfeDrive, KNfeProgressToUiKey),
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   129
		*(TInt*) &aProgress); 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   130
	return r;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   131
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   132
244
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   133
void DisplayNfeDeviceInfo(TInt aNfeDrive, TNfeDeviceInfo& aDeviceInfo, TBool (&aNfeDrives)[KMaxLocalDrives])
123
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   134
	{
244
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   135
//	test.Printf(_L("Stats: \n"));
123
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   136
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   137
	RLocalDrive	d;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   138
	TBool change = EFalse;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   139
	TInt r = d.Connect(aNfeDrive, change);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   140
	test (r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   141
		
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   142
	TPtr8 nfeDeviceInfoBuf((TUint8*) &aDeviceInfo, sizeof(aDeviceInfo));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   143
	nfeDeviceInfoBuf.FillZ();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   144
	r = d.QueryDevice((RLocalDrive::TQueryDevice) EQueryNfeDeviceInfo, nfeDeviceInfoBuf);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   145
	test (r == KErrNone || r == KErrNotSupported);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   146
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   147
	d.Close();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   148
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   149
	test.Printf(_L("iDriveCount %d\n"), aDeviceInfo.iDriveCount);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   150
	test.Printf(_L("iMediaSizeInBytes %lx\n"), aDeviceInfo.iMediaSizeInBytes);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   151
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   152
	for (TInt i=0; i<aDeviceInfo.iDriveCount; i++)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   153
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   154
		TNfeDriveInfo& di = aDeviceInfo.iDrives[i];
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   155
244
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   156
		TInt localDriveNum = di.iLocalDriveNum;
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   157
		test_Value(localDriveNum, di.iLocalDriveNum < KMaxLocalDrives);
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   158
		
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   159
		if (aNfeDrives[localDriveNum])
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   160
			continue;
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   161
		aNfeDrives[localDriveNum] = 1;
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   162
123
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   163
		test.Printf(_L("*** drive index %d ***\n"), i);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   164
		test.Printf(_L("iLocalDriveNum %x\n"), di.iLocalDriveNum);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   165
		test.Printf(_L("iDriveLetter %c\n"), di.iDriveLetter >= 0 && di.iDriveLetter <= 25 ? di.iDriveLetter +'A' : '?');
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   166
		test.Printf(_L("iState %d\n"), di.Status());
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   167
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   168
		test.Printf(_L("State = %S\n"), DriveStatus(di.Status()));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   169
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   170
		test.Printf(_L("iEncryptStartPos %lx\n"), di.iEncryptStartPos);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   171
		test.Printf(_L("iEncryptEndPos %lx\n"), di.iEncryptEndPos);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   172
		test.Printf(_L("iPartitionBaseAddr %lx\n"), di.iEntry.iPartitionBaseAddr);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   173
		test.Printf(_L("iPartitionLen %lx\n"), di.iEntry.iPartitionLen);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   174
		test.Printf(_L("iPartitionType %x\n"), di.iEntry.iPartitionType);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   175
		
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   176
		test.Printf(_L("iReadRequestCount %d\n"), di.iReadRequestCount);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   177
		test.Printf(_L("iWriteRequestCount %d\n"), di.iWriteRequestCount);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   178
		test.Printf(_L("iCodePagingRequesCount %d\n"), di.iCodePagingRequesCount);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   179
		test.Printf(_L("iDataPagingReadRequestCount %d\n"), di.iDataPagingReadRequestCount);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   180
		test.Printf(_L("iDataPagingWriteRequestCount %d\n"), di.iDataPagingWriteRequestCount);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   181
		test.Printf(_L("iUniqueID %08X\n"), di.iUniqueID);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   182
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   183
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   184
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   185
void EncryptDrive(TInt aNfeDrive)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   186
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   187
	// subscribe to cmd acknowledgement property - KNfeToUiKey
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   188
    RProperty propToUi;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   189
    test.Printf(_L("Attaching ToUi property")); 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   190
    TInt r = propToUi.Attach(KNfeUID,NFE_KEY(aNfeDrive,KNfeToUiKey));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   191
    test.Printf(_L("Attaching returned %d"), r);    
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   192
	if (r != KErrNone)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   193
		return;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   194
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   195
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   196
    TRequestStatus status;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   197
    propToUi.Subscribe( status );
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   198
    
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   199
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   200
	// Issue command
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   201
	test.Printf(_L("Encrypting drive %c...\n"), aNfeDrive+'A');
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   202
	r = RProperty::Set(
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   203
		KNfeUID, 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   204
		NFE_KEY(aNfeDrive, KNfeToThreadKey),
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   205
		ENfeEncryptDisk); 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   206
	test.Printf(_L("Encrypting drive %c, r %d\n"), aNfeDrive+'A', r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   207
	test (r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   208
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   209
	// wait for ack
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   210
	User::WaitForRequest( status );
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   211
    r = status.Int();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   212
    test.Printf(_L("cmd status %d"), r);    
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   213
	test (r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   214
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   215
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   216
void DecryptDrive(TInt aNfeDrive)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   217
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   218
	// subscribe to cmd acknowledgement property - KNfeToUiKey
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   219
    RProperty propToUi;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   220
    test.Printf(_L("Attaching ToUi property")); 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   221
    TInt r = propToUi.Attach(KNfeUID,NFE_KEY(aNfeDrive,KNfeToUiKey));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   222
    test.Printf(_L("Attaching returned %d"), r);    
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   223
	if (r != KErrNone)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   224
		return;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   225
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   226
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   227
    TRequestStatus status;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   228
    propToUi.Subscribe( status );
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   229
    
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   230
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   231
	// Issue command
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   232
	test.Printf(_L("Decrypting drive %c...\n"), aNfeDrive+'A');
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   233
	r = RProperty::Set(
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   234
		KNfeUID, 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   235
		NFE_KEY(aNfeDrive, KNfeToThreadKey),
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   236
		ENfeDecryptDisk); 
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   237
	test.Printf(_L("Decrypting drive %c, r %d\n"), aNfeDrive+'A', r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   238
	test (r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   239
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   240
	// wait for ack
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   241
	User::WaitForRequest( status );
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   242
    r = status.Int();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   243
    test.Printf(_L("cmd status %d"), r);    
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   244
	test (r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   245
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   246
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   247
void WaitForFinish(TInt aNfeDrive, TBool aEncrypt)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   248
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   249
	TNfeDiskStatus diskStatus = ENfeCorrupted;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   250
	TInt progress = 0;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   251
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   252
	TInt r = DriveStatus(aNfeDrive, diskStatus, progress);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   253
	test (r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   254
	
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   255
	// Poll progress status.
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   256
    while (diskStatus != (aEncrypt ? ENfeEncrypted : ENfeDecrypted ))
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   257
        {
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   258
		r = DriveStatus(aNfeDrive, diskStatus, progress);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   259
		test (r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   260
		test.Printf(_L("Drive %c, r %d progress %3u%% status %S\n"), aNfeDrive+'A', r, progress, DriveStatus((TNfeDiskStatus) diskStatus));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   261
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   262
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   263
		if (TheFinaliseDriveFlag && progress > 10)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   264
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   265
			TheFinaliseDriveFlag = EFalse;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   266
			RFs fs;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   267
			TInt r = fs.Connect();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   268
			test_KErrNone(r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   269
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   270
			r = fs.FinaliseDrive(aNfeDrive, RFs::EFinal_RW);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   271
			test_KErrNone(r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   272
			return;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   273
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   274
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   275
		User::After( 1000 * 500 );
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   276
        }
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   277
	test.Printf( _L("\nFinished\n") );
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   278
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   279
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   280
//
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   281
// E32Main
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   282
//
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   283
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   284
TInt ParseCommandArguments()
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   285
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   286
    TInt tokenCount = 0;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   287
	TChar driveToTest = 'C';;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   288
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   289
	TBuf<0x100> cmd;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   290
	User::CommandLine(cmd);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   291
	TLex lex(cmd);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   292
	
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   293
    for (TPtrC token=lex.NextToken(); token.Length() != 0;token.Set(lex.NextToken()))
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   294
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   295
        tokenCount++;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   296
		// Get the drive letter
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   297
		if (tokenCount == 1)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   298
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   299
			TChar ch = token[0];
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   300
			if (ch.IsAlpha())
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   301
				{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   302
				if(token.Length() > 0)		
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   303
					{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   304
					driveToTest=token[0];
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   305
					driveToTest.UpperCase();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   306
					}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   307
				}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   308
			RDebug::Print(_L("drive=%C"), (TUint) driveToTest);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   309
			continue;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   310
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   311
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   312
		else if (token.CompareF(_L("-d")) == 0)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   313
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   314
			TheEncryptDriveFlag = EFalse;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   315
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   316
		else if (token.CompareF(_L("-e")) == 0)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   317
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   318
			TheEncryptDriveFlag = ETrue;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   319
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   320
		else if (token.CompareF(_L("-f")) == 0)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   321
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   322
			TheFinaliseDriveFlag = ETrue;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   323
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   324
		else if (token.CompareF(_L("-w")) == 0)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   325
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   326
			TheWaitFlag = ETrue;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   327
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   328
		else if (token.CompareF(_L("-s")) == 0)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   329
			{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   330
			TheDisplayStatusFlag = ETrue;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   331
			}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   332
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   333
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   334
	return driveToTest;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   335
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   336
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   337
TInt E32Main()
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   338
	{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   339
	test.Title();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   340
	test.Start(_L("NFE tests"));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   341
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   342
	RFs fs;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   343
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   344
	TInt r = fs.Connect();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   345
	test_KErrNone(r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   346
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   347
	TChar driveToTest = ParseCommandArguments();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   348
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   349
	TInt drive;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   350
	r = fs.CharToDrive(driveToTest,drive);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   351
	test_KErrNone(r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   352
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   353
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   354
	TVolumeInfo volumeInfo;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   355
	r = fs.Volume(volumeInfo, drive);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   356
	test(r == KErrNone);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   357
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   358
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   359
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   360
	TNfeDiskStatus diskStatus = ENfeCorrupted;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   361
	TInt progress = 0;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   362
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   363
	r = DriveStatus(drive, diskStatus, progress);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   364
	test.Printf(_L("drive %c diskStatus %S, progress %d r %d\n"), drive+'A', DriveStatus(diskStatus), progress, r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   365
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   366
	if (TheDisplayStatusFlag)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   367
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   368
		test.Printf(_L("*** press any key ***"));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   369
		test.Getch();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   370
		test.End();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   371
		test.Close();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   372
		return 0;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   373
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   374
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   375
	if (r == KErrNone && diskStatus == ENfeDecrypted && TheEncryptDriveFlag)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   376
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   377
		test.Next(_L("Encrypting NFE drive"));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   378
		EncryptDrive(drive);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   379
		r = DriveStatus(drive, diskStatus, progress);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   380
		test.Printf(_L("drive %c diskStatus %S, progress %d r %d\n"), drive+'A', DriveStatus(diskStatus), progress, r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   381
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   382
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   383
	if (r == KErrNone && diskStatus == ENfeEncrypted && !TheEncryptDriveFlag)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   384
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   385
		test.Next(_L("Decrypting NFE drive"));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   386
		DecryptDrive(drive);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   387
		r = DriveStatus(drive, diskStatus, progress);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   388
		test.Printf(_L("drive %c diskStatus %S, progress %d r %d\n"), drive+'A', DriveStatus(diskStatus), progress, r);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   389
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   390
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   391
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   392
	if (r == KErrNone && TheWaitFlag)
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   393
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   394
		test.Next(_L("Waiting for finish"));
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   395
		WaitForFinish(drive, TheEncryptDriveFlag);
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   396
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   397
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   398
244
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   399
	TBool nfeDrives[KMaxLocalDrives];
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   400
	memclr(nfeDrives, sizeof(nfeDrives));
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   401
	
123
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   402
	for(TInt nfeDrive = FindNfeDrive(0); nfeDrive != KErrNotFound; nfeDrive = FindNfeDrive(++nfeDrive))
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   403
		{
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   404
		TNfeDeviceInfo deviceInfo;
244
a77889bee936 201031_08
hgs
parents: 123
diff changeset
   405
		DisplayNfeDeviceInfo(nfeDrive, deviceInfo, nfeDrives);
123
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   406
		}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   407
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   408
	fs.Close();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   409
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   410
	test.End();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   411
	test.Close();
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   412
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   413
	return 0;
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   414
	}
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   415
fc55edbf3919 201015_11
hgs
parents:
diff changeset
   416