bluetoothengine/btui/btuidelegate/btdelegatedisconnect.cpp
author hgs
Fri, 03 Sep 2010 16:17:59 +0300
changeset 57 5ebadcda06cb
parent 42 b72428996822
permissions -rw-r--r--
201035_7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     1
/*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     3
* All rights reserved.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     8
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    11
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    12
* Contributors:
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    13
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    14
* Description: 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    15
*
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    16
*/
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    17
#include "btdelegatedisconnect.h"
42
hgs
parents: 31
diff changeset
    18
#include "btuiutil.h"
hgs
parents: 31
diff changeset
    19
#include "btuiiconutil.h"
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    20
#include <QModelIndex>
42
hgs
parents: 31
diff changeset
    21
#include <hblabel.h>
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    22
#include <btsettingmodel.h>
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    23
#include <btdevicemodel.h>
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    24
#include <hbnotificationdialog.h>
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    25
#include <bluetoothuitrace.h>
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    26
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    27
BtDelegateDisconnect::BtDelegateDisconnect(            
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    28
        BtSettingModel* settingModel, 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    29
        BtDeviceModel* deviceModel, QObject *parent) :
42
hgs
parents: 31
diff changeset
    30
    BtAbstractDelegate(settingModel, deviceModel, parent), mBtengConnMan(0), mPhyLinks(0),
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    31
	 mActiveHandling(false), mAddrArrayIndex(0), mDisconOpt(DisconUnknown)
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    32
{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    33
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );   
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    34
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    35
}
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    36
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    37
BtDelegateDisconnect::~BtDelegateDisconnect()
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    38
{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    39
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );   
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    40
    delete mBtengConnMan;
42
hgs
parents: 31
diff changeset
    41
    delete mPhyLinks;
hgs
parents: 31
diff changeset
    42
    mSocketServ.Close();
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    43
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    44
}
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    45
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    46
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    47
/*!
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    48
    Returns the supported editor types.
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    49
    \return the sum of supported editor types
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    50
 */
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    51
int BtDelegateDisconnect::supportedEditorTypes() const
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    52
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    53
    return BtDelegate::DisconnectService
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    54
           | BtDelegate::DisconnectAllConnections;
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    55
}
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    56
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    57
/*!
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    58
 * disconnects remote device(s) from local device
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    59
 * params of type QList<QVariant>: 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    60
 *         1) DisconnectOption (either ServiceLevel, PhysicalLink or AllOngoingConnections)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    61
 *         2) remote device address (QString, not needed for AllOngoingConnections)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    62
 */
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    63
void BtDelegateDisconnect::exec( const QVariant &params )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    64
{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    65
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );   
42
hgs
parents: 31
diff changeset
    66
    int err;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    67
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    68
    // check if in use already
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    69
    if ( mActiveHandling ) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    70
        emit delegateCompleted(KErrInUse, this);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    71
        BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrInUse);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    72
        return;
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    73
    }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    74
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    75
    // check parameters
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    76
    QList<QVariant> paramList = params.value< QList<QVariant> >(); 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    77
    if (!((paramList.count() == 1) || (paramList.count() == 2))) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    78
        // wrong parameter count
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    79
        emit delegateCompleted( KErrArgument, this ); 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    80
        BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrArgument );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    81
        return;
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    82
    }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    83
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    84
    // create btengconnman
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
    85
    if ( ! mBtengConnMan ){
42
hgs
parents: 31
diff changeset
    86
        TRAP( err, mBtengConnMan = CBTEngConnMan::NewL(this) );
hgs
parents: 31
diff changeset
    87
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    88
    if( err ) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    89
        emit delegateCompleted(err, this);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    90
        BOstraceFunctionExitExt( DUMMY_DEVLIST, this, err );
42
hgs
parents: 31
diff changeset
    91
        return;
hgs
parents: 31
diff changeset
    92
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    93
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    94
    mDisconOpt = (DisconnectOption)paramList.at(0).toInt();    // DisconnectOption
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    95
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    96
    if ( (mDisconOpt == ServiceLevel) || (mDisconOpt == PhysicalLink) ) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    97
        // check 2nd parameter is ok
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    98
        if ((paramList.count() != 2) || !paramList.at(1).canConvert<QString>()) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
    99
            emit delegateCompleted( KErrArgument, this ); 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   100
            BOstraceFunctionExitExt( DUMMY_DEVLIST, this, KErrArgument );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   101
            return;
42
hgs
parents: 31
diff changeset
   102
        }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   103
        QString strBtAddr = paramList.at(1).toString();  // remote device to operate on
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   104
        BtTraceQString1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", strBtAddr);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   105
        addrReadbleStringToSymbian( strBtAddr, mBtEngAddr );
