--- /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