bluetoothcommsprofiles/btpan/panagt/panagtremdevselector.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothcommsprofiles/btpan/panagt/panagtremdevselector.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,129 @@
+// Copyright (c) 2004-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 PANAGTREMOTEDEVICESELECTOR_H
+#define PANAGTREMOTEDEVICESELECTOR_H
+
+#include <e32std.h>
+#include <e32base.h>
+#include <cdblen.h>
+#include <btextnotifiers.h>
+#include "panhelper.h"
+#include "panagtutils.h"
+#include <btextnotifierspartner.h>
+
+/**
+@file
+@note Remote device selection classes
+*/
+
+class TBTDevAddr;
+class CCommsDbAccess;
+
+namespace PanAgent
+/**
+@internalComponent
+@released
+@since v8.1
+*/
+{
+
+/** 
+Priority of remote device selection AO
+@internalComponent
+@see KPanAgtAoPriority
+*/
+const TInt KPanAgtAoRemoteDevicePromptPriority = CActive::EPriorityStandard; 
+
+class MOutgoingConnectionCreator
+/**
+An interface to allow the outgoing connection prompter class to hand off new connections to a 
+channel manager
+@internalComponent
+*/
+	{
+public:
+	/**
+	Create a new connection to the specified device
+	*/
+	virtual void CreateNewConnectionForOutgoingL(const TBTDevAddr& aRemDevAddr) = 0;
+	
+	/**
+	An error occured whilst selecting devices
+	*/
+	virtual TInt DeviceSelectionError(TInt aErr) = 0;
+	
+protected:
+	virtual ~MOutgoingConnectionCreator(){};
+	};
+	
+NONSHARABLE_CLASS(CPanRemoteDeviceSelector) : public CActive
+/**
+Find out which remote devices to connect to, either by reading addresses out of commdb, or by prompting the user
+@note This class passes the remote device addresses back to the role state machine
+@note This is one of two ways to start a connection - the other being using the Control() call on the role state machine
+@internalComponent
+*/
+	{
+public:
+	CPanRemoteDeviceSelector(MOutgoingConnectionCreator& iOutgoingConnectionCreator, CCommsDbAccess& aDatabase);
+	~CPanRemoteDeviceSelector();
+	void PerformRemoteDeviceSelectionL();
+	void CreateNextConnectionL();
+	TBool IsPrompting();
+	
+	virtual void RunL();
+	virtual void DoCancel();
+	TBool HasMoreDevices();
+	void Reset();
+private:
+	TInt CreateDevicesFromUserSelection();
+	TInt DiscoverRemoteDevices(); // for when we've got a list of devices in commdb and we only want to connect to one of them
+	void ConvertListToArray(TDesC& aDeviceAddrList);
+public:
+
+private:
+	enum TRemoteDeviceSelectorState
+		{
+		ENotWaiting,				//< Not waiting for anything
+		EWaitingForNotifier,		//< Waiting for the user to respond to our remote device selection notifier
+		EWaitingForDeviceDiscovery	//< Waiting for a device discovery to complete, so we can choose a remote device
+		};
+		
+	MOutgoingConnectionCreator& iOutgoingConnectionCreator; //< The PAN agent
+	CCommsDbAccess& iDatabase;								//< Commdb access object
+	TRemoteDeviceSelectorState iState;						//< What we're waiting for in our RunL
+
+	TPckgBuf<TBTDevAddr> iRemDevAddrBuf;					//< The remote device address to which we should connect
+
+	RNotifier iNotifier; 				//< Interface to PAN remote device selection dialog
+	//Buffer received from the notifier on completion
+	TBTDeviceList iDeviceList;			
+	//This variable is introduced due to the low usability of TBTDeviceList as a devices storage
+	//TBTDeviceList doesn't have the basic operations like Count() or Remove(), but we have to use it
+	//for the notifier interface
+	RArray<TBTDevAddr> iDevAddresses;
+	
+	/**
+	If no more fixed devices available to try connecting to (we've tried all the
+	specified ones but still have no connection), prompt the user.  This is
+	different to the other 'prompt' behaviour, in that it takes place after the
+	fixed device list has been consulted rather than before.
+	*/
+	TBool iPromptIfMACFails;
+	};
+
+}	// PanAgent
+#endif // PANAGTREMOTEDEVICESELECTOR_H