btobexprofiles/obexsendservices/obexservicesendutils/src/BTServiceStarter.cpp
author hgs
Fri, 03 Sep 2010 16:17:59 +0300
changeset 57 5ebadcda06cb
parent 45 b0aebde9b1fb
permissions -rw-r--r--
201035_7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Service starter implementation
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDE FILES
hgs
parents:
diff changeset
    21
#include "BTServiceStarter.h"
hgs
parents:
diff changeset
    22
#include "BTSUDebug.h"
hgs
parents:
diff changeset
    23
#include "BTSOPPController.h"
hgs
parents:
diff changeset
    24
#include "BTSBIPController.h"
hgs
parents:
diff changeset
    25
#include "BTSBPPController.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include <obexutilsmessagehandler.h>
hgs
parents:
diff changeset
    28
#include <featmgr.h>
hgs
parents:
diff changeset
    29
#include <hbdevicenotificationdialogsymbian.h>
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
    30
#include <btservices/bluetoothdevicedialogs.h>
32
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
// CONSTANTS
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// From BT SIG - Assigned numbers
hgs
parents:
diff changeset
    35
const TUint KBTServiceOPPSending        = 0x1105;
hgs
parents:
diff changeset
    36
const TUint KBTServiceDirectPrinting    = 0x1118;
hgs
parents:
diff changeset
    37
const TUint KBTServiceImagingResponder  = 0x111B;
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
const TUint KBTProgressInterval         = 1000000;
hgs
parents:
diff changeset
    40
42
hgs
parents: 32
diff changeset
    41
const TUid KUidMsgTypeBt                 = {0x10009ED5};
hgs
parents: 32
diff changeset
    42
//todo  need to find a suitable header to include. This is from obexutilslayer.h
32
hgs
parents:
diff changeset
    43
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
    44
const TInt KMinStringSize = 10;
42
hgs
parents: 32
diff changeset
    45
hgs
parents: 32
diff changeset
    46
hgs
parents: 32
diff changeset
    47
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
    48
_LIT( KBTDevDialogId, "com.nokia.hb.btdevicedialog/1.0" );
32
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    53
// CBTServiceStarter::CBTServiceStarter
hgs
parents:
diff changeset
    54
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    55
// might leave.
hgs
parents:
diff changeset
    56
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    57
//
hgs
parents:
diff changeset
    58
CBTServiceStarter::CBTServiceStarter() 
hgs
parents:
diff changeset
    59
    : CActive( CActive::EPriorityStandard ),
hgs
parents:
diff changeset
    60
      iBTEngDiscovery(NULL),
hgs
parents:
diff changeset
    61
      iService( EBTSendingService ),
hgs
parents:
diff changeset
    62
      iServiceStarted( EFalse ),
hgs
parents:
diff changeset
    63
      iMessageServerIndex(0),
hgs
parents:
diff changeset
    64
      iBytesSendWithBIP(0),
hgs
parents:
diff changeset
    65
      iProgressDialogActive(EFalse),
hgs
parents:
diff changeset
    66
      iUserCancel(EFalse), 
hgs
parents:
diff changeset
    67
      iFeatureManagerInitialized(EFalse),
hgs
parents:
diff changeset
    68
      iTriedBIP(EFalse),
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
    69
      iTriedOPP(EFalse),
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
    70
      iShowDialogNote(EFalse)
32
hgs
parents:
diff changeset
    71
    {    
hgs
parents:
diff changeset
    72
    CActiveScheduler::Add( this );
hgs
parents:
diff changeset
    73
    }
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    76
// CBTServiceStarter::ConstructL
hgs
parents:
diff changeset
    77
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
    78
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    79
//
hgs
parents:
diff changeset
    80
void CBTServiceStarter::ConstructL()
hgs
parents:
diff changeset
    81
    {
hgs
parents:
diff changeset
    82
    FLOG(_L("[BTSU]\t CBTServiceStarter::ConstructL()"));
hgs
parents:
diff changeset
    83
    iDevice = CBTDevice::NewL();
42
hgs
parents: 32
diff changeset
    84
    iDialog = CObexUtilsDialog::NewL( this );
hgs
parents: 32
diff changeset
    85
    iDelayedDestroyer = CBTServiceDelayedDestroyer::NewL(CActive::EPriorityStandard);
32
hgs
parents:
diff changeset
    86
    FeatureManager::InitializeLibL();
hgs
parents:
diff changeset
    87
    iFeatureManagerInitialized = ETrue;
hgs
parents:
diff changeset
    88
    FLOG(_L("[BTSU]\t CBTServiceStarter::ConstructL() completed"));
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    92
// CBTServiceStarter::NewL
hgs
parents:
diff changeset
    93
// Two-phased constructor.
hgs
parents:
diff changeset
    94
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    95
//
hgs
parents:
diff changeset
    96
CBTServiceStarter* CBTServiceStarter::NewL()
hgs
parents:
diff changeset
    97
    {
hgs
parents:
diff changeset
    98
    CBTServiceStarter* self = new( ELeave ) CBTServiceStarter();
hgs
parents:
diff changeset
    99
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   100
    self->ConstructL();
hgs
parents:
diff changeset
   101
    CleanupStack::Pop();
hgs
parents:
diff changeset
   102
    return self;
hgs
parents:
diff changeset
   103
    }
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
CBTServiceStarter::~CBTServiceStarter()
hgs
parents:
diff changeset
   106
    {
hgs
parents:
diff changeset
   107
    FLOG(_L("[BTSU]\t CBTServiceStarter::Destructor()"));
hgs
parents:
diff changeset
   108
    if ( iMessageServerIndex != 0 )
hgs
parents:
diff changeset
   109
        {
hgs
parents:
diff changeset
   110
        TRAPD( notUsedRetVal, TObexUtilsMessageHandler::DeleteOutboxEntryL( iMessageServerIndex ) );
hgs
parents:
diff changeset
   111
        notUsedRetVal=notUsedRetVal;
hgs
parents:
diff changeset
   112
        FTRACE(FPrint(_L("[BTSU]\t ~CBTServiceStarter() delete ob entry %d"), notUsedRetVal ) );
hgs
parents:
diff changeset
   113
        }
hgs
parents:
diff changeset
   114
    StopTransfer(KErrCancel); // Cancels active object
hgs
parents:
diff changeset
   115
    
hgs
parents:
diff changeset
   116
    delete iList;
hgs
parents:
diff changeset
   117
    delete iDevice;
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
    delete iController;
hgs
parents:
diff changeset
   120
    delete iBTEngDiscovery;
42
hgs
parents: 32
diff changeset
   121
    delete iDialog;
hgs
parents: 32
diff changeset
   122
    delete iDelayedDestroyer;
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   123
    iRemoteDeviceName.Close();
42
hgs
parents: 32
diff changeset
   124
    
32
hgs
parents:
diff changeset
   125
    if(iWaiter && iWaiter->IsStarted() )
hgs
parents:
diff changeset
   126
        {
hgs
parents:
diff changeset
   127
        iWaiter->AsyncStop();
hgs
parents:
diff changeset
   128
        }
hgs
parents:
diff changeset
   129
    delete iBTEngSettings;
hgs
parents:
diff changeset
   130
    
hgs
parents:
diff changeset
   131
    if ( iFeatureManagerInitialized )
hgs
parents:
diff changeset
   132
        {
hgs
parents:
diff changeset
   133
        FeatureManager::UnInitializeLib();
hgs
parents:
diff changeset
   134
        }
hgs
parents:
diff changeset
   135
    
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   136
    if (iNotificationDialog)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   137
        {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   138
        iNotificationDialog->Cancel();
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   139
        delete iNotificationDialog;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   140
        }
32
hgs
parents:
diff changeset
   141
    FLOG(_L("[BTSU]\t CBTServiceStarter::Destructor() completed"));
hgs
parents:
diff changeset
   142
    }
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   145
// CBTServiceStarter::StartServiceL
hgs
parents:
diff changeset
   146
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   147
//
hgs
parents:
diff changeset
   148
void CBTServiceStarter::StartServiceL( TBTServiceType aService, 
hgs
parents:
diff changeset
   149
                                       CBTServiceParameterList* aList,
hgs
parents:
diff changeset
   150
                                       CActiveSchedulerWait* aWaiter )
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
    FLOG(_L("[BTSU]\t CBTServiceStarter::StartServiceL()"));
hgs
parents:
diff changeset
   153
   
hgs
parents:
diff changeset
   154
	// Delete old list and take ownership of the new one
hgs
parents:
diff changeset
   155
    //
hgs
parents:
diff changeset
   156
	
hgs
parents:
diff changeset
   157
	delete iList;
hgs
parents:
diff changeset
   158
	iList = aList;
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    if ( iServiceStarted )
hgs
parents:
diff changeset
   161
        {
hgs
parents:
diff changeset
   162
        User::Leave( KErrInUse );
hgs
parents:
diff changeset
   163
        }
hgs
parents:
diff changeset
   164
    if ( !ValidParameters( aService, aList ) )
hgs
parents:
diff changeset
   165
        {
hgs
parents:
diff changeset
   166
        User::Leave( KErrArgument );
hgs
parents:
diff changeset
   167
        }	
hgs
parents:
diff changeset
   168
    
hgs
parents:
diff changeset
   169
    // Store the waiter pointer, a NULL value is also accepted
hgs
parents:
diff changeset
   170
    //
hgs
parents:
diff changeset
   171
    iWaiter = aWaiter;
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    // Store the requested service
hgs
parents:
diff changeset
   174
    //
hgs
parents:
diff changeset
   175
    iService = aService;
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    if( !iBTEngSettings )
hgs
parents:
diff changeset
   178
        {
hgs
parents:
diff changeset
   179
        iBTEngSettings = CBTEngSettings::NewL( this );
hgs
parents:
diff changeset
   180
        }
hgs
parents:
diff changeset
   181
    TBTPowerStateValue power = EBTPowerOff;
hgs
parents:
diff changeset
   182
    User::LeaveIfError( iBTEngSettings->GetPowerState( power ) );
hgs
parents:
diff changeset
   183
    TBool offline = EFalse;
hgs
parents:
diff changeset
   184
    if( !power )
hgs
parents:
diff changeset
   185
        {
hgs
parents:
diff changeset
   186
        //offline = CheckOfflineModeL();
hgs
parents:
diff changeset
   187
         offline = EFalse;
hgs
parents:
diff changeset
   188
        }
hgs
parents:
diff changeset
   189
    if( !offline )
hgs
parents:
diff changeset
   190
        {
hgs
parents:
diff changeset
   191
        FLOG(_L("[BTSU]\t CBTServiceStarter::StartServiceL() Phone is online, request temporary power on."));
hgs
parents:
diff changeset
   192
		TurnBTPowerOnL( power );
hgs
parents:
diff changeset
   193
        }
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
    FLOG(_L("[BTSU]\t CBTServiceStarter::StartServiceL() completed"));
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
    
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   201
// CBTServiceStarter::ControllerComplete
hgs
parents:
diff changeset
   202
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   203
//
hgs
parents:
diff changeset
   204
void CBTServiceStarter::ControllerComplete( TInt aStatus )
hgs
parents:
diff changeset
   205
    {
hgs
parents:
diff changeset
   206
    FLOG(_L("[BTSU]\t CBTServiceStarter::ControllerComplete()"));    
hgs
parents:
diff changeset
   207
    TInt error;
hgs
parents:
diff changeset
   208
    if ( iAllSend ) //stop transfer if everything is send
hgs
parents:
diff changeset
   209
        {
hgs
parents:
diff changeset
   210
        StopTransfer( aStatus );	      	        
hgs
parents:
diff changeset
   211
        return;    
hgs
parents:
diff changeset
   212
        }
hgs
parents:
diff changeset
   213
    if(( aStatus==KErrNone || aStatus==EBTSNoError ) && 
hgs
parents:
diff changeset
   214
        iState == EBTSStarterFindingBIP )
hgs
parents:
diff changeset
   215
        {
hgs
parents:
diff changeset
   216
        iBytesSendWithBIP=0;
hgs
parents:
diff changeset
   217
        if( iProgressGetter )
hgs
parents:
diff changeset
   218
            {
hgs
parents:
diff changeset
   219
            iBytesSendWithBIP=iProgressGetter->GetProgressStatus();
hgs
parents:
diff changeset
   220
            iProgressGetter=NULL;
hgs
parents:
diff changeset
   221
            delete iController; 
hgs
parents:
diff changeset
   222
            iController = NULL;            
hgs
parents:
diff changeset
   223
            }
hgs
parents:
diff changeset
   224
        if ( !iBTEngDiscovery )
hgs
parents:
diff changeset
   225
            {
hgs
parents:
diff changeset
   226
            TRAPD(err, iBTEngDiscovery = CBTEngDiscovery::NewL(this) );
hgs
parents:
diff changeset
   227
            if (err != KErrNone )
hgs
parents:
diff changeset
   228
                {
hgs
parents:
diff changeset
   229
                StopTransfer(EBTSPuttingFailed);	      	
hgs
parents:
diff changeset
   230
                return;
hgs
parents:
diff changeset
   231
                }
hgs
parents:
diff changeset
   232
            }
hgs
parents:
diff changeset
   233
        error=iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
hgs
parents:
diff changeset
   234
                               TUUID(KBTServiceOPPSending));	                 
hgs
parents:
diff changeset
   235
        if( error == KErrNone )
hgs
parents:
diff changeset
   236
	      	{
hgs
parents:
diff changeset
   237
	      	iState = EBTSStarterFindingOPP;	
hgs
parents:
diff changeset
   238
        	}
hgs
parents:
diff changeset
   239
        else
hgs
parents:
diff changeset
   240
        	{
hgs
parents:
diff changeset
   241
        	StopTransfer(EBTSPuttingFailed);	      	
hgs
parents:
diff changeset
   242
       		}		                           
hgs
parents:
diff changeset
   243
        }
hgs
parents:
diff changeset
   244
    else
hgs
parents:
diff changeset
   245
        {
hgs
parents:
diff changeset
   246
        StopTransfer( aStatus );	      	        
hgs
parents:
diff changeset
   247
        }   
hgs
parents:
diff changeset
   248
    FLOG(_L("[BTSU]\t CBTServiceStarter::ControllerComplete() completed"));
hgs
parents:
diff changeset
   249
    }
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   252
// CBTServiceStarter::GetProgressStatus
hgs
parents:
diff changeset
   253
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   254
//
hgs
parents:
diff changeset
   255
