--- /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