diff -r 000000000000 -r a41df078684a userlibandfileserver/fileserver/shostmassstorage/server/transport/include/botmsctypes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/userlibandfileserver/fileserver/shostmassstorage/server/transport/include/botmsctypes.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,204 @@ +// 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: +// BOT Protocol layer for USB Mass Storage Class +// +// + +/** + @file + @internalTechnology +*/ + +#ifndef BOTMSCTYPES_H +#define BOTMSCTYPES_H + +/** +Represents Endpoint0 request Setup packet. +USB Mass Storage Class Bulk-Only Transport 3.1, 3.2 +*/ +class TBotFunctionReqCb + { +public: + /** length of request setup packet, USB 2.0 9.3 */ + static const TUint KRequestHdrSize = 8; + + /** Bulk Only class specific request values */ + enum TEp0Request + { + EReqGetMaxLun = 0xFE, + EReqReset = 0xFF + }; + +public: + /** bmRequestType field */ + TUint8 iRequestType; + /** bRequest field */ + TEp0Request iRequest; + /** wValue field */ + TUint16 iValue; + /** wIndex field */ + TUint16 iIndex; + /** wLength field */ + TUint16 iLength; + }; + + +class MClientCommandServiceReq; + +/** +Represents the Bulk Only Transport Command Block Wrapper (CBW), USB Mass Storage +Class Bulk-Only Transport 5.1 +*/ +class TBotCbw + { +public: + /** Data direction */ + enum TCbwDirection + { + EDataOut = 0, + EDataIn = 1 + }; + +public: + void SetDataTransferLength(TUint32 aLen); + void SetTag(TUint32 aTag); + void SetDataTransferDirection(TBotCbw::TCbwDirection aDirection); + void SetLun(TUint8 aLunId); + void EncodeL(TPtr8 &aBuffer, const MClientCommandServiceReq* aRequest) const; + + +private: + /** Signature offset */ + const static TInt KCbwSignatureOffset = 0; + /** Tag offset */ + const static TInt KCbwTagOffset = 4; + /** Transfer Length offset */ + const static TInt KCbwDataTransferLengthOffset = 8; + /** Flags offset */ + const static TInt KCbwFlagOffset = 12; + /** LUN offset */ + const static TInt KCbwLunOffset = 13; + /** CB Length offset */ + const static TInt KCbwCbLengthOffset = 14; + /** Start of Command Block */ + const static TInt KCbwCbOffset = 15; + /** Length of Command Block */ + const static TInt KCbwcbLength = 15; + /** Length of wrapper and command block */ + const static TInt KCbwLength = 31; + +public: + /** dCBWTag */ + TUint32 iTag; + /** dCBWDataTransferLength */ + TUint32 iDataTransferLength; + /** CBWFlags */ + TCbwDirection iDirection; + /** bCBWLUN */ + TUint8 iLun; + }; + +/** + + + */ + +/** +Represents the Bulk Only Transport Command Status Word (CSW) +USB Mass Storage Class Bulk-Only Transport 5.2 +*/ +class TBotCsw + { +public: + /** Status values */ + enum TCswStatus + { + ECommandPassed = 0, + ECommandFailed = 1, + EPhaseError = 2 + }; + + TInt Decode(const TDesC8& aPtr); + TBool IsValidCsw(TUint32 aTag) const; + TBool IsMeaningfulCsw(TUint32 aTransferLength) const; + +private: + /** Signature offset */ + const static TInt KCswSignatureOffset = 0; + /** Tag offset */ + const static TInt KCswTagOffset = 4; + /** Residue offset */ + const static TInt KCswDataResidueOffset = 8; + /** Status offset */ + const static TInt KCswStatusOffset = 12; + + /** Length of CSW */ + const static TInt KCswLength = 13; + +public: + /** dCSWTag */ + TUint32 iTag; + /** dCSWDataResidue */ + TUint32 iDataResidue; + /** bCSWStatus */ + TCswStatus iStatus; + /** dCSWSignature */ + TUint32 iSignature; + }; + + +/** +Set Transfer Length field. + +@param aLen The length +*/ +inline void TBotCbw::SetDataTransferLength(TUint32 aLen) + { + iDataTransferLength = aLen; + } + + +/** +Set Transfer Direction field. + +@param aDirection The direction +*/ +inline void TBotCbw::SetDataTransferDirection(TBotCbw::TCbwDirection aDirection) + { + iDirection = aDirection; + } + + +/** +Set LUN field. + +@param aLun The LUN +*/ +inline void TBotCbw::SetLun(TUint8 aLun) + { + iLun = aLun; + } + +/** +Set Tag field. + +@param aTag The tag +*/ +inline void TBotCbw::SetTag(TUint32 aTag) + { + iTag = aTag; + } + +#endif // BOTMSCTYPES_H +