hti/HtiCommPlugins/HtiBtCommPlugin/BtEngine/inc/BtSerialClient.h
branchRCL_3
changeset 59 8ad140f3dd41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hti/HtiCommPlugins/HtiBtCommPlugin/BtEngine/inc/BtSerialClient.h	Wed Oct 13 16:17:58 2010 +0300
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 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:  Bluetooth serial client.
+*
+*/
+
+
+#ifndef __BTSERIALCLIENT_H__
+#define __BTSERIALCLIENT_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <es_sock.h>
+#include <bluetooth/btpowercontrol.h>
+#include <bt_sock.h>
+#include <btextnotifiers.h>
+#include <btsdp.h>
+
+#include "SocketObserver.h"
+
+// FORWARD DECLARATIONS
+class CMessageServiceSearcher;
+class CSocketsReader;
+class CSocketsWriter;
+
+class MBtSerialClientObserver
+    {
+public:
+    virtual void ConnectedToServer(TInt aError) = 0;
+    virtual void DisconnectedFromServer() = 0;
+    virtual void DataFromServer(const TDesC8& aData) = 0;
+    virtual void AllBufferedDataSent() = 0;
+    };
+
+/**
+* CBtSerialClient
+* Connects and sends messages to a remote machine using bluetooth
+*/
+class CBtSerialClient : public CActive,
+                        public MSocketObserver
+    {
+    public: // Constructors and destructor
+
+        /**
+        * NewL()
+        * Construct a CBtSerialClient
+        * @param aObserver the observer for this BT serial client
+        * @return a pointer to the created instance of CBtSerialClient
+        */
+        IMPORT_C static CBtSerialClient* NewL( MBtSerialClientObserver& aObserver );
+
+        /**
+        * ~CBtSerialClient()
+        * Destroy the object and release all memory objects.
+        * Close any open sockets.
+        */
+        IMPORT_C virtual ~CBtSerialClient();
+
+    public:     // New functions
+
+        /**
+        * ConnectL()
+        * Connect to remote device. Query user for a device.
+        */
+        IMPORT_C void ConnectL();
+
+        /**
+        * ConnectL()
+        * Connect to remote device.
+        */
+        IMPORT_C void ConnectL(const TBTDevAddr aBTServerDevice, const TInt aPort );
+
+        /**
+        * ConnectL()
+        * Connect to remote device by device name.
+        */
+        IMPORT_C void ConnectL( const TDesC& aBTServerDeviceName, const TInt aPort );
+
+        /**
+        * DisconnectL()
+        * Disconnect from remote machine
+        */
+        IMPORT_C void Disconnect();
+
+        /**
+        * IsConnecting()
+        * @return ETrue if the client is establishing a
+        * connection to the server.
+        */
+        IMPORT_C TBool Connecting();
+
+        /**
+        * Connected()
+        * @return ETrue if the client is fully connected to the server.
+        */
+        IMPORT_C TBool Connected();
+
+        /**
+        * ServerAddressL()
+        * @return address of connected server. Leaves with KErrNotReady, if
+        * not connected.
+        */
+        TBTDevAddr ServerAddressL();
+
+        /**
+        * Add data to outgoing buffer and start sending it to client.
+        *
+        * Leaves with KErrOverflow, if the outgoing buffer cannot
+        * be added all of the aData.
+        * Leaves with KErrNotReady, if client is not connected.
+        * When all data in internal buffer has been sent, observer
+        * is notified (AllBufferedDataSent)
+        */
+        IMPORT_C void SendL(const TDesC8& aData);
+
+        /**
+        * Issue read operation. Will complete asyncronously.
+        *
+        * Leaves with KErrNotReady, if client is not connected.
+        * Notifies observer, when some data has been read. Caller
+        * is responsible for calling this method again to receive
+        * more data.
+        */
+        IMPORT_C void ReadAsyncL();
+
+        /**
+        * Query free size of outgoing buffer.
+        */
+        IMPORT_C TInt FreeSpaceInSendBuffer();
+
+        /**
+        * Query max size of outgoing buffer.
+        */
+        IMPORT_C TInt SendBufferMaxSize();
+
+        /**
+        * Query the port of the service we are connected with
+        * @return Port number or KErrDisconnected if not connected to a service
+        */
+        IMPORT_C TInt ServicePort();
+
+    protected:    // from CActive
+
+        /**
+        * DoCancel()
+        * Cancel any outstanding requests
+        */
+        void DoCancel();
+
+        /**
+        * RunL()
+        * Respond to an event
+        */
+        void RunL();
+
+    protected: // from MSocketObserver
+
+        void ReportError( TErrorType aErrorType, TInt aErrorCode );
+        void NewData( const TDesC8& aData );
+        void AllBufferedDataSent();
+
+    private:
+
+        /**
+        * ConnectToServerL
+        * Connects to the service
+        */
+        void ConnectToServerL();
+
+        /**
+        * DisconnectFromServer()
+        * Disconnects from the service
+        */
+        void DisconnectFromServer();
+
+        /**
+        * CBtSerialClient()
+        * Constructs this object
+        */
+        CBtSerialClient( MBtSerialClientObserver& aObserver );
+
+        /**
+        * ConstructL()
+        * Performs second phase construction of this object
+        */
+        void ConstructL();
+
+    private:    // data
+
+        /**
+        * TState
+        * The state of the active object, determines behaviour within
+        * the RunL method.
+        * EWaitingToGetDevice waiting for the user to select a device
+        * EGettingDevice searching for a device
+        * EGettingService searching for a service
+        * EGettingConnection connecting to a service on a remote machine
+        * EConnected connected to a service on a remote machine
+        */
+        enum TState
+            {
+            EWaitingToGetDevice,      // phase 1 of Connect
+            EGettingDevice,           // phase 2 of Connect
+            EGettingService,          // phase 3 of Connect
+            EGettingConnection,       // phase 4 of Connect
+            EConnected, // sending and receiving data
+            EDisconnecting
+            };
+
+        MBtSerialClientObserver& iObserver;
+
+        /** iState the current state of the client */
+        TState iState;
+
+        /**
+        * iServiceSearcher searches for service this
+        * client can connect to.
+        * Owned by CBtSerialClient
+        */
+        CMessageServiceSearcher* iServiceSearcher;
+
+        /**
+        * iCurrentServiceIndex the index number of the service we are
+        * currently connecting/connected to
+        */
+        TInt iCurrentServiceIndex;
+
+        /** iSocketServer a connection to the socket server */
+        RSocketServ iSocketServer;
+
+        /** iSocket a socket to connect with */
+        RSocket iSocket;
+
+        /** iServiceClass the service class UUID to search for */
+        TUUID iServiceClass;
+
+        TBTDevAddr iBTServerDevice;
+
+        CSocketsReader* iSocketReader;
+        CSocketsWriter* iSocketWriter;
+
+        RBTPowerControl iPowerControl;
+    };
+
+#endif // __BTSERIALCLIENT_H__
+
+// End of File