--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/devmodel/inc/btpairedmodel.h Wed Sep 01 12:20:04 2010 +0100
@@ -0,0 +1,282 @@
+/*
+* Copyright (c) 2006-2007 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: The model that is used to list and handle all paired devices.
+*
+*/
+
+
+#ifndef BTPAIREDMODEL_H
+#define BTPAIREDMODEL_H
+
+#include "btdevmodelbase.h"
+#include <btengconnman.h>
+#include <bt_sock.h> // for TBTDevAddr
+#include <btserversdkcrkeys.h> //for TBTPowerStateValue
+#include <btengconstants.h>
+#include <btengsettings.h>
+
+enum TPairedModelState
+ {
+ EIdleState=0,
+ EDeleteDeviceState,
+ EAddDeviceState,
+ EPairDeviceState,
+ EDisconnectBeforeOperationState,
+ };
+class CBTEngSettings;
+
+/**
+* This is a adds pairing and connecting functionality to BTDevModelBase.
+*
+* It act as a mediator between UI applications and Bluetooth Engine Device Management API.
+*
+*@lib btdevmodel.dll
+*@since S60 V3.2
+*/
+NONSHARABLE_CLASS(CBTPairedModel) :
+ public CBTDevModelBase, public MBTEngConnObserver,
+ public MBluetoothPhysicalLinksNotifier,
+ public MBTEngSettingsObserver
+ {
+
+public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CBTPairedModel(MBTDeviceObserver* aObserver,
+ TBTDeviceSortOrder* aOrder );
+
+ /** Symbian 2nd phase constuctor that may leave.
+ *@param None.
+ *@return None.
+ */
+ void ConstructL();
+
+ /**
+ * NewL function
+ * @param aObserver The observer will receive information about command completes and
+ * changes in the devices.
+ * @param aOrder The order the devices are sorted. Default order is added by CBTDevMan, so
+ * this class can assume this parameter to be used. This class is responsible for deleting this parameter on
+ * its destructor.
+ */
+ static CBTPairedModel* NewL(MBTDeviceObserver* aObserver,
+ TBTDeviceSortOrder* aOrder );
+
+ /**
+ * Destructor
+ * @param None.
+ */
+ virtual ~CBTPairedModel();
+
+ /**
+ * Checks if any of the devices shown in paired devices view have active bluetooth connection.
+ *
+ * NOTE: TBTUIViewsCommonUtils::IsAnyDeviceConnectedL will also check
+ * those devices that are not paired.
+ *
+ *@return ETrue, if one or more devices are connected. EFalse if no devices are connected.
+ */
+ TBool virtual IsAnyDeviceConnected();
+
+ /**
+ * Start new device pairing. This is handled by Queue, like
+ * all other device changes.
+ *
+ * This is used by CBTDevice::ChangeDevice(CBTDevice* ,EOpPair)
+ *
+ * @param aPairingDevice the device to be paired.
+ * @return KErrInUse, if another operation has be queued and not finnished. KErrNone otherwise.
+ */
+ TInt PairDeviceL(const CBTDevice* aPairingDevice,
+ TNameEntry* aNameEntry);
+
+protected:
+
+ /**
+ * Change device status, add device, e.g. block, unpair,unblock etc.
+ *
+ * This is the operation that is used to to execute the operation queued by ChangeDevice.
+ *
+ * This class will add connection releted operations to CBTDevModelBase::DoChangeDevice.
+ *
+ * @param aDevice. The device and the type of the change. If the address is empty, then the
+ * device index means what device is to be used.
+ * @return KerrNone or system wide error code.
+ */
+ TInt DoChangeDeviceL(const TBTDevice& aDevice);
+
+ /**
+ * Cancel ongoing connecting, pairing, modifying device in BTRegistry
+ *
+ * This is the operation that is used to cancel ongoing operation.
+ *
+ * @param aDevice. The device and the type of the change that will be canceled.
+ * If the address is empty, then the
+ * device index means what device is to be used.
+ * @return None.
+ */
+ void DoCancelChangeL(const TBTDevice& aDevice);
+
+ /**
+ * These two methods set the EStatusPhysicallyConnected attribute to
+ * the devices that have active connection.
+ */
+ void FlagPhysicallyConnectedDevices(RDeviceArray &aDevices);
+ void FlagPhysicallyConnectedDevices(TBTDevice& aDevice, RBTDevAddrArray& aBTDeviceArray);
+
+
+private:
+
+ /**
+ * Start the actual pairing of iPairingDevice
+ * This is called by DoChangeDevice, if the operation is pairing.
+ *@param none.
+ *@return none.
+ */
+ void DoPairDeviceL();
+
+ /**
+ * BTEngConnMan will call this when the connecting is finnished.
+ * This is called as callback not only for connections initiated by this class,
+ * but also for all BT Engines supported porofile connections, including those
+ * initiated by remote devices.
+ * @param aAddr The address of the device whose connection attempt has been finnished.
+ * @param aErr KErrNone if connection is succesfull, Otherwise system wide error code.
+ * @param aConflicts The conflicting devices in case of unsuccesfull connection attempt if any.
+ * @return none.
+ */
+ void ConnectComplete(TBTDevAddr& aAddr, TInt aErr, RBTDevAddrArray* aConflicts = NULL);
+
+ /**
+ * BTEngConnMan will call this when the disconnecting is finnished.
+ * This is called as callback not only for disconnections initiated by this class,
+ * but also for disconnection of BT Engines supported porofile connections, including those
+ * initiated by remote devices.
+ * @param aAddr The address of the device whose connection attempt has been finnished.
+ * @param aErr KErrNone if disconnection is succesfull, Otherwise system wide error code.
+ * @return none.
+ */
+ void DisconnectComplete(TBTDevAddr& aAddr, TInt aErr);
+
+ /**
+ * from BTEng's MBTEngConnObserver
+ */
+ void PairingComplete(TBTDevAddr& aAddr, TInt aErr);
+
+ /**
+ * The leaving version of PairingComplete. Internally called by PairingComplete
+ */
+ void PairingCompleteL(TBTDevAddr& aAddr, TInt aErr);
+
+ /**
+ * Creates and allocates TBTDevice representation of this device
+ *
+ * This class will add the connection status information to
+ * to CBTDevModelBase::CreateDevice.
+ *
+ * @param aRegDevice the device to be converted
+ * @return the TBTDevice representation of the same device. (Note the caller is responsible for deleting
+ * the returned item.)
+ */
+ TBTDevice* CreateDeviceL(const CBTDevice* aRegDevice, TNameEntry* aNameEntry);
+
+ /**
+ * Adds the given device to internal structures of this class
+ * using AddDeviceL, if it is paired and not blocked.
+ *
+ * @param aRegDevice
+ */
+ void HandleNewDeviceL(const CBTDevice* aRegDevice,
+ TNameEntry* aNameEntry);
+
+ /**
+ * This callback is used to to notify this call from completed changed from iDevMan.
+ * Inherited from MBTEngDevManObserver.
+ *
+ * This funtion will trap any leave if they may occur and report them as errors in the
+ * corresponfing device change operarion.
+ *
+ * @param aErr KErrNone or system wide error code.
+ */
+ void HandleDevManComplete(TInt aErr);
+
+public:
+
+ /**
+ * From MBTEngSettingsObserver - Called when powerstate is changed
+ * @param TBTPowerStateValue power state
+ * @return None
+ */
+ void PowerStateChanged( TBTPowerStateValue aState );
+
+ /**
+ * From MBTEngSettingsObserver - Called when visibility is changed
+ * @param TBTPowerStateValue state of visibility mode
+ * @return None
+ */
+ void VisibilityModeChanged( TBTVisibilityMode aState );
+
+
+public: //from MBluetoothPhysicalLinksNotifier
+
+ /**
+ * Inherited from MBluetoothPhysicalLinksNotifier and implemented empty
+ */
+ void HandleCreateConnectionCompleteL(TInt ) {};
+
+ /**
+ * Disconnect from non BTEng device by iLinks is complete.
+ *@param aErr KErrNone or system wide errorcode.
+ */
+ void HandleDisconnectCompleteL(TInt aErr) ;
+
+ /** Inherited from MBluetoothPhysicalLinksNotifier and not used.
+ */
+ void HandleDisconnectAllCompleteL(TInt aErr) {HandleDisconnectCompleteL(aErr); }
+
+ /**
+ * Get device based on addr or index.
+ * @param aDevice the TBTDevice holder. The device address is passed in
+ * @return KErrNone if ok.
+ * KErrArgument, if neither index not address is filled.
+ * KErrOverFlow if index is out of range.
+ * KErrNotFound if the given address does not exists, in the internal array.
+ */
+ TInt virtual GetDevice(TBTDevice& aDevice);
+
+ /**
+ * This is used to make callback to iObserver, when a leave has been detected.
+ *
+ *@param aErr the leave error code
+ *@param aDevice The device and operation that cause the leave.
+ */
+ virtual void HandleLeave(TInt aErr,const TBTDevice* aDevice );
+
+private:
+
+ CBTEngConnMan* iConnMan;
+ CBTDevice* iPairingDevice;
+
+ TBTDevice* iDisconnectDevice;
+ TPairedModelState iState; // The device is deleted and written back to bt registry before pairing
+ // this is used to control those operations
+ //used for disconnecting connections not managed by BTEngine
+ CBluetoothPhysicalLinks *iLinks;
+ RSocketServ iSocketServ;
+ CBTEngSettings *iBtEngSettings; // used for turning on BT, if not enabled
+ };
+
+#endif