libraries/btserial/src/client/btserialclient.cpp
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libraries/btserial/src/client/btserialclient.cpp	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,116 @@
+// btserialclient.cpp
+// 
+// Copyright (c) 2008 - 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "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:
+// Accenture - Initial contribution
+//
+
+// Transient server example - client interface implementation
+
+#include <fshell/btserialclient.h>
+#include "btserialclientserver.h"
+#include "..\connection\btdebug.h"
+
+_LIT(KSubThreadName, "btconsolethread");
+static const TInt KMaxHeapSize = 0x100000; // 1M
+
+TInt RBtSerialSession::StartServer()
+//
+// Start the server process. Simultaneous launching
+// of two such processes should be detected when the second one attempts to
+// create the server object, failing with KErrAlreadyExists.
+//
+	{
+	TInt err = iSubThread.Create(KSubThreadName, &ServerThread, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, &iServer);
+	
+	if (err != KErrNone)
+		{
+		return err;
+		}
+	
+	TRequestStatus rendezvous;
+	iSubThread.Rendezvous(rendezvous);
+	
+	iSubThread.Resume();
+	User::WaitForRequest(rendezvous);
+	
+	return rendezvous.Int();
+	}
+
+//______________________________________________________________________________
+//						RBtSerialSession
+EXPORT_C TInt RBtSerialSession::Connect()
+	{
+	TInt err = StartServer();
+	if (err == KErrNone)
+		{
+		TVersion ver;
+		err = CreateSession(iServer, ver);
+		}
+	return err;
+	}
+
+EXPORT_C void RBtSerialSession::Close()
+	{
+	TRACE1("RBtSerialSession::Close closing IPC session");
+	RSessionBase::Close();
+	// when we close the session (above) the server thread will exit.
+	// logon and wait for it
+	TRequestStatus stat;
+	iSubThread.Logon(stat);
+	TRACE1("RBtSerialSession::Close waiting for thread to exit");
+	User::WaitForRequest(stat);	
+	iSubThread.Close();
+	TRACE2("RBtSerialSession::Close done (%d)", stat.Int());
+	}
+	
+EXPORT_C void RBtSerialSession::WaitForConnection(TRequestStatus& aStatus)
+	{
+	SendReceive(EBtSerialWaitForConnection, aStatus);
+	}
+	
+EXPORT_C void RBtSerialSession::CancelWaitForConnection()
+	{
+	SendReceive(EBtSerialCancelWaitForConnection);
+	}
+	
+EXPORT_C TInt RBtSerialSession::IsConnected() const
+	{
+	return SendReceive(EBtSerialIsConnected);
+	}
+	
+EXPORT_C void RBtSerialSession::Write(const TDesC8& aData, TRequestStatus& aStatus)
+	{
+	SendReceive(EBtSerialWrite, TIpcArgs(&aData), aStatus);
+	}
+	
+EXPORT_C void RBtSerialSession::CancelWrite()
+	{
+	SendReceive(EBtSerialCancelWrite);
+	}
+	
+EXPORT_C void RBtSerialSession::Read(TDes8& aData, TRequestStatus& aStatus) const
+	{
+	SendReceive(EBtSerialRead, TIpcArgs(&aData), aStatus);
+	}
+	
+EXPORT_C void RBtSerialSession::CancelRead() const
+	{
+	SendReceive(EBtSerialCancelRead);
+	}
+
+EXPORT_C TInt RBtSerialSession::GetConnectedDeviceName(TDes& aName)
+	{
+	return SendReceive(EBtSerialGetConnectedDeviceName, TIpcArgs(&aName));
+	}
+	
+EXPORT_C TInt RBtSerialSession::GetConnectedDeviceAddr(TBTDevAddr& aAddr)
+	{
+	TPckg<TBTDevAddr> pckg(aAddr);
+	return SendReceive(EBtSerialGetConnectedDeviceAddr, TIpcArgs(&pckg));
+	}