williamr@4: // Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of the License "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: // Public header file for "FAT" file system. Contains this file system name and optional file system - specific declarations. williamr@4: // williamr@4: // williamr@4: // williamr@4: williamr@4: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #if !defined(__FILESYSTEM_FAT_H__) williamr@4: #define __FILESYSTEM_FAT_H__ williamr@4: williamr@4: williamr@4: #if !defined(__F32FILE_H__) williamr@4: #include williamr@4: #endif williamr@4: williamr@4: williamr@4: williamr@4: /** williamr@4: FAT filesystem name, which shall be provided to RFs::MountFileSystem() and is returned by RFs::FileSystemName() if williamr@4: this file system is mounted on the drive. The literal is case-insensitive. williamr@4: @see RFs::MountFileSystem() williamr@4: @see RFs::FileSystemName() williamr@4: */ williamr@4: _LIT(KFileSystemName_FAT, "FAT"); williamr@4: williamr@4: /** williamr@4: FAT file system subtypes, literal values. These values are returned by RFs::FileSystemSubType(). williamr@4: The literals are case-insensitive. williamr@4: File sytem "FAT" mounted on the drive can be one of the FAT12/FAT16/FAT32 williamr@4: williamr@4: @see RFs::::FileSystemSubType() williamr@4: */ williamr@4: _LIT(KFSSubType_FAT12, "FAT12"); ///< corresponds to FAT12 williamr@4: _LIT(KFSSubType_FAT16, "FAT16"); ///< corresponds to FAT16 williamr@4: _LIT(KFSSubType_FAT32, "FAT32"); ///< corresponds to FAT32 williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: williamr@4: namespace FileSystem_FAT williamr@4: { williamr@4: williamr@4: /** Numeric representation of FAT file system sub types */ williamr@4: enum TFatSubType williamr@4: { williamr@4: EInvalid = 0, ///< invalid terminal value williamr@4: ENotSpecified = 0, ///< not specified williamr@4: williamr@4: EFat12 = 12, ///< corresponds to FAT12 williamr@4: EFat16 = 16, ///< corresponds to FAT16 williamr@4: EFat32 = 32 ///< corresponds to FAT32 williamr@4: }; williamr@4: williamr@4: williamr@4: const TUint64 KMaxSupportedFatFileSize = 0xFFFFFFFF; ///< theoretical maximum file size supported by all FAT filesystems (4GB-1) williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: williamr@4: /** williamr@4: This class describes specific parameters for formatting volume with FAT file system. williamr@4: The parameters are: FAT sub type (FAT12/16/32), Number of Sectors per cluster, Number of FAT tables, Number of reserved sectors. williamr@4: All parameters are optional and if not set, it is up to the file system implementation to decide values. williamr@4: williamr@4: This class package (TVolFormatParam_FATBuf) shall be passed to the RFormat::Open() as "Special format information" williamr@4: williamr@4: Please note that the parameters may have invalid combinations and it is not always possible to format volume with the specified williamr@4: FAT sub type, like FAT12. In this case RFormat::Open() will return corresponding error code (the concrete code depends on file system implementation). williamr@4: williamr@4: RFormat::Open() does not modify any data in this structure. williamr@4: williamr@4: @see TVolFormatParam_FATBuf williamr@4: @see RFormat::Open() williamr@4: */ williamr@4: class TVolFormatParam_FAT : public TVolFormatParam williamr@4: { williamr@4: public: williamr@4: inline TVolFormatParam_FAT(); williamr@4: inline void Init(); williamr@4: williamr@4: inline void SetFatSubType(TFatSubType aSubType); williamr@4: inline void SetFatSubType(const TDesC& aSubType); williamr@4: inline TFatSubType FatSubType() const; williamr@4: //-- williamr@4: inline void SetSectPerCluster(TUint32 aSpc); williamr@4: inline TUint32 SectPerCluster() const; williamr@4: //-- williamr@4: inline void SetNumFATs(TUint32 aNumFATs); williamr@4: inline TUint32 NumFATs() const; williamr@4: williamr@4: //-- williamr@4: inline void SetReservedSectors(TUint32 aReservedSectors); williamr@4: inline TUint32 ReservedSectors() const; williamr@4: williamr@4: williamr@4: private: williamr@4: void SetFileSystemName(const TDesC& aFsName); williamr@4: williamr@4: enum ///< offsets of the data units in parent class container williamr@4: { williamr@4: KOffsetSubType =0, //-- 0 williamr@4: KOffsetReservedSec, //-- 1 williamr@4: KOffsetSpc, //-- 2 !! do not change this offset. williamr@4: KOffsetNumFATs, //-- 3 !! do not change this offset. williamr@4: williamr@4: }; williamr@4: williamr@4: }; //TVolFormatParam_FAT williamr@4: williamr@4: williamr@4: /** williamr@4: TVolFormatParam_FAT package buffer to be passed to RFormat::Open(). williamr@4: @see TVolFormatParam_FAT williamr@4: @see RFormat::Open() williamr@4: */ williamr@4: typedef TPckgBuf TVolFormatParam_FATBuf; williamr@4: williamr@4: williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: //-- inline functions williamr@4: //------------------------------------------------------------------------------ williamr@4: williamr@4: TVolFormatParam_FAT::TVolFormatParam_FAT() : TVolFormatParam() williamr@4: { williamr@4: __ASSERT_COMPILE(sizeof(TVolFormatParam_FAT) == sizeof(TVolFormatParam)); williamr@4: __ASSERT_COMPILE(KOffsetSpc == 2); williamr@4: __ASSERT_COMPILE(KOffsetNumFATs == 3); williamr@4: williamr@4: Init(); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** initialises the data structure with default values for all parameters and automatically sets file system name as "FAT" */ williamr@4: void TVolFormatParam_FAT::Init() williamr@4: { williamr@4: TVolFormatParam::Init(); williamr@4: TVolFormatParam::SetFileSystemName(KFileSystemName_FAT); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** williamr@4: Set desired FAT subtype. williamr@4: @param aSubType specifies FAT12/16/32 subtype. Value 0 means "the file system will decide itself what to use" williamr@4: */ williamr@4: void TVolFormatParam_FAT::SetFatSubType(TFatSubType aSubType) williamr@4: { williamr@4: ASSERT(aSubType == ENotSpecified || aSubType == EFat12 || aSubType == EFat16 || aSubType == EFat32); williamr@4: SetVal(KOffsetSubType, aSubType); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** williamr@4: Set desired FAT subtype using string literals, @see KFSSubType_FAT12, @see KFSSubType_FAT16, @see KFSSubType_FAT32 williamr@4: @param aSubType string descriptor, like "FAT16" williamr@4: */ williamr@4: void TVolFormatParam_FAT::SetFatSubType(const TDesC& aSubType) williamr@4: { williamr@4: TFatSubType fatType = ENotSpecified; williamr@4: williamr@4: if(aSubType.CompareF(KFSSubType_FAT12) == 0) williamr@4: fatType = EFat12; williamr@4: else if(aSubType.CompareF(KFSSubType_FAT16) == 0) williamr@4: fatType = EFat16; williamr@4: else if(aSubType.CompareF(KFSSubType_FAT32) == 0) williamr@4: fatType = EFat32; williamr@4: else williamr@4: { ASSERT(0);} williamr@4: williamr@4: williamr@4: SetFatSubType(fatType); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** @return FAT sub type value, which is set by SetFatSubType()*/ williamr@4: TFatSubType TVolFormatParam_FAT::FatSubType() const williamr@4: { williamr@4: return (TFatSubType)GetVal(KOffsetSubType); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** williamr@4: Set Number of "Sectors per cluster". For valid values see FAT specs. williamr@4: @param aSpc Number of "Sectors per cluster". Value 0 means "the file system will decide itself what to use" williamr@4: */ williamr@4: void TVolFormatParam_FAT::SetSectPerCluster(TUint32 aSpc) williamr@4: { williamr@4: SetVal(KOffsetSpc, aSpc); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** @return value previously set by SetSectPerCluster() */ williamr@4: TUint32 TVolFormatParam_FAT::SectPerCluster() const williamr@4: { williamr@4: return GetVal(KOffsetSpc); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** williamr@4: Set Number of FAT tables on the volume. The maximum is supported by the FAT FS implementation is 2 williamr@4: @param aNumFATs Number of FAT tables. Value 0 means "the file system will decide itself what to use" williamr@4: */ williamr@4: void TVolFormatParam_FAT::SetNumFATs(TUint32 aNumFATs) williamr@4: { williamr@4: SetVal(KOffsetNumFATs, aNumFATs); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** @return value previously set by SetNumFATs() */ williamr@4: TUint32 TVolFormatParam_FAT::NumFATs() const williamr@4: { williamr@4: return GetVal(KOffsetNumFATs); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** williamr@4: Set number of reserved sectors on FAT volume. The file system will validate this parameter before formatting. williamr@4: @param aReservedSectors number of reserved sectors. Value 0 means "the file system will decide itself what to use" williamr@4: */ williamr@4: void TVolFormatParam_FAT::SetReservedSectors(TUint32 aReservedSectors) williamr@4: { williamr@4: SetVal(KOffsetReservedSec, aReservedSectors); williamr@4: } williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: /** @return value previously set by SetReservedSectors() */ williamr@4: TUint32 TVolFormatParam_FAT::ReservedSectors() const williamr@4: { williamr@4: return GetVal(KOffsetReservedSec); williamr@4: } williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: //------------------------------------------------------------------------------ williamr@4: williamr@4: williamr@4: williamr@4: }//namespace FileSystem_FAT williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: #endif //__FILESYSTEM_FAT_H__ williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: williamr@4: