// 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:
// f32\sfat32\inc\sl_bpb.inl
// 
//

#ifndef SL_BPB_INL
#define SL_BPB_INL


/**
Defined cast of Fat directory entry data read to structure allowing
access to data

@internalTechnology
*/
#define pDir ((SFatDirEntry*)&iData[0])

/**
Returns Sectors in Fat table for 32 bit volume

@return iFatSectors32
*/
inline TUint32 TFatBootSector::FatSectors32() const	
	{return iFatSectors32;}
/**
Fat flags

@return iFATFlags
*/
inline TUint16 TFatBootSector::FATFlags() const		
	{return iFATFlags;}
/**
Version number of the file system

@return iVersionNumber
*/
inline TUint16 TFatBootSector::VersionNumber() const		
	{return iVersionNumber;}
/**
Cluster number of the root directory

@return iRootClusterNum
*/
inline TUint32 TFatBootSector::RootClusterNum() const	
	{return iRootClusterNum;}
/**
Sector number containing the FSIInfo structure

@return iFSInfoSectorNum
*/
inline TUint16 TFatBootSector::FSInfoSectorNum() const
	{return iFSInfoSectorNum;}
/**
Backup boot sector

@return iBkBootRecSector
*/
inline TUint16 TFatBootSector::BkBootRecSector() const
	{return iBkBootRecSector;}
/**
Sets the number of sectors in Fat table for 32 bit volume

@param aFatSectors32
*/
inline void TFatBootSector::SetFatSectors32(TUint32	aFatSectors32)
	{iFatSectors32 = aFatSectors32;}
/**
Sets the Fat flags

@param aFATFlags
*/
inline void TFatBootSector::SetFATFlags(TUint16 aFATFlags)
	{iFATFlags = aFATFlags;}
/**
Sets the version number of the file system

@param aVersionNumber
*/
inline void TFatBootSector::SetVersionNumber(TUint16 aVersionNumber)
	{iVersionNumber = aVersionNumber;}
/**
Sets the cluster number of the root directory

@param aRootClusterNum
*/
inline void TFatBootSector::SetRootClusterNum(TUint32 aRootClusterNum)	
	{iRootClusterNum = aRootClusterNum;}
/**
Set the sector number containing the FSIInfo structure

@param aFSInfoSectorNum
*/
inline void TFatBootSector::SetFSInfoSectorNum(TUint16 aFSInfoSectorNum)
	{iFSInfoSectorNum = aFSInfoSectorNum;}
/**
Set the backup boot sector

@param aBkBootRecSector
*/
inline void TFatBootSector::SetBkBootRecSector(TUint16 aBkBootRecSector)
	{iBkBootRecSector = aBkBootRecSector;}	

/**
Returns the vendor ID of the file system that formatted the volume

@return A descriptor containing the vendor ID 
*/
inline const TPtrC8 TFatBootSector::VendorId() const
	{return TPtrC8(iVendorId,KVendorIdSize);}
/**
Return the bytes per sector

@return iBytesPerSector
*/
inline TUint16 TFatBootSector::BytesPerSector() const
	{return iBytesPerSector;}
/**
Returns the sectors per cluster ratio

@return iSectorsPerCluster
*/
inline TInt TFatBootSector::SectorsPerCluster() const
	{return iSectorsPerCluster;}
/**
Returns the number of reserved sectors on the volume

@return iReservedSectors
*/
inline TInt TFatBootSector::ReservedSectors() const
	{return iReservedSectors;}
/**
Returns the number of Fats on the volume

@return iNumberOfFats
*/
inline TInt TFatBootSector::NumberOfFats() const
	{return iNumberOfFats;}
/**
Returns the number of entries allowed in the root directory, specific to Fat12/16, zero for FAT32

@return iRootDirEntries
*/
inline TInt TFatBootSector::RootDirEntries() const
	{return iRootDirEntries;}
/**
Returns the total sectors on the volume, zero for FAT32

@return iTotalSectors
*/
inline TInt TFatBootSector::TotalSectors() const
	{return iTotalSectors;}
/**
Returns the media descriptor

@return iMediaDescriptor
*/
inline TUint8 TFatBootSector::MediaDescriptor() const
	{return iMediaDescriptor;}
/**
Returns sectors used for the Fat table, zero for FAT32

@return iFatSectors
*/
inline TInt TFatBootSector::FatSectors() const
	{return iFatSectors;}
/**
Returns sectors per track

@return iSectorsPerTrack
*/
inline TInt TFatBootSector::SectorsPerTrack() const
	{return iSectorsPerTrack;}
/**
Returns the number of heads 

@return iNumberOfHeads
*/
inline TInt TFatBootSector::NumberOfHeads() const
	{return iNumberOfHeads;}