42
hgs
parents: 31
diff changeset
   106
        
hgs
parents: 31
diff changeset
   107
        mActiveHandling = true;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   108
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   109
        if (mDisconOpt == ServiceLevel){
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   110
            disconnectServiceLevel();
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   111
        }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   112
        else if (mDisconOpt == PhysicalLink){
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   113
            disconnectPhysicalLink();       
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   114
        }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   115
    } 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   116
    else if ( mDisconOpt == AllOngoingConnections ) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   117
        err = mBtengConnMan->GetConnectedAddresses(mDevAddrArray);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   118
        //Added this condition because GetConnectedAddresses returns 0 even if no addresses
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   119
        //are returned.
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   120
        if(err || !(mDevAddrArray.Count())) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   121
            emit delegateCompleted(err, this);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   122
            BOstraceFunctionExitExt( DUMMY_DEVLIST, this, err );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   123
            return;
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   124
        }
42
hgs
parents: 31
diff changeset
   125
        
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   126
        mActiveHandling = true;
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   127
        
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   128
        disconnectAllConnections_service();
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   129
    } 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   130
    else {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   131
        BTUI_ASSERT_X( 0, "BtDelegateDisconnect::exec()", "incorrect parameter" );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   132
    }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   133
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   134
}
hgs
parents: 31
diff changeset
   135
hgs
parents: 31
diff changeset
   136
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   137
void BtDelegateDisconnect::disconnectAllConnections_service() 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   138
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   139
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );   
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   140
    QString btStringAddr;
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   141
    addrSymbianToReadbleString( btStringAddr, mDevAddrArray[mAddrArrayIndex] );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   142
    QModelIndex start = deviceModel()->index(0,0);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   143
    QModelIndexList indexList = deviceModel()->match(start,BtDeviceModel::ReadableBdaddrRole, btStringAddr);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   144
    // ToDo:  what happens if device not found from the model?  error handling needed!
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   145
    QModelIndex index = indexList.at(0);
42
hgs
parents: 31
diff changeset
   146
    
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   147
    mBtEngAddr = mDevAddrArray[mAddrArrayIndex];
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   148
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   149
    disconnectServiceLevel(); 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   150
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   151
}
hgs
parents: 31
diff changeset
   152
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   153
void BtDelegateDisconnect::disconnectAllConnections_physical()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   154
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   155
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );   
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   156
    QString btStringAddr;
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   157
    addrSymbianToReadbleString( btStringAddr, mDevAddrArray[mAddrArrayIndex] );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   158
    QModelIndex start = deviceModel()->index(0,0);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   159
    QModelIndexList indexList = deviceModel()->match(start,BtDeviceModel::ReadableBdaddrRole, btStringAddr);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   160
    // ToDo:  what happens if device not found from the model?  error handling needed!
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   161
    QModelIndex index = indexList.at(0);
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   162
    
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   163
    mBtEngAddr = mDevAddrArray[mAddrArrayIndex];
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   164
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   165
    disconnectPhysicalLink();
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   166
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   167
}
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   168
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   169
void BtDelegateDisconnect::disconnectServiceLevel()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   170
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   171
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );   
42
hgs
parents: 31
diff changeset
   172
    int err;
hgs
parents: 31
diff changeset
   173
    TBTEngConnectionStatus connStatus = EBTEngNotConnected;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   174
    BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "calling btengconnman->isConnected() with device addr=", mBtEngAddr );
