diff -r 000000000000 -r 29b1cd4cb562 bluetoothcommsprofiles/btpan/panagt/panagtremdevselector.h --- /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 +#include +#include +#include +#include "panhelper.h" +#include "panagtutils.h" +#include + +/** +@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 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 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