TInt CBTServiceStarter::GetProgressStatus()
hgs
parents:
diff changeset
   256
    {    
hgs
parents:
diff changeset
   257
    if ( iProgressGetter )
hgs
parents:
diff changeset
   258
        {
hgs
parents:
diff changeset
   259
        return iProgressGetter->GetProgressStatus()+iBytesSendWithBIP;       
hgs
parents:
diff changeset
   260
        }
hgs
parents:
diff changeset
   261
    else
hgs
parents:
diff changeset
   262
        {
hgs
parents:
diff changeset
   263
        return iBytesSendWithBIP;
hgs
parents:
diff changeset
   264
        }
hgs
parents:
diff changeset
   265
    }
hgs
parents:
diff changeset
   266
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   269
// CBTServiceStarter::ValidParameters
hgs
parents:
diff changeset
   270
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   271
//
hgs
parents:
diff changeset
   272
TBool CBTServiceStarter::ValidParameters( 
hgs
parents:
diff changeset
   273
    TBTServiceType aService, const CBTServiceParameterList* aList) const
hgs
parents:
diff changeset
   274
    {
hgs
parents:
diff changeset
   275
    FLOG(_L("[BTSU]\t CBTServiceStarter::ValidParameters()"));
hgs
parents:
diff changeset
   276
hgs
parents:
diff changeset
   277
    TBool result = EFalse;
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
    if ( aList != NULL )
hgs
parents:
diff changeset
   280
        {
hgs
parents:
diff changeset
   281
        switch ( aService )
hgs
parents:
diff changeset
   282
            {
hgs
parents:
diff changeset
   283
            case EBTSendingService:
hgs
parents:
diff changeset
   284
                {
hgs
parents:
diff changeset
   285
                // Sending service must have object or image parameters
hgs
parents:
diff changeset
   286
                //
hgs
parents:
diff changeset
   287
                if ( aList->ObjectCount() > 0 || aList->ImageCount() > 0 )
hgs
parents:
diff changeset
   288
                    {
hgs
parents:
diff changeset
   289
                    result = ETrue;
hgs
parents:
diff changeset
   290
                    }
hgs
parents:
diff changeset
   291
                break;
hgs
parents:
diff changeset
   292
                }
hgs
parents:
diff changeset
   293
            case EBTPrintingService:
hgs
parents:
diff changeset
   294
                {
hgs
parents:
diff changeset
   295
                // Printing service must have xhtml parameters
hgs
parents:
diff changeset
   296
                //
hgs
parents:
diff changeset
   297
                if ( aList->XhtmlCount() > 0 )
hgs
parents:
diff changeset
   298
                    {
hgs
parents:
diff changeset
   299
                    result = ETrue;
hgs
parents:
diff changeset
   300
                    }       
hgs
parents:
diff changeset
   301
                break;
hgs
parents:
diff changeset
   302
                }
hgs
parents:
diff changeset
   303
            case EBTObjectPushService:
hgs
parents:
diff changeset
   304
                {
hgs
parents:
diff changeset
   305
                // Sending service must have object or image parameters
hgs
parents:
diff changeset
   306
                //
hgs
parents:
diff changeset
   307
                if ( aList->ObjectCount() > 0 || aList->ImageCount() > 0 )
hgs
parents:
diff changeset
   308
                    {
hgs
parents:
diff changeset
   309
                    result = ETrue;
hgs
parents:
diff changeset
   310
                    }      
hgs
parents:
diff changeset
   311
                break;
hgs
parents:
diff changeset
   312
                }
hgs
parents:
diff changeset
   313
            default:
hgs
parents:
diff changeset
   314
                {
hgs
parents:
diff changeset
   315
                result = EFalse;
hgs
parents:
diff changeset
   316
                break;
hgs
parents:
diff changeset
   317
                }
hgs
parents:
diff changeset
   318
            }
hgs
parents:
diff changeset
   319
        }
hgs
parents:
diff changeset
   320
    FTRACE(FPrint(_L("[BTSU]\t CBTServiceStarter::ValidParameters() completed with %d"), result ) );
hgs
parents:
diff changeset
   321
hgs
parents:
diff changeset
   322
    return result;
hgs
parents:
diff changeset
   323
    }
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   326
// CBTServiceStarter::StartProfileSelectL
hgs
parents:
diff changeset
   327
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   328
//
hgs
parents:
diff changeset
   329
