diff -r 000000000000 -r a41df078684a userlibandfileserver/fileserver/shostmassstorage/server/protocol/include/tscsiprimarycmds.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/userlibandfileserver/fileserver/shostmassstorage/server/protocol/include/tscsiprimarycmds.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,203 @@ +// 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: +// + +/** + @file + @internalTechnology +*/ + +#ifndef TSCSIPRIMARYCMDS_H +#define TSCSIPRIMARYCMDS_H + + +/** +Encodes SCSI INQUIRY REQUEST +Ref SPC-2 7.3.1 +Ref SPC-3 6.4 +*/ +class TScsiClientInquiryReq: public TScsiClientReq + { +public: + /** Length of INQUIRY response */ + static const TUint KResponseLength = 36; + + TScsiClientInquiryReq(); + TInt EncodeRequestL(TDes8& aBuffer) const; + + void SetEvpd(TUint8 aPageCode); + void SetCmdDt(TUint8 aOperationCode); + void SetAllocationLength(TAllocationLength aAllocationLength); + +public: + /** SCSI CmdDt field */ + TBool iCmdDt; + /** SCSI EVPD field */ + TBool iEvpd; + /** SCSI PAGE field */ + TUint8 iPage; + /** SCSI ALLOCATION LENGTH */ + TAllocationLength iAllocationLength; + }; + + +/** +Represents the SCSI INQUIRY RESPONSE PRODUCT IDENTIFICATION information +*/ +class TMassStorageConfig + { +public: + /** SCSI VENDOR ID field */ + TBuf<8> iVendorId; + /** SCSI PRODUCT ID field */ + TBuf<16> iProductId; + /** SCSI PRODUCT REVISION field */ + TBuf<4> iProductRev; + }; + +/** +Represents the SCSI INQUIRY RESPONSE PERIPHERAL device information +*/ +class TPeripheralInfo + { +public: + /** Medium removable flag */ + TBool iRemovable; + + /** SCSI PERIPHERAL QUALIFIER */ + TUint8 iPeripheralQualifier; + /** SCSI PERIPHEREAL DEVICE TYPE */ + TUint8 iPeripheralDeviceType; + /** SCSI RESPONSE DATA FORMAT */ + TUint8 iResponseDataFormat; + /** SCSI VERSION */ + TUint8 iVersion; + /** Device product information (vendor id, product id, revision) */ + TMassStorageConfig iIdentification; + }; + +/** +Decodes SCSI INQUIRY REQUEST +*/ +class TScsiClientInquiryResp: public TScsiClientResp + { +public: + /** Length of INQUIRY response */ + static const TInt KResponseLength = 36; + TScsiClientInquiryResp(TPeripheralInfo& aPeripheralInfo); + + TInt DataLength() const {return KResponseLength;} + void DecodeL(const TDesC8& aPtr); + +private: + void DecodeInquiry(const TDesC8& aPtr); + +public: + /** Device peripheral info fields */ + TPeripheralInfo& iPeripheralInfo; + }; + +/** +Data type for PREVENT field +SPC-2, 7.12 Table 78 +SPC-3, 6.13 Table 119 +*/ +typedef TBool TPrevent; + +/** +Encodes SCSI PREVENT MEDIA REMOVAL REQUEST +SPC-2 7.12 +SPC-3 6.13 +*/ +class TScsiClientPreventMediaRemovalReq: public TScsiClientReq + { +public: + TScsiClientPreventMediaRemovalReq(TPrevent aPrevent); + TInt EncodeRequestL(TDes8& aBuffer) const; + +private: + TPrevent iPrevent; + }; + + +/** +Encodes SCSI REQUEST SENSE REQUEST +*/ +class TScsiClientRequestSenseReq: public TScsiClientReq + { +public: + /** Length of REQUEST SENSE request */ + static const TUint KResponseLength = 18; + TScsiClientRequestSenseReq(); + TInt EncodeRequestL(TDes8& aBuffer) const; + +private: + void SetAllocationLength(TAllocationLength aAllocationLength); + +public: + /** SCSI ALLOCATION LENGTH field */ + TAllocationLength iAllocationLength; + }; + + +/** +Decodes SCSI SENSE RESPONSE +*/ +class TScsiClientRequestSenseResp: public TScsiClientResp + { +public: + /** SCSI Response Code, SBC-3 4.5 */ + enum TResponseCode + { + ECurrentErrors = 0x70, + EDeferredErrors = 0x71 + }; + + /** Length of the REQUEST SENSE response */ + static const TInt KResponseLength = 18; + /** Constructor */ + TScsiClientRequestSenseResp() {}; + + TInt DataLength() const {return KResponseLength;} + void DecodeL(const TDesC8& aPtr); + +private: + void DecodeSenseInfo(const TDesC8& aPtr); + +public: + /** Returned SCSI RESPONSE CODE */ + TResponseCode iResponseCode; + /** Returned SCSI Sense Info */ + TSenseInfo iSenseInfo; + /** Returned SCSI ADDITIONAL SENSE LENGTH */ + TUint iAdditionalSenseLength; + }; + + +/** +Encodes SCSI TEST UNIT READY REQUEST +Ref SPC-2 7.25 +Ref SPC-3 6.33 +*/ +class TScsiClientTestUnitReadyReq: public TScsiClientReq + { +public: + TScsiClientTestUnitReadyReq(); + TInt EncodeRequestL(TDes8& aBuffer) const; + }; + + +#include "tscsiprimarycmds.inl" + +#endif // TSCSIPRIMARYCMDS_H