userlibandfileserver/fileserver/smassstorage/cmassstoragemountcb.cpp
branchRCL_3
changeset 21 e7d2d738d3c2
parent 0 a41df078684a
--- a/userlibandfileserver/fileserver/smassstorage/cmassstoragemountcb.cpp	Fri Mar 12 15:50:11 2010 +0200
+++ b/userlibandfileserver/fileserver/smassstorage/cmassstoragemountcb.cpp	Mon Mar 15 12:45:50 2010 +0200
@@ -23,10 +23,9 @@
 #include <f32fsys.h>
 #include <f32file.h>
 #include "cmassstoragemountcb.h"
+#include "cusbmassstoragecontroller.h"
 #include "cmassstoragefilesystem.h"
-#include "drivemanager.h"
 #include "massstoragedebug.h"
-#include "massstorageutil.h"
 
 CMassStorageMountCB::CMassStorageMountCB(const RArray<TInt>& aDriveMapping)
     : iDriveMapping(aDriveMapping)
@@ -214,281 +213,6 @@
 	delete hDes;
 	}
 
-/**
-Make sure that the file system is fat.
-*/
-TBool CMassStorageMountCB::ValidateBootSector()
-	{
-	__FNLOG("CMassStorageMountCB::ValidateBootSector");
-
-	TFatBootSector bootSector;
-	TInt r=ReadBootSector(bootSector);
-	__PRINT1(_L("CMassStorageMountCB::MountL - ReadBootSector returned %d"),r);
-	if (r != KErrNone)
-		{
-		return EFalse;
-		}
-
-	__PRINT(_L("\nBootSector info"));
-	__PRINT8BIT1(_L("FAT type = %S"),bootSector.FileSysType());
-	__PRINT8BIT1(_L("Vendor ID = %S"),bootSector.VendorId());
-	__PRINT1(_L("BytesPerSector %d"),bootSector.BytesPerSector());
-	__PRINT1(_L("SectorsPerCluster %d"),bootSector.SectorsPerCluster());
-	__PRINT1(_L("ReservedSectors %d"),bootSector.ReservedSectors());
-	__PRINT1(_L("NumberOfFats %d"),bootSector.NumberOfFats());
-	__PRINT1(_L("RootDirEntries %d"),bootSector.RootDirEntries());
-	__PRINT1(_L("Total Sectors = %d"),bootSector.TotalSectors());
-	__PRINT1(_L("MediaDescriptor = 0x%x"),bootSector.MediaDescriptor());
-	__PRINT1(_L("FatSectors %d"),bootSector.FatSectors());
-	__PRINT1(_L("SectorsPerTrack %d"),bootSector.SectorsPerTrack());
-	__PRINT1(_L("NumberOfHeads %d"),bootSector.NumberOfHeads());
-	__PRINT1(_L("HugeSectors %d"),bootSector.HugeSectors());
-	__PRINT1(_L("Fat32 Sectors %d"),bootSector.FatSectors32());
-	__PRINT1(_L("Fat32 Flags %d"),bootSector.FATFlags());
-	__PRINT1(_L("Fat32 Version Number %d"),bootSector.VersionNumber());
-	__PRINT1(_L("Root Cluster Number %d"),bootSector.RootClusterNum());
-	__PRINT1(_L("FSInfo Sector Number %d"),bootSector.FSInfoSectorNum());
-	__PRINT1(_L("Backup Boot Rec Sector Number %d"),bootSector.BkBootRecSector());
-	__PRINT1(_L("PhysicalDriveNumber %d"),bootSector.PhysicalDriveNumber());
-	__PRINT1(_L("ExtendedBootSignature %d"),bootSector.ExtendedBootSignature());
-	__PRINT1(_L("UniqueID %d"),bootSector.UniqueID());
-	__PRINT8BIT1(_L("VolumeLabel %S"),bootSector.VolumeLabel());
-	__PRINT8BIT1(_L("FileSysType %S\n"),bootSector.FileSysType());
-
-    iUniqueID=bootSector.UniqueID();
-	iIs16BitFat=bootSector.Is16BitFat();
-
-	iIs32BitFat=bootSector.Is32BitFat();
-	switch (DetermineFatType(bootSector))
-		{
-		case 12:
-			iIs16BitFat = EFalse;
-			iIs32BitFat = EFalse;
-			break;
-		case 16:
-			iIs16BitFat = ETrue;
-			iIs32BitFat = EFalse;
-			break;
-		case 32:
-			iIs16BitFat = EFalse;
-			iIs32BitFat = ETrue;
-			break;
-		default:
-			return EFalse;
-		}
-
-	TInt sectorsPerCluster=bootSector.SectorsPerCluster();
-	if (!IsPowerOfTwo(sectorsPerCluster))
-		return EFalse;
-
-	TInt sectorSizeLog2=Log2(bootSector.BytesPerSector());
-	if (sectorSizeLog2<0 || !IsPowerOfTwo(bootSector.BytesPerSector()))
-		return EFalse;
-
-	TInt firstFatSector=bootSector.ReservedSectors();
-	if (firstFatSector<1)
-		return EFalse;
-
-	TInt fatSizeInBytes;
-	if(iIs32BitFat)
-		{
-		fatSizeInBytes=bootSector.FatSectors32()*bootSector.BytesPerSector();
-		if (fatSizeInBytes<bootSector.BytesPerSector())
-			return EFalse;
-		}
-	else
-		{
-		fatSizeInBytes=bootSector.FatSectors()*bootSector.BytesPerSector();
-		if (fatSizeInBytes<bootSector.BytesPerSector())
-			return EFalse;
-
-		TInt rootDirectorySector=firstFatSector+bootSector.FatSectors()*bootSector.NumberOfFats();
-		if (rootDirectorySector<3)
-			return EFalse;
-
-		TInt rootDirSizeInBytes=bootSector.RootDirEntries()*KSizeOfFatDirEntry;
-		TInt numOfRootDirSectors=(rootDirSizeInBytes+(1<<sectorSizeLog2)-1)>>sectorSizeLog2;
-		TInt rootDirEnd=(rootDirectorySector+numOfRootDirSectors)<<sectorSizeLog2;
-		if (rootDirEnd<(4<<sectorSizeLog2))
-			return EFalse;
-		}
-
-
-	TInt totalSectors=bootSector.TotalSectors();
-	if (totalSectors==0)
-		totalSectors=bootSector.HugeSectors();
-	if (totalSectors<5)
-		return EFalse;
-
-	TInt numberOfFats=bootSector.NumberOfFats();
-	if (numberOfFats<1)
-		return EFalse;
-
-	return ETrue;
-	}
-
-/**
-Read non aligned boot data from media into TFatBootSector structure
-
-@param aBootSector refrence to TFatBootSector populate
-@return Media read error code
-*/
-TInt CMassStorageMountCB::ReadBootSector(TFatBootSector& aBootSector)
-	{
-	__FNLOG("CMassStorageMountCB::ReadBootSector");
-	TInt pos=0;
-	TUint8 data[KSizeOfFatBootSector];
-    TPtr8 buf(&data[0],KSizeOfFatBootSector);
-    TInt r=LocalDrive()->Read(0,KSizeOfFatBootSector,buf);
-	if (r!=KErrNone)
-		{
-		__PRINT1(_L("LocalDrive::Read() failed - %d"),r);
-		return(r);
-		}
-//	0	TUint8 iJumpInstruction[3]
-	Mem::Copy(&aBootSector.iJumpInstruction,&data[pos],3);
-	pos+=3;
-// 3	TUint8 iVendorId[KVendorIdSize]
-	Mem::Copy(&aBootSector.iVendorId,&data[pos],KVendorIdSize);
-	pos+=KVendorIdSize;
-// 11	TUint16 iBytesPerSector
-	Mem::Copy(&aBootSector.iBytesPerSector,&data[pos],2);
-	pos+=2;
-// 13	TUint8 sectorsPerCluster
-	Mem::Copy(&aBootSector.iSectorsPerCluster,&data[pos],1);
-	pos+=1;
-// 14	TUint16 iReservedSectors
-	Mem::Copy(&aBootSector.iReservedSectors,&data[pos],2);
-	pos+=2;
-// 16	TUint8 numberOfFats
-	Mem::Copy(&aBootSector.iNumberOfFats,&data[pos],1);
-	pos+=1;
-// 17	TUint16 iRootDirEntries
-	Mem::Copy(&aBootSector.iRootDirEntries,&data[pos],2);
-	pos+=2;
-// 19	TUint16 totalSectors
-	Mem::Copy(&aBootSector.iTotalSectors,&data[pos],2);
-	pos+=2;
-// 21	TUint8 iMediaDescriptor
-	Mem::Copy(&aBootSector.iMediaDescriptor,&data[pos],1);
-	pos+=1;
-// 22	TUint16 iFatSectors
-	Mem::Copy(&aBootSector.iFatSectors,&data[pos],2);
-	pos+=2;
-// 24	TUint16 iSectorsPerTrack
-	Mem::Copy(&aBootSector.iSectorsPerTrack,&data[pos],2);
-	pos+=2;
-// 26	TUint16 iNumberOfHeads
-	Mem::Copy(&aBootSector.iNumberOfHeads,&data[pos],2);
-	pos+=2;
-// 28	TUint32 iHiddenSectors
-	Mem::Copy(&aBootSector.iHiddenSectors,&data[pos],4);
-	pos+=4;
-// 32	TUint32 iHugeSectors
-	Mem::Copy(&aBootSector.iHugeSectors,&data[pos],4);
-	pos+=4;
-
-	if(aBootSector.iRootDirEntries == 0)	//indicates we have FAT32 volume
-		{
-		__PRINT(_L("\nFile system thinks Fat32"));
-
-		//36 TUint32 iFatSectors32
-		Mem::Copy(&aBootSector.iFatSectors32, &data[pos],4);
-		pos+=4;
-		//40 TUint16 iFATFlags
-		Mem::Copy(&aBootSector.iFATFlags, &data[pos],2);
-		pos+=2;
-		//42 TUint16 iVersionNumber
-		Mem::Copy(&aBootSector.iVersionNumber, &data[pos],2);
-		pos+=2;
-		//44 TUint32 iRootClusterNum
-		Mem::Copy(&aBootSector.iRootClusterNum, &data[pos],4);
-		pos+=4;
-		//48 TUint16 iFSInfoSectorNum
-		Mem::Copy(&aBootSector.iFSInfoSectorNum, &data[pos],2);
-		pos+=2;
-		//50 TUint16 iBkBootRecSector
-		Mem::Copy(&aBootSector.iBkBootRecSector, &data[pos],2);
-		pos+=(2+12);//extra 12 for the reserved bytes
-		}
-
-// 36|64	TUint8 iPhysicalDriveNumber
-	Mem::Copy(&aBootSector.iPhysicalDriveNumber,&data[pos],1);
-	pos+=1;
-// 37|65	TUint8 iReserved
-	Mem::Copy(&aBootSector.iReserved,&data[pos],1);
-	pos+=1;
-// 38|66	TUint8 iExtendedBootSignature
-	Mem::Copy(&aBootSector.iExtendedBootSignature,&data[pos],1);
-	pos+=1;
-// 39|67	TUint32 iUniqueID
-	Mem::Copy(&aBootSector.iUniqueID,&data[pos],4);
-	pos+=4;
-// 43|71	TUint8 iVolumeLabel[KVolumeLabelSize]
-	Mem::Copy(&aBootSector.iVolumeLabel,&data[pos],KVolumeLabelSize);
-	pos+=KVolumeLabelSize;
-// 54|82	TUint8 iFileSysType[KFileSysTypeSize]
-	Mem::Copy(&aBootSector.iFileSysType,&data[pos],KFileSysTypeSize);
-// 62|90
-
-	return(KErrNone);
-	}
-
-/**
-Work out if we have a FAT12|16|32 volume.
-Returns 12, 16 or 32 as appropriate.
-Returns 0 if can't be calculated (invalid values)
-*/
-TInt CMassStorageMountCB::DetermineFatType(TFatBootSector& aBootSector)
-	{
-	TUint32 ressectors = aBootSector.ReservedSectors();
-
-	if (aBootSector.SectorsPerCluster() < 1)
-		return 0;
-
-	if (aBootSector.RootDirEntries() != 0)
-		{
-		TUint32 rootdirbytes;
-		rootdirbytes = aBootSector.RootDirEntries() * 32 + aBootSector.BytesPerSector() - 1;
-		ressectors += rootdirbytes / aBootSector.BytesPerSector();
-		}
-
-	if (aBootSector.FatSectors() != 0)
-		ressectors += aBootSector.NumberOfFats() * aBootSector.FatSectors();
-	else
-		ressectors += aBootSector.NumberOfFats() * aBootSector.FatSectors32();
-
-	TUint32 totalsectors;
-	if (aBootSector.TotalSectors() != 0)
-		totalsectors = aBootSector.TotalSectors();
-	else
-		totalsectors = aBootSector.HugeSectors();
-
-	if (ressectors < 1 || totalsectors < 1)
-		return 0;
-
-	TUint32 datasec;
-	datasec = totalsectors - ressectors;
-
-	TUint32 countofclusters;
-	countofclusters = datasec / aBootSector.SectorsPerCluster();
-
-	__PRINT1(_L("CFatMountCB: Count of clusters = %d\n"), countofclusters);
-
-	if (countofclusters < 4085)
-		{
-		return 12;
-		}
-	else if (countofclusters < 65525)
-		{
-		return 16;
-		}
-	else
-		{
-		return 32;
-		}
-	}
-
 TInt CMassStorageMountCB::ReMount()
 	{
 	return KErrNotReady;