userlibandfileserver/fileserver/shostmassstorage/server/protocol/tscsiprimarycmds.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/shostmassstorage/server/protocol/tscsiprimarycmds.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,143 @@
+// Copyright (c) 2008-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:
+// scsiprimarycmds.cpp
+//
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#include <e32base.h>
+#include <e32base_private.h>
+
+#include "msctypes.h"
+#include "debug.h"
+#include "msdebug.h"
+
+#include "mtransport.h"
+#include "mprotocol.h"
+
+#include "tscsiclientreq.h"
+#include "tscsiprimarycmds.h"
+
+
+// **** TEST UNIT READY ****
+TInt TScsiClientTestUnitReadyReq::EncodeRequestL(TDes8& aBuffer) const
+ {
+ __MSFNSLOG
+ __SCSIPRINT(_L("<-- SCSI TEST UNIT READY"));
+ TInt length = TScsiClientReq::EncodeRequestL(aBuffer);
+ return length;
+ }
+
+
+// **** REQUEST SENSE ****
+void TScsiClientRequestSenseResp::DecodeSenseInfo(const TDesC8& aPtr)
+ {
+ __MSFNSLOG
+ iResponseCode = static_cast<TResponseCode>(aPtr[0]);
+ iSenseInfo.iSenseCode = aPtr[02];
+ iSenseInfo.iAdditional = aPtr[12];
+ iSenseInfo.iQualifier = aPtr[13];
+ }
+
+
+void TScsiClientRequestSenseResp::DecodeL(const TDesC8& aPtr)
+ {
+ __MSFNSLOG
+ __SCSIPRINT(_L("--> SCSI REQUEST SENSE"));
+ if (aPtr.Length() < KResponseLength)
+ {
+ // Handle short data.
+ // The data not transferred is assumed to be zero.
+
+ // Create full size buffer
+ TBuf8<KResponseLength> buffer;
+
+ // Copy data into buffer
+ buffer = aPtr;
+ // Fill remainder with 0's
+ buffer.AppendFill(0, KResponseLength - aPtr.Length());
+
+ DecodeSenseInfo(buffer);
+ }
+ else
+ {
+ DecodeSenseInfo(aPtr);
+ }
+ }
+
+
+// **** INQUIRY ****
+void TScsiClientInquiryResp::DecodeInquiry(const TDesC8& aPtr)
+ {
+ __MSFNSLOG
+ __SCSIPRINT(_L("--> SCSI INQUIRY"));
+ iPeripheralInfo.iRemovable = (aPtr[1] & 0x80) ? ETrue : EFalse;
+
+ iPeripheralInfo.iPeripheralQualifier = aPtr[0] >> 5;
+ iPeripheralInfo.iPeripheralDeviceType = aPtr[0] & 0x1F;
+ iPeripheralInfo.iVersion = aPtr[2];
+ iPeripheralInfo.iResponseDataFormat = aPtr[3] & 0x0F;
+
+ TPtrC8 vendorId(&aPtr[8], 8);
+ iPeripheralInfo.iIdentification.iVendorId.Copy(vendorId);
+
+ TPtrC8 productId(&aPtr[16], 16);
+ iPeripheralInfo.iIdentification.iProductId.Copy(productId);
+
+ TPtrC8 productRev(&aPtr[32], 4);
+ iPeripheralInfo.iIdentification.iProductRev.Copy(productRev);
+ }
+
+
+void TScsiClientInquiryResp::DecodeL(const TDesC8& aPtr)
+ {
+ __MSFNSLOG
+ __SCSIPRINT(_L("--> SCSI INQUIRY"));
+ if (aPtr.Length() < KResponseLength)
+ {
+ // Handle short data.
+ // The data not transferred is assumed to be zero.
+
+ // Create zeroed buffer
+ TBuf8<KResponseLength> buffer;
+ buffer.FillZ(KResponseLength);
+
+ // Copy data into buffer
+ buffer = aPtr;
+ buffer.SetLength(KResponseLength);
+
+ DecodeInquiry(buffer);
+ }
+ else
+ {
+ DecodeInquiry(aPtr);
+ }
+ }
+
+
+// **** PREVENT MEDIA REMOVAL ****
+TInt TScsiClientPreventMediaRemovalReq::EncodeRequestL(TDes8& aBuffer) const
+ {
+ __MSFNSLOG
+ __SCSIPRINT(_L("<-- SCSI PREVENT MEDIA REMOVAL"));
+ TInt length = TScsiClientReq::EncodeRequestL(aBuffer);
+ if (iPrevent)
+ aBuffer[4] |= 0x01;
+ return length;
+ }
+