/**
Returns the number of hidden sectors in the volume

@return iHiddenSectors
*/
inline TInt TFatBootSector::HiddenSectors() const
	{return iHiddenSectors;}
/**
Returns total sectors in the volume, Used if totalSectors > 65535

@return iHugeSectors
*/
inline TInt TFatBootSector::HugeSectors() const
	{return iHugeSectors;}
/**
Returns the physical drive number, not used in Symbian OS

@return iPhysicalDriveNumber
*/
inline TInt TFatBootSector::PhysicalDriveNumber() const
	{return iPhysicalDriveNumber;}
/**
Returns the extended boot signiture

@return iExtendedBootSignature
*/
inline TInt TFatBootSector::ExtendedBootSignature() const
	{return iExtendedBootSignature;}
/**
Returns the unique volume ID

@return iUniqueID
*/
inline TUint32 TFatBootSector::UniqueID() const
	{return iUniqueID;}
/**
Returns the volume's label

@return A descriptor containing the volume label
*/
inline const TPtrC8 TFatBootSector::VolumeLabel() const
	{return TPtrC8(iVolumeLabel,KVolumeLabelSize);}
/**
Returns the file system type

@return A descriptor containing the file system type
*/
inline const TPtrC8 TFatBootSector::FileSysType() const
	{return TPtrC8(iFileSysType,KFileSysTypeSize);}
/**
Returns the boot sector signiture

@return KBootSectorSignature
*/
inline TInt TFatBootSector::BootSectorSignature() const
	{return KBootSectorSignature;}
/**
Set the jump instruction 
*/
inline void TFatBootSector::SetJumpInstruction()
	{iJumpInstruction[0]=0xE9;iJumpInstruction[2]=0x90;}
/**
Set the vendor ID of the file system that formatted the volume

@param aDes Descriptor containing the Vendor ID
*/
inline void TFatBootSector::SetVendorID(const TDesC8& aDes)
	{
	__ASSERT_DEBUG(aDes.Length()<=KVendorIdSize,Fault(EFatBadBootSectorParameter));
	TPtr8 buf(iVendorId,KVendorIdSize);
	buf=aDes;
	}
/**
Sets the bytes per sector 

@param aBytesPerSector Number of bytes per sector
*/
inline void TFatBootSector::SetBytesPerSector(TInt aBytesPerSector)
	{
	__ASSERT_DEBUG(!(aBytesPerSector&~KMaxTUint16),Fault(EFatBadBootSectorParameter));
	iBytesPerSector=(TUint16)aBytesPerSector;
	}
/**
Set the sectors per cluster ratio

@param aSectorsPerCluster Number of sectors per cluster
*/
inline void TFatBootSector::SetSectorsPerCluster(TInt aSectorsPerCluster)
	{
	__ASSERT_DEBUG(!(aSectorsPerCluster&~KMaxTUint8),Fault(EFatBadBootSectorParameter));
	iSectorsPerCluster=(TUint8)aSectorsPerCluster;
	}
/**
Sets the number of reserved sectors on the volume

@param aReservedSectors Number of reserved sectors
*/
inline void TFatBootSector::SetReservedSectors(TInt aReservedSectors)
	{
	__ASSERT_DEBUG(!(aReservedSectors&~KMaxTUint16),Fault(EFatBadBootSectorParameter));
	iReservedSectors=(TUint16)aReservedSectors;
	}
/**
Sets the number of Fats on the volume

@param aNumberOfFats Number of fats
*/
inline void TFatBootSector::SetNumberOfFats(TInt aNumberOfFats)
	{
	__ASSERT_DEBUG(!(aNumberOfFats&~KMaxTUint8),Fault(EFatBadBootSectorParameter));
	iNumberOfFats=(TUint8)aNumberOfFats;
	}
/**
Number of entries allowed in the root directory, specific to Fat12/16, zero for FAT32

@param aRootDirEntries
*/
inline void TFatBootSector::SetRootDirEntries(TInt aRootDirEntries)
	{
	__ASSERT_DEBUG(!(aRootDirEntries&~KMaxTUint16),Fault(EFatBadBootSectorParameter));
	iRootDirEntries=(TUint16)aRootDirEntries;
	}
/**
Total sectors on the volume, zero for FAT32

@param aTotalSectors Total number of sectors
*/
inline void TFatBootSector::SetTotalSectors(TInt aTotalSectors)
	{
	__ASSERT_DEBUG(!(aTotalSectors&~KMaxTUint16),Fault(EFatBadBootSectorParameter));
	iTotalSectors=(TUint16)aTotalSectors;
	}
