bluetooth/btcomm/src/btcommactive.h
changeset 0 29b1cd4cb562
--- /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