--- a/baseintegtests/baseintegrationtest/testsuites/fat32/src/basetestfat32base.cpp Mon Oct 19 15:55:17 2009 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,447 +0,0 @@
-// Copyright (c) 2006-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:
-// Performs basic operations required by all test steps
-//
-//
-
-#include "basetestfat32base.h"
-#include "sl_bpb1.h"
-#include "basetedefs.h"
-#include <f32file.h>
-
-static RRawDisk TheDisk;
-static TFatBootSector TheBootSector;
-
-TDiskType gDiskType = EFatUnknown;
-TInt gBytesPerCluster;
-TInt gEntriesPerCluster;
-TInt gDataStartBytes;
-TInt gRootDirSectors;
-TInt gTotalSectors;
-TInt gRootDirStart;
-TInt gRootSector;
-TInt gRootCluster;
-TInt gFatStartBytes;
-TInt gFatTestEntries;
-TInt gFatSizeSectors;
-TInt gFirstDataSector;
-TInt gFirstDataCluster;
-TInt gMaxDataCluster;
-TInt gClusterCount;
-TInt gEndOfChain;
-
-/**
-Class Constructor
-*/
-CBaseTestFat32Base::CBaseTestFat32Base()
- {
- SetTestStepName(KTestStepBase);
- }
-
-/**
-Class Destructor
-*/
-CBaseTestFat32Base::~CBaseTestFat32Base()
- {
- }
-
-
-/**
-Base step to all test steps which carries out the followng actions:
-1. Gets the drive letter
-2. Checks that it is not a RAM drive
-3. Obtains the size of the disk
-4. Ensures that the volume is either FAT or FAT32
-5. Sets the session path
-6. Ensures that the number of sectors per cluster is correct
-7. Calculates the cluster count of the volume.
-
-@return EPass if test passes and EFail if test fails
-*/
-
-TVerdict CBaseTestFat32Base::doTestStepPreambleL()
- {
- SetTestStepResult(EFail);
- RDebug::Printf("Starting next test step...");
- CheckDebug();
- ParseCommandArguments();
- iTheFs.Connect();
- TInt drvNum = CurrentDrive();
- if (!IsFileSystemFAT32() && !IsFileSystemFAT(iTheFs,drvNum))
- {
- _LIT(KNotFat, "Test requires FAT filesystem");
- INFO_PRINTF1(KNotFat);
- return TestStepResult();
- }
-
-
- // check this is not the internal ram drive and get the size of the disk
- TVolumeInfo volumeInfo;
- TInt res = iTheFs.Volume(volumeInfo, CurrentDrive());
- TBool isRamDrive = volumeInfo.iDrive.iMediaAtt&KMediaAttVariableSize;
- iDiskSize = volumeInfo.iSize;
-
- // Obtain the Size of the disk from the media driver
- TBusLocalDrive mmcDrive;
- TBool changeFlag;
- changeFlag=EFalse;
- TInt r = mmcDrive.Connect(1,changeFlag);
- TTime startTime;
- startTime.HomeTime();
- TLocalDriveCapsV2 information;
- TPckg<TLocalDriveCapsV2> pckg(information);
- r = mmcDrive.Caps(pckg);
- iDriveSize = information.iSize;
-
-
- // Set the Session Path
- _LIT(Ksp, "%c:\\");
- TBuf<4> sessionPath;
- sessionPath.Format(Ksp, (TUint)iDriveToTest);
- r = iTheFs.SetSessionPath(sessionPath);
- r = iTheFs.SessionPath(iSessionPath);
-
-
-
- CalculateClusCount();
-
- // Check the Sectors per cluster and Cluster count
- r = CheckSecPerClus();
- if (r != KErrNone)
- {
- INFO_PRINTF1(_L("WARNING: Sector Per Cluster check was incorrect - Card should have special format requirements"));
- iMedia = 1;
- }
- else
- {
- INFO_PRINTF1(_L("Sector Per Cluster check is correct"));
- iMedia = 0;
- }
-
- if (isRamDrive)
- {
- SetTestStepResult(EAbort);
- _LIT(KRamNotValid, "Tests not valid on internal ram drive ");
- INFO_PRINTF1(KRamNotValid);
- return TestStepResult();
- }
- else
- SetTestStepResult(EPass);
- return TestStepResult();
- }
-
-/**
-Get the drive letter from the ini file
-*/
-void CBaseTestFat32Base::ParseCommandArguments(void)
- {
- TBufC<2> driveLetter;
- TPtrC16 letter = driveLetter;
- _LIT(KLetter,"DriveLetter");
- _LIT(KCommon,"Common");
- TBool alright = GetStringFromConfig(KCommon, KLetter, letter);
- if (alright)
- {
- iDriveToTest = letter[0];
- iDriveToTest.UpperCase();
- }
-
- }
-
-/**
-Sets the debug register value for debug builds if specified in the ini file
-*/
-void CBaseTestFat32Base::CheckDebug()
- {
- TInt debug;
- _LIT(KDebug,"SetDebug");
- _LIT(KCommon,"Common");
- TBool alright = GetIntFromConfig(KCommon, KDebug, debug);
- if (alright)
- {
- if (debug == 1)
- {
- #ifdef _DEBUG
- iTheFs.SetDebugRegister(KFSYS);
- #else
- _LIT(KNotDebug,"This is not a Debug build");
- INFO_PRINTF1(KNotDebug);
- #endif
- }
- else
- {
- _LIT(KSpecifyDebug,"Debugging not specified in ini file");
- INFO_PRINTF1(KSpecifyDebug);
- }
- }
-
- }
-/**
-Converts the drive letter to the drive number
-
-@return driveNum The number of the drive
-*/
-TInt CBaseTestFat32Base::CurrentDrive()
- {
- TInt driveNum;
- TInt ret = iTheFs.CharToDrive(iDriveToTest,driveNum);
- return(driveNum);
- }
-
-
-/**
-Check to see whether the volume is FAT32
-
-@return TRUE if is Fat32 else FALSE
-*/
-TBool CBaseTestFat32Base:: IsFileSystemFAT32()
- {
-// _LIT(KFat32Name,"Fat32");
- if(TheBootSector.RootDirEntries() == 0)
- {
- gEndOfChain = 0x0FFFFFFF;
- _LIT(KIsFat32, "Is Fat32 filesystem");
- INFO_PRINTF1(KIsFat32);
- return TRUE;
- }
- else
- {
- _LIT(KIsNotFat32, "Is Not Fat32 filesystem");
- INFO_PRINTF1(KIsNotFat32);
- return FALSE;
- }
- }
-
-/**
-Check to see whether the volume is FAT
-
-@return TRUE if is Fat else FALSE
-*/
-TBool CBaseTestFat32Base::IsFileSystemFAT(RFs &aFsSession,TInt aDrive)
- {
- _LIT(KFatName,"Fat");
- TFileName f;
- TInt r = aFsSession.FileSystemName(f,aDrive);
- if (r != KErrNone)
- {
- _LIT(KNoFatName, "Unable to get file system name");
- INFO_PRINTF1(KNoFatName);
- return FALSE;
- }
- return (f.CompareF(KFatName) == 0);
- }
-
-
-/**
-Check that the sectors per cluster is correct for the disk size used
-
-@return KErrNone if Sectors Per Cluster is correct
-*/
-TInt CBaseTestFat32Base::CheckSecPerClus()
- {
- TInt64 diskSizeSec = iDiskSize / 512;
- if (diskSizeSec <= 16777216)
- {
- if (iBPB_SecPerClus == 8)
- return KErrNone;
- else return -1;
- }
- else if (diskSizeSec <= 33554432)
- {
- if (iBPB_SecPerClus == 16)
- return KErrNone;
- else return -1;
- }
- else if (diskSizeSec <= 67108864)
- {
- if (iBPB_SecPerClus == 32)
- return KErrNone;
- else return -1;
- }
- else if (diskSizeSec <= 0xFFFFFFFF)
- {
- if (iBPB_SecPerClus == 64)
- return KErrNone;
- else return -1;
- }
- return KErrNone;
- }
-
-
-/**
-Calculate the cluster count of the volume
-
-@return KErrNone Successful
-*/
-TInt CBaseTestFat32Base::CalculateClusCount()
- {
- TInt r;
- r = TheDisk.Open(iTheFs, CurrentDrive());
- if (r != KErrNone)
- {
- _LIT(KErrorRead, "Cannot open the raw disk - r=%d");
- INFO_PRINTF2(KErrorRead, r);
- return r;
- }
-
- r = ReadField(4, 32, &iBPB_TotSec32);
- if (r != KErrNone)
- {
- _LIT(KErrorRead, "Cannot get the field value BPB_TotSec32 - r=%d");
- INFO_PRINTF2(KErrorRead, r);
- return r;
- }
- r = ReadField(2, 14, &iBPB_ResvdSecCnt);
- if (r != KErrNone)
- {
- _LIT(KErrorReadField, "Cannot get the field value BPB_ResvdSecCnt - r=%d");
- INFO_PRINTF2(KErrorReadField, r);
- return r;
- }
- r = ReadField(1, 16, &iBPB_NumFATs);
- if (r != KErrNone)
- {
- _LIT(KErrorReadField, "Cannot get the field value BPB_NumFATs - r=%d");
- INFO_PRINTF2(KErrorReadField, r);
- return r;
- }
- r = ReadField(4, 36, &iBPB_FATSz32);
- if (r != KErrNone)
- {
- _LIT(KErrorReadField, "Cannot get the field value BPB_FATSz32 - r=%d");
- INFO_PRINTF2(KErrorReadField, r);
- return r;
- }
- r = ReadField(1, 13, &iBPB_SecPerClus);
- if (r != KErrNone)
- {
- _LIT(KErrorReadField, "Cannot get the field value BPB_SecPerClus - r=%d");
- INFO_PRINTF2(KErrorReadField, r);
- return r;
- }
- iClusterCount = (iBPB_TotSec32-(iBPB_ResvdSecCnt+(iBPB_NumFATs*iBPB_FATSz32)))/(iBPB_SecPerClus);
- _LIT(KClusterCountValue, "The cluster count of the volume is %d");
- INFO_PRINTF2(KClusterCountValue, iClusterCount);
- TheDisk.Close();
- return KErrNone;
- }
-
-/**
-Convert the field to the correct endien format
-
-@param aLen The length of the field being read
-@param aBuffer The original endien format of the field
-@param aField the correct endien format of the field
-
-@return KErrNone Successful
-*/
-TInt CBaseTestFat32Base::Convert(TInt aLen, TUint8 *aBuffer, TUint32 *aField)
- {
- TInt i = aLen-1;
- *aField = 0;
- while(i >= 0)
- {
- *aField = *aField << 8;
- *aField = *aField + aBuffer[i];
- i--;
- }
- return KErrNone;
- }
-
-/**
-Read the entire field
-
-@param aLen The length of the field being read
-@param aOffSt The position at which to start reading
-@param aName The entire field to read
-
-@return KErrNone Successful
-*/
-TInt CBaseTestFat32Base::ReadField(TInt aLen, TInt aOffSet, TUint32 *aName)
- {
- TInt r;
- TUint8 aField[4];
- TPtr8 bufPtr(&aField[0], aLen);
- r=TheDisk.Read(aOffSet, bufPtr);
- if (r != KErrNone)
- {
- _LIT(KErrorRead, "Cannot read the raw disk - r=%d");
- INFO_PRINTF2(KErrorRead, r);
- return r;
- }
- r = Convert(aLen, aField,aName);
- return r;
- }
-
-
-/**
-Get the number of bytes per sector
-
-@param aSecPerCluster The number of sectors per cluster
-
-@return The number of bytes per cluster
-*/
-TInt64 getBytesPerCluster(TUint32 aSecPerClus)
- {
- TInt64 res = aSecPerClus * 512;
- return res;
- }
-
-/**
-Convert the cluster number to byte offset on disk
-
-@param aCluster The cluster number
-
-@return The offset in bytes
-*/
-TInt64 CBaseTestFat32Base::ClusterToByte(TInt aCluster)
- {
- TInt64 FirstDataSector = (iBPB_ResvdSecCnt + (iBPB_NumFATs * iBPB_FATSz32));
- TInt64 pos;
- pos = ((aCluster - 2) * iBPB_SecPerClus + FirstDataSector) * 512 ;
- return pos;
- }
-
-/**
-Return number of bytes into the FAT
-
-@param aFatIndex The Fat index
-
-@return The Fat position in bytes
-*/
-TInt CBaseTestFat32Base::PosInBytes(TInt aFatIndex)
- {
- TInt fatPosInBytes = -1;
- if(IsFileSystemFAT32())
- {
- gDiskType = EFat32;
- }
- switch (gDiskType)
- {
- case EFat32:
- fatPosInBytes=aFatIndex<<2;
- break;
- case EFat16:
- fatPosInBytes=aFatIndex<<1;
- break;
- case EFat12:
- fatPosInBytes=(aFatIndex*3>>1);
- break;
- default:
- break;
- }
- return(fatPosInBytes);
- }
-
-