diff -r 000000000000 -r 3553901f7fa8 telephonyprotocols/rawipnif/version1/inc/BcaController.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyprotocols/rawipnif/version1/inc/BcaController.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,142 @@ +// 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 "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: +// Defines the interface to the BCA & flow control. +// +// + +/** + @file +*/ + +#ifndef BCACONTROLLER_H +#define BCACONTROLLER_H + +#include +#include + +#include "MControllerObserver.h" +#include "bttlog.h" +#include "Constants.h" + +#ifdef RAWIP_HEADER_APPENDED_TO_PACKETS +#include "IPTagHeader.h" +#endif // RAWIP_HEADER_APPENDED_TO_PACKETS + +class CBttLogger; + +/** +@internalComponent +*/ +class CBcaController : public CBase + { +public: + CBcaController(MControllerObserver& aObserver, CBttLogger* aTheLogger); + void BaseConstructL(); + ~CBcaController(); + +public: // Flow Control + void UpdateInternalFlowFlag(TFlowControl aValue); + void UpdateContextStateFlag(TBool aValue); + TBool IsTxPossible(); + +public: + virtual void StartL() = 0; + virtual void Stop(TInt aError = KErrNone) = 0; + +#ifdef RAWIP_HEADER_APPENDED_TO_PACKETS +public: //tag headers + void SetType(TUint16 aType); + void AddHeader(TDes8& aDes); + TUint16 RemoveHeader(RMBufChain& aPdu); +#endif // RAWIP_HEADER_APPENDED_TO_PACKETS + +public: // Process Down/Up stack data packets + void Process(TDesC8& aPdu); + TInt Send(RMBufChain& aPdu); + void SendComplete(); + // Get the NIF reference. + inline MControllerObserver& GetObserver(); +protected: + virtual void BcaSend(RMBufChain& aPdu) = 0; + virtual void BcaProcess(TDesC8& aPdu) = 0; + virtual void BcaSendComplete() = 0; + virtual TInt BcaSendBufferLength() = 0; + +protected: + enum TSendState + { + EIdle, + ESending, + EShuttingDown + }; + + enum TInitialisationState + { + EStart, + EBcaController, + EInitialised + }; + + inline TInt GetSendState(); + inline void SendState(TSendState aState); + +private: // Flow Control + void ResumeSending(); + //Buffer control + TBool IsSendQueueEmpty(); + TBool IsSendQueueFull(); + void AppendToSendQueue(RMBufChain& aPdu); + TBool RemoveFromSendQueue(RMBufChain& aPdu); + void EmptySendQueue(); + +private: // Unowned data. + MControllerObserver& iObserver; +protected: + CBttLogger* iTheLogger; + +private: + // Flow control flags + TFlowControl iTxFlowControl; + TBool iTxContextActive; + TSendState iSendState; + + /** The internal packet buffer */ + RMBufPktQ iSendQueue; + /** The maximum number of packets that we want in an internal queue */ + TInt iMaxSendQueueLen; + /** Current number of packets in the internal packet buffer */ + TInt iNumPacketsInSendQueue; + +#ifdef RAWIP_HEADER_APPENDED_TO_PACKETS + CIPTagHeader* iIPTagHeader; +#endif // RAWIP_HEADER_APPENDED_TO_PACKETS + }; + +void CBcaController::SendState(TSendState aState) + { + iSendState = aState; + } + +TInt CBcaController::GetSendState() + { + return iSendState; + } + + +MControllerObserver& CBcaController::GetObserver() + { + return iObserver; + } + +#endif // BCACONTROLLER_H