void CBTServiceStarter::StartProfileSelectL( TBTServiceType aService )
hgs
parents:
diff changeset
   330
    {
hgs
parents:
diff changeset
   331
    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL()"));    
hgs
parents:
diff changeset
   332
    LaunchWaitNoteL();   
hgs
parents:
diff changeset
   333
    iAllSend=EFalse;  
hgs
parents:
diff changeset
   334
    iSendToBIPOnlyDevice = EFalse;
hgs
parents:
diff changeset
   335
    
hgs
parents:
diff changeset
   336
    if ( !iBTEngDiscovery )
hgs
parents:
diff changeset
   337
        {
hgs
parents:
diff changeset
   338
        iBTEngDiscovery = CBTEngDiscovery::NewL(this);
hgs
parents:
diff changeset
   339
        }
hgs
parents:
diff changeset
   340
    
hgs
parents:
diff changeset
   341
    if ( !FeatureManager::FeatureSupported( KFeatureIdBtImagingProfile ) && (aService != EBTPrintingService) )
hgs
parents:
diff changeset
   342
        {
hgs
parents:
diff changeset
   343
        // If BTimagingProfile is disabled, use OPP instead.
hgs
parents:
diff changeset
   344
        User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(), 
hgs
parents:
diff changeset
   345
                                                                                       TUUID(KBTServiceOPPSending)));
hgs
parents:
diff changeset
   346
        iState = EBTSStarterFindingOPP;  
hgs
parents:
diff changeset
   347
        return;
hgs
parents:
diff changeset
   348
        }
hgs
parents:
diff changeset
   349
    
hgs
parents:
diff changeset
   350
    switch ( aService  )
hgs
parents:
diff changeset
   351
        {
hgs
parents:
diff changeset
   352
        case EBTSendingService: // Find OPP
hgs
parents:
diff changeset
   353
            {            
hgs
parents:
diff changeset
   354
            if ( iList->ObjectCount() > 0 )  // We try to send files with OPP profile as long as it contains non-bip objects
hgs
parents:
diff changeset
   355
                {
hgs
parents:
diff changeset
   356
                FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() OPP"));    
hgs
parents:
diff changeset
   357
                User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(), 
hgs
parents:
diff changeset
   358
                                                                                TUUID(KBTServiceOPPSending)));
hgs
parents:
diff changeset
   359
                iState = EBTSStarterFindingOPP;          
hgs
parents:
diff changeset
   360
                }
hgs
parents:
diff changeset
   361
            else if(iList->ObjectCount() == 0 && iList->ImageCount() > 0)
hgs
parents:
diff changeset
   362
                {
hgs
parents:
diff changeset
   363
                FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() BIP")); 
hgs
parents:
diff changeset
   364
                User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
hgs
parents:
diff changeset
   365
                                                                                TUUID(KBTServiceImagingResponder)));
hgs
parents:
diff changeset
   366
                iState = EBTSStarterFindingBIP;
hgs
parents:
diff changeset
   367
                }
hgs
parents:
diff changeset
   368
            break;
hgs
parents:
diff changeset
   369
            }
hgs
parents:
diff changeset
   370
        case EBTPrintingService: // Find BPP
hgs
parents:
diff changeset
   371
            {
hgs
parents:
diff changeset
   372
            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() BPP"));
hgs
parents:
diff changeset
   373
            User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
hgs
parents:
diff changeset
   374
                TUUID(KBTServiceDirectPrinting)));
hgs
parents:
diff changeset
   375
            iState = EBTSStarterFindingBPP;            
hgs
parents:
diff changeset
   376
            break;
hgs
parents:
diff changeset
   377
            }
hgs
parents:
diff changeset
   378
        case EBTObjectPushService: // Find BIP
hgs
parents:
diff changeset
   379
            {
hgs
parents:
diff changeset
   380
            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() BIP"));
hgs
parents:
diff changeset
   381
            User::LeaveIfError( iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),
hgs
parents:
diff changeset
   382
                TUUID(KBTServiceOPPSending)));
hgs
parents:
diff changeset
   383
            iState = EBTSStarterFindingOPP;            
hgs
parents:
diff changeset
   384
            break;
hgs
parents:
diff changeset
   385
            }
hgs
parents:
diff changeset
   386
        default:
hgs
parents:
diff changeset
   387
            {
hgs
parents:
diff changeset
   388
            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() ERROR, unhandled case"));            
hgs
parents:
diff changeset
   389
            break;
hgs
parents:
diff changeset
   390
            }
hgs
parents:
diff changeset
   391
        }
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileSelectL() completed"));
hgs
parents:
diff changeset
   394
    }
hgs
parents:
diff changeset
   395
    
hgs
parents:
diff changeset
   396
hgs
parents:
diff changeset
   397
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   398
// CBTServiceStarter::StartProfileL
hgs
parents:
diff changeset
   399
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   400
//
hgs
parents:
diff changeset
   401
void CBTServiceStarter::StartProfileL( TBTServiceProfile aProfile )
hgs
parents:
diff changeset
   402
    {
hgs
parents:
diff changeset
   403
    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileL()"));
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
    switch ( aProfile )
hgs
parents:
diff changeset
   406
        {
hgs
parents:
diff changeset
   407
        case EBTSBPP:
hgs
parents:
diff changeset
   408
            {            
hgs
parents:
diff changeset
   409
            iController = CBTSBPPController::NewL( this, iClientChannel, 
hgs
parents:
diff changeset
   410
                                                   iDevice->BDAddr(), iList,
hgs
parents:
diff changeset
   411
                                                   iBTEngDiscovery );
hgs
parents:
diff changeset
   412
            break;
hgs
parents:
diff changeset
   413
            }
hgs
parents:
diff changeset
   414
        case EBTSOPP:
hgs
parents:
diff changeset
   415
            {
hgs
parents:
diff changeset
   416
            iController = CBTSOPPController::NewL( this, iClientChannel, 
hgs
parents:
diff changeset
   417
                                                   iDevice->BDAddr(), iList );
hgs
parents:
diff changeset
   418
            break;
hgs
parents:
diff changeset
   419
            }
hgs
parents:
diff changeset
   420
        case EBTSBIP:
hgs
parents:
diff changeset
   421
            {
hgs
parents:
diff changeset
   422
            iController = CBTSBIPController::NewL( this, iClientChannel, 
hgs
parents:
diff changeset
   423
                                                   iDevice->BDAddr(), iList );
hgs
parents:
diff changeset
   424
            break;
hgs
parents:
diff changeset
   425
            }
hgs
parents:
diff changeset
   426
        case EBTSNone:
hgs
parents:
diff changeset
   427
        default:
hgs
parents:
diff changeset
   428
            {
hgs
parents:
diff changeset
   429
            FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileL() ERROR, unhandled case"));            
hgs
parents:
diff changeset
   430
            break;
hgs
parents:
diff changeset
   431
            }
hgs
parents:
diff changeset
   432
        }
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
    FLOG(_L("[BTSU]\t CBTServiceStarter::StartProfileL() completed"));
hgs
parents:
diff changeset
   435
    }
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   438
// CBTServiceStarter::LaunchWaitNoteL
hgs
parents:
diff changeset
   439
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   440
//
hgs
parents:
diff changeset
   441
void CBTServiceStarter::LaunchWaitNoteL()
hgs
parents:
diff changeset
   442
    {
hgs
parents:
diff changeset
   443
    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchWaitNoteL()"));
hgs
parents:
diff changeset
   444
    if ( iService == EBTPrintingService )
hgs
parents:
diff changeset
   445
        {
hgs
parents:
diff changeset
   446
 //       iDialog->LaunchWaitDialogL( R_BT_PRINTING_WAIT_NOTE );
hgs
parents:
diff changeset
   447
        }
hgs
parents:
diff changeset
   448
    else
hgs
parents:
diff changeset
   449
        {
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   450
        iShowDialogNote = ETrue;
42
hgs
parents: 32
diff changeset
   451
    //todo need to do the localisation here
32
hgs
parents:
diff changeset
   452
        _LIT(KConnectText, "Connecting...");
42
hgs
parents: 32
diff changeset
   453
        iDialog->LaunchWaitDialogL(KConnectText);
32
hgs
parents:
diff changeset
   454
        
hgs
parents:
diff changeset
   455
        }    
hgs
parents:
diff changeset
   456
    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchWaitNoteL() completed"));
hgs
parents:
diff changeset
   457
    }
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   460
// CBTServiceStarter::CancelWaitNote
hgs
parents:
diff changeset
   461
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   462
//
hgs
parents:
diff changeset
   463
void CBTServiceStarter::CancelWaitNote()
hgs
parents:
diff changeset
   464
    {
hgs
parents:
diff changeset
   465
    FLOG(_L("[BTSU]\t CBTServiceStarter::CancelWaitNote()"));
hgs
parents:
diff changeset
   466
42
hgs
parents: 32
diff changeset
   467
    if ( iDialog )
hgs
parents: 32
diff changeset
   468
        {
hgs
parents: 32
diff changeset
   469
        iDialog->CancelWaitDialog();
hgs
parents: 32
diff changeset
   470
        }
32
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
    FLOG(_L("[BTSU]\t CBTServiceStarter::CancelWaitNote() completed"));
hgs
parents:
diff changeset
   473
    }
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
hgs
parents:
diff changeset
   476
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   477
// CBTServiceStarter::LaunchProgressNoteL
hgs
parents:
diff changeset
   478
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   479
//
42
hgs
parents: 32
diff changeset
   480