42
hgs
parents: 31
diff changeset
   175
    err = mBtengConnMan->IsConnected(mBtEngAddr, connStatus);
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   176
    BOstraceExt2( TRACE_DEBUG, DUMMY_DEVLIST, "isConnected() ret = %d, conn status (0/2) = %d",  err, connStatus);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   177
    
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   178
    //if ( !err && (connStatus == EBTEngConnected) ) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   179
        // asynchronous call, see callback DisconnectComplete()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   180
        BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "btengconnman->Disconnect() with param device addr=", mBtEngAddr );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   181
        err = mBtengConnMan->Disconnect(mBtEngAddr, EBTDiscGraceful);  
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   182
        BOstraceExt1( TRACE_DEBUG, DUMMY_DEVLIST, "Disconnect() ret = %d",  err);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   183
    //}
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   184
    if (err) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   185
        // handle error
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   186
        disconnectServiceLevelCompleted(err);
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   187
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   188
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   189
}
hgs
parents: 31
diff changeset
   190
        
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   191
void BtDelegateDisconnect::disconnectPhysicalLink()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   192
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   193
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );   
42
hgs
parents: 31
diff changeset
   194
    int err;
hgs
parents: 31
diff changeset
   195
    if ( !mSocketServ.Handle() ) {
hgs
parents: 31
diff changeset
   196
        err = mSocketServ.Connect();
hgs
parents: 31
diff changeset
   197
    }
hgs
parents: 31
diff changeset
   198
    if ( !err && !mPhyLinks ) {
hgs
parents: 31
diff changeset
   199
        TRAP( err, 
hgs
parents: 31
diff changeset
   200
            mPhyLinks = CBluetoothPhysicalLinks::NewL( *this, mSocketServ ) );
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   201
        if (err) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   202
            disconnectPhysicalLinkCompleted(err); // handle error
42
hgs
parents: 31
diff changeset
   203
        }
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   204
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   205
    // ToDo:  consider using DisconnectAll()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   206
    BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "phy->Disconnect() with param device addr=", mBtEngAddr );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   207
    err = mPhyLinks->Disconnect( mBtEngAddr );  // async call, see callback HandleDisconnectCompleteL()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   208
    BOstraceExt1( TRACE_DEBUG, DUMMY_DEVLIST, "Phy Disconnect() ret = %d",  err);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   209
    if (err) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   210
        disconnectPhysicalLinkCompleted(err);  // handle error
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   211
    }
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   212
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   213
}
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   214
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   215
void BtDelegateDisconnect::disconnectServiceLevelCompleted(int err)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   216
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   217
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err );   
42
hgs
parents: 31
diff changeset
   218
    if (mDisconOpt == ServiceLevel){
hgs
parents: 31
diff changeset
   219
        mActiveHandling = false;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   220
        emit delegateCompleted(err, this);
42
hgs
parents: 31
diff changeset
   221
    }
hgs
parents: 31
diff changeset
   222
    else if (mDisconOpt == AllOngoingConnections){
hgs
parents: 31
diff changeset
   223
        if (err){
hgs
parents: 31
diff changeset
   224
            mActiveHandling = false;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   225
            emit delegateCompleted(err, this);
42
hgs
parents: 31
diff changeset
   226
        }
hgs
parents: 31
diff changeset
   227
        else{
hgs
parents: 31
diff changeset
   228
            mAddrArrayIndex++;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   229
            if ( mAddrArrayIndex < mDevAddrArray.Count()) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   230
                disconnectAllConnections_service();  // recursive call
42
hgs
parents: 31
diff changeset
   231
            }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   232
            else {
42
hgs
parents: 31
diff changeset
   233
                mDevAddrArray.Reset();
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   234
                mAddrArrayIndex = 0;
42
hgs
parents: 31
diff changeset
   235
                err = mBtengConnMan->GetConnectedAddresses(mDevAddrArray);
hgs
parents: 31
diff changeset
   236
                if(err) {
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   237
                    mActiveHandling = false;
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   238
                    emit delegateCompleted(err, this);
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   239
                    BOstraceFunctionExitExt( DUMMY_DEVLIST, this, err );
42
hgs
parents: 31
diff changeset
   240
                    return;
hgs
parents: 31
diff changeset
   241
                }
hgs
parents: 31
diff changeset
   242
                disconnectAllConnections_physical();
hgs
parents: 31
diff changeset
   243
            }
hgs
parents: 31
diff changeset
   244
        }
