userlibandfileserver/fileserver/smassstorage/cbulkonlytransport.cpp
changeset 271 dc268b18d709
parent 269 d57b86b1867a
child 286 48e57fb1237e
equal deleted inserted replaced
269:d57b86b1867a 271:dc268b18d709
    17  @file
    17  @file
    18  @internalTechnology
    18  @internalTechnology
    19 */
    19 */
    20 #include "cbulkonlytransport.h"
    20 #include "cbulkonlytransport.h"
    21 #include "cbulkonlytransportusbcldd.h"
    21 #include "cbulkonlytransportusbcldd.h"
       
    22 #if !defined(__WINS__) && !defined(__X86__)
    22 #include "cbulkonlytransportusbcscldd.h"
    23 #include "cbulkonlytransportusbcscldd.h"
       
    24 #endif
    23 #include "usbmsshared.h"
    25 #include "usbmsshared.h"
    24 #include "massstoragedebug.h"
    26 #include "massstoragedebug.h"
    25 #include "cusbmassstorageserver.h"
    27 #include "cusbmassstorageserver.h"
    26 
    28 
    27 
    29 
    50  @param aBuffer Input buffer
    52  @param aBuffer Input buffer
    51  @param aTarget Unpacked header.
    53  @param aTarget Unpacked header.
    52  @return Error.
    54  @return Error.
    53  */
    55  */
    54 TInt TUsbRequestHdr::Decode(const TDesC8& aBuffer)
    56 TInt TUsbRequestHdr::Decode(const TDesC8& aBuffer)
    55 
       
    56 	{
    57 	{
    57 	if (aBuffer.Length() < static_cast<TInt>(KRequestHdrSize))
    58 	if (aBuffer.Length() < static_cast<TInt>(KRequestHdrSize))
    58 		{
    59 		{
    59         __PRINT1(_L("TUsbRequestHdr::Decode buffer invalid length %d"), aBuffer.Length());
    60         __PRINT1(_L("TUsbRequestHdr::Decode buffer invalid length %d"), aBuffer.Length());
    60 		return KErrGeneral;
    61 		return KErrGeneral;
   111 	if (aNumDrives <=0 || static_cast<TUint>(aNumDrives) > KUsbMsMaxDrives)
   112 	if (aNumDrives <=0 || static_cast<TUint>(aNumDrives) > KUsbMsMaxDrives)
   112 		{
   113 		{
   113 		User::Leave(KErrArgument);
   114 		User::Leave(KErrArgument);
   114 		}
   115 		}
   115 
   116 
       
   117 #if !defined(__WINS__) && !defined(__X86__)
   116 	CBulkOnlyTransportUsbcScLdd* scTransport;
   118 	CBulkOnlyTransportUsbcScLdd* scTransport;
       
   119 #endif
   117 	CBulkOnlyTransportUsbcLdd* nonscTransport;
   120 	CBulkOnlyTransportUsbcLdd* nonscTransport;
   118 	switch (aTransportLddFlag)
   121 	switch (aTransportLddFlag)
   119 		{
   122 		{
   120 		case 1: 
   123 		case 1: 
   121 				nonscTransport = new(ELeave) CBulkOnlyTransportUsbcLdd(aNumDrives, aController);
   124 			nonscTransport = new(ELeave) CBulkOnlyTransportUsbcLdd(aNumDrives, aController);
   122 				return nonscTransport;
   125 			return nonscTransport;
   123 
   126 #if !defined(__WINS__) && !defined(__X86__)
   124 		case 2: 
   127 		case 2: 
   125 				scTransport = new(ELeave) CBulkOnlyTransportUsbcScLdd(aNumDrives, aController);
   128 			scTransport = new(ELeave) CBulkOnlyTransportUsbcScLdd(aNumDrives, aController);
   126 				return scTransport;
   129 			return scTransport;
   127 		default:
   130 #endif
   128 				return NULL;
   131         default:
       
   132             __ASSERT_DEBUG(EFalse, User::Panic(KUsbMsSvrPncCat, EMsCBulkOnlyTransportNull));		    
       
   133 			return NULL;
   129 
   134 
   130 		}
   135 		}
   131 	}
   136 	}
   132 
   137 
   133 
   138 
   137 	TInt ret = KErrNone;
   142 	TInt ret = KErrNone;
   138 	MTransportBase* transport;
   143 	MTransportBase* transport;
   139 	iController.GetTransport(transport);
   144 	iController.GetTransport(transport);
   140 	switch (aTransportLddFlag)
   145 	switch (aTransportLddFlag)
   141 		{
   146 		{
       
   147 #if !defined(__WINS__) && !defined(__X86__)
   142 		case 2: 
   148 		case 2: 
   143 				ret = ((CBulkOnlyTransportUsbcScLdd*) transport)->Ldd().Open(0);
   149 				ret = ((CBulkOnlyTransportUsbcScLdd*) transport)->Ldd().Open(0);
   144 				if (ret != KErrNone)
   150 				if (ret != KErrNone)
   145 					{
   151 					{
   146 					return ret;
   152 					return ret;
   151 					CleanupStack::PushL(transport);
   157 					CleanupStack::PushL(transport);
   152 					((CBulkOnlyTransportUsbcScLdd*) transport)->ConstructL();
   158 					((CBulkOnlyTransportUsbcScLdd*) transport)->ConstructL();
   153 					CleanupStack::Pop(transport);
   159 					CleanupStack::Pop(transport);
   154 					return ret;
   160 					return ret;
   155 					}
   161 					}
       
   162 #endif
   156 		case 1:
   163 		case 1:
   157 				ret = ((CBulkOnlyTransportUsbcLdd*) transport)->Ldd().Open(0);
   164 				ret = ((CBulkOnlyTransportUsbcLdd*) transport)->Ldd().Open(0);
   158 				if (ret != KErrNone)
   165 				if (ret != KErrNone)
   159 					{
   166 					{
   160 					return ret;
   167 					return ret;
   751 
   758 
   752 	//check LUN
   759 	//check LUN
   753 	TInt8 lun = static_cast<TUint8>(iCbwBufPtr[KCbwLunOffset] & 0x0f);
   760 	TInt8 lun = static_cast<TUint8>(iCbwBufPtr[KCbwLunOffset] & 0x0f);
   754 	if (iMaxLun < lun)
   761 	if (iMaxLun < lun)
   755 		{
   762 		{
   756 		__PRINT1(_L("bad lun: %d"), lun);
   763 		RDebug::Print(_L("bad lun: %d"), lun);
   757 		return EFalse;
   764 		return EFalse;
   758 		}
   765 		}
   759 
   766 
   760 	return ETrue;
   767 	return ETrue;
   761 	}
   768 	}