//todo reusing the second param aTotalSize to aFileCount as it is no longer used check it being used in other places
32
hgs
parents:
diff changeset
   481
void CBTServiceStarter::LaunchProgressNoteL( MBTServiceProgressGetter* aGetter,
42
hgs
parents: 32
diff changeset
   482
                                              TInt aFileCount)
32
hgs
parents:
diff changeset
   483
    {
hgs
parents:
diff changeset
   484
    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchProgressNoteL()"));
42
hgs
parents: 32
diff changeset
   485
    RBuf deviceName;
32
hgs
parents:
diff changeset
   486
    if ( iService != EBTPrintingService )
hgs
parents:
diff changeset
   487
        {    
hgs
parents:
diff changeset
   488
        iProgressGetter = aGetter;     
hgs
parents:
diff changeset
   489
        CancelWaitNote();        
hgs
parents:
diff changeset
   490
        
hgs
parents:
diff changeset
   491
        if ( !iProgressDialogActive )
hgs
parents:
diff changeset
   492
        	{
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   493
            iShowDialogNote = ETrue;  
42
hgs
parents: 32
diff changeset
   494
            // todo need to change the last parameter because we are now using the textmap id which is a string
hgs
parents: 32
diff changeset
   495
            // whether we replace it with that or remove the parameter is to be decided
32
hgs
parents:
diff changeset
   496
        	iMessageServerIndex = TObexUtilsMessageHandler::CreateOutboxEntryL( 
42
hgs
parents: 32
diff changeset
   497
            KUidMsgTypeBt, 0 );     
32
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
            
42
hgs
parents: 32
diff changeset
   500
            if ( iDevice->IsValidFriendlyName() )
hgs
parents: 32
diff changeset
   501
                {
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   502
                deviceName.CreateL( iDevice->FriendlyName() );
42
hgs
parents: 32
diff changeset
   503
                }
hgs
parents: 32
diff changeset
   504
            else 
hgs
parents: 32
diff changeset
   505
                {
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   506
                deviceName.CreateL( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName()));
42
hgs
parents: 32
diff changeset
   507
                }        	
hgs
parents: 32
diff changeset
   508
        	iDialog->LaunchProgressDialogL( this, aFileCount, 
hgs
parents: 32
diff changeset
   509
                                deviceName, KBTProgressInterval );	
hgs
parents: 32
diff changeset
   510
        	deviceName.Close();
32
hgs
parents:
diff changeset
   511
        	}        
hgs
parents:
diff changeset
   512
        iProgressDialogActive=ETrue;     
hgs
parents:
diff changeset
   513
        }
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
    FLOG(_L("[BTSU]\t CBTServiceStarter::LaunchProgressNoteL() completed"));
hgs
parents:
diff changeset
   516
    }
hgs
parents:
diff changeset
   517
42
hgs
parents: 32
diff changeset
   518
// -----------------------------------------------------------------------------
hgs
parents: 32
diff changeset
   519
// CBTServiceStarter::UpdateProgressNoteL
hgs
parents: 32
diff changeset
   520
// -----------------------------------------------------------------------------
hgs
parents: 32
diff changeset
   521
//
32
hgs
parents:
diff changeset
   522
void CBTServiceStarter::UpdateProgressNoteL(TInt aFileSize,TInt aFileIndex, const TDesC& aFileName )
hgs
parents:
diff changeset
   523
    {
hgs
parents:
diff changeset
   524
    
42
hgs
parents: 32
diff changeset
   525
    iDialog->UpdateProgressNoteL(aFileSize,aFileIndex,aFileName);
hgs
parents: 32
diff changeset
   526
    }
32
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   529
// CBTServiceStarter::CancelProgressNote
hgs
parents:
diff changeset
   530
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   531
//
hgs
parents:
diff changeset
   532
void CBTServiceStarter::CancelProgressNote()
hgs
parents:
diff changeset
   533
    {
hgs
parents:
diff changeset
   534
    FLOG(_L("[BTSU]\t CBTServiceStarter::CancelProgressNote()"));
hgs
parents:
diff changeset
   535
42
hgs
parents: 32
diff changeset
   536
    if ( iDialog )
32
hgs
parents:
diff changeset
   537
        {
42
hgs
parents: 32
diff changeset
   538
        iDialog->CancelProgressDialog();
32
hgs
parents:
diff changeset
   539
        }
hgs
parents:
diff changeset
   540
    }
hgs
parents:
diff changeset
   541
hgs
parents:
diff changeset
   542
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   543
// CBTServiceStarter::DialogDismissed
hgs
parents:
diff changeset
   544
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   545
//
42
hgs
parents: 32
diff changeset
   546
void CBTServiceStarter::DialogDismissed(TInt aButtonId )
32
hgs
parents:
diff changeset
   547
    {
hgs
parents:
diff changeset
   548
    FLOG(_L("[BTSU]\t CBTServiceStarter::DialogDismissed()"));   
42
hgs
parents: 32
diff changeset
   549
    if( aButtonId == ECancelButton )
hgs
parents: 32
diff changeset
   550
        { // this condition is hit for the progress dialog and connecting dialog cancel
32
hgs
parents:
diff changeset
   551
        FLOG(_L("[BTSU]\t CBTServiceStarter::DialogDissmissed(), cancelled by user"));        
hgs
parents:
diff changeset
   552
        iUserCancel=ETrue;
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   553
        iShowDialogNote = EFalse;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   554
/*        if ( iDevice->IsValidFriendlyName() )
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   555
            {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   556
            TRAP_IGNORE(iRemoteDeviceName.CreateL( iDevice->FriendlyName()) );
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   557
            }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   558
        else 
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   559
            {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   560
            TRAP_IGNORE( iRemoteDeviceName.CreateL( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName())));
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   561
            }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   562
        
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   563
        iRemoteDeviceClass = iDevice->DeviceClass().DeviceClass();        
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   564
        
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   565
        TRAP_IGNORE( ShowSendCompleteNoteL(ESendCancelled) );*/
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   566
        
32
hgs
parents:
diff changeset
   567
        if ( iController )
hgs
parents:
diff changeset
   568
            {
hgs
parents:
diff changeset
   569
            iController->Abort();
hgs
parents:
diff changeset
   570
            }
hgs
parents:
diff changeset
   571
        else 
hgs
parents:
diff changeset
   572
           {
hgs
parents:
diff changeset
   573
           StopTransfer(KErrCancel);
hgs
parents:
diff changeset
   574
           }    
hgs
parents:
diff changeset
   575
        }
42
hgs
parents: 32
diff changeset
   576
    else if ( aButtonId == ENoButton )
32
hgs
parents:
diff changeset
   577
        {
hgs
parents:
diff changeset
   578
        // user abortion
hgs
parents:
diff changeset
   579
        //
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   580
        iShowDialogNote = EFalse;
32
hgs
parents:
diff changeset
   581
        iUserCancel = ETrue;
hgs
parents:
diff changeset
   582
        StopTransfer( KErrCancel );
42
hgs
parents: 32
diff changeset
   583
        CancelWaitNote();
hgs
parents: 32
diff changeset
   584
        }
hgs
parents: 32
diff changeset
   585
    else //EYesButton
hgs
parents: 32
diff changeset
   586
        {// this condition is hit when user is ok with sending the unsupported images
hgs
parents: 32
diff changeset
   587
        iController->SendUnSupportedFiles();
32
hgs
parents:
diff changeset
   588
        }
hgs
parents:
diff changeset
   589
    FLOG(_L("[BTSU]\t CBTServiceStarter::DialogDismissed() completed"));
hgs
parents:
diff changeset
   590
    }
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
// -----------------------------------------------------------------------------
42
hgs
parents: 32
diff changeset
   593
