--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/baseintegtests/baseintegrationtest/testsuites/fat32/src/basetestfat32writeraw.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,212 @@
+// 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 various operations to write to the raw disk.
+//
+//
+
+#include "basetestfat32writeraw.h"
+
+static RRawDisk TheDisk;
+
+/**
+Class Constructor
+*/
+CBaseTestFat32WriteRaw::CBaseTestFat32WriteRaw()
+ {
+ SetTestStepName(KTestStepWriteRaw);
+ }
+
+/**
+Class Destructor
+*/
+CBaseTestFat32WriteRaw::~CBaseTestFat32WriteRaw()
+ {
+ }
+
+/**
+This function performs the following actions:
+1. Get the position at which to write on the raw disk from the ini file
+ -> if a cluster is specified, get the position from the GetCluster function
+2. Get the number of bytes to write from the ini file
+3. Obtain the values to be written to the disk from the ini file.
+4. Write the values to the disk byte by byte.
+
+@return EPass if test passes and EFail if test fails
+*/
+TVerdict CBaseTestFat32WriteRaw::doTestStepL()
+ {
+ SetTestStepResult(EFail);
+ _LIT(KPosition,"WritePosition");
+ _LIT(KNumOfBytes,"NumberOfBytes");
+ _LIT(KCluster,"ClusterNumber");
+ TInt writevalues[12];
+ TInt position;
+ TInt64 clusterPosition;
+ TInt cluster;
+ TInt numbyte;
+ TInt r;
+ TBool alright = GetHexFromConfig(ConfigSection(), KPosition, position);
+ if(alright)
+ {
+ if (iMedia == 1 && position >= 16384)
+ {
+ INFO_PRINTF2(_L("Position = %d"), position);
+ INFO_PRINTF2(_L("iBPB_ResvdSecCnt = %d"), iBPB_ResvdSecCnt);
+ position = (iBPB_ResvdSecCnt * 512) + (position - 0x4000);
+ INFO_PRINTF2(_L("New Position = %d"), position);
+ }
+ TBool alright2 = GetHexFromConfig(ConfigSection(), KNumOfBytes, numbyte);
+ if (alright2)
+ {
+ TBool alright2 = GetIntFromConfig(ConfigSection(), KCluster, cluster);
+ if (alright2)
+ {
+ r = GetCluster(cluster, clusterPosition);
+ position = clusterPosition;
+ }
+ else
+ {
+ position = position;
+ }
+ _LIT(KWritePosition, "The position on the disk being written to is %d");
+ INFO_PRINTF2(KWritePosition,position);
+ r = GetWriteValue(numbyte,writevalues);
+ TInt i;
+ r = TheDisk.Open(iTheFs, CurrentDrive());
+ if (r!=KErrNone)
+ {
+ _LIT(KErrorOpen, "Cannot open the raw disk - r=%d");
+ INFO_PRINTF2(KErrorOpen, r);
+ }
+ for (i=0;i<numbyte;i++)
+ {
+ r = WriteRaw(position+i, writevalues[i]);
+ if(r != KErrNone)
+ {
+ _LIT(KErrorRead, "Cannot write to the raw disk at position %d with value %d");
+ INFO_PRINTF3(KErrorRead,position, writevalues[i]);
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+ }
+ TheDisk.Close();
+ }
+ else
+ {
+ _LIT(KNoIniNumByte, "Cannot read the number of bytes from the ini file");
+ INFO_PRINTF1(KNoIniNumByte);
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+ }
+ else
+ {
+ _LIT(KNoIniPos, "Cannot read the position from the ini file");
+ INFO_PRINTF1(KNoIniPos);
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+
+
+ SetTestStepResult(EPass);
+ _LIT(KWritePass, "Write Passed");
+ INFO_PRINTF1(KWritePass);
+ return TestStepResult();
+ }
+
+/**
+Writing a value to the raw disk
+
+@param aPos The position from which to start writing to the raw disk
+@param aValue The value to write to the raw disk
+
+@return KErrNone if successfull
+*/
+TInt CBaseTestFat32WriteRaw::WriteRaw(TInt64 aPos,TInt aValue)
+ {
+// int val = 0;
+ TInt r;
+ TUint8 data[1];
+ TPtr8 buffer((TUint8*)&data[0],1);
+ r = TheDisk.Read(aPos,buffer);
+ data[0] = aValue;
+ r = TheDisk.Write(aPos,buffer);
+ if (r != KErrNone)
+ {
+ _LIT(KErrorWrite, "Cannot write to the raw disk - r=%d");
+ INFO_PRINTF2(KErrorWrite,r);
+ }
+ return r;
+ }
+
+/**
+Get the values that are to be written to the disk byte by byte
+and place into an array
+
+@param aNumberOfBytes the nummber of bytes to write to the raw disk
+@param aValueArray Array containing the values to write to the raw disk
+
+@return KErrNone if successfull
+*/
+TInt CBaseTestFat32WriteRaw::GetWriteValue(TInt aNumOfBytes,TInt* aValueArray)
+ {
+ TInt value;
+ TInt i;
+ _LIT(KWriteValues,"WriteValue%d");
+ for (i = 1; i < aNumOfBytes + 1; i++)
+ {
+ TBuf<20> writeValue;
+ writeValue.Format(KWriteValues, i);
+ TBool alright3 = GetHexFromConfig(ConfigSection(), writeValue, value);
+ if (alright3)
+ {
+ aValueArray[i-1] = value;
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Cannot read WriteValue from ini file"));
+ return KErrGeneral;
+ }
+ }
+ return KErrNone;
+ }
+
+/**
+Get the position by calulating from the entry and position in the entry
+specified in the ini file
+
+@param aClusterNumber The cluster on the disk to write to
+@param aPosition the position within an entry
+
+@return KErrNone if successfull
+*/
+TInt CBaseTestFat32WriteRaw::GetCluster(TInt aClusterNumber,TInt64 &aPosition)
+ {
+ TInt entry;
+ _LIT(KEntry,"Entry");
+ TInt entryposition;
+ _LIT(KPositionInEntry,"PositionInEntry");
+ TBool alright = GetIntFromConfig(ConfigSection(), KEntry, entry);
+ if (alright)
+ {
+ TBool alright2 = GetIntFromConfig(ConfigSection(), KPositionInEntry, entryposition);
+ if (alright2)
+ {
+ aPosition = (iBPB_ResvdSecCnt + (iBPB_FATSz32*2) + (iBPB_SecPerClus * (aClusterNumber - 2))) * 512;
+ aPosition = aPosition + ((entry - 1)*96)+ entryposition;//(32 * (entry - 1));
+ }
+ }
+ return KErrNone;
+ }
+