userlibandfileserver/fileserver/shostmassstorage/msproxy/hostusbmsproxy.cpp
branchRCL_3
changeset 97 41f0cfe18c80
parent 89 1df514389a47
child 110 c734af59ce98
equal deleted inserted replaced
89:1df514389a47 97:41f0cfe18c80
   152 
   152 
   153     // Check for media presence
   153     // Check for media presence
   154 	TCapsInfo capsInfo;
   154 	TCapsInfo capsInfo;
   155 	TInt err = iUsbHostMsLun.Caps(capsInfo);
   155 	TInt err = iUsbHostMsLun.Caps(capsInfo);
   156 
   156 
   157     if (err == KErrNone)
   157     if (err == KErrNone && capsInfo.iMediaType == EMediaHardDisk)
   158         {
   158         {
   159         err = InitialiseOffset(capsInfo);
   159         err = InitialiseOffset(capsInfo);
   160         }
   160         }
   161 
   161 
   162     __HOSTPRINT1(_L("<<< CUsbHostMsProxyDrive::Initialise() err = %d"), err);
   162     __HOSTPRINT1(_L("<<< CUsbHostMsProxyDrive::Initialise() err = %d"), err);
   536 @return system wide error code
   536 @return system wide error code
   537 */
   537 */
   538 TInt CUsbHostMsProxyDrive::Caps(TDes8& anInfo)
   538 TInt CUsbHostMsProxyDrive::Caps(TDes8& anInfo)
   539 	{
   539 	{
   540 	__MSFNSLOG
   540 	__MSFNSLOG
   541     __HOSTPRINT(_L("\n>>> HOST Caps"));
   541     __HOSTPRINT(_L(">>> HOST Caps"));
   542 	TLocalDriveCapsV6Buf caps;
   542 	TLocalDriveCapsV6Buf caps;
   543     caps.FillZ();
   543     caps.FillZ();
   544 
   544 
   545     TLocalDriveCapsV6& c = caps();
   545     TLocalDriveCapsV6& c = caps();
   546 
   546 
   547 	c.iType = EMediaHardDisk;
       
   548     c.iConnectionBusType = EConnectionBusUsb;
   547     c.iConnectionBusType = EConnectionBusUsb;
   549 	c.iDriveAtt = KDriveAttLocal | KDriveAttRemovable | KDriveAttExternal;
   548 	c.iDriveAtt = KDriveAttLocal | KDriveAttRemovable | KDriveAttExternal;
   550 	c.iMediaAtt = KMediaAttFormattable;
   549 	c.iMediaAtt = KMediaAttFormattable;
   551 	c.iFileSystemId = KDriveFileSysFAT;
   550 	c.iFileSystemId = KDriveFileSysFAT;
   552 
   551 
   553 	TCapsInfo capsInfo;
   552 	TCapsInfo capsInfo;
   554 	TInt r = iUsbHostMsLun.Caps(capsInfo);
   553 	TInt r = iUsbHostMsLun.Caps(capsInfo);
       
   554 
   555 	if (KErrNone == r)
   555 	if (KErrNone == r)
   556 		{
   556 		{
   557         c.iBlockSize = capsInfo.iBlockLength;
   557         c.iType = capsInfo.iMediaType;
   558         TUint64 size = iMsDataMemMap.DataSize();
   558 
   559         if (size == 0)
   559         if (capsInfo.iMediaType == EMediaHardDisk)
   560             {
   560             {
   561             // No valid partitions so specify the size of the disk
   561             c.iBlockSize = capsInfo.iBlockLength;
   562             size = static_cast<TUint64>(capsInfo.iNumberOfBlocks) * capsInfo.iBlockLength;
   562             TUint64 size = iMsDataMemMap.DataSize();
       
   563     
       
   564             if (size == 0)
       
   565                 {
       
   566                 // No valid partitions so specify the size of the disk
       
   567                 size = static_cast<TUint64>(capsInfo.iNumberOfBlocks) * capsInfo.iBlockLength;
       
   568                 }
       
   569             c.iSize = size;
       
   570     
       
   571             c.iEraseBlockSize = 0;
       
   572     
       
   573             if (capsInfo.iWriteProtect)
       
   574                 {
       
   575                 c.iMediaAtt |= KMediaAttWriteProtected;
       
   576                 }
       
   577                 
       
   578             static const TInt K512ByteSectorSize = 0x200; // 512
       
   579             if(K512ByteSectorSize != capsInfo.iBlockLength)
       
   580                 {
       
   581                 // not formattable if sector size is not 512
       
   582                 c.iMediaAtt &= ~KMediaAttFormattable;
       
   583                 }
       
   584             __HOSTPRINT4(_L("<<< HOST Caps Block[num=0x%x size=0x%x] Media[size=0x%lx WP=0x%x]"),
       
   585                         capsInfo.iNumberOfBlocks, capsInfo.iBlockLength,
       
   586                         caps().iSize, caps().iMediaAtt);
   563             }
   587             }
   564         c.iSize = size;
   588         else if (capsInfo.iMediaType == EMediaCdRom)
   565 
       
   566         c.iEraseBlockSize = 0;
       
   567 
       
   568         if (capsInfo.iWriteProtect)
       
   569             {
   589             {
   570             c.iMediaAtt |= KMediaAttWriteProtected;
   590             // not formattable
       
   591             c.iMediaAtt &= ~KMediaAttFormattable;
       
   592             __HOSTPRINT(_L(">>> HOST Caps MediaType = EMediaCdRom"));
   571             }
   593             }
   572             
   594         else
   573         static const TInt K512ByteSectorSize = 0x200; // 512
   595             {
   574         if(K512ByteSectorSize != capsInfo.iBlockLength)
   596             // do nothing
   575         	{
   597             }
   576 	        c.iMediaAtt &= ~KMediaAttFormattable;
       
   577         	}
       
   578         __HOSTPRINT4(_L("<<< HOST Caps Block[num=0x%x size=0x%x] Media[size=0x%lx WP=0x%x]"),
       
   579                     capsInfo.iNumberOfBlocks, capsInfo.iBlockLength,
       
   580 		            caps().iSize, caps().iMediaAtt);
       
   581 		}
   598 		}
   582 	else if (KErrNotReady)
   599 	else if (KErrNotReady)
   583         {
   600         {
   584         __HOSTPRINT(_L("<<< HOST Caps Media Not Present"));
   601         __HOSTPRINT(_L("<<< HOST Caps Media Not Present"));
   585 		c.iType = EMediaNotPresent;		
   602 		c.iType = EMediaNotPresent;