diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btcomm/src/btcommactive.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btcomm/src/btcommactive.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,169 @@ +// Copyright (c) 1997-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: +// + +#ifndef BTCOMMACTIVE_H__ +#define BTCOMMACTIVE_H__ + +_LIT(KConnectorThreadName, "ESock Connector Thread "); + +NONSHARABLE_CLASS(CBTPortBuffer) : public CCirBufBase +/** + Circular buffer for received data. + Add and Remove of single byte as well + as multiple bytes. +*/ + { +public: + static CBTPortBuffer *NewL(CBTPortProxy *aParent,TInt aBufSize); + ~CBTPortBuffer(); + TInt Add(const TUint8* aPtr,TInt aCount); + TInt Remove(TUint8* aPtr,TInt aCount); + TInt ScanForTerminator(TReadTerminator& aTerminator); +private: + CBTPortBuffer(TInt aBufSize); + void ConstructL(CBTPortProxy *aParent); + TInt ScanForTerminatorSequence(TReadTerminator& aTerminator,TText8 aChar); +private: + CBTPortProxy *iPortProxy; + TInt iCircBufSize; + }; + +// ** BT CSY ACTIVE OBJECTS ** + +NONSHARABLE_CLASS(CBTPortLocker) : public CActive + { +public: + static CBTPortLocker *NewL(CBTPortProxy *aParent); + ~CBTPortLocker(); + void RunL(); + void LockSession(); + void UnlockSession(); + void DoCancel(); + TBool IsSessionLocked(); +private: + CBTPortLocker(); + void InitL(CBTPortProxy *aParent); +private: + CBTPortProxy *iPortProxy; + TBool iLockOn; // indicates whether we already have a locked session with ESock + }; + +NONSHARABLE_CLASS(CBTPortWriter) : public CActive + { +public: + static CBTPortWriter *NewL(CBTPortProxy *aParent); + ~CBTPortWriter(); + void RunL(); + void QueueWrite(const TDesC8& aData); + void DoCancel(); +private: + CBTPortWriter(); + void InitL(CBTPortProxy *aParent); +private: + CBTPortProxy *iPortProxy; + }; + +NONSHARABLE_CLASS(CBTPortReader) : public CActive + { +public: + static CBTPortReader *NewL(CBTPortProxy *aParent); + ~CBTPortReader(); + void RunL(); + void QueueRead(); + void DoCancel(); + void StopReading(); + void StartReading(); + TBool IsReading(); +private: + CBTPortReader(); + void InitL(CBTPortProxy *aParent); +private: + TBool iKeepReading; + HBufC8* iLocalReadBuffer; + TPtr8 iLocalReadBufferPtr; + CBTPortProxy* iPortProxy; + TSockXfrLength iPlen; + }; + +NONSHARABLE_CLASS(CSockServConnector) : public CActive + { +public: + /** + Standard factory function. + @return a fully initialised CSockServConnector + */ + static CSockServConnector* NewL(RSocketServ& aSockServ); + + /** + Destructor + */ + ~CSockServConnector(); + + /** + Initiate connection to ESock. To do this with no threat + of deadlock a new thread is spawned which connects up + the RSocketServ and shares it with this thread. When the + callers request is completed the ESock session is ready to + use. + @param aSockServ ESock session to connect, ready to use on + completion. + @param aStatus Callers iStatus, contains result of connect on + completion. + */ + void SockServConnect(TRequestStatus& aStatus); + +private: + /** + Constructor + */ + CSockServConnector(RSocketServ& aSockServ); + + /** + Second phase construction. + */ + void ConstructL(); + + /** + Implementation of RunL() function inherited from CActive. + When this is called the ESock Connect() has completed, this + informs user of the result and attaches the session to this + thread. + */ + void RunL(); + + /** + On leave from RunL notifies client of error and closes handle + on connector thread. + */ + TInt RunError(TInt aError); + + /** + Implementation of DoCancel() function inherited from CActive. + */ + void DoCancel(); + + /** + Completes client request and closes connector thread handle. + @param aError Error code used to complete client request + */ + void NotifyAndClose(TInt aError); + +private: + RSocketServ& iSockServ; + RThread iConnectorThread; + TRequestStatus* iClientStatus; + }; + +#endif