epoc32/include/filesystem_fat.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@4
     2
// All rights reserved.
williamr@4
     3
// This component and the accompanying materials are made available
williamr@4
     4
// under the terms of the License "Eclipse Public License v1.0"
williamr@4
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4
     7
//
williamr@4
     8
// Initial Contributors:
williamr@4
     9
// Nokia Corporation - initial contribution.
williamr@4
    10
//
williamr@4
    11
// Contributors:
williamr@4
    12
//
williamr@4
    13
// Description:
williamr@4
    14
//
williamr@4
    15
// Public header file for "FAT" file system. Contains this file system name and optional file system - specific declarations.
williamr@4
    16
//
williamr@4
    17
//
williamr@4
    18
//
williamr@4
    19
williamr@4
    20
williamr@4
    21
/**
williamr@4
    22
 @file
williamr@4
    23
 @publishedAll
williamr@4
    24
 @released
williamr@4
    25
*/
williamr@4
    26
williamr@4
    27
#if !defined(__FILESYSTEM_FAT_H__)
williamr@4
    28
#define __FILESYSTEM_FAT_H__
williamr@4
    29
williamr@4
    30
williamr@4
    31
#if !defined(__F32FILE_H__)
williamr@4
    32
#include <f32file.h>
williamr@4
    33
#endif
williamr@4
    34
williamr@4
    35
williamr@4
    36
williamr@4
    37
/**
williamr@4
    38
    FAT filesystem name, which shall be provided to RFs::MountFileSystem() and is returned by RFs::FileSystemName() if 
williamr@4
    39
    this file system is mounted on the drive. The literal is case-insensitive.
williamr@4
    40
    @see RFs::MountFileSystem()
williamr@4
    41
    @see RFs::FileSystemName()
williamr@4
    42
*/
williamr@4
    43
_LIT(KFileSystemName_FAT, "FAT");
williamr@4
    44
williamr@4
    45
/**
williamr@4
    46
    FAT file system subtypes, literal values. These values are returned by RFs::FileSystemSubType().
williamr@4
    47
    The literals are case-insensitive.
williamr@4
    48
    File sytem "FAT" mounted on the drive can be one of the FAT12/FAT16/FAT32
williamr@4
    49
williamr@4
    50
    @see RFs::::FileSystemSubType()
williamr@4
    51
*/
williamr@4
    52
_LIT(KFSSubType_FAT12, "FAT12"); ///< corresponds to FAT12
williamr@4
    53
_LIT(KFSSubType_FAT16, "FAT16"); ///< corresponds to FAT16   
williamr@4
    54
_LIT(KFSSubType_FAT32, "FAT32"); ///< corresponds to FAT32
williamr@4
    55
williamr@4
    56
//------------------------------------------------------------------------------
williamr@4
    57
williamr@4
    58
namespace FileSystem_FAT
williamr@4
    59
{
williamr@4
    60
williamr@4
    61
    /** Numeric representation of FAT file system sub types */
williamr@4
    62
    enum TFatSubType
williamr@4
    63
        {
williamr@4
    64
        EInvalid = 0,       ///< invalid terminal value
williamr@4
    65
        ENotSpecified = 0,  ///< not specified
williamr@4
    66
williamr@4
    67
        EFat12  = 12,   ///< corresponds to FAT12
williamr@4
    68
        EFat16  = 16,   ///< corresponds to FAT16
williamr@4
    69
        EFat32  = 32    ///< corresponds to FAT32
williamr@4
    70
        };
williamr@4
    71
williamr@4
    72
williamr@4
    73
const TUint64 KMaxSupportedFatFileSize = 0xFFFFFFFF; ///< theoretical maximum file size supported by all FAT filesystems (4GB-1)
williamr@4
    74
williamr@4
    75
//------------------------------------------------------------------------------
williamr@4
    76
williamr@4
    77
/** 
williamr@4
    78
    This class describes specific parameters for formatting volume with FAT file system.
williamr@4
    79
    The parameters are: FAT sub type (FAT12/16/32), Number of Sectors per cluster, Number of FAT tables, Number of reserved sectors.
williamr@4
    80
    All parameters are optional and if not set, it is up to the file system implementation to decide values.
williamr@4
    81
williamr@4
    82
    This class package (TVolFormatParam_FATBuf) shall be passed to the RFormat::Open() as "Special format information"
williamr@4
    83
williamr@4
    84
    Please note that the parameters may have invalid combinations and it is not always possible to format volume with the specified
williamr@4
    85
    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
    86
williamr@4
    87
    RFormat::Open() does not modify any data in this structure.
williamr@4
    88
williamr@4
    89
    @see TVolFormatParam_FATBuf
williamr@4
    90
    @see RFormat::Open()
williamr@4
    91
*/ 
williamr@4
    92
class TVolFormatParam_FAT : public TVolFormatParam
williamr@4
    93
{
williamr@4
    94
 public:    
williamr@4
    95
    inline TVolFormatParam_FAT();
williamr@4
    96
    inline void Init();
williamr@4
    97
williamr@4
    98
    inline void SetFatSubType(TFatSubType aSubType);
williamr@4
    99
    inline void SetFatSubType(const TDesC& aSubType);
williamr@4
   100
    inline TFatSubType FatSubType() const;
williamr@4
   101
    //--
williamr@4
   102
    inline void SetSectPerCluster(TUint32 aSpc);
williamr@4
   103
    inline TUint32 SectPerCluster() const;
williamr@4
   104
    //--
williamr@4
   105
    inline void SetNumFATs(TUint32 aNumFATs);
williamr@4
   106
    inline TUint32 NumFATs() const;
williamr@4
   107
williamr@4
   108
    //--
williamr@4
   109
    inline void SetReservedSectors(TUint32 aReservedSectors);
williamr@4
   110
    inline TUint32 ReservedSectors() const;
williamr@4
   111
williamr@4
   112
williamr@4
   113
 private:
williamr@4
   114
    void SetFileSystemName(const TDesC& aFsName);
williamr@4
   115
    
williamr@4
   116
    enum ///< offsets of the data units in parent class container
williamr@4
   117
        {
williamr@4
   118
        KOffsetSubType =0,  //-- 0
williamr@4
   119
        KOffsetReservedSec, //-- 1
williamr@4
   120
        KOffsetSpc,         //-- 2  !! do not change this offset. 
williamr@4
   121
        KOffsetNumFATs,     //-- 3  !! do not change this offset. 
williamr@4
   122
        
williamr@4
   123
        };
williamr@4
   124
williamr@4
   125
}; //TVolFormatParam_FAT
williamr@4
   126
williamr@4
   127
williamr@4
   128
/**
williamr@4
   129
    TVolFormatParam_FAT package buffer to be passed to RFormat::Open().
williamr@4
   130
    @see TVolFormatParam_FAT
williamr@4
   131
    @see RFormat::Open()
williamr@4
   132
*/ 
williamr@4
   133
typedef TPckgBuf<TVolFormatParam_FAT> TVolFormatParam_FATBuf;
williamr@4
   134
williamr@4
   135
williamr@4
   136
williamr@4
   137
//------------------------------------------------------------------------------
williamr@4
   138
//-- inline functions 
williamr@4
   139
//------------------------------------------------------------------------------
williamr@4
   140
williamr@4
   141
TVolFormatParam_FAT::TVolFormatParam_FAT() : TVolFormatParam() 
williamr@4
   142
    {
williamr@4
   143
     __ASSERT_COMPILE(sizeof(TVolFormatParam_FAT) == sizeof(TVolFormatParam));
williamr@4
   144
     __ASSERT_COMPILE(KOffsetSpc == 2);
williamr@4
   145
     __ASSERT_COMPILE(KOffsetNumFATs == 3);
williamr@4
   146
     
williamr@4
   147
     Init();
williamr@4
   148
    }
williamr@4
   149
williamr@4
   150
//------------------------------------------------------------------------------
williamr@4
   151
/** initialises the data structure with default values for all parameters and automatically sets file system name as "FAT" */
williamr@4
   152
void TVolFormatParam_FAT::Init() 
williamr@4
   153
    {
williamr@4
   154
    TVolFormatParam::Init(); 
williamr@4
   155
    TVolFormatParam::SetFileSystemName(KFileSystemName_FAT);
williamr@4
   156
    }
williamr@4
   157
williamr@4
   158
//------------------------------------------------------------------------------
williamr@4
   159
/**
williamr@4
   160
    Set desired FAT subtype. 
williamr@4
   161
    @param  aSubType specifies FAT12/16/32 subtype. Value 0 means "the file system will decide itself what to use"
williamr@4
   162
*/
williamr@4
   163
void TVolFormatParam_FAT::SetFatSubType(TFatSubType aSubType)
williamr@4
   164
    {
williamr@4
   165
    ASSERT(aSubType == ENotSpecified || aSubType == EFat12 || aSubType == EFat16 || aSubType == EFat32);
williamr@4
   166
    SetVal(KOffsetSubType, aSubType);
williamr@4
   167
    }
williamr@4
   168
williamr@4
   169
//------------------------------------------------------------------------------
williamr@4
   170
/**
williamr@4
   171
    Set desired FAT subtype using string literals, @see KFSSubType_FAT12, @see KFSSubType_FAT16, @see KFSSubType_FAT32               
williamr@4
   172
    @param  aSubType    string descriptor, like "FAT16"
williamr@4
   173
*/
williamr@4
   174
void TVolFormatParam_FAT::SetFatSubType(const TDesC& aSubType)
williamr@4
   175
    {
williamr@4
   176
    TFatSubType fatType = ENotSpecified;
williamr@4
   177
williamr@4
   178
    if(aSubType.CompareF(KFSSubType_FAT12) == 0)
williamr@4
   179
        fatType = EFat12;
williamr@4
   180
    else if(aSubType.CompareF(KFSSubType_FAT16) == 0)
williamr@4
   181
        fatType = EFat16;
williamr@4
   182
    else if(aSubType.CompareF(KFSSubType_FAT32) == 0)
williamr@4
   183
        fatType = EFat32;
williamr@4
   184
    else
williamr@4
   185
        { ASSERT(0);}
williamr@4
   186
williamr@4
   187
williamr@4
   188
        SetFatSubType(fatType);
williamr@4
   189
    }
williamr@4
   190
williamr@4
   191
//------------------------------------------------------------------------------
williamr@4
   192
/** @return FAT sub type value, which is set by SetFatSubType()*/
williamr@4
   193
TFatSubType TVolFormatParam_FAT::FatSubType() const 
williamr@4
   194
    {
williamr@4
   195
    return (TFatSubType)GetVal(KOffsetSubType);
williamr@4
   196
    }
williamr@4
   197
williamr@4
   198
//------------------------------------------------------------------------------
williamr@4
   199
/**
williamr@4
   200
    Set Number of "Sectors per cluster". For valid values see FAT specs.
williamr@4
   201
    @param  aSpc    Number of "Sectors per cluster". Value 0 means "the file system will decide itself what to use"       
williamr@4
   202
*/
williamr@4
   203
void TVolFormatParam_FAT::SetSectPerCluster(TUint32 aSpc)
williamr@4
   204
    {
williamr@4
   205
    SetVal(KOffsetSpc, aSpc);
williamr@4
   206
    }
williamr@4
   207
williamr@4
   208
//------------------------------------------------------------------------------
williamr@4
   209
/** @return value previously set by SetSectPerCluster() */
williamr@4
   210
TUint32 TVolFormatParam_FAT::SectPerCluster() const 
williamr@4
   211
    {
williamr@4
   212
    return GetVal(KOffsetSpc);
williamr@4
   213
    }
williamr@4
   214
williamr@4
   215
//------------------------------------------------------------------------------
williamr@4
   216
/**
williamr@4
   217
    Set Number of FAT tables on the volume. The maximum is supported by the FAT FS implementation is 2
williamr@4
   218
    @param  aNumFATs    Number of FAT tables. Value 0 means "the file system will decide itself what to use"       
williamr@4
   219
*/
williamr@4
   220
void TVolFormatParam_FAT::SetNumFATs(TUint32 aNumFATs) 
williamr@4
   221
    {
williamr@4
   222
    SetVal(KOffsetNumFATs, aNumFATs);
williamr@4
   223
    }
williamr@4
   224
williamr@4
   225
//------------------------------------------------------------------------------
williamr@4
   226
/** @return value previously set by SetNumFATs() */
williamr@4
   227
TUint32 TVolFormatParam_FAT::NumFATs() const 
williamr@4
   228
    {
williamr@4
   229
    return GetVal(KOffsetNumFATs);
williamr@4
   230
    } 
williamr@4
   231
williamr@4
   232
//------------------------------------------------------------------------------
williamr@4
   233
/**
williamr@4
   234
    Set number of reserved sectors on FAT volume. The file system will validate this parameter before formatting.
williamr@4
   235
    @param  aReservedSectors  number of reserved sectors. Value 0 means "the file system will decide itself what to use"       
williamr@4
   236
*/
williamr@4
   237
void TVolFormatParam_FAT::SetReservedSectors(TUint32 aReservedSectors)
williamr@4
   238
    {
williamr@4
   239
    SetVal(KOffsetReservedSec, aReservedSectors);
williamr@4
   240
    }
williamr@4
   241
williamr@4
   242
//------------------------------------------------------------------------------
williamr@4
   243
/** @return value previously set by SetReservedSectors() */
williamr@4
   244
TUint32 TVolFormatParam_FAT::ReservedSectors() const 
williamr@4
   245
    {
williamr@4
   246
    return GetVal(KOffsetReservedSec);
williamr@4
   247
    } 
williamr@4
   248
williamr@4
   249
williamr@4
   250
williamr@4
   251
williamr@4
   252
//------------------------------------------------------------------------------
williamr@4
   253
williamr@4
   254
williamr@4
   255
williamr@4
   256
}//namespace FileSystem_FAT
williamr@4
   257
williamr@4
   258
williamr@4
   259
williamr@4
   260
williamr@4
   261
williamr@4
   262
williamr@4
   263
#endif //__FILESYSTEM_FAT_H__
williamr@4
   264
williamr@4
   265
williamr@4
   266
williamr@4
   267
williamr@4
   268
williamr@4
   269
williamr@4
   270
williamr@4
   271
williamr@4
   272
williamr@4
   273
williamr@4
   274
williamr@4
   275
williamr@4
   276
williamr@4
   277
williamr@4
   278