hgs
parents: 31
diff changeset
   245
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   246
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   247
}
hgs
parents: 31
diff changeset
   248
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   249
void BtDelegateDisconnect::disconnectPhysicalLinkCompleted(int err)
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   250
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   251
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err );   
42
hgs
parents: 31
diff changeset
   252
    if (mDisconOpt == PhysicalLink){
hgs
parents: 31
diff changeset
   253
        mActiveHandling = false;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   254
        emit delegateCompleted(err, this);
42
hgs
parents: 31
diff changeset
   255
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   256
    else if (mDisconOpt == AllOngoingConnections) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   257
        if (err) {
42
hgs
parents: 31
diff changeset
   258
            mActiveHandling = false;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   259
            emit delegateCompleted(err, this);
42
hgs
parents: 31
diff changeset
   260
        }
hgs
parents: 31
diff changeset
   261
        else{
hgs
parents: 31
diff changeset
   262
            mAddrArrayIndex++;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   263
            if ( mAddrArrayIndex < mDevAddrArray.Count()) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   264
                disconnectAllConnections_physical();  // recursive call
42
hgs
parents: 31
diff changeset
   265
            }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   266
            else {  // DONE!
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   267
                //TODO: check if there is still ongoing connection from BTEngConnMan. and close them again if there is any new 
42
hgs
parents: 31
diff changeset
   268
                mActiveHandling = false;
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   269
                emit delegateCompleted(KErrNone, this);
42
hgs
parents: 31
diff changeset
   270
            }
hgs
parents: 31
diff changeset
   271
        }
hgs
parents: 31
diff changeset
   272
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   273
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   274
}
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   275
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   276
void BtDelegateDisconnect::ConnectComplete( TBTDevAddr& aAddr, TInt aErr, 
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   277
                                   RBTDevAddrArray* aConflicts )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   278
{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   279
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr );  
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   280
    BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", aAddr );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   281
    Q_UNUSED(aAddr);
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   282
    Q_UNUSED(aConflicts);  
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   283
    Q_UNUSED(aErr);
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   284
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   285
}
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   286
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   287
void BtDelegateDisconnect::DisconnectComplete( TBTDevAddr& aAddr, TInt aErr )
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   288
{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   289
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, aErr );  
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   290
    BtTraceBtAddr1( TRACE_DEBUG, DUMMY_DEVLIST, "device addr=", aAddr );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   291
    if ( mBtEngAddr != aAddr || !mActiveHandling ) { 
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   292
        BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   293
        return;
hgs
parents: 31
diff changeset
   294
    }
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   295
    disconnectServiceLevelCompleted(aErr);  
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   296
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   297
}
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   298
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   299
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   300
void BtDelegateDisconnect::cancel()
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   301
{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   302
    BOstraceFunctionEntry1( DUMMY_DEVLIST, this );  
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   303
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   304
}
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   305
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   306
void BtDelegateDisconnect::HandleCreateConnectionCompleteL( TInt err )
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   307
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   308
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err );   
42
hgs
parents: 31
diff changeset
   309
    Q_UNUSED( err );
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   310
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   311
}
hgs
parents: 31
diff changeset
   312
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   313
// callback for CBluetoothPhysicalLinks::Disconnect()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   314
void BtDelegateDisconnect::HandleDisconnectCompleteL( TInt err )
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   315
{
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   316
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err );  
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   317
    if ( !mActiveHandling ) {
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   318
        BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   319
        return;
hgs
parents: 31
diff changeset
   320
    } 
hgs
parents: 31
diff changeset
   321
    disconnectPhysicalLinkCompleted(err);
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   322
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
42
hgs
parents: 31
diff changeset
   323
}
hgs
parents: 31
diff changeset
   324
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   325
// callback for CBluetoothPhysicalLinks::DisconnectAll()
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   326
void BtDelegateDisconnect::HandleDisconnectAllCompleteL( TInt err )
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   327
{
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   328
    BOstraceFunctionEntryExt( DUMMY_DEVLIST, this, err );   
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   329
    Q_UNUSED( err );
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   330
    BOstraceFunctionExit1( DUMMY_DEVLIST, this );
31
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   331
}
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   332
a0ea99b6fa53 201019_1
hgs
parents:
diff changeset
   333
57
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   334
5ebadcda06cb 201035_7
hgs
parents: 42
diff changeset
   335