// CBTServiceStarter::ShowErrorNote
32
hgs
parents:
diff changeset
   594
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   595
//
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   596
void CBTServiceStarter::ShowErrorNote( TInt aReason ) 
32
hgs
parents:
diff changeset
   597
    {
42
hgs
parents: 32
diff changeset
   598
    FLOG(_L("[BTSU]\t CBTServiceStarter::ShowErrorNote()"));
32
hgs
parents:
diff changeset
   599
     
42
hgs
parents: 32
diff changeset
   600
    if ( iDevice->IsValidFriendlyName() )
hgs
parents: 32
diff changeset
   601
        {
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   602
        iRemoteDeviceName.CreateL( iDevice->FriendlyName() );
42
hgs
parents: 32
diff changeset
   603
        }
hgs
parents: 32
diff changeset
   604
    else 
hgs
parents: 32
diff changeset
   605
        {
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   606
        TRAP_IGNORE( iRemoteDeviceName.CreateL( BTDeviceNameConverter::ToUnicodeL(iDevice->DeviceName())));
42
hgs
parents: 32
diff changeset
   607
        }
hgs
parents: 32
diff changeset
   608
    
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   609
    iRemoteDeviceClass = iDevice->DeviceClass().DeviceClass();    
32
hgs
parents:
diff changeset
   610
hgs
parents:
diff changeset
   611
    switch ( aReason )
hgs
parents:
diff changeset
   612
        {
hgs
parents:
diff changeset
   613
        case EBTSNoError:
hgs
parents:
diff changeset
   614
            {
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   615
            TRAP_IGNORE( ShowSendCompleteNoteL(ESendCompleted) );
32
hgs
parents:
diff changeset
   616
            break;
hgs
parents:
diff changeset
   617
            }
hgs
parents:
diff changeset
   618
        case EBTSConnectingFailed:
hgs
parents:
diff changeset
   619
        case EBTSGettingFailed:
hgs
parents:
diff changeset
   620
        case EBTSPuttingFailed:
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   621
            {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   622
            TRAP_IGNORE( ShowErrorMessageL(TBluetoothDialogParams::ESendFailed) );
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   623
            break;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   624
            }
32
hgs
parents:
diff changeset
   625
        case EBTSNoSuitableProfiles:
42
hgs
parents: 32
diff changeset
   626
      //todo below three enums are not valid and it is not being used at anywhere do we need to have it 
hgs
parents: 32
diff changeset
   627
            
hgs
parents: 32
diff changeset
   628
//        case EBTSBIPSomeSend:
hgs
parents: 32
diff changeset
   629
//        case EBTSBIPOneNotSend:
hgs
parents: 32
diff changeset
   630
//        case EBTSBIPNoneSend:
hgs
parents: 32
diff changeset
   631
        default:            
32
hgs
parents:
diff changeset
   632
            break;
hgs
parents:
diff changeset
   633
        }        
42
hgs
parents: 32
diff changeset
   634
    FLOG(_L("[BTSU]\t CBTServiceStarter::ShowErrorNote() completed"));
32
hgs
parents:
diff changeset
   635
    }
hgs
parents:
diff changeset
   636
42
hgs
parents: 32
diff changeset
   637
hgs
parents: 32
diff changeset
   638
32
hgs
parents:
diff changeset
   639
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   640
// CBTServiceStarter::LaunchConfirmationQuery
hgs
parents:
diff changeset
   641
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   642
//
42
hgs
parents: 32
diff changeset
   643
void  CBTServiceStarter::LaunchConfirmationQuery(const TDesC& aConfirmText)
hgs
parents: 32
diff changeset
   644
    {
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   645
    TInt dialogTitle = TBluetoothDialogParams::EUnsupportedImages;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   646
    iRemoteDeviceClass = iDevice->DeviceClass().DeviceClass();
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   647
    ShowErrorMessageL(dialogTitle,aConfirmText);
42
hgs
parents: 32
diff changeset
   648
    }
32
hgs
parents:
diff changeset
   649
hgs
parents:
diff changeset
   650
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   651
// CBTServiceStarter::StopTransfer
hgs
parents:
diff changeset
   652
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   653
//	
hgs
parents:
diff changeset
   654
void CBTServiceStarter::StopTransfer(TInt aError)
hgs
parents:
diff changeset
   655
	{
hgs
parents:
diff changeset
   656
      
hgs
parents:
diff changeset
   657
	FLOG(_L("[BTSU]\t CBTServiceStarter::StopTransfer()"));
hgs
parents:
diff changeset
   658
    Cancel();
hgs
parents:
diff changeset
   659
	if( !iUserCancel )
hgs
parents:
diff changeset
   660
	    {
hgs
parents:
diff changeset
   661
	    CancelWaitNote();
hgs
parents:
diff changeset
   662
        CancelProgressNote();
hgs
parents:
diff changeset
   663
	
hgs
parents:
diff changeset
   664
        if ( aError != KErrCancel )
hgs
parents:
diff changeset
   665
            {
42
hgs
parents: 32
diff changeset
   666
            ShowErrorNote( aError );
32
hgs
parents:
diff changeset
   667
            }     
hgs
parents:
diff changeset
   668
        }
hgs
parents:
diff changeset
   669
    if ( iMessageServerIndex != 0 )
hgs
parents:
diff changeset
   670
        {                 
hgs
parents:
diff changeset
   671
        TRAPD( notUsedRetVal, TObexUtilsMessageHandler::DeleteOutboxEntryL( iMessageServerIndex ) );
hgs
parents:
diff changeset
   672
        notUsedRetVal=notUsedRetVal;
hgs
parents:
diff changeset
   673
        iMessageServerIndex=0;
hgs
parents:
diff changeset
   674
        FTRACE(FPrint(_L("[BTSU]\t CBTServiceStarter::StopTransfer() delete ob entry %d"), notUsedRetVal ) );
hgs
parents:
diff changeset
   675
        }
hgs
parents:
diff changeset
   676
    // Release resources
hgs
parents:
diff changeset
   677
    //
hgs
parents:
diff changeset
   678
    if ( iList )
hgs
parents:
diff changeset
   679
        {
hgs
parents:
diff changeset
   680
        delete iList;
hgs
parents:
diff changeset
   681
        iList = NULL;    
hgs
parents:
diff changeset
   682
        }
hgs
parents:
diff changeset
   683
        
hgs
parents:
diff changeset
   684
    if ( iController )
hgs
parents:
diff changeset
   685
        {
hgs
parents:
diff changeset
   686
        delete iController; 
hgs
parents:
diff changeset
   687
        iController = NULL;
hgs
parents:
diff changeset
   688
        }
hgs
parents:
diff changeset
   689
    
hgs
parents:
diff changeset
   690
    if ( iNotifier.Handle() )
hgs
parents:
diff changeset
   691
        {
hgs
parents:
diff changeset
   692
        iNotifier.Close();
hgs
parents:
diff changeset
   693
        }
hgs
parents:
diff changeset
   694
hgs
parents:
diff changeset
   695
    // Reset states
hgs
parents:
diff changeset
   696
    //
hgs
parents:
diff changeset
   697
    iServiceStarted = EFalse;
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
   698
    if (( iWaiter && iWaiter->IsStarted() )&&(!iShowDialogNote))
32
hgs
parents:
diff changeset
   699
        {                
hgs
parents:
diff changeset
   700
        iWaiter->AsyncStop();                    
hgs
parents:
diff changeset
   701
        }    
hgs
parents:
diff changeset
   702
        
hgs
parents:
diff changeset
   703
    iState = EBTSStarterStoppingService;	    
hgs
parents:
diff changeset
   704
	}
hgs
parents:
diff changeset
   705
	
hgs
parents:
diff changeset
   706
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   707
// CBTServiceStarter::ConnectTimedOut()
hgs
parents:
diff changeset
   708
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   709
//	
hgs
parents:
diff changeset
   710
void CBTServiceStarter::ConnectTimedOut()
hgs
parents:
diff changeset
   711
    {
hgs
parents:
diff changeset
   712
    FLOG(_L("[BTSU]\t CBTServiceStarter::ConnectTimedOut()"));            
hgs
parents:
diff changeset
   713
    StopTransfer(EBTSConnectingFailed);    
hgs
parents:
diff changeset
   714
    FLOG(_L("[BTSU]\t CBTServiceStarter::ConnectTimedOut() completed"));
hgs
parents:
diff changeset
   715
    }
hgs
parents:
diff changeset
   716
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   717
// CBTServiceStarter::ServiceSearchComplete()
hgs
parents:
diff changeset
   718
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   719
//	
hgs
parents:
diff changeset
   720
void CBTServiceStarter::ServiceSearchComplete( const RSdpRecHandleArray& /*aResult*/, 
hgs
parents:
diff changeset
   721
                                         TUint /*aTotalRecordsCount*/, TInt /*aErr */)
hgs
parents:
diff changeset
   722
    {
hgs
parents:
diff changeset
   723
    FLOG(_L("[BTSU]\t CBTServiceStarter::ServiceSearchComplete()"));        
hgs
parents:
diff changeset
   724
    }
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   727
// CBTServiceStarter::AttributeSearchComplete()
hgs
parents:
diff changeset
   728
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   729
//	
hgs
parents:
diff changeset
   730
void CBTServiceStarter::AttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
hgs
parents:
diff changeset
   731
                                           const RSdpResultArray& /*aAttr*/, 
hgs
parents:
diff changeset
   732
                                           TInt /*aErr*/ )
hgs
parents:
diff changeset
   733
    {
hgs
parents:
diff changeset
   734
    FLOG(_L("[BTSU]\t CBTServiceStarter::AttributeSearchComplete()"));           
hgs
parents:
diff changeset
   735
    }
hgs
parents:
diff changeset
   736
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   737
// CBTServiceStarter::ServiceAttributeSearchComplete()
hgs
parents:
diff changeset
   738
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   739
//	
hgs
parents:
diff changeset
   740
void CBTServiceStarter::ServiceAttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, 
hgs
parents:
diff changeset
   741
                                                          const RSdpResultArray& aAttr, 
hgs
parents:
diff changeset
   742
                                                          TInt aErr )