/**
Set the media descriptor

@param aMediaDescriptor
*/
inline void TFatBootSector::SetMediaDescriptor(TUint8 aMediaDescriptor)
	{iMediaDescriptor=aMediaDescriptor;}
/**
Sectors used for the Fat table, zero for FAT32

@param aFatSectors Number of Fat sectors
*/
inline void TFatBootSector::SetFatSectors(TInt aFatSectors)
	{
	__ASSERT_DEBUG(!(aFatSectors&~KMaxTUint16),Fault(EFatBadBootSectorParameter));
	iFatSectors=(TUint16)aFatSectors;
	}
/**
Set the sectors per track

@param aSectorsPerTrack Number of sectors per track
*/
inline void TFatBootSector::SetSectorsPerTrack(TInt aSectorsPerTrack)
	{
	__ASSERT_DEBUG(!(aSectorsPerTrack&~KMaxTUint16),Fault(EFatBadBootSectorParameter));
	iSectorsPerTrack=(TUint16)aSectorsPerTrack;
	}
/**
Set the number of heads

@param aNumberOfHeads Number of heads
*/
inline void TFatBootSector::SetNumberOfHeads(TInt aNumberOfHeads)
	{
	__ASSERT_DEBUG(!(aNumberOfHeads&~KMaxTUint16),Fault(EFatBadBootSectorParameter));
	iNumberOfHeads=(TUint16)aNumberOfHeads;
	}
/**
Set the number of hidden sectors in the volume

@param aHiddenSectors Number of hidden sectors
*/
inline void TFatBootSector::SetHiddenSectors(TUint32 aHiddenSectors)
	{
	iHiddenSectors=aHiddenSectors;
	}
/**
Set the total sectors in the volume, Used if totalSectors > 65535

@param aHugeSectors
*/
inline void TFatBootSector::SetHugeSectors(TUint32 aHugeSectors)
	{iHugeSectors=aHugeSectors;}
/**
Physical drive number, not used in Symbian OS

@param aPhysicalDriveNumber Physical drive number 
*/
inline void TFatBootSector::SetPhysicalDriveNumber(TInt aPhysicalDriveNumber)
	{
	__ASSERT_DEBUG(!(aPhysicalDriveNumber&~KMaxTUint8),Fault(EFatBadBootSectorParameter));
	iPhysicalDriveNumber=(TUint8)aPhysicalDriveNumber;
	}
/**
Set the reserved byte value

@param aReservedByte Value for reserved byte
*/
inline void TFatBootSector::SetReservedByte(TUint8 aReservedByte)
	{iReserved=aReservedByte;}
/**
Set the extended boot signiture

@param anExtendedBootSignature The extended boot signiture
*/
inline void TFatBootSector::SetExtendedBootSignature(TInt anExtendedBootSignature)
	{
	__ASSERT_DEBUG(!(anExtendedBootSignature&~KMaxTUint8),Fault(EFatBadBootSectorParameter));
	iExtendedBootSignature=(TUint8)anExtendedBootSignature;
	}
/**
Set the unique volume ID

@param anUniqueID Set the unique ID
*/
inline void TFatBootSector::SetUniqueID(TUint32 anUniqueID)
	{iUniqueID=anUniqueID;}
/**
Set the volume's label

@param aDes A descriptor containg the volume label
*/
inline void TFatBootSector::SetVolumeLabel(const TDesC8& aDes)
	{
	__ASSERT_DEBUG(aDes.Length()<=KVolumeLabelSize,Fault(EFatBadBootSectorParameter));
	TPtr8 buf(iVolumeLabel,KVolumeLabelSize);
	buf=aDes;
	}
/**
Set the file system type

@param aDes A descriptor containing the file system type
*/
inline void TFatBootSector::SetFileSysType(const TDesC8& aDes)
	{
	__ASSERT_DEBUG(aDes.Length()<=8,Fault(EFatBadBootSectorParameter));
	TPtr8 buf(iFileSysType,8);
	buf=aDes;
	}


/**
Returns the number of free clusters

@return iFreeCount
*/
inline TUint32 TFSInfo::FreeClusterCount() const
	{return iFreeCount;}
/**
Returns the next free cluster

@return iNextFree
*/
inline TUint32 TFSInfo::NextFreeCluster() const
	{return iNextFree;}
/**
Sets the number of free clusters

@param aFreeCount Number of free clusters
*/
inline void TFSInfo::SetFreeClusterCount(TUint32 aFreeCount)
	{iFreeCount = aFreeCount;}
/**
Sets the next free cluster

@param aNextCluster Cluster number of the next free cluster 
*/
inline void TFSInfo::SetNextFreeCluster(TUint32 aNextCluster)
	{iNextFree = aNextCluster;}

#endif //SL_BPB_INL
