diff -r 000000000000 -r a41df078684a 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 +#include + +#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(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 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 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; + } +