bluetoothengine/btui/devmodel/src/btpairedmodel.cpp
branchRCL_3
changeset 55 613943a21004
parent 54 0ba996a9b75d
child 56 9386f31cc85b
--- a/bluetoothengine/btui/devmodel/src/btpairedmodel.cpp	Thu Aug 19 10:05:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,999 +0,0 @@
-/*
-* 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:  Maintain a Bluetooth devices data model for paired devices view
-*
-*/
-
-
-#include "btpairedmodel.h"
-#include <btengutil.h>
-#include "debug.h"
-#include "btui.h"
-
-const TInt KMaxCheckedConnections=20;
-
-
-// ---------------------------------------------------------------------
-// CBTPairedModel::CBTPairedModel
-// ---------------------------------------------------------------------
-//
-CBTPairedModel::CBTPairedModel(MBTDeviceObserver* aObserver, TBTDeviceSortOrder* aOrder)
-	: CBTDevModelBase(aObserver, aOrder)
-    {
-	TRACE_FUNC_ENTRY    
-    TRACE_FUNC_EXIT	
-    }
-
-// ---------------------------------------------------------------------
-// CBTPairedModel::NewL
-// ---------------------------------------------------------------------
-//
-CBTPairedModel* CBTPairedModel::NewL(MBTDeviceObserver* aObserver, TBTDeviceSortOrder* aOrder )
-    {
-    CBTPairedModel* self = new (ELeave) CBTPairedModel(aObserver, aOrder);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-     
-    return self;       
-    }
-    
-// --------------------------------------------------------------------------------------------
-// Destructor
-// --------------------------------------------------------------------------------------------
-//
-CBTPairedModel::~CBTPairedModel()
-    {
-	TRACE_FUNC_ENTRY    
-	
-    delete iConnMan;
-    delete iPairingDevice;
-    delete iLinks;
-    delete iBtEngSettings;
-    iSocketServ.Close();    
-    
-    TRACE_FUNC_EXIT    
-    }
-
-// ---------------------------------------------------------------------
-// CBTPairedModel::ConstructL
-// ----------------------------------------------------------------------
-//
-void CBTPairedModel::ConstructL()
-    {
-	TRACE_FUNC_ENTRY
-	
-    // get all devices from btregistry to cache - local copy of CBTDeviceArray
-    iDevMan = CBTEngDevMan::NewL(this);
-    iConnMan = CBTEngConnMan::NewL(this);
-    iSearchPattern.FindAll(); 
-   	iRegistryObserver = CBTRegistryObserver::NewL(this, iSearchPattern);
-	iRegistryObserver->Refresh();
-	User::LeaveIfError( iSocketServ.Connect() );
-	iLinks=CBluetoothPhysicalLinks::NewL(*this,iSocketServ);
-	
-	iBtEngSettings = CBTEngSettings::NewL(this);
-	
-    TRACE_FUNC_EXIT	
-    }
-    
-// ---------------------------------------------------------------------
-// CBTPairedModel::IsAnyDeviceConnected
-// ----------------------------------------------------------------------
-//
-TBool CBTPairedModel::IsAnyDeviceConnected()
-    {        
-	TRACE_FUNC_ENTRY
-
-	FlagPhysicallyConnectedDevices(iDeviceArray);
-    
-	for(TInt i = 0; i < iDeviceArray.Count(); i++)
-		{
-		if(iDeviceArray[i]->iStatus & (EStatusPhysicallyConnected|EStatusBtuiConnected))
-			{
-			TRACE_FUNC_EXIT				
-			return ETrue;
-			}        
-		}
-					
-	TRACE_FUNC_EXIT				
-	
-    return EFalse;
-    }
-    
-// ---------------------------------------------------------------------
-// CBTPairedModel::DoChangeDevice
-// ---------------------------------------------------------------------
-
-TInt CBTPairedModel::DoChangeDeviceL(const TBTDevice& aDevice)
-    {
-    TRACE_FUNC_ENTRY
-    TRACE_BDADDR(aDevice.iAddr)
-   	// check that the device actually still exists
-   	if(aDevice.iOperation != EOpPair )
-   		{
-   		User::LeaveIfError( GetIndexByAddress(aDevice.iAddr, aDevice.iIndex ) );	
-   		}
-   	
-    // disconnect device to be unpaired, or blocked
-    if((aDevice.iOperation == EOpBlock || aDevice.iOperation == EOpUnpair ))
-    	{    	
-    	if( iState != EDisconnectBeforeOperationState)
-    		{
-    			// disconnect by CBTEngConnMan if connected that way.
-    			if (aDevice.iStatus & static_cast<TInt>(EStatusBtuiConnected ) )
-    				{
-    				TInt code=KErrNone;
-		    		TRAPD(err,
-		    		iState=EDisconnectBeforeOperationState;
-			    		iDisconnectDevice=new(ELeave) TBTDevice(aDevice);
-			    		code=iConnMan->Disconnect(aDevice.iAddr,EBTDiscImmediate);    				
-			    		);
-					// if the return code is KErrNone then there will be
-					// a callback. However if it fails, there will not be any.
-					// So the execution will go on inside this method, if there was an error.
-					if(err == KErrNone && code==KErrNone )
-						{
-						return KErrNone;
-						}
-						
-    				}
-    			else // try disconnecting from the link layer
-    				{
-    				TInt code=KErrNone;
-    				TRAPD(err,
-					iState=EDisconnectBeforeOperationState;
-						iDisconnectDevice=new(ELeave) TBTDevice(aDevice);
-						code=iLinks->Disconnect(aDevice.iAddr);
-						);
-					// if the return code is KErrNone then there will be
-					// a callback. However if it fails, there will not be any.
-					// So the execution will go on inside this method, if there was an error.
-					if(err == KErrNone && code==KErrNone )
-						{
-						return KErrNone;
-						}
-    				}
-    		}
-   		else    
-			iState=EIdleState;
-    
-    	}
-    	
-    if(	aDevice.iOperation ==EOpPair)
-    	{
-    	DoPairDeviceL();
-    	TRACE_FUNC_EXIT 
-    	return KErrNone;    	
-    	}
-    
-    TInt err = CBTDevModelBase::DoChangeDeviceL(aDevice);
-    if(iDisconnectDevice!= NULL)
-    	{
-    	delete iDisconnectDevice;
-    	iDisconnectDevice=NULL;
-    	}
-    
-    if (err != KErrNone)
-        {      
-        TBTDevAddr addr;
-        if(aDevice.iAddr == KNullAddress )
-        	{        	        	
-        	if(aDevice.iIndex < 0 || aDevice.iIndex >= iDeviceArray.Count())
-        		return KErrArgument;
-        	else
-        		addr=iDeviceArray[aDevice.iIndex]->iAddr;
-        	}
-        	else
-        		addr=aDevice.iAddr;
-        	
-        switch (aDevice.iOperation)
-            {
-            case EOpConnect:
-            	{                    	   		            		               
-                err = iConnMan->Connect(addr, aDevice.iDeviceClass);
-                break;
-            	}
-            case EOpDisconnect:
-            	{
-            	iDisconnectDevice=new(ELeave) TBTDevice(aDevice);            		            		           	
-				if (aDevice.iStatus & static_cast<TInt>(EStatusBtuiConnected ) )            	
-					{
-					err = iConnMan->Disconnect(addr, EBTDiscImmediate);	
-					}
-				else
-					{
-					err=iLinks->Disconnect(aDevice.iAddr);
-					}
-                
-                break;
-            	}
-            default:
-            	User::Leave(err);
-                break;
-            }
-        }
-        
-    TRACE_FUNC_EXIT        
-    
-    return err;
-    }
-    
-// ---------------------------------------------------------------------
-// CBTPairedModel::DoCancelChange
-// ---------------------------------------------------------------------
-//    
-void CBTPairedModel::DoCancelChangeL(const TBTDevice& aDevice)
-    {
-    TRACE_FUNC_ENTRY
-    
-	if(aDevice.iIndex >= iDeviceArray.Count())
-        {
-        TRACE_INFO((_L("index is %d, max expected is %d"), aDevice.iIndex, iDeviceArray.Count()));
-        TRACE_FUNC_EXIT    
-		return; 
-        }
-    
-    // in case it was stopped
-    iRegistryObserver->StartIfNotRunning();
-    switch (aDevice.iOperation)
-        {
-        case EOpPair:
-        	if( iState==EDeleteDeviceState || iState==EAddDeviceState )
-        		{
-        		iDevMan->Cancel();
-        		}        		
-        	else
-        		{
-        		iConnMan->CancelPairDevice();
-        		}            	        	
-            delete iPairingDevice;
-            iPairingDevice=NULL;
-            iState=EIdleState;
-            iRegistryObserver->Refresh();
-            break;
-            
-        case EOpConnect:
-        	{	
-        	
-            TBTDevAddr addr;
-            if(aDevice.iIndex == KErrNotFound) 
-            	{
-            	addr=aDevice.iAddr;
-            	}                
-            else
-            	{
-            	addr=iDeviceArray[aDevice.iIndex]->iAddr;
-            	}
-            	
-            iConnMan->CancelConnect(addr);
-            break;
-        	}
-        default:
-            CBTDevModelBase::CancelChange(aDevice);
-            return;
-        }
-    iRegistryObserver->StartIfNotRunning();
-    
-	if(iQueue.Count()>0)
-		{
-		delete iQueue[0];
-		iQueue.Remove(0);		
-		HandleQueue();
-		}
-	
-    TRACE_FUNC_EXIT	       
-    }
-    
-// ---------------------------------------------------------------------
-// CBTPairedModel::HandleNewDevice
-//
-// Adds the device if it is not banned
-// ---------------------------------------------------------------------
-//
-void CBTPairedModel::HandleNewDeviceL(const CBTDevice* aRegDevice,
-        TNameEntry* aNameEntry)
-    {
-    TRACE_FUNC_ENTRY
-    
-    // It is needed to filter out blocked devices,
-    // since otherwise blocked and paired devices would
-    // be listed.
-    if( ! aRegDevice->GlobalSecurity().Banned()     	
-            && IsUserAwarePaired( aRegDevice->AsNamelessDevice() ) ) 
-        {
-        AddDeviceL(aRegDevice, aNameEntry, EOpNone);
-        }
-
-    TRACE_FUNC_EXIT		    
-    }
-    
-// -----------------------------------------------------------------------
-// CBTPairedModel::CreateDevice
-//
-// This implementaion will add the connectable status from the superclass.
-// -----------------------------------------------------------------------  
-//
-TBTDevice* CBTPairedModel::CreateDeviceL(const CBTDevice* aRegDevice,
-        TNameEntry* aNameEntry)
-    {
-    TRACE_FUNC_ENTRY
-    
-    TBTDevice* device = CBTDevModelBase::CreateDeviceL(aRegDevice, aNameEntry);
-    
-    // add EStatusBtuiConnected status if the device has a profile connection
-    TBTEngConnectionStatus connStatus;
-    iConnMan->IsConnected(device->iAddr, connStatus);
-    
-    if(connStatus == EBTEngConnecting || connStatus == EBTEngConnected)
-    	{
-    	SetStatusFlags(device->iStatus,EStatusBtuiConnected);
-    	}
-    
-    // add connectable status
-    TBool connectable=EFalse;
-    iConnMan->IsConnectable(aRegDevice->BDAddr(), aRegDevice->DeviceClass(), connectable );
-    
-    if( connectable) 
-    	{
-    	SetStatusFlags(device->iStatus, EStatusConnectable );
-    	}
-    	
-	TRACE_FUNC_EXIT 
-	       
-    return device;
-    }
-    
-// ---------------------------------------------------------------------
-// CBTPairedModel::ConnectComplete
-// from MBTEngConnObserver
-// ----------------------------------------------------------------------
-//
-void CBTPairedModel::ConnectComplete(TBTDevAddr& aAddr, TInt aErr, RBTDevAddrArray* aConflicts)
-    {
-    TRACE_FUNC_ENTRY
-    
-    TRACE_INFO((_L("aErr=%d"), aErr))
-
-    TInt index = GetIndexByAddress(aAddr);
-    TBool requestIssuedFromPhone = EFalse;
-    TBTDevice connectedDevice;
-    
-    // was the device connected from request by the ui
-	if(iQueue.Count()>0 && iQueue[0]->iOperation==EOpConnect && 
-	  iQueue[0]->iAddr == aAddr)
-		{
-		requestIssuedFromPhone = ETrue;
-		if(index >=0) // is it from paired list
-			{			
-			connectedDevice=*iDeviceArray[index];
-			connectedDevice.iOperation=EOpConnect;
-			}
-		else
-			{
-			connectedDevice=*iQueue[0];		
-			}
-    	
-    	}
-    else
-    	{
-    	requestIssuedFromPhone = EFalse;
-		if(index >=0) // is it from paired list
-			{
-			connectedDevice=*iDeviceArray[index];
-			connectedDevice.iOperation=EOpConnect;
-			}
-		else
-			{
-	    	// it was not. Try to fill what can be filled.
-			connectedDevice.iAddr=aAddr;
-			connectedDevice.iIndex=KErrNotFound;
-			connectedDevice.iOperation = EOpConnect;			
-			}    	
-    	}        
-    
-    if (aErr == KErrAlreadyExists )
-        { 
-        // gather the names of the conflicting devices.
-        RBTDevNameArray nameArray;
-        for (TInt i = 0; aConflicts!= NULL && i < aConflicts->Count(); i++)
-            {
-            //remove duplicates
-            if(i>0&& (*aConflicts)[i]==(*aConflicts)[i-1])
-            	{
-            	continue;
-            	}
-            TInt di = GetIndexByAddress((*aConflicts)[i]);
-            
-            if(di >=0 )
-            	{
-            	nameArray.Append(&iDeviceArray[di]->iName);
-            	}
-            }
-
-        // we will unset the connect status of the device if connection failed &
-            // it is found in paired devices.
-        if( index >= 0 )
-            {
-            // add EStatusBtuiConnected status if the device has a profile connection
-            TBTEngConnectionStatus connStatus;
-            iConnMan->IsConnected(connectedDevice.iAddr, connStatus);
-   
-            if (connStatus != EBTEngConnecting && connStatus != EBTEngConnected)
-                {
-                TRACE_INFO(_L("Unset EStatusBtuiConnected"))
-                UnsetStatusFlags(iDeviceArray[index]->iStatus,EStatusBtuiConnected );
-                }
-            }
-        
-        if(iObserver)
-            {
-            //Show only phone issued request complete notes
-            //Do not show notes for device issued request when BTUI is active
-            if ( requestIssuedFromPhone ) 
-                {
-                iObserver->NotifyChangeDeviceComplete(aErr, connectedDevice, &nameArray);
-                }
-               
-            SendRefreshIfNoError(aErr);
-            }
-        nameArray.Reset();
-        }
-    else 
-        {
-        if (aErr == KErrNone)
-            {
-            // we will set the connect status of the device
-            // if it is found in paired devices.
-            if( index >= 0 )
-            	{
-            	SetStatusFlags(iDeviceArray[index]->iStatus,EStatusBtuiConnected );
-            	}
-            }
-        else        
-            {
-            // we will unset the connect status of the device if connection failed &
-            // it is found in paired devices.
-            if( index >= 0 )
-                {                   
-                // add EStatusBtuiConnected status if the device has a profile connection
-                TBTEngConnectionStatus connStatus;
-                iConnMan->IsConnected(connectedDevice.iAddr, connStatus);
-   
-                if (connStatus != EBTEngConnecting && connStatus != EBTEngConnected)
-                   {
-                   TRACE_INFO(_L("Unset EStatusBtuiConnected"))
-                   UnsetStatusFlags(iDeviceArray[index]->iStatus,EStatusBtuiConnected );
-                   }                
-                }
-            }
-		if(iObserver)
-			{
-			//Show only phone issued request complete notes
-			//Do not show notes for device issued request when BTUI is active
-			if ( requestIssuedFromPhone ) 
-			    {
-        	    iObserver->NotifyChangeDeviceComplete(aErr, connectedDevice);
-			    }
-        	
-        	SendRefreshIfNoError(aErr);
-			}		
-        }           
-    
-    // Process the next command if the connect was
-    //initiated by this UI.    
-	if(iQueue.Count()>0 && iQueue[0]->iOperation==EOpConnect && 
-       iQueue[0]->iAddr == aAddr)        
-        {
-        delete iQueue[0];
-        iQueue.Remove(0);		
-        HandleQueue();
-        }
-    else
-        {
-        if( iQueue.Count()==0 ) 
-            {
-            TRACE_INFO((_L("op Q is empty")));
-            }
-        else
-            {
-            TRACE_INFO((_L("unexpected op Q contents, count is %d, op is %d"), iDeviceArray.Count(), iQueue[0]->iOperation));
-            }
-        }
-    TRACE_FUNC_EXIT	
-    }
-    
-// ---------------------------------------------------------------------
-// CBTPairedModel::PowerStateChanged
-// from MBTEngSettingObserver
-// ----------------------------------------------------------------------
-//
-void CBTPairedModel::PowerStateChanged( TBTPowerStateValue )
-	{
-	TRACE_FUNC_ENTRY
-	
-	// This is implemented for case like when user choses offlne mode, Bluetooth is swithced off
-	// very fast. Bt audio components don't have enough time to close audio connection.
-	// BTUI needs to update UI display.
-	
-	TInt count = iDeviceArray.Count();  
-    
-    for (TInt i = 0; i < count; i++)
-    	{
-     	UnsetStatusFlags(iDeviceArray[i]->iStatus, EStatusBtuiConnected );
-    	}
-	
-	SendRefreshIfNoError(KErrNone);
-	
-	TRACE_FUNC_EXIT
-	}
-    
-// ----------------------------------------------------
-// CBTPairedModel::VisibilityModeChanged
-// from MBTEngSettingObserver
-// ----------------------------------------------------
-//    
-void CBTPairedModel::VisibilityModeChanged( TBTVisibilityMode  )
-    {
-	TRACE_FUNC_ENTRY
-	
-	
-	TRACE_FUNC_EXIT	
-    }
-        
-// ---------------------------------------------------------------------
-// CBTPairedModel::DisconnectComplete
-// from MBTEngConnObserver
-// ----------------------------------------------------------------------
-//
-void CBTPairedModel::DisconnectComplete(TBTDevAddr& aAddr, TInt aErr)
-    {
-    TRACE_FUNC_ENTRY
-    
-    // the disconnect was part of a unpairing or blocking operation
-	if(iState == EDisconnectBeforeOperationState && iDisconnectDevice && aAddr == iDisconnectDevice->iAddr )
-		{
-
-		TRAPD(err,
-			DoChangeDeviceL(*iDisconnectDevice);		
-		);
-		iState=EIdleState;		
-		if(err != KErrNone)
-			{
-			HandleLeave(err,iDisconnectDevice);
-			}
-		TRACE_FUNC_EXIT
-		return;
-		}		    
-    
-    TInt index = GetIndexByAddress(aAddr);
-    
-    // the disconnected device was not the devicein the list,
-    // so we do not tell anyone about it.
-    if ( iDisconnectDevice == NULL || iDisconnectDevice->iAddr != aAddr )
-    	{
-    	if (index >=0 )
-    	{
-    		UnsetStatusFlags(iDeviceArray[index]->iStatus, EStatusBtuiConnected );
-    	}
-    	
-    	SendRefreshIfNoError(KErrNone);
-
-		TBTDevice disconnectedDevice;
-		disconnectedDevice.iAddr = aAddr;
-		// Notify needed when there is active disconnect query dialog
-    	iObserver->NotifyChangeDeviceComplete(KErrDisconnected, disconnectedDevice);
-		
-    	TRACE_FUNC_EXIT  
-    	return;
-    	}
-    	
-	if(index >=0 )
-		{
-	    // set it to "not connected" no matter disconnection works or not
-	    UnsetStatusFlags(iDeviceArray[index]->iStatus, EStatusBtuiConnected );
-	    iDeviceArray[index]->iOperation = EOpDisconnect;
-	    iObserver->NotifyChangeDeviceComplete(aErr, *iDeviceArray[index]);		
-		}
-	else
-		{
-		iDisconnectDevice->iIndex=index;
-		iObserver->NotifyChangeDeviceComplete(aErr, *iDisconnectDevice);		
-		}
-
-	delete iDisconnectDevice;
-	iDisconnectDevice=NULL;    	
-
-   	SendRefreshIfNoError(aErr);
-   	// continue processing queue only if the disconnected device is
-   	// the device with we requested disconnect to.
-   	// this has to be checked so that we do not end on having multiple
-   	// queue processors at the same time
-	if(iQueue.Count()>0 && iQueue[0]->iOperation==EOpDisconnect && 
-	  iQueue[0]->iAddr == aAddr)           	
-		{
-		delete iQueue[0];
-		iQueue.Remove(0);		
-		HandleQueue();
-		}
-    else
-        {
-        if( iQueue.Count()==0 ) 
-            {
-            TRACE_INFO((_L("op Q is empty")));
-            }
-        else
-            {
-            TRACE_INFO((_L("unexpected op Q contents, count is %d, op is %d"), iDeviceArray.Count(), iQueue[0]->iOperation));
-            }
-        }
-    TRACE_FUNC_EXIT   	
-    }
-    
-// ---------------------------------------------------------------------
-// CBTPairedModel::PairingComplete
-// from MBTEngConnObserver
-// ----------------------------------------------------------------------
-//
-void CBTPairedModel::PairingComplete(TBTDevAddr& aAddr, TInt aErr)
-	{
-	TRACE_FUNC_ENTRY
-	
-	TRAPD(err,
-		PairingCompleteL(aAddr,aErr);
-		);
-		
-	if(err!=KErrNone)
-	{
-		TBTDevice tmp;
-		tmp.iAddr=aAddr;					
-		tmp.iIndex=GetIndexByAddress(aAddr);
-		tmp.iOperation=EOpPair;
-		HandleLeave(err,&tmp );
-
-		delete iPairingDevice;
-		iPairingDevice=NULL;				
-	}
-	
-	TRACE_FUNC_EXIT
-	}
-	
-// ---------------------------------------------------------------------
-// CBTPairedModel::PairingCompleteL
-// Leaving version of PairingComplete
-// ----------------------------------------------------------------------
-//	
-void CBTPairedModel::PairingCompleteL(TBTDevAddr& aAddr, TInt aErr)
-    {
-    TRACE_FUNC_ENTRY
-    
-	// The device that was attempted to be paired is 
-	// different from the the device that the pairing is finnished.
-	// This cannot happen, since CBTConnMan will report
-	// only pairing started by the listener and the UI
-	// does not allow making two pairings at the same time
-    __ASSERT_DEBUG(aAddr==iPairingDevice->BDAddr(),
-      PANIC(EBTPanicCommandComplettedToDiffrentDeviceThanStarted));
-    (void) aAddr;
-
-    // bail out if the operation queue is not what we expect
-    if( iQueue.Count() == 0 
-        || iQueue[0]->iOperation != EOpPair 
-        || iQueue[0]->iAddr != aAddr )        
-        {
-        if( iQueue.Count()==0 ) 
-            {
-            TRACE_INFO((_L("op Q is empty")));
-            }
-        else
-            {
-            TRACE_INFO((_L("unexpected op Q contents, count is %d, op is %d"), iDeviceArray.Count(), iQueue[0]->iOperation));
-            }
-        TRACE_FUNC_EXIT
-        return;
-        }
-
-    iState=EIdleState;		
-	TBTDevice* tmpDevice=NULL;
-	tmpDevice=CreateDeviceL(iPairingDevice, &( iQueue[0]->iNameEntry ) );
-	tmpDevice->iOperation=EOpPair;    		
-	
-    // new paired device must be inserted to the array, since
-    // user may be doing trust/ connect operations before
-    // it is refreshed from registry
-    TBool deleleteTmpDevice=ETrue;
-	
-	if( aErr == KErrNone  )    	
-		{
-		SetStatusFlags(tmpDevice->iStatus,EStatusPaired);
-		TInt index;
-		index=GetIndexByAddress(iPairingDevice->BDAddr());
-		
-		if(index == KErrNotFound)
-			{
-			iDeviceArray.InsertInOrderL(tmpDevice,*iSortOrder );
-  			  			
-    		RenumberDeviceArray();
-
-    		// iPairingDevice is now owned by iDeviceArray. 
-    		// So it must not be deleted by his function
-    		deleleteTmpDevice=EFalse;
-    		
-    		SendRefreshIfNoError(aErr,GetIndexByAddress(iPairingDevice->BDAddr()));
-			}					
-		}
-
-	
-    iObserver->NotifyChangeDeviceComplete(aErr, *tmpDevice);         
-    
-    /*
-     * We issue an background refresh in case 
-     * registry is updated from btnotif
-     */
-	iRegistryObserver->StartIfNotRunning();
-	iRegistryObserver->Refresh();
-    // delete if the ownership has not changed
-    if(deleleteTmpDevice )
-        {
-    	delete tmpDevice;
-    	tmpDevice=NULL;
-        }
-
-	delete iPairingDevice;    
-    iPairingDevice=NULL;       
-	delete iQueue[0];
-	iQueue.Remove(0);
-    
-    HandleQueue();    		    
-
-    TRACE_FUNC_EXIT    
-    }
-    
-// ---------------------------------------------------------------------
-// BTPairedModel::HandleDevManComplete
-// from MBTEngDevModelBase
-// ----------------------------------------------------------------------
-//
-void  CBTPairedModel::HandleDevManComplete(TInt aErr)
-	{
-	TRACE_FUNC_ENTRY
-	
-	// if this is handled we can remove this
-	if(iDisconnectDevice)
-		{
-		delete iDisconnectDevice;
-		iDisconnectDevice=NULL;
-		}
-		
-	if(iPairingDevice)
-		{
-		// add the device just deleted	
-		if(iState==EDeleteDeviceState && (aErr==KErrNone || aErr == KErrNotFound))
-			{
-				iPairingDevice->DeleteLinkKey();
-				TBTDeviceSecurity sec=iPairingDevice->GlobalSecurity();
-				sec.SetBanned(EFalse);
-				sec.SetNoAuthorise(EFalse);
-				iDevMan->AddDevice(*iPairingDevice);
-				iState=EAddDeviceState;
-				TRACE_FUNC_EXIT	
-				return;
-			}
-		// if the device is added allready, or if deletion failed
-		// we will go on with pairing the device
-		if(iState==EAddDeviceState||(iState==EDeleteDeviceState&& aErr != KErrNone))
-			{
-			aErr = iConnMan->PairDevice(iPairingDevice->BDAddr(), iPairingDevice->DeviceClass());
-			iState=EPairDeviceState;
-			// NOTE: now PairingComplete will be called and not this method.
-			TRACE_FUNC_EXIT	
-			return;
-			}
-		}
-	// these are not handled by superclass		
-	if(iQueue.Count()>0 &&
-	    ( iQueue[0]->iOperation==EOpConnect || 
-	     iQueue[0]->iOperation==EOpDisconnect ) )
-		{
-		iObserver->NotifyChangeDeviceComplete(aErr, *iQueue[0]);
-		}
-			
-	CBTDevModelBase::HandleDevManComplete(aErr);
-	
-    TRACE_FUNC_EXIT	
-	}
-	
-// ---------------------------------------------------------------------
-// CBTPairedModel::DoPairDevice
-// ---------------------------------------------------------------------
-//
-void  CBTPairedModel::DoPairDeviceL()
-	{
-	TRACE_FUNC_ENTRY
-	
-	// we are starting a new command. Checks that no earlier commands 
-	// have been executed, but not finished properly.
-	__ASSERT_DEBUG(iState==EIdleState,PANIC(EBTPanicDevManQueueIsInIllegalState));
-	// check that there is no other pairing going on.
-	__ASSERT_DEBUG(iPairingDevice!=NULL,PANIC(EBTPanicTwoPairingAttemptsAtTheSameTime));
-	
-	iRegistryObserver->Cancel();
-	
-	// devices to be paired are first deleted
-	// then added back. Only after that the paring itself is
-	// started
-	TBTRegistrySearch dele;
-	dele.FindAddress(iPairingDevice->BDAddr());
-	TInt err = iDevMan->DeleteDevices(dele);
-
-	iState=EDeleteDeviceState;
-   if (err)
-       {
-       HandleDevManComplete(err);
-       }
-       
-    TRACE_FUNC_EXIT
-	}
-	
-// ---------------------------------------------------------------------
-// CBTPairedModel::PairDevice
-//
-// Puts the given aPairingDevice to iPairingDevice and
-// adds and empty device with iOperation=EOpPair as placeholder to iQueue.
-// the pairing itself will be handled by DoChangeDevice that
-// cals then 
-// ---------------------------------------------------------------------
-//
-TInt CBTPairedModel::PairDeviceL(const CBTDevice* aPairingDevice,
-        TNameEntry* aNameEntry)	
-	{
-	TRACE_FUNC_ENTRY
-	
-	// cannot put two pairings to queue. 
-	// this is not possible since ui does not allow it.
-	if(iPairingDevice)
-		return KErrInUse;
-		
-	TBTDevice*  device=new(ELeave) TBTDevice();
-	device->iOperation=EOpPair;
-	device->iAddr=aPairingDevice->BDAddr();
-	if ( aNameEntry )
-	    {
-	    device->iNameEntry = *aNameEntry;
-	    }
-	CleanupStack::PushL(device);
-	iPairingDevice=aPairingDevice->CopyL();
-	// put the device to queue directly
-	iQueue.AppendL(device);
-	TInt err = KErrNone;
-	if(iQueue.Count() ==1 )
-		{
-		err = DoChangeDeviceL(*iQueue[0]);
-		}
-	CleanupStack::Pop(device);	
-    TRACE_FUNC_EXIT			
-	return err;
-	
-	}
-	
-// ---------------------------------------------------------------------
-// CBTPairedModel::HandleDisconnectCompleteL
-// Disconnection by CBluetoothPhysicalLinks, for those
-// connections not opened by btui. 
-// ---------------------------------------------------------------------
-//
-void CBTPairedModel::HandleDisconnectCompleteL(TInt aErr)
-	{
-	 TRACE_FUNC_ENTRY 
-	 
-	 if(iDisconnectDevice)
-	 	{
-	 	DisconnectComplete(iDisconnectDevice->iAddr,aErr);
-	 	}
-	 	
-	TRACE_FUNC_EXIT
-	}
-	
-// ---------------------------------------------------------------------
-// CBTPairedModel::FlagPhysicallyConnectedDevices
-//
-// Marks the EStatusPhysicallyConnected attribute to the devices
-// that have active connection.
-// ---------------------------------------------------------------------
-//
-void CBTPairedModel::FlagPhysicallyConnectedDevices(RDeviceArray &aDeviceArray)
-	{
-	TRACE_FUNC_ENTRY 
-	
-	RBTDevAddrArray a;
-	iLinks->Enumerate(a,KMaxCheckedConnections);
-	
-	TInt i=0; 
-	
-	for(i=0;i<aDeviceArray.Count();i++)
-		{
-        FlagPhysicallyConnectedDevices( *aDeviceArray[i], a );
-		}
-	a.Close();	
-	
-	TRACE_FUNC_EXIT 	
-	}
-	
-void CBTPairedModel::FlagPhysicallyConnectedDevices(TBTDevice& aDevice, RBTDevAddrArray& aBTDeviceArray)
-	{
-	TRACE_FUNC_ENTRY 
-	
-	TInt i2=0;
-	
-    UnsetStatusFlags( aDevice.iStatus, EStatusPhysicallyConnected );		
-    for( i2=0; i2<aBTDeviceArray.Count(); i2++ )
-        {
-        if(aDevice.iAddr == aBTDeviceArray[i2])
-            {
-            SetStatusFlags( aDevice.iStatus,EStatusPhysicallyConnected );		
-            break;				
-            }
-        }
-	
-	TRACE_FUNC_EXIT 	
-	}
-	
-// ---------------------------------------------------------------------
-// CBTPairedModel::GetDevice
-//
-// Adds the EPhysicallyConnected attribute devices that have any active
-// bluetooth connection.
-// ---------------------------------------------------------------------	
-//
-TInt CBTPairedModel::GetDevice(TBTDevice& aDevice)
-	{	
-	TRACE_FUNC_ENTRY 	
-	
-	TInt rvalue=CBTDevModelBase::GetDevice(aDevice);
-	RBTDevAddrArray a;
-	iLinks->Enumerate(a,KMaxCheckedConnections);
-    FlagPhysicallyConnectedDevices(aDevice, a);
-	a.Close();	
-	
-	TRACE_FUNC_EXIT 
-	
-	return rvalue;	
-	}
-	
-// ---------------------------------------------------------------------
-// CBTPairedModel::HandleLeave
-// from CBTDevModelBase
-// ---------------------------------------------------------------------
-//
-void CBTPairedModel::HandleLeave(TInt aErr,const TBTDevice* aDevice )
-	{
-	TRACE_FUNC_ENTRY
-	
-	iConnMan->CancelPairDevice();
-
-	delete iPairingDevice;
-	iPairingDevice=NULL;
-
-	delete iDisconnectDevice;
-	iDisconnectDevice=NULL;
-	
-	iRegistryObserver->StartIfNotRunning();
-	iRegistryObserver->Refresh();
-	
-	iState=EIdleState;
-	
-	CBTDevModelBase::HandleLeave(aErr,aDevice );
-	
-	TRACE_FUNC_EXIT
-	}