diff -r d3e8e7d462dd -r f92a4f87e424 usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmdatasender.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmdatasender.h Tue Aug 31 17:01:47 2010 +0300 @@ -0,0 +1,143 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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 +@internalComponent +*/ + + +#ifndef NCMDATASENDER_H +#define NCMDATASENDER_H + +#include + +#ifndef __OVER_DUMMYUSBSCLDD__ +#include +#else +#include +#include +#endif + +#include "ncmntbbuilder.h" +#include "ncmpktdrvcommon.h" + + +class CNcmDataInterface; +class RDevUsbcScClient; +class CNcmBufferManager; +class CNcmNtbBuildPolicy; + + +NONSHARABLE_CLASS(MNcmNtbBuildObserver) + { +public: + /** + * send a NTB out, this is interface with CNtbBuilder + * + * @param aBuffer contain a whole NTB. + */ + virtual void SendNtbPayload(TNcmBuffer& aBuffer) = 0; + }; + + + +/** +Responsible for sending Ncm packet data +*/ + +NONSHARABLE_CLASS(CNcmDataSender) : public CActive, + public MNcmNtbBuildObserver + + { +public: + static CNcmDataSender* NewL(RDevUsbcScClient& aPort, CNcmDataInterface& aParent); + ~CNcmDataSender(); + +public: + /** derived from MNcmNtbBuildObserver */ + void SendNtbPayload(TNcmBuffer& aBuffer); + +public: + /** + * change NtbInMax size + * + * @param aSize, new NtbInMax size + * @param aIsAltZero, is alternate setting 0 + * @return KErrNone if success, + * KErrArgument if the aSize is bigger than 65535, + * KErrUnknown if aSize is too bigger and can't create enough buffer block + */ + TInt SetNtbInMaxSize(TInt aSize, TBool aIsAltZero=ETrue); + void RunL(); + void Start(); + /** + * send a ethernet frame + * + * @param aPacket, the ethernet frame + * @return KErrNone if success, + * KErrNotReady if sender is not started. + * KErrCongestion if there is less buffers, need to start flow control. + */ + TInt Send(RMBufChain& aPacket); + void GetNtbParam(TNcmNtbInParam& aParam); + void Stop(); + TInt SetInEpBufferSize(TUint aSize); + inline TInt NtbInMaxSize(); + +private: + CNcmDataSender(RDevUsbcScClient& aPort, CNcmDataInterface& aParent); + void ConstructL(); + void SendNtbComplete(); + TInt StartNewNtb(); + void DoCancel(); + +private: + RDevUsbcScClient& iPort; + CNcmDataInterface& iParent; + /** + * LDD Endpoint buffer for in NCM in endpoint + */ + TEndpointBuffer iEpOut; + /** + * store the buffers to be sent to LDD + */ + RArray iTxArray; + /** + * store the buffer is on sending + */ + TNcmBuffer iSendingBuffer; + /** + * there is a buffer currenly on sending + */ + TBool iIsSending; + TBool iStarted; + CNcmNtbBuilder* iNtbBuilder; + CNcmBufferManager* iBufferManager; + CNcmNtbBuildPolicy* iBuildPolicy; + /** + * networking may send packet when data sender is not started, use this to determin if do send resuming when start + */ + TBool iStopSending; + + }; + +// Inline functions +#include "ncmdatasender.inl" + +#endif //NCMDATASENDER_H