usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmntbbuilder.h
branchRCL_3
changeset 15 f92a4f87e424
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/device/classdrivers/ncm/classimplementation/ncmpktdrv/pktdrv/inc/ncmntbbuilder.h	Tue Aug 31 17:01:47 2010 +0300
@@ -0,0 +1,129 @@
+/*
+* 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:
+* header file for NTB build  base class
+*
+*/
+
+
+
+/**
+@file
+@internalComponent
+*/
+
+
+#ifndef NCMNTBBUILDER_H
+#define NCMNTBBUILDER_H
+
+#include <e32base.h>
+
+#include "ncmpktdrvcommon.h"
+
+
+class MNcmNtbBuildObserver;
+class RMBufChain;
+class CNcmNtbBuildPolicy;
+class TNcmNtbInParam;
+
+
+const TInt KErrBufferFull = -6667;
+
+
+/**
+Base class for build NTB
+*/
+
+NONSHARABLE_CLASS(CNcmNtbBuilder) : public CBase
+    {
+public:
+    /**
+    * append a ethernet frame to current NTB
+    *
+    * @param aPacket ethernet packet buffer
+    * @return KErrNone        if success
+    *         KErrBufferFull  if current NTB is full and can't insert the new packet to NTB and send the current NTB immediately
+    */
+    virtual TInt AppendPacket(const RMBufChain& aPacket) = 0;  
+    /**
+    * complete the current NTB
+    *
+    */
+    virtual void CompleteNtbBuild();
+    /**
+    * change the NtbInMaxSize
+    *
+    * @param aSize new size
+    * @return  KErrNone        if success   
+    *          KErrArgument    if the size is bigger than allowed size in NCM spec.
+    */
+    virtual TInt SetNtbInMaxSize(TInt aSize) = 0;
+    /**
+    * prepare build a new NTB
+    *
+    * @param aBuffer buffer to construct NTB
+    */
+    virtual void StartNewNtb(const TNcmBuffer& aBuffer);
+    /**
+    * reset builder to intial state.
+    */
+    virtual void Reset();
+
+public:
+    ~CNcmNtbBuilder();
+    void GetNtbParam(TNcmNtbInParam& aParam);
+    inline void SetBuildPolicy(CNcmNtbBuildPolicy& aPolicy);
+    /**
+    * @return  ETrue        if has called StartNewNtb for current NTB   
+    *          EFalse       otherwise
+    */
+    inline TBool IsNtbStarted();
+    inline TInt NtbInMaxSize();
+    inline TInt MinNtbInMaxSize();	
+
+protected:
+    CNcmNtbBuilder(MNcmNtbBuildObserver&);
+    void SendNtbPayload();
+
+protected:
+    /**
+    * refer to NCM spec for following five variable meaning.
+    */    
+    TInt                     iNtbInMaxSize;
+    TInt                     iNdpInDivisor;
+    TInt                     iNdpInPayloadRemainder;
+    TInt                     iNdpInAlignment;    
+    TUint16                  iSequence;
+
+    MNcmNtbBuildObserver&    iObserver;
+    /**
+    * buffer contains NTB
+    */    
+    TNcmBuffer               iBuffer;
+    /**
+    * point to builder policy, this is not ownership
+    */     
+    CNcmNtbBuildPolicy*      iBuildPolicy;
+    /**
+    * a NTB is started or not.
+    */    
+    TBool                    iNtbStarted;
+    };
+
+
+// Inline functions
+#include "ncmntbbuilder.inl"
+
+
+#endif /* NCMNTBBUILDER_H */