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