diff -r 000000000000 -r f63038272f30 bluetoothengine/btui/devmodel/inc/btpairedmodel.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btui/devmodel/inc/btpairedmodel.h Mon Jan 18 20:28:57 2010 +0200 @@ -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 +#include // for TBTDevAddr +#include //for TBTPowerStateValue +#include +#include + +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