hgs
parents:
diff changeset
   743
    {
hgs
parents:
diff changeset
   744
    FLOG(_L("[BTSU]\t CBTServiceStarter::ServiceAttributeSearchComplete()"));               
hgs
parents:
diff changeset
   745
    TInt err = KErrNone;
45
b0aebde9b1fb 201027_02
hgs
parents: 42
diff changeset
   746
    if ((aErr==KErrEof || aErr==KErrNone) && aAttr.Count()>0 )
32
hgs
parents:
diff changeset
   747
        {            
hgs
parents:
diff changeset
   748
        RSdpResultArray results=aAttr;    
hgs
parents:
diff changeset
   749
        iBTEngDiscovery->ParseRfcommChannel(results,iClientChannel);          
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
        iBTEngDiscovery->CancelRemoteSdpQuery();
hgs
parents:
diff changeset
   752
               
hgs
parents:
diff changeset
   753
        switch (iState)
hgs
parents:
diff changeset
   754
            {
hgs
parents:
diff changeset
   755
            case EBTSStarterFindingBIP:
hgs
parents:
diff changeset
   756
                {
hgs
parents:
diff changeset
   757
                TRAP(err, StartProfileL( EBTSBIP ));  
hgs
parents:
diff changeset
   758
                iTriedBIP = ETrue;
hgs
parents:
diff changeset
   759
                if (err != KErrNone)
hgs
parents:
diff changeset
   760
                    {
hgs
parents:
diff changeset
   761
                    StopTransfer(EBTSConnectingFailed);        
hgs
parents:
diff changeset
   762
                    }
hgs
parents:
diff changeset
   763
                if ( iSendToBIPOnlyDevice )
hgs
parents:
diff changeset
   764
                    {
hgs
parents:
diff changeset
   765
                    iAllSend = ETrue;
hgs
parents:
diff changeset
   766
                    }
hgs
parents:
diff changeset
   767
                else
hgs
parents:
diff changeset
   768
                    {
hgs
parents:
diff changeset
   769
                    if(iList->ObjectCount() == 0)
hgs
parents:
diff changeset
   770
                        {
hgs
parents:
diff changeset
   771
                        iAllSend=ETrue;
hgs
parents:
diff changeset
   772
                        }
hgs
parents:
diff changeset
   773
                    }
hgs
parents:
diff changeset
   774
                break;
hgs
parents:
diff changeset
   775
                }
hgs
parents:
diff changeset
   776
            case EBTSStarterFindingOPP:
hgs
parents:
diff changeset
   777
                {
hgs
parents:
diff changeset
   778
                TRAP(err, StartProfileL( EBTSOPP ) ); 
hgs
parents:
diff changeset
   779
                iTriedOPP = ETrue;
hgs
parents:
diff changeset
   780
                if (err != KErrNone)
hgs
parents:
diff changeset
   781
                    {
hgs
parents:
diff changeset
   782
                    StopTransfer(EBTSConnectingFailed);        
hgs
parents:
diff changeset
   783
                    }
hgs
parents:
diff changeset
   784
                iAllSend=ETrue;  
hgs
parents:
diff changeset
   785
                break;
hgs
parents:
diff changeset
   786
                }            
hgs
parents:
diff changeset
   787
            case EBTSStarterFindingBPP:          
hgs
parents:
diff changeset
   788
                {
hgs
parents:
diff changeset
   789
                TRAP(err, StartProfileL( EBTSBPP ));           
hgs
parents:
diff changeset
   790
                if (err != KErrNone)
hgs
parents:
diff changeset
   791
                    {
hgs
parents:
diff changeset
   792
                    StopTransfer(EBTSConnectingFailed);        
hgs
parents:
diff changeset
   793
                    }               
hgs
parents:
diff changeset
   794
                break;    
hgs
parents:
diff changeset
   795
                }            
hgs
parents:
diff changeset
   796
            }       
hgs
parents:
diff changeset
   797
        }      
hgs
parents:
diff changeset
   798
    else if ( aErr==KErrEof && aAttr.Count()==0 && 
hgs
parents:
diff changeset
   799
              iState == EBTSStarterFindingBIP && !iTriedBIP )
hgs
parents:
diff changeset
   800
        {
hgs
parents:
diff changeset
   801
        iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),TUUID(KBTServiceOPPSending));
hgs
parents:
diff changeset
   802
        iState = EBTSStarterFindingOPP;    
hgs
parents:
diff changeset
   803
		iTriedBIP = ETrue;
hgs
parents:
diff changeset
   804
        }    
hgs
parents:
diff changeset
   805
    else if ( aErr==KErrEof && aAttr.Count()==0 &&
hgs
parents:
diff changeset
   806
              iState == EBTSStarterFindingOPP && !iTriedOPP &&
hgs
parents:
diff changeset
   807
              iList->ImageCount() > 0 &&
hgs
parents:
diff changeset
   808
              FeatureManager::FeatureSupported( KFeatureIdBtImagingProfile ) )
hgs
parents:
diff changeset
   809
        {
hgs
parents:
diff changeset
   810
        iSendToBIPOnlyDevice = ETrue;
hgs
parents:
diff changeset
   811
        iBTEngDiscovery->RemoteProtocolChannelQuery(iDevice->BDAddr(),TUUID(KBTServiceImagingResponder));
hgs
parents:
diff changeset
   812
        iState = EBTSStarterFindingBIP;  
hgs
parents:
diff changeset
   813
        iTriedOPP = ETrue;
hgs
parents:
diff changeset
   814
        }
45
b0aebde9b1fb 201027_02
hgs
parents: 42
diff changeset
   815
    else if (aErr==KErrNone && aAttr.Count()==0)
b0aebde9b1fb 201027_02
hgs
parents: 42
diff changeset
   816
        {
b0aebde9b1fb 201027_02
hgs
parents: 42
diff changeset
   817
        // This isn't KErrEof so we aren't done yet, wait for further matches
b0aebde9b1fb 201027_02
hgs
parents: 42
diff changeset
   818
        }
32
hgs
parents:
diff changeset
   819
    else
hgs
parents:
diff changeset
   820
        {
42
hgs
parents: 32
diff changeset
   821
        // Set destroyer AO active (destroys CBTEngDiscovery/CBTEngSdpQuery classes). This is done
hgs
parents: 32
diff changeset
   822
        // to ensure that CBTEngDiscovery/CBTEngSdpQuery classes have finished all their activities,
hgs
parents: 32
diff changeset
   823
        // callbacks etc.. Destructing it self is handled in CBTServiceDelayedDestroyer's RunL.
hgs
parents: 32
diff changeset
   824
        iDelayedDestroyer->SetDestructPointer(iBTEngDiscovery);
hgs
parents: 32
diff changeset
   825
        iDelayedDestroyer->GoActive();
hgs
parents: 32
diff changeset
   826
        // Set iBTEngDiscovery pointer to zero. Pointer doesn't exist CBTServiceStarter point of view anymore.
32
hgs
parents:
diff changeset
   827
        iBTEngDiscovery = NULL;    
hgs
parents:
diff changeset
   828
        StopTransfer(EBTSConnectingFailed);    
hgs
parents:
diff changeset
   829
        }    
hgs
parents:
diff changeset
   830
    FLOG(_L("[BTSU]\t CBTServiceStarter::ServiceAttributeSearchComplete() done"));               
hgs
parents:
diff changeset
   831
    }
hgs
parents:
diff changeset
   832
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   833
// CBTServiceStarter::DeviceSearchComplete()
hgs
parents:
diff changeset
   834
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   835
//	
hgs
parents:
diff changeset
   836
void CBTServiceStarter::DeviceSearchComplete( CBTDevice* /*aDevice*/, TInt aErr )
hgs
parents:
diff changeset
   837
    {
hgs
parents:
diff changeset
   838
    FLOG(_L("[BTSU]\t CBTServiceStarter::DeviceSearchComplete()"));          
hgs
parents:
diff changeset
   839
    FTRACE(FPrint(_L("[BTSU]\t CBTServiceStarter DeviceSearchComplete()aErr = %d"), aErr) );     
hgs
parents:
diff changeset
   840
    if ( aErr == KErrNone )
hgs
parents:
diff changeset
   841
        {    
hgs
parents:
diff changeset
   842
        TRAPD(err, StartProfileSelectL( iService ));
hgs
parents:
diff changeset
   843
        if (err != KErrNone )
hgs
parents:
diff changeset
   844
            {
hgs
parents:
diff changeset
   845
            StopTransfer(err);            
hgs
parents:
diff changeset
   846
            }
hgs
parents:
diff changeset
   847
            
hgs
parents:
diff changeset
   848
        iServiceStarted = ETrue;
hgs
parents:
diff changeset
   849
        }
hgs
parents:
diff changeset
   850
    else
hgs
parents:
diff changeset
   851
        {
hgs
parents:
diff changeset
   852
        if ( aErr == KErrCancel )
hgs
parents:
diff changeset
   853
            {
hgs
parents:
diff changeset
   854
            iUserCancel=ETrue;
hgs
parents:
diff changeset
   855
            }
hgs
parents:
diff changeset
   856
        StopTransfer(aErr);    
hgs
parents:
diff changeset
   857
        }    
hgs
parents:
diff changeset
   858
    FLOG(_L("[BTSU]\t CBTServiceStarter::DeviceSearchComplete() done"));                   
hgs
parents:
diff changeset
   859
    }        
hgs
parents:
diff changeset
   860
hgs
parents:
diff changeset
   861
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   862
// From class MBTEngSettingsObserver.
hgs
parents:
diff changeset
   863
// Power has changed, start searching for BT devices.
hgs
parents:
diff changeset
   864
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   865
//  
hgs
parents:
diff changeset
   866
void CBTServiceStarter::PowerStateChanged( TBTPowerStateValue aState )
hgs
parents:
diff changeset
   867
    {
hgs
parents:
diff changeset
   868
	FLOG(_L("[BTSU]\t CBTServiceStarter::PowerStateChanged()"));	
hgs
parents:
diff changeset
   869
    if( aState == EBTPowerOn && iWaitingForBTPower )
hgs
parents:
diff changeset
   870
        {
hgs
parents:
diff changeset
   871
        iWaitingForBTPower = EFalse;
hgs
parents:
diff changeset
   872
        TRAP_IGNORE( StartDiscoveryL() );
hgs
parents:
diff changeset
   873
        }
hgs
parents:
diff changeset
   874
	FLOG(_L("[BTSU]\t CBTServiceStarter::PowerStateChanged() - completed"));
hgs
parents:
diff changeset
   875
    }
hgs
parents:
diff changeset
   876
hgs
parents:
diff changeset
   877
hgs
parents:
diff changeset
   878
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   879
// From class MBTEngSettingsObserver.
hgs
parents:
diff changeset
   880
// Visibility has changed, ignore event.
hgs
parents:
diff changeset
   881
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   882
//  
hgs
parents:
diff changeset
   883
void CBTServiceStarter::VisibilityModeChanged( TBTVisibilityMode aState )
hgs
parents:
diff changeset
   884
    {
hgs
parents:
diff changeset
   885
    (void) aState;
hgs
parents:
diff changeset
   886
    }
hgs
parents:
diff changeset
   887
hgs
parents:
diff changeset
   888
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   889
// Check if the phone is in offline mode, and ask the user if it is.
hgs
parents:
diff changeset
   890
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   891
//  
hgs
parents:
diff changeset
   892
TBool CBTServiceStarter::CheckOfflineModeL()
hgs
parents:
diff changeset
   893
    {
hgs
parents:
diff changeset
   894
	FLOG(_L("[BTSU]\t CBTServiceStarter::CheckOfflineModeL()"));	
hgs
parents:
diff changeset
   895
    TCoreAppUIsNetworkConnectionAllowed offline = ECoreAppUIsNetworkConnectionNotAllowed;
hgs
parents:
diff changeset
   896
    TBTEnabledInOfflineMode offlineAllowed = EBTDisabledInOfflineMode;
hgs
parents:
diff changeset
   897
    User::LeaveIfError( iBTEngSettings->GetOfflineModeSettings( offline, offlineAllowed ) );
hgs
parents:
diff changeset
   898
    if( offline == ECoreAppUIsNetworkConnectionNotAllowed && 
hgs
parents:
diff changeset
   899
         offlineAllowed == EBTEnabledInOfflineMode )
hgs
parents:
diff changeset
   900
        {
hgs
parents:
diff changeset
   901
        User::LeaveIfError( iNotifier.Connect() );
hgs
parents:
diff changeset
   902
        TBTGenericQueryNotiferParamsPckg pckg;
hgs
parents:
diff changeset
   903
        pckg().iMessageType = EBTActivateOffLineQuery;
hgs
parents:
diff changeset
   904
        pckg().iNameExists = EFalse;
hgs
parents:
diff changeset
   905
        iActiveNotifier = EOfflineQuery;
hgs
parents:
diff changeset
   906
        iNotifier.StartNotifierAndGetResponse( iStatus, KBTGenericQueryNotifierUid, 
hgs
parents:
diff changeset
   907
                                                pckg, iOffline );
hgs
parents:
diff changeset
   908
        SetActive();
hgs
parents:
diff changeset
   909
        }
hgs
parents:
diff changeset
   910
    else if( offline == ECoreAppUIsNetworkConnectionNotAllowed && 
hgs
parents:
diff changeset
   911
            offlineAllowed == EBTDisabledInOfflineMode )
hgs
parents:
diff changeset
   912
           {
hgs
parents:
diff changeset
   913
           StopTransfer( KErrNotSupported );
hgs
parents:
diff changeset
   914
           }
hgs
parents:
diff changeset
   915
	FLOG(_L("[BTSU]\t CBTServiceStarter::CheckOfflineModeL() - completed"));
hgs
parents:
diff changeset
   916
    return ( offline == ECoreAppUIsNetworkConnectionNotAllowed );
hgs
parents:
diff changeset
   917
    }
hgs
parents:
diff changeset
   918
hgs
parents:
diff changeset
   919
hgs
parents:
diff changeset
   920
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   921
// Start BT device discovery.
hgs
parents:
diff changeset
   922
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   923
//	
hgs
parents:
diff changeset
   924
void CBTServiceStarter::StartDiscoveryL()
hgs
parents:
diff changeset
   925
    {
hgs
parents:
diff changeset
   926
	FLOG(_L("[BTSU]\t CBTServiceStarter::StartDiscoveryL()"));	
hgs
parents:
diff changeset
   927
    if( !iBTEngDiscovery )
hgs
parents:
diff changeset
   928
        {
hgs
parents:
diff changeset
   929
        iBTEngDiscovery = CBTEngDiscovery::NewL(this);
hgs
parents:
diff changeset
   930
        }
hgs
parents:
diff changeset
   931
    TInt err = iBTEngDiscovery->SearchRemoteDevice(iDevice );
hgs
parents:
diff changeset
   932
    if( err )
hgs
parents:
diff changeset
   933
        {
hgs
parents:
diff changeset
   934
        StopTransfer( err );
hgs
parents:
diff changeset
   935
        }
hgs
parents:
diff changeset
   936
	FLOG(_L("[BTSU]\t CBTServiceStarter::StartDiscoveryL() - completed"));		
hgs
parents:
diff changeset
   937
    }
hgs
parents:
diff changeset
   938
hgs
parents:
diff changeset
   939
hgs
parents:
diff changeset
   940
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   941
// Turn BT on and start BT device discovery if possible.
hgs
parents:
diff changeset
   942
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   943
//  
hgs
parents:
diff changeset
   944
void CBTServiceStarter::TurnBTPowerOnL( const TBTPowerStateValue aState )
hgs
parents:
diff changeset
   945
    {
hgs
parents:
diff changeset
   946
	FLOG( _L("[BTSU]\t CBTServiceStarter::TurnBTPowerOnL()") );
hgs
parents:
diff changeset
   947
//    if (iName() != EFalse) 
hgs
parents:
diff changeset
   948
    	{
hgs
parents:
diff changeset
   949
    	if( !iBTEngSettings )
hgs
parents:
diff changeset
   950
	        {
hgs
parents:
diff changeset
   951
	        iBTEngSettings = CBTEngSettings::NewL( this );
hgs
parents:
diff changeset
   952
	        }
hgs
parents:
diff changeset
   953
	    TInt err = iBTEngSettings->ChangePowerStateTemporarily();
hgs
parents:
diff changeset
   954
	    iWaitingForBTPower = ETrue;
hgs
parents:
diff changeset
   955
	    if( err )
hgs
parents:
diff changeset
   956
	        {
hgs
parents:
diff changeset
   957
	        iWaitingForBTPower = EFalse;
hgs
parents:
diff changeset
   958
	        StopTransfer( err );
hgs
parents:
diff changeset
   959
	        }
hgs
parents:
diff changeset
   960
	    else if( aState == EBTPowerOn )
hgs
parents:
diff changeset
   961
	        {
hgs
parents:
diff changeset
   962
	        // Power is already on, we just registered for turning it off if needed.
hgs
parents:
diff changeset
   963
	        // Since there is no callback at this point (power is already on), start 
hgs
parents:
diff changeset
   964
	        // searching straight away.
hgs
parents:
diff changeset
   965
	        iWaitingForBTPower = EFalse;
hgs
parents:
diff changeset
   966
	        StartDiscoveryL();
hgs
parents:
diff changeset
   967
	        }
hgs
parents:
diff changeset
   968
    	}
hgs
parents:
diff changeset
   969
 /*   else
hgs
parents:
diff changeset
   970
    	{
hgs
parents:
diff changeset
   971
        if ( !iNotifier.Handle() )
hgs
parents:
diff changeset
   972
	        {
hgs
parents:
diff changeset
   973
			User::LeaveIfError( iNotifier.Connect() );
hgs
parents:
diff changeset
   974
	        }
hgs
parents:
diff changeset
   975
		TBTGenericQueryNotiferParamsPckg pckg;
hgs
parents:
diff changeset
   976
        pckg().iMessageType = EBTNameQuery;
hgs
parents:
diff changeset
   977
        pckg().iNameExists = EFalse;
hgs
parents:
diff changeset
   978
        iActiveNotifier = ENameQuery;
hgs
parents:
diff changeset
   979
        iNotifier.StartNotifierAndGetResponse( iStatus, KBTGenericQueryNotifierUid, 
hgs
parents:
diff changeset
   980
                                                  pckg, iName );
hgs
parents:
diff changeset
   981
        SetActive();
hgs
parents:
diff changeset
   982
    	}*/
hgs
parents:
diff changeset
   983
	FLOG(_L("[BTSU]\t CBTServiceStarter::TurnBTPowerOnL() - completed"));
hgs
parents:
diff changeset
   984
    }
hgs
parents:
diff changeset
   985
hgs
parents:
diff changeset
   986
hgs
parents:
diff changeset
   987
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   988
// From class CActive.
hgs
parents:
diff changeset
   989
// Called by the active scheduler when the request has been cancelled.
hgs
parents:
diff changeset
   990
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   991
//
hgs
parents:
diff changeset
   992
void CBTServiceStarter::DoCancel()
hgs
parents:
diff changeset
   993
    {
hgs
parents:
diff changeset
   994
	FLOG(_L("[BTSU]\t CBTServiceStarter::DoCancel()"));
hgs
parents:
diff changeset
   995
    iNotifier.CancelNotifier( KBTGenericQueryNotifierUid );
hgs
parents:
diff changeset
   996
    iNotifier.Close();
hgs
parents:
diff changeset
   997
	FLOG(_L("[BTSU]\t CBTServiceStarter::DoCancel() - completed"));
hgs
parents:
diff changeset
   998
    }
hgs
parents:
diff changeset
   999
hgs
parents:
diff changeset
  1000
hgs
parents:
diff changeset
  1001
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1002
// From class CActive.
hgs
parents:
diff changeset
  1003
// Called by the active scheduler when the request has been completed.
hgs
parents:
diff changeset
  1004
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1005
//
hgs
parents:
diff changeset
  1006
void CBTServiceStarter::RunL()
hgs
parents:
diff changeset
  1007
    {
hgs
parents:
diff changeset
  1008
	FLOG(_L("[BTSU]\t CBTServiceStarter::RunL()"));
hgs
parents:
diff changeset
  1009
    TInt err = iStatus.Int();
hgs
parents:
diff changeset
  1010
    if( !err )
hgs
parents:
diff changeset
  1011
        {
hgs
parents:
diff changeset
  1012
        if ( (iActiveNotifier == ENameQuery && iName() != EFalse ) || ( iActiveNotifier == EOfflineQuery && iOffline() != EFalse ) )
hgs
parents:
diff changeset
  1013
            {
hgs
parents:
diff changeset
  1014
            TBTPowerStateValue power = EBTPowerOff;
hgs
parents:
diff changeset
  1015
            if ( iNotifier.Handle() )
hgs
parents:
diff changeset
  1016
                {
hgs
parents:
diff changeset
  1017
                iNotifier.Close();
hgs
parents:
diff changeset
  1018
                }
hgs
parents:
diff changeset
  1019
            User::LeaveIfError( iBTEngSettings->GetPowerState( power ) );
hgs
parents:
diff changeset
  1020
            TurnBTPowerOnL( power );
hgs
parents:
diff changeset
  1021
            }
hgs
parents:
diff changeset
  1022
        else
hgs
parents:
diff changeset
  1023
            {
hgs
parents:
diff changeset
  1024
            err = KErrCancel;
hgs
parents:
diff changeset
  1025
            }    
hgs
parents:
diff changeset
  1026
        }
hgs
parents:
diff changeset
  1027
hgs
parents:
diff changeset
  1028
    if( err )
hgs
parents:
diff changeset
  1029
        {
hgs
parents:
diff changeset
  1030
      
hgs
parents:
diff changeset
  1031
        err = ( err == KErrNotSupported ? KErrCancel : err );
hgs
parents:
diff changeset
  1032
        if ( iWaiter && err != KErrInUse && err != KErrCancel )
hgs
parents:
diff changeset
  1033
            {
hgs
parents:
diff changeset
  1034
            err = EBTSPuttingFailed;
hgs
parents:
diff changeset
  1035
            }
hgs
parents:
diff changeset
  1036
        StopTransfer( err );
hgs
parents:
diff changeset
  1037
        }
hgs
parents:
diff changeset
  1038
    
hgs
parents:
diff changeset
  1039
    FLOG(_L("[BTSU]\t CBTServiceStarter::RunL() - completed"));	
hgs
parents:
diff changeset
  1040
    }
hgs
parents:
diff changeset
  1041
hgs
parents:
diff changeset
  1042
hgs
parents:
diff changeset
  1043
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1044
// From class CActive.
hgs
parents:
diff changeset
  1045
// Called by the active scheduler when an error in RunL has occurred.
hgs
parents:
diff changeset
  1046
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
  1047
//
hgs
parents:
diff changeset
  1048
TInt CBTServiceStarter::RunError( TInt aError )
hgs
parents:
diff changeset
  1049
    {
hgs
parents:
diff changeset
  1050
	FLOG(_L("[BTSU]\t CBTServiceStarter::RunError()"));
hgs
parents:
diff changeset
  1051
    StopTransfer( aError );
hgs
parents:
diff changeset
  1052
	FLOG(_L("[BTSU]\t CBTServiceStarter::RunError() - completed"));
hgs
parents:
diff changeset
  1053
    return KErrNone;
hgs
parents:
diff changeset
  1054
    }
hgs
parents:
diff changeset
  1055
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1056
void CBTServiceStarter::ShowSendCompleteNoteL(const TInt aDialogTitle)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1057
    {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1058
    iNotificationDialog = CHbDeviceDialogSymbian::NewL();
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1059
    iNotificationDialog->SetObserver(this);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1060
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1061
    CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL();
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1062
    CleanupStack::PushL(variantMap);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1063
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1064
    TInt dialogIdx = TBluetoothDialogParams::EGlobalNotif;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1065
    AddDataL(variantMap,TBluetoothDialogParams::EDialogType,&dialogIdx,CHbSymbianVariant::EInt);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1066
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1067
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1068
    AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceName,&iRemoteDeviceName,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1069
            CHbSymbianVariant::EDes);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1070
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1071
    AddDataL(variantMap,TBluetoothDialogParams::EResource,&aDialogTitle,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1072
            CHbSymbianVariant::EInt);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1073
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1074
    AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceClass,&iRemoteDeviceClass,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1075
            CHbSymbianVariant::EInt);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1076
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1077
    iNotificationDialog->Show( KBTDevDialogId(), *variantMap, this );
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1078
    CleanupStack::PopAndDestroy(variantMap);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1079
    }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1080
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1081
void CBTServiceStarter::ShowErrorMessageL(const TInt aDialogTitle,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1082
                                            const TDesC& aConfirmText)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1083
    {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1084
    iNotificationDialog = CHbDeviceDialogSymbian::NewL();
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1085
    iNotificationDialog->SetObserver(this);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1086
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1087
    CHbSymbianVariantMap* variantMap = CHbSymbianVariantMap::NewL();
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1088
    CleanupStack::PushL(variantMap);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1089
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1090
    TInt dialogIdx = TBluetoothDialogParams::EInformationDialog;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1091
    AddDataL(variantMap,TBluetoothDialogParams::EDialogType,&dialogIdx,CHbSymbianVariant::EInt);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1092
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1093
    if(aDialogTitle == TBluetoothDialogParams::EUnsupportedImages )
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1094
        {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1095
        AddDataL(variantMap,TBluetoothDeviceDialog::EAdditionalDesc,&aConfirmText,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1096
            CHbSymbianVariant::EDes);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1097
        }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1098
    else
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1099
        {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1100
        AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceName,&iRemoteDeviceName,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1101
            CHbSymbianVariant::EDes);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1102
        }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1103
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1104
    AddDataL(variantMap,TBluetoothDialogParams::EDialogTitle,&aDialogTitle,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1105
            CHbSymbianVariant::EInt);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1106
    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1107
    AddDataL(variantMap,TBluetoothDeviceDialog::EDeviceClass,&iRemoteDeviceClass,
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1108
            CHbSymbianVariant::EInt);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1109
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1110
    iNotificationDialog->Show( KBTDevDialogId(), *variantMap, this );
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1111
    CleanupStack::PopAndDestroy(variantMap);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1112
    }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1113
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1114
void CBTServiceStarter::AddDataL(CHbSymbianVariantMap* aMap, const TInt aKey, 
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1115
    const TAny* aData, CHbSymbianVariant::TType aDataType)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1116
    {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1117
    TBuf<KMinStringSize> key;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1118
    key.Num(aKey);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1119
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1120
    CHbSymbianVariant* value = CHbSymbianVariant::NewL(aData, aDataType);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1121
    CleanupStack::PushL( value );
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1122
    User::LeaveIfError( aMap->Add( key, value ) ); // aMap takes the ownership of value
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1123
    CleanupStack::Pop( value );
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1124
    }
32
hgs
parents:
diff changeset
  1125
hgs
parents:
diff changeset
  1126
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1127
void CBTServiceStarter::DataReceived(CHbSymbianVariantMap& aData)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1128
    {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1129
    if(aData.Keys().MdcaPoint(0).Compare(_L("actionResult"))==KErrNone)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1130
        {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1131
        TBool val = *(static_cast<TBool*>(aData.Get(_L("actionResult"))->Data()));
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1132
        if(val)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1133
            {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1134
            DialogDismissed(EYesButton);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1135
            }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1136
        else
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1137
            {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1138
            DialogDismissed(ENoButton);
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1139
            }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1140
        if(iNotificationDialog)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1141
            {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1142
            delete iNotificationDialog;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1143
            iNotificationDialog = NULL;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1144
            }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1145
        }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1146
    }
32
hgs
parents:
diff changeset
  1147
57
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1148
void CBTServiceStarter::DeviceDialogClosed(TInt aCompletionCode)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1149
    {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1150
    (void) aCompletionCode;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1151
    if(iNotificationDialog)
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1152
        {
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1153
        delete iNotificationDialog;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1154
        iNotificationDialog = NULL;
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1155
        }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1156
    if ( iWaiter && iWaiter->IsStarted() )
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1157
        {                
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1158
        iWaiter->AsyncStop();                    
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1159
        }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1160
    }
5ebadcda06cb 201035_7
hgs
parents: 45
diff changeset
  1161