baseintegtests/baseintegrationtest/testsuites/fat32/inc/sl_bpb1.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/baseintegtests/baseintegrationtest/testsuites/fat32/inc/sl_bpb1.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,239 @@
+// Copyright (c) 1996-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:
+//
+
+#ifndef SL_BPB1_H
+#define SL_BPB1_H
+
+#include <f32fsys.h>
+#include <f32ver.h>
+#include <f32dbg.h>
+#include <e32svr.h>
+
+#pragma warning (disable:4103) //  : used #pragma pack to change alignment
+
+static const TInt KFatDirNameSize=11;
+static const TInt KFatDirReservedSize=10;
+static const TInt KVolumeLabelSize=11;
+static const TInt KFileSysTypeSize=8;
+static const TInt KVendorIdSize=8;
+static const TInt KVFatEntryAttribute=0x0F;
+static const TInt KBootSectorSignature=0xAA55;
+
+class TFatDirEntry;
+enum TFault
+	{
+	EVFatNoLongName,
+	EFatChkDskFailed,
+	EFatBadParameter,
+	EFatCacheBadRead,
+	EFatCacheNotFatSector,
+	EFatBadLocalDrive,
+	EFatBadBootSectorParameter,
+	EFatBadDirEntryParameter,
+	EFatAddClusterNotLastInList,
+	EFatBadEntryValue,
+	EFatBadClusterValue,
+	EFatBadStdFormatName,
+	EFatBadDosFormatName,
+	EFatCorrupt,
+	EFatChkDskBitListOverFlow,
+	EFatChkDskIndexOverFlow,
+	EFatChkDskIllegalClusterNumber,
+	EFatChkDskClusterAlreadyInUse,
+	EFatChkDskBadCluster,
+	EFatChkDskInvalidEntrySize,
+	EFatDesTooBig,
+	EFatFilePosBeyondEnd,
+	EFatFileSeekIndexTooSmall,
+	EFatFileSeekIndexTooSmall2,
+	EFatDataAllocBadSeg,
+	EFatFileSystemBadMemory,
+	EFatFileSystemCreate1,
+	EFatFileSystemCreate2,
+	EFatFileSystemCreate3,
+	ECacheAllocatorSetMax,
+	EFatLruCacheBadGranularity,
+	EFatFixedCacheBadGranularity,
+	EFatFixedCacheBadCall,
+	EFatRawReadTooBig,
+	EFatRawWriteTooBig,
+	EWinsBadRamDriveRead,
+	EWinsBadRamDriveWrite,
+	EFatReadUidFailed,
+	ELruCacheFlushNotSupported
+	};
+
+struct SFatDirEntry
+	{
+    TUint8 iName[KFatDirNameSize];
+    TUint8 iAttributes;
+    TUint8 iReserved[KFatDirReservedSize];
+    TUint16 iTime;
+    TUint16 iDate;
+    TUint16 iStartCluster;
+    TUint32 iSize;
+	};	
+#define pDir ((SFatDirEntry*)&iData[0])
+
+//
+typedef TBuf8<KFatDirNameSize> TShortName;
+//
+const TInt KSizeOfFatBootSector=62;
+const TInt KSizeOfFatDirEntry=32;
+class TFatBootSector
+	{
+public:
+	inline const TPtrC8 VendorId() const;
+	inline TInt BytesPerSector() const{return iBytesPerSector;}
+	inline TInt SectorsPerCluster() const{return iSectorsPerCluster;}
+	inline TInt ReservedSectors() const {return iReservedSectors;};
+	inline TInt NumberOfFats() const {return iNumberOfFats;}
+	inline TInt RootDirEntries() const{return iRootDirEntries;}
+	inline TInt TotalSectors() const{return iTotalSectors;}
+	inline TUint8 MediaDescriptor() const {return iMediaDescriptor;}
+	inline TInt FatSectors() const {return iFatSectors;}
+	inline TInt SectorsPerTrack() const {return iSectorsPerTrack;}
+	inline TInt NumberOfHeads() const{return iNumberOfHeads;}
+	inline TInt HiddenSectors() const {return iHiddenSectors;}
+	inline TInt HugeSectors() const{return iHugeSectors;}
+	inline TInt PhysicalDriveNumber() const;
+	inline TInt ExtendedBootSignature() const;
+	inline TUint32 UniqueID() const;
+	inline const TPtrC8 VolumeLabel() const;
+	inline const TPtrC8 FileSysType() const {return TPtrC8(iFileSysType,KFileSysTypeSize);}
+	inline TInt BootSectorSignature() const;
+	inline void SetJumpInstruction();
+	inline void SetVendorID(const TDesC8& aDes);
+	inline void SetBytesPerSector(TInt aBytesPerSector);
+	inline void SetSectorsPerCluster(TInt aSectorsPerCluster);
+	inline void SetReservedSectors(TInt aReservedSectors);
+	inline void SetNumberOfFats(TInt aNumberOfFats);
+	inline void SetRootDirEntries(TInt aRootDirEntries);
+	inline void SetTotalSectors(TInt aTotalSectors);
+	inline void SetMediaDescriptor(TUint8 aMediaDescriptor);
+	inline void SetFatSectors(TInt aFatSectors);
+	inline void SetSectorsPerTrack(TInt aSectorsPerTrack);
+	inline void SetNumberOfHeads(TInt aNumberOfHeads);
+	inline void SetHiddenSectors(TUint32 aHiddenSectors);
+	inline void SetHugeSectors(TUint32 aTotalSectors);
+	inline void SetPhysicalDriveNumber(TInt aPhysicalDriveNumber);
+	inline void SetReservedByte(TUint8 aReservedByte);
+	inline void SetExtendedBootSignature(TInt anExtendedBootSignature);
+	inline void SetUniqueID(TUint32 anUniqueID);
+	inline void SetVolumeLabel(const TDesC8& aDes);
+	inline void SetFileSysType(const TDesC8& aDes);
+	
+public:
+	inline TBool Is16BitFat() {return(FileSysType()==_L8("FAT16   "));}
+	TInt FirstFatSectorPos()
+	{
+	return(ReservedSectors()*BytesPerSector());
+	}
+	inline TInt RootDirStartSector();
+	inline TInt FirstFreeSector();
+public:
+    TUint8  iJumpInstruction[3];        ///< Jump instruction used for bootable volumes
+    TUint8  iVendorId[KVendorIdSize];   ///< Vendor ID of the file system that formatted the volume
+    TUint16 iBytesPerSector;            ///< Bytes per sector 
+    TUint8  iSectorsPerCluster;         ///< Sectors per cluster ratio
+    TUint16 iReservedSectors;           ///< Number of reserved sectors on the volume
+    TUint8  iNumberOfFats;              ///< Number of Fats on the volume
+    TUint16 iRootDirEntries;	        ///< Number of entries allowed in the root directory, specific to Fat12/16, zero for FAT32
+    TUint16 iTotalSectors;              ///< Total sectors on the volume, zero for FAT32
+    TUint8  iMediaDescriptor;           ///< Media descriptor
+    TUint16 iFatSectors;                ///< Sectors used for the Fat table, zero for FAT32
+    TUint16 iSectorsPerTrack;           ///< Sectors per track
+    TUint16 iNumberOfHeads;             ///< Number of heads 
+    TUint32 iHiddenSectors;             ///< Number of hidden sectors in the volume
+    TUint32 iHugeSectors;               ///< Total sectors in the volume, Used if totalSectors > 65535
+	TUint32	iFatSectors32;              ///< Start of additional elements @ offset 36 for FAT32, Sectors in Fat table for 32 bit volume
+	TUint16 iFATFlags;                  ///< Fat flags
+	TUint16	iVersionNumber;		        ///< Version number of the file system
+	TUint32 iRootClusterNum;            ///< Cluster number of the root directory
+	TUint16 iFSInfoSectorNum;           ///< Sector number containing the FSIInfo structure
+	TUint16 iBkBootRecSector;           ///< Backup boot sector
+	TUint8	iReserved2[12];             ///< Reserved space, End of Fat32 Only parameters section
+	TUint8  iPhysicalDriveNumber;       ///< Physical drive number, not used in Symbian OS
+    TUint8  iReserved;                  ///< Reserved byte
+    TUint8  iExtendedBootSignature;     ///< Extended boot signiture
+    TUint32 iUniqueID;                  ///< Unique volume ID
+    TUint8  iVolumeLabel[KVolumeLabelSize];  ///< 	The volume's label
+	TUint8  iFileSysType[KFileSysTypeSize];  ///< 	File system type
+	};
+	
+void Fault(TAny* aTestStep,TFault anError);
+GLREF_C TBool IsPowerOfTwo(TInt aNum);
+GLREF_C TInt Log2(TInt aNum);
+GLREF_C TTime DosTimeToTTime(TInt aDosTime,TInt aDosDate);
+GLREF_C TInt DosTimeFromTTime(const TTime& aTime);
+GLREF_C TInt DosDateFromTTime(const TTime& aTime);
+
+class TFatDirEntry
+	{
+public:
+	const TPtrC8 Name() const
+	{return TPtrC8((TUint8*)&(pDir->iName),11);
+	}
+	TInt Attributes() const 
+	{
+	return pDir->iAttributes;
+	}
+	inline TTime Time() const;
+	TInt StartCluster() const
+	{
+	return pDir->iStartCluster;
+	}
+	inline TUint32 Size() const;
+	TBool IsErased() const
+	{
+	return (TBool)(iData[0]==0xe5);
+	}
+	inline TBool IsCurrentDirectory() const;
+	inline TBool IsParentDirectory() const;
+	TBool IsEndOfDirectory() const 
+	{
+	return (TBool)(iData[0]==0x00);
+	}
+	TBool IsGarbage() const;
+	inline void SetName(const TDesC8& aDes);
+	inline void SetAttributes(TInt anAtt);
+	inline void SetTime(const TTime& aTime);
+	void SetStartCluster(TInt aStartCluster)
+	{
+	__ASSERT_DEBUG(!(aStartCluster&~KMaxTUint16),Fault( this,EFatBadDirEntryParameter));
+	pDir->iStartCluster=(TUint16)aStartCluster;
+	}
+	inline void SetSize(TUint32 aFilesize);
+	inline void SetErased();
+	inline void SetCurrentDirectory();
+	inline void SetParentDirectory();
+	inline void SetEndOfDirectory();
+	inline void ZeroReserved();
+public:
+	void InitializeRootEntry();
+	void InitializeAsVFat(TUint8 aCheckSum);
+	void SetVFatEntry(const TDesC& aName,TInt aRemainderLen);
+	void ReadVFatEntry(TDes16& aVBuf);
+	inline TBool IsLongNameStart() const;
+	TBool IsVFatEntry() const 
+	{
+	return (TBool)(Attributes()==0x0F && IsEndOfDirectory()==EFalse);
+	}
+	inline TInt NumFollowing() const;
+public:
+	TUint8 iData[KSizeOfFatDirEntry];
+	};
+
+#endif // SL_BPB1_H