--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/smassstorage/inc/cbulkonlytransportusbcldd.h Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2004-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:
+* Class declaration for CBulkOnlyTransportUsbcLdd.
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef __CBULKONLYTRANSPORTUSBCLDD_H__
+#define __CBULKONLYTRANSPORTUSBCLDD_H__
+
+#include "cbulkonlytransport.h"
+#include "cactivedevicestatenotifierbase.h"
+
+// Maximum size for SCSI Read10 Write10 and Verify10 commands
+// Windows requests size of 64K whereas MAC requests size of 128K
+static const TUint32 KMaxBufSize = 128 * 1024;
+
+//Forward Declaration
+class CBulkOnlyTransportUsbcLdd;
+
+/**
+Represent session with control endpoint (Ep0).
+handles the control interface, and responds to the class specific commands (RESET and GET_MAX_LUN).
+*/
+class CControlInterfaceUsbcLdd : public CActive
+ {
+public:
+ enum TControlState
+ {
+ ENone,
+ EReadEp0Data,
+ ESendMaxLun
+ };
+
+public:
+ static CControlInterfaceUsbcLdd* NewL(CBulkOnlyTransportUsbcLdd& aParent);
+ ~CControlInterfaceUsbcLdd();
+ TInt Start();
+ void Stop();
+ virtual void RunL();
+ virtual void DoCancel();
+
+private:
+ CControlInterfaceUsbcLdd(CBulkOnlyTransportUsbcLdd& aParent);
+ void ConstructL();
+ TInt ReadEp0Data();
+ void DecodeEp0Data();
+ TInt ReadUsbEp0();
+
+private:
+ /** Buffer for request data*/
+ TBuf8<KRequestHdrSize> iData;
+
+ TUsbRequestHdr iRequestHeader;
+
+ /** reference to the CBulkOnlyTransport*/
+ CBulkOnlyTransportUsbcLdd& iParent;
+
+ /** represent carrent state for state mashine */
+ TControlState iCurrentState;
+ };
+
+
+/** Transport Class that accessess the Non-SC LDD */
+class CBulkOnlyTransportUsbcLdd : public CBulkOnlyTransport, public MLddDeviceStateNotification
+ {
+public:
+ CBulkOnlyTransportUsbcLdd(TInt aNumDrives,CUsbMassStorageController& aController);
+
+ ~CBulkOnlyTransportUsbcLdd();
+ void ConstructL();
+
+ RDevUsbcClient& Ldd();
+ TInt BytesAvailable(); // from Mtransport base class
+
+ TInt SetupConfigurationDescriptor(TBool aUnset = EFalse);
+ TInt SetupInterfaceDescriptors();
+ void ReleaseInterface();
+ void CancelControlInterface();
+ TInt StartControlInterface();
+ void ActivateDeviceStateNotifier();
+ void CancelDeviceStateNotifier();
+ void CancelReadWriteRequests();
+ void AllocateEndpointResources();
+ TInt GetDeviceStatus(TUsbcDeviceState& deviceStatus);
+ void FlushData();
+ void ReadAndDiscardData(TInt aBytes);
+ void ReadCBW();
+ void ExpireData(TAny* aAddress = NULL);
+ void ProcessCbwEvent();
+ void StallEndpointAndWaitForClear();
+ void ReadData(TUint aLength = 0);
+ void WriteUsb(TRequestStatus& aStatus, TPtrC8& aDes, TUint aLength, TBool aZlpRequired = EFalse);
+ void SetCbwPtr();
+ TPtr8& SetCommandBufPtr(TUint aLength);
+ TPtr8& SetDataBufPtr();
+ void SetPaddingBufPtr(TUint aLength);
+ void SetCswBufPtr(TUint aLength);
+ void ProcessReadingDataEvent();
+ void DiscardData(TUint aLength);
+ void WriteToClient(TUint aLength);
+ void SetReadDataBufPtr(TUint aLength);
+
+#ifdef MSDC_MULTITHREADED
+ virtual void GetBufferPointers(TPtr8& aDes1, TPtr8& aDes2);
+#endif
+
+ void Activate(TRequestStatus& aStatus, TUint& aValue);
+ void Cancel();
+
+private:
+ TInt ReadUsb(TUint aLength = 0);
+
+private:
+ RDevUsbcClient iLdd;
+ CControlInterfaceUsbcLdd* iControlInterface;
+ CActiveDeviceStateNotifierBase* iDeviceStateNotifier;
+
+ /** buffer for Command Block Wrapper */
+ TBuf8 <KCbwLength> iCbwBuf;
+
+ TBuf8<KCommandBufferLength> iCommandBuf; // For Responses to commands
+
+ TBuf8<KMaxBufSize> iDataBuf1; // For data transfers (Reading and Writing)
+
+ TBuf8<KMaxBufSize> iDataBuf2;
+
+ TBool iSwap;
+ /** internal buffer for CSW */
+ TBuf8<KCswLength> iCswBuf;
+
+ /** internal buffer for padding */
+ TBuf8<KBOTMaxBufSize> iBuf;
+
+ /** internal buffer for garbage */
+ TBuf8<512> iDiscardBuf;
+ };
+
+#endif
+
+
+
+
+