analyzetool/storageserver/server/src/atdriveinfo.cpp
author hgs
Thu, 13 May 2010 23:59:27 +0300
changeset 20 a71a3e32a2ae
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Definitions for the class TATDriveInfo.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDE FILES
hgs
parents:
diff changeset
    21
#include <f32file.h>
hgs
parents:
diff changeset
    22
#include <driveinfo.h>
hgs
parents:
diff changeset
    23
#include "atdriveinfo.h"
hgs
parents:
diff changeset
    24
#include "atstorageservercommon.h"
hgs
parents:
diff changeset
    25
#include "atlog.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    28
// TATDriveInfo::TATDriveInfo
hgs
parents:
diff changeset
    29
// C++ default constructor.
hgs
parents:
diff changeset
    30
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    31
//
hgs
parents:
diff changeset
    32
TATDriveInfo::TATDriveInfo()
hgs
parents:
diff changeset
    33
    {
hgs
parents:
diff changeset
    34
    LOGSTR1( "TATD TATDriveInfo::TATDriveInfo()" );
hgs
parents:
diff changeset
    35
    }
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    38
// TATDriveInfo::CreatePath()
hgs
parents:
diff changeset
    39
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    40
//    
hgs
parents:
diff changeset
    41
TInt TATDriveInfo::CreatePath( TDes& aPath, 
hgs
parents:
diff changeset
    42
    const TDesC& aFileName, RFs& aFs )
hgs
parents:
diff changeset
    43
    {
hgs
parents:
diff changeset
    44
    LOGSTR1( "TATD TInt TATDriveInfo::CreatePath()" );
hgs
parents:
diff changeset
    45
    
hgs
parents:
diff changeset
    46
    // Drive letter    
hgs
parents:
diff changeset
    47
    TChar driveLetter;
hgs
parents:
diff changeset
    48
    // Drive number
hgs
parents:
diff changeset
    49
    TInt dNumber( EDriveZ );     
hgs
parents:
diff changeset
    50
    TBool found( EFalse );
hgs
parents:
diff changeset
    51
    // Drive type
hgs
parents:
diff changeset
    52
    TUint driveType( KDriveAttRemovable );    
hgs
parents:
diff changeset
    53
    TInt err( KErrNotFound );
hgs
parents:
diff changeset
    54
    
hgs
parents:
diff changeset
    55
    while ( !found )
hgs
parents:
diff changeset
    56
        {
hgs
parents:
diff changeset
    57
        // Get drive letter
hgs
parents:
diff changeset
    58
        if ( GetDrive( driveLetter, dNumber, aFs, driveType ) == KErrNotFound )
hgs
parents:
diff changeset
    59
        	{
hgs
parents:
diff changeset
    60
        	if ( driveType == KDriveAttInternal )
hgs
parents:
diff changeset
    61
        		{
hgs
parents:
diff changeset
    62
                return KErrNotFound;
hgs
parents:
diff changeset
    63
        		}       	
hgs
parents:
diff changeset
    64
            driveType = KDriveAttInternal;
hgs
parents:
diff changeset
    65
        	dNumber = EDriveZ;
hgs
parents:
diff changeset
    66
        	}       
hgs
parents:
diff changeset
    67
        else
hgs
parents:
diff changeset
    68
        	{
hgs
parents:
diff changeset
    69
			// Create path
hgs
parents:
diff changeset
    70
			aPath.Delete( 0, aPath.MaxLength() );
hgs
parents:
diff changeset
    71
			aPath.Append( driveLetter );
hgs
parents:
diff changeset
    72
		  
hgs
parents:
diff changeset
    73
		            
hgs
parents:
diff changeset
    74
		#ifdef __WINS__
hgs
parents:
diff changeset
    75
            // For emulator the data file is stored to different location
hgs
parents:
diff changeset
    76
            aPath.Append( KATDataFilePath );       
hgs
parents:
diff changeset
    77
		#else
hgs
parents:
diff changeset
    78
		    TDriveInfo driveInfo;
hgs
parents:
diff changeset
    79
		    aFs.Drive( driveInfo, dNumber );      
hgs
parents:
diff changeset
    80
            // The drive is removable( memory card ) so we can log inside of root folder
hgs
parents:
diff changeset
    81
            if ( driveInfo.iDriveAtt & KDriveAttRemovable )
hgs
parents:
diff changeset
    82
                {
hgs
parents:
diff changeset
    83
                aPath.Append( KATDataFilePath );       
hgs
parents:
diff changeset
    84
                }
hgs
parents:
diff changeset
    85
            // The drive is internal user can only access data folder so log into that
hgs
parents:
diff changeset
    86
            else
hgs
parents:
diff changeset
    87
                {
hgs
parents:
diff changeset
    88
                aPath.Append( KATDataFilePath2 );       
hgs
parents:
diff changeset
    89
                }
hgs
parents:
diff changeset
    90
		#endif
hgs
parents:
diff changeset
    91
						
hgs
parents:
diff changeset
    92
			// Make a directory for AToolStorageServer's logging data file
hgs
parents:
diff changeset
    93
			err = aFs.MkDir( aPath );
hgs
parents:
diff changeset
    94
			LOGSTR2( "STSE > aFs.MkDir err = %i", err );
hgs
parents:
diff changeset
    95
			
hgs
parents:
diff changeset
    96
			if ( !err || err == KErrAlreadyExists )
hgs
parents:
diff changeset
    97
				{                
hgs
parents:
diff changeset
    98
                if ( aFileName.Length() != 0 && 
hgs
parents:
diff changeset
    99
                     ( ( aPath.MaxLength() - aPath.Length() ) > aFileName.Length() ) )
hgs
parents:
diff changeset
   100
                    {
hgs
parents:
diff changeset
   101
                    aPath.Append( aFileName );
hgs
parents:
diff changeset
   102
                    }
hgs
parents:
diff changeset
   103
				found = ETrue;
hgs
parents:
diff changeset
   104
				}
hgs
parents:
diff changeset
   105
        	}
hgs
parents:
diff changeset
   106
        }        
hgs
parents:
diff changeset
   107
    return err;        
hgs
parents:
diff changeset
   108
    }
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   111
// TATDriveInfo::GetDrive()
hgs
parents:
diff changeset
   112
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   113
//    
hgs
parents:
diff changeset
   114
TInt TATDriveInfo::GetDrive( TChar& aDrive, TInt& aDriveNumber, RFs& aFs, 
hgs
parents:
diff changeset
   115
	const TUint aDriveType )
hgs
parents:
diff changeset
   116
    {
hgs
parents:
diff changeset
   117
    LOGSTR1( "TATD TInt TATDriveInfo::GetDrive()" );
hgs
parents:
diff changeset
   118
       
hgs
parents:
diff changeset
   119
    // Contains drive information.
hgs
parents:
diff changeset
   120
    TDriveInfo driveInfo; 
hgs
parents:
diff changeset
   121
    
hgs
parents:
diff changeset
   122
    for ( TInt i = aDriveNumber; i >= (TInt)EDriveA; i-- )
hgs
parents:
diff changeset
   123
        {
hgs
parents:
diff changeset
   124
        // Gets information about a drive and the medium mounted on it.
hgs
parents:
diff changeset
   125
        // If error occured then skip to next drive.
hgs
parents:
diff changeset
   126
        if ( aFs.Drive( driveInfo, i ) != KErrNone )
hgs
parents:
diff changeset
   127
            continue;
hgs
parents:
diff changeset
   128
                
hgs
parents:
diff changeset
   129
        // Test whether drive is available. If not, skip to next drive.
hgs
parents:
diff changeset
   130
        if ( driveInfo.iDriveAtt & KDriveAbsent || i == (TInt)EDriveD ||
hgs
parents:
diff changeset
   131
             driveInfo.iDriveAtt & KDriveAttRom || 
hgs
parents:
diff changeset
   132
             driveInfo.iMediaAtt & KMediaAttWriteProtected ||
hgs
parents:
diff changeset
   133
             driveInfo.iDriveAtt & KDriveFileSysROFS )
hgs
parents:
diff changeset
   134
            continue;
hgs
parents:
diff changeset
   135
        
hgs
parents:
diff changeset
   136
        // Maps a drive number to the corresponding character.
hgs
parents:
diff changeset
   137
        if ( aFs.DriveToChar( i, aDrive ) != KErrNone )
hgs
parents:
diff changeset
   138
            continue;                
hgs
parents:
diff changeset
   139
        
hgs
parents:
diff changeset
   140
        if ( driveInfo.iDriveAtt & aDriveType &&
hgs
parents:
diff changeset
   141
             driveInfo.iType != EMediaNotPresent &&
hgs
parents:
diff changeset
   142
             driveInfo.iType != EMediaCdRom )
hgs
parents:
diff changeset
   143
            {
hgs
parents:
diff changeset
   144
            TUint status( 0 );
hgs
parents:
diff changeset
   145
            
hgs
parents:
diff changeset
   146
            switch ( aDriveType )
hgs
parents:
diff changeset
   147
                {
hgs
parents:
diff changeset
   148
                case KDriveAttRemovable:
hgs
parents:
diff changeset
   149
                    {
hgs
parents:
diff changeset
   150
                    // Get the drive status of the default removable mass storage.                    
hgs
parents:
diff changeset
   151
                    if ( DriveInfo::GetDriveStatus( aFs, i, status ) == KErrNone )
hgs
parents:
diff changeset
   152
                        {
hgs
parents:
diff changeset
   153
                        // To indicate that the drive is physically removable.
hgs
parents:
diff changeset
   154
                        if ( status & DriveInfo::EDriveRemovable &&
hgs
parents:
diff changeset
   155
                             !( status & DriveInfo::EDriveCorrupt ) )
hgs
parents:
diff changeset
   156
                            {
hgs
parents:
diff changeset
   157
                            aDriveNumber = --i;
hgs
parents:
diff changeset
   158
                            return KErrNone;
hgs
parents:
diff changeset
   159
                            }
hgs
parents:
diff changeset
   160
                        }
hgs
parents:
diff changeset
   161
                    }
hgs
parents:
diff changeset
   162
                    break;
hgs
parents:
diff changeset
   163
                case KDriveAttInternal:
hgs
parents:
diff changeset
   164
                    {
hgs
parents:
diff changeset
   165
                    // Get the drive status of the default removable mass storage.
hgs
parents:
diff changeset
   166
                    if ( DriveInfo::GetDriveStatus( aFs, i, status ) == KErrNone )
hgs
parents:
diff changeset
   167
                        {
hgs
parents:
diff changeset
   168
                        // To indicate that the drive is internal and 
hgs
parents:
diff changeset
   169
                        // cannot be physically removed.
hgs
parents:
diff changeset
   170
                        if ( status & DriveInfo::EDriveInternal &&
hgs
parents:
diff changeset
   171
                             !( status & DriveInfo::EDriveExternallyMountable ) )
hgs
parents:
diff changeset
   172
                            {
hgs
parents:
diff changeset
   173
                            aDriveNumber = --i;
hgs
parents:
diff changeset
   174
                            return KErrNone;
hgs
parents:
diff changeset
   175
                            }
hgs
parents:
diff changeset
   176
                        }
hgs
parents:
diff changeset
   177
                    }
hgs
parents:
diff changeset
   178
                    break;
hgs
parents:
diff changeset
   179
                    
hgs
parents:
diff changeset
   180
                default:
hgs
parents:
diff changeset
   181
                    break;
hgs
parents:
diff changeset
   182
                }
hgs
parents:
diff changeset
   183
            }
hgs
parents:
diff changeset
   184
        }
hgs
parents:
diff changeset
   185
    return KErrNotFound;
hgs
parents:
diff changeset
   186
    }
hgs
parents:
diff changeset
   187
 
hgs
parents:
diff changeset
   188
// End of File