kerneltest/e32test/lffs/tf_fsscan.cpp
author Tom Cosgrove <tom.cosgrove@nokia.com>
Fri, 28 May 2010 16:26:05 +0100
branchRCL_3
changeset 29 743008598095
parent 6 0173bcd7697c
permissions -rw-r--r--
Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h) Have multiple extension sections in the bld.inf, one for each version of the compiler. The RVCT version building the tools will build the runtime libraries for its version, but make sure we extract all the other versions from zip archives. Also add the archive for RVCT4.

// Copyright (c) 2001-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:
// this isn't actually a test of the media driver.It scans all loaded media
// drivers a filesystems and prints information about them
// 
//

#include <e32std.h>
#include <e32std_private.h>
#include <e32svr.h>
#include <e32test.h>
#include <f32file.h>



LOCAL_C void ScanPhysicalDeviceDrivers()
	/**
	 * Displays list of loaded PDDs
	 */
	{
	RDebug::Print( _L("Scanning loaded media drivers...") );

	_LIT( KSearchName, "Media.*" );
	TFindPhysicalDevice findHb;
	findHb.Find(KSearchName);
	TFullName name;
	while (findHb.Next(name)==KErrNone)
		{
		_LIT( KFormatStr, "    %S" );
		RDebug::Print( KFormatStr, &name );
		}

	RDebug::Print( _L("\r\n") );
	}


LOCAL_C void ShowDriveCaps( const TLocalDriveCaps& aCaps )
	{
	RDebug::Print( _L("    size=%ld"), aCaps.iSize );
	RDebug::Print( _L("    media type=%d"), aCaps.iType );
	RDebug::Print( _L("    connection bus=%d"), aCaps.iConnectionBusType );
	RDebug::Print( _L("    drive attributes=0x%x"), aCaps.iDriveAtt );
	RDebug::Print( _L("    media attributes=0x%x"), aCaps.iMediaAtt );
    RDebug::Print( _L("    base address=0x%x"), aCaps.iBaseAddress );

	_LIT( KFsysUnknown, "Unknown" );
	_LIT( KFsysRom, "ROM" );
	_LIT( KFsysFat, "FAT" );
	_LIT( KFsysLffs, "LFFS" );
	const TDesC* fsType;
	switch( aCaps.iFileSystemId )
		{
		case KDriveFileSysFAT:
			fsType = &KFsysFat;
			break;
		case KDriveFileSysROM:
			fsType = &KFsysRom;
			break;
		case KDriveFileSysLFFS:
			fsType = &KFsysLffs;
			break;
		default:
			fsType = &KFsysUnknown;
			break;
		}

	RDebug::Print( _L("    filesystem id=%S (%d)\r\n"), fsType, aCaps.iFileSystemId );
	}

LOCAL_C void ShowVariantDriveInfo()
	/**
	 * Display drive mapping info from variant/ASSP layers
	 */
	{
	RDebug::Print( _L("Variant drive info...") );


	// Drive info
	TDriveInfoV1Buf driveInfo;
	TInt r=UserHal::DriveInfo(driveInfo);
	if( KErrNone == r )
		{
		RDebug::Print( _L("Total supported drives = %d"), driveInfo().iTotalSupportedDrives );
		}
	else
		{
		RDebug::Print( _L("!! Failed to get drive info (e=%d)"), r );
		}

	// Attempt to open local drives
	for( TInt i = 0; i < KMaxLocalDrives; i++ )
		{
		TBusLocalDrive drive;
		TBool changedFlag = EFalse;
		TInt r = drive.Connect( i, changedFlag );
		if( KErrNone == r )
			{
			RDebug::Print( _L("LocDrive %d: connected"), i );
			TLocalDriveCapsV2Buf caps;
			TInt rv = drive.Caps( caps );
			if( KErrNone == rv )
				{
				ShowDriveCaps( caps() );
				}
			else
				{
				RDebug::Print( _L("    failed to get caps(%d)"), rv );
				}
			}
		else
			{
			RDebug::Print( _L("LocDrive %d: not available(%d)"), r );
			}
		drive.Disconnect();
		}

	RDebug::Print( _L("\r\n") );
	}



LOCAL_C void ShowVolumeInfo( const TVolumeInfo& aInfo )
	{
	
	RDebug::Print( _L("    media type=%d"), aInfo.iDrive.iType );
	RDebug::Print( _L("    drive attributes=0x%x"), aInfo.iDrive.iDriveAtt );
	RDebug::Print( _L("    media attributes=0x%x"), aInfo.iDrive.iMediaAtt );
	RDebug::Print( _L("    connection bus=%d"), aInfo.iDrive.iConnectionBusType );

	RDebug::Print( _L("    UID=0x%x"), aInfo.iUniqueID );
	RDebug::Print( _L("    size=0x%lx"), aInfo.iSize );
	RDebug::Print( _L("    free=0x%lx"), aInfo.iFree );
	RDebug::Print( _L("    name=%S"), &aInfo.iName );
	}


LOCAL_C void ShowDriveMountInfo()
	/**
	 * Show mounted filesystems
	 */
	{
	RDebug::Print( _L("Scanning drives") );

	RFs fs;
	TInt rv = fs.Connect();
	if( KErrNone != rv )
		{
		RDebug::Print( _L("!! Failed to connect to F32(%d)"), rv );
		return;
		}

	for( TInt i = EDriveA; i <= EDriveZ; i++ )
		{
		RDebug::Print( _L("Drive %c:"), i+'A' );

		TFullName name;
		rv = fs.FileSystemName(name, i);
		if( KErrNone != rv && KErrNotFound != rv)
			{
			RDebug::Print( _L("    !! failed to read filesystem name(%d)"), rv );
			}
		else 
			{
			if (name.Length() != 0)
				{
				RDebug::Print( _L("    FS=%S"), &name );
    			}
			else
				{
				RDebug::Print( _L("    no filesystem") );
				}

			TVolumeInfo volInfo;
			rv = fs.Volume( volInfo, i );
			if( KErrNone == rv )
				{
				ShowVolumeInfo( volInfo );
				}
			else
				{
				RDebug::Print( _L("    !! failed to get volume info(%d)"), rv );
				}
			RDebug::Print( _L("\r\n") );
			}


		}

	fs.Close();
	}



void E32Main()
	{
	RDebug::Print( _L("TF_FSSCAN") );
	
	ScanPhysicalDeviceDrivers();
	ShowVariantDriveInfo();
	ShowDriveMountInfo();

	RDebug::Print( _L("TF_FSSCAN done") );
	}