userlibandfileserver/fileserver/sfat32/filesystem_fat.h
changeset 43 96e5fb8b040d
child 36 538db54a451d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/sfat32/filesystem_fat.h	Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,275 @@
+// Copyright (c) 1995-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:
+//
+// Public header file for "FAT" file system. Contains this file system name and optional file system - specific declarations.
+//
+//
+//
+
+
+/**
+ @file
+ @publishedAll
+ @released
+*/
+
+#if !defined(__FILESYSTEM_FAT_H__)
+#define __FILESYSTEM_FAT_H__
+
+
+#if !defined(__F32FILE_H__)
+#include <f32file.h>
+#endif
+
+
+
+/**
+    FAT filesystem name, which shall be provided to RFs::MountFileSystem() and is returned by RFs::FileSystemName() if 
+    this file system is mounted on the drive. The literal is case-insensitive.
+    @see RFs::MountFileSystem()
+    @see RFs::FileSystemName()
+*/
+_LIT(KFileSystemName_FAT, "FAT");
+
+/**
+    FAT file system subtypes, literal values. These values are returned by RFs::FileSystemSubType().
+    The literals are case-insensitive.
+    File sytem "FAT" mounted on the drive can be one of the FAT12/FAT16/FAT32
+
+    @see RFs::::FileSystemSubType()
+*/
+_LIT(KFSSubType_FAT12, "FAT12"); ///< corresponds to FAT12
+_LIT(KFSSubType_FAT16, "FAT16"); ///< corresponds to FAT16   
+_LIT(KFSSubType_FAT32, "FAT32"); ///< corresponds to FAT32
+
+//------------------------------------------------------------------------------
+
+namespace FileSystem_FAT
+{
+
+    /** Numeric representation of FAT file system sub types */
+    enum TFatSubType
+        {
+        EInvalid = 0,       ///< invalid terminal value
+        ENotSpecified = 0,  ///< not specified
+
+        EFat12  = 12,   ///< corresponds to FAT12
+        EFat16  = 16,   ///< corresponds to FAT16
+        EFat32  = 32    ///< corresponds to FAT32
+        };
+
+
+const TUint64 KMaxSupportedFatFileSize = 0xFFFFFFFF; ///< theoretical maximum file size supported by all FAT filesystems (4GB-1)
+
+//------------------------------------------------------------------------------
+
+/** 
+    This class describes specific parameters for formatting volume with FAT file system.
+    The parameters are: FAT sub type (FAT12/16/32), Number of Sectors per cluster, Number of FAT tables, Number of reserved sectors.
+    All parameters are optional and if not set, it is up to the file system implementation to decide values.
+
+    This class package (TVolFormatParam_FATBuf) shall be passed to the RFormat::Open() as "Special format information"
+
+    Please note that the parameters may have invalid combinations and it is not always possible to format volume with the specified
+    FAT sub type, like FAT12. In this case RFormat::Open() will return corresponding error code (the concrete code depends on file system implementation).
+
+    RFormat::Open() does not modify any data in this structure.
+
+    @see TVolFormatParam_FATBuf
+    @see RFormat::Open()
+*/ 
+class TVolFormatParam_FAT : public TVolFormatParam
+{
+ public:    
+    inline TVolFormatParam_FAT();
+    inline void Init();
+
+    inline void SetFatSubType(TFatSubType aSubType);
+    inline void SetFatSubType(const TDesC& aSubType);
+    inline TFatSubType FatSubType() const;
+    //--
+    inline void SetSectPerCluster(TUint32 aSpc);
+    inline TUint32 SectPerCluster() const;
+    //--
+    inline void SetNumFATs(TUint32 aNumFATs);
+    inline TUint32 NumFATs() const;
+
+    //--
+    inline void SetReservedSectors(TUint32 aReservedSectors);
+    inline TUint32 ReservedSectors() const;
+
+
+ private:
+    void SetFileSystemName(const TDesC& aFsName);
+    
+    enum ///< offsets of the data units in parent class container
+        {
+        KOffsetSubType =0,  //-- 0
+        KOffsetReservedSec, //-- 1
+        KOffsetSpc,         //-- 2
+        KOffsetNumFATs,     //-- 3
+        
+        };
+
+}; //TVolFormatParam_FAT
+
+
+/**
+    TVolFormatParam_FAT package buffer to be passed to RFormat::Open().
+    @see TVolFormatParam_FAT
+    @see RFormat::Open()
+*/ 
+typedef TPckgBuf<TVolFormatParam_FAT> TVolFormatParam_FATBuf;
+
+
+
+//------------------------------------------------------------------------------
+//-- inline functions 
+//------------------------------------------------------------------------------
+
+TVolFormatParam_FAT::TVolFormatParam_FAT() : TVolFormatParam() 
+    {
+     __ASSERT_COMPILE(sizeof(TVolFormatParam_FAT) == sizeof(TVolFormatParam));
+     Init();
+    }
+
+//------------------------------------------------------------------------------
+/** initialises the data structure with default values for all parameters and automatically sets file system name as "FAT" */
+void TVolFormatParam_FAT::Init() 
+    {
+    TVolFormatParam::Init(); 
+    TVolFormatParam::SetFileSystemName(KFileSystemName_FAT);
+    }
+
+//------------------------------------------------------------------------------
+/**
+    Set desired FAT subtype. 
+    @param  aSubType specifies FAT12/16/32 subtype. Value 0 means "the file system will decide itself what to use"
+*/
+void TVolFormatParam_FAT::SetFatSubType(TFatSubType aSubType)
+    {
+    ASSERT(aSubType == ENotSpecified || aSubType == EFat12 || aSubType == EFat16 || aSubType == EFat32);
+    SetVal(KOffsetSubType, aSubType);
+    }
+
+//------------------------------------------------------------------------------
+/**
+    Set desired FAT subtype using string literals, @see KFSSubType_FAT12, @see KFSSubType_FAT16, @see KFSSubType_FAT32               
+    @param  aSubType    string descriptor, like "FAT16"
+*/
+void TVolFormatParam_FAT::SetFatSubType(const TDesC& aSubType)
+    {
+    TFatSubType fatType = ENotSpecified;
+
+    if(aSubType.CompareF(KFSSubType_FAT12) == 0)
+        fatType = EFat12;
+    else if(aSubType.CompareF(KFSSubType_FAT16) == 0)
+        fatType = EFat16;
+    else if(aSubType.CompareF(KFSSubType_FAT32) == 0)
+        fatType = EFat32;
+    else
+        { ASSERT(0);}
+
+
+        SetFatSubType(fatType);
+    }
+
+//------------------------------------------------------------------------------
+/** @return FAT sub type value, which is set by SetFatSubType()*/
+TFatSubType TVolFormatParam_FAT::FatSubType() const 
+    {
+    return (TFatSubType)GetVal(KOffsetSubType);
+    }
+
+//------------------------------------------------------------------------------
+/**
+    Set Number of "Sectors per cluster". For valid values see FAT specs.
+    @param  aSpc    Number of "Sectors per cluster". Value 0 means "the file system will decide itself what to use"       
+*/
+void TVolFormatParam_FAT::SetSectPerCluster(TUint32 aSpc)
+    {
+    SetVal(KOffsetSpc, aSpc);
+    }
+
+//------------------------------------------------------------------------------
+/** @return value previously set by SetSectPerCluster() */
+TUint32 TVolFormatParam_FAT::SectPerCluster() const 
+    {
+    return GetVal(KOffsetSpc);
+    }
+
+//------------------------------------------------------------------------------
+/**
+    Set Number of FAT tables on the volume. The maximum is supported by the FAT FS implementation is 2
+    @param  aNumFATs    Number of FAT tables. Value 0 means "the file system will decide itself what to use"       
+*/
+void TVolFormatParam_FAT::SetNumFATs(TUint32 aNumFATs) 
+    {
+    SetVal(KOffsetNumFATs, aNumFATs);
+    }
+
+//------------------------------------------------------------------------------
+/** @return value previously set by SetNumFATs() */
+TUint32 TVolFormatParam_FAT::NumFATs() const 
+    {
+    return GetVal(KOffsetNumFATs);
+    } 
+
+//------------------------------------------------------------------------------
+/**
+    Set number of reserved sectors on FAT volume. The file system will validate this parameter before formatting.
+    @param  aReservedSectors  number of reserved sectors. Value 0 means "the file system will decide itself what to use"       
+*/
+void TVolFormatParam_FAT::SetReservedSectors(TUint32 aReservedSectors)
+    {
+    SetVal(KOffsetReservedSec, aReservedSectors);
+    }
+
+//------------------------------------------------------------------------------
+/** @return value previously set by SetReservedSectors() */
+TUint32 TVolFormatParam_FAT::ReservedSectors() const 
+    {
+    return GetVal(KOffsetReservedSec);
+    } 
+
+
+
+
+//------------------------------------------------------------------------------
+
+
+
+}//namespace FileSystem_FAT
+
+
+
+
+
+
+#endif //__FILESYSTEM_FAT_H__
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+