datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/src/Connecting/BTGPSDeviceSelector.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:50:39 +0200
changeset 0 9cfd9a3ee49c
child 12 d8287cc0d36f
permissions -rw-r--r--
Revision: 201002 Kit: 201005

// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//



// INCLUDE FILES
#include <e32std.h>
#include <bt_sock.h>
#include <btdevice.h>
#include "BTGPSDeviceManager.h"
#include "BTGPSDeviceSelector.h"
#include "BTGPSConnectManagerExt.h"
#include "BTGPSHandlerFactory.h"
#include "BTGPSLogging.h"
#include "btgpsdevicelistmanager.h"

// EXTERNAL DATA STRUCTURES

// EXTERNAL FUNCTION PROTOTYPES  

// CONSTANTS

// MACROS

// LOCAL CONSTANTS AND MACROS
//SerialPort
const TInt KSerialPortServiceClass = 0x1101;

// MODULE DATA STRUCTURES

// LOCAL FUNCTION PROTOTYPES

// FORWARD DECLARATIONS

// ============================= LOCAL FUNCTIONS ===============================

// ============================ MEMBER FUNCTIONS ===============================


// -----------------------------------------------------------------------------
// CBTGPSDeviceSelector::NewL
// -----------------------------------------------------------------------------
CBTGPSDeviceSelector* CBTGPSDeviceSelector::NewL(
        MBTGPSConnectManagerExt& aManagerExt)
    {
    CBTGPSDeviceSelector* self = new (ELeave) CBTGPSDeviceSelector(
        aManagerExt);
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();
    return self;
    }

// -----------------------------------------------------------------------------
// CBTGPSDeviceSelector::~CBTGPSDeviceSelector
// -----------------------------------------------------------------------------
CBTGPSDeviceSelector::~CBTGPSDeviceSelector()
    {
    Cancel();
    iNotifier.Close();
    }


// -----------------------------------------------------------------------------
// CBTGPSDeviceSelector::ConstructL
// -----------------------------------------------------------------------------
void CBTGPSDeviceSelector::ConstructL()
    {
    TRACESTRING("CBTGPSDeviceSelector::ConstructL start...")
    //If the device is still coneected, then disconnect it
    iManagerExt.DisconnectBtDevice();
    
    //Set device type as unkown
    iManagerExt.DeviceManager().SetBTDeviceType(EBTDeviceTypeUnknown);
    
    //Connect to notifier server
    User::LeaveIfError(iNotifier.Connect());

    //Request a device selection 
    TBTDeviceSelectionParamsPckg selectionFilter;
    
    //Set UUID
    selectionFilter().SetUUID(KSerialPortServiceClass);


    TBTDeviceClass selectionDeviceClass(
        EMajorServicePositioning,
        EMajorDeviceUnclassified,
        0); //Minor device class unspecified 

    //Set device class
    selectionFilter().SetDeviceClass(selectionDeviceClass);

    iNotifier.StartNotifierAndGetResponse(
        iStatus, 
        KDeviceSelectionNotifierUid, 
        selectionFilter, 
        iBTSelectionResponse
        );

    SetActive();
    TRACESTRING("CBTGPSDeviceSelector::ConstructL end")
    }

// -----------------------------------------------------------------------------
// CBTGPSDeviceSelector::CBTGPSDeviceSelector
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
CBTGPSDeviceSelector::CBTGPSDeviceSelector(
        MBTGPSConnectManagerExt& aManagerExt)
    : CActive(EPriorityStandard),
      iManagerExt(aManagerExt)
    {
    CActiveScheduler::Add(this);
    }

// -----------------------------------------------------------------------------
// CBTGPSDeviceSelector::RunL
// -----------------------------------------------------------------------------
void CBTGPSDeviceSelector::RunL()
    {
    TRACESTRING2("CBTGPSDeviceSelector::RunL start...%d", iStatus.Int())
    //Selection Complete
    if(iStatus == KErrNone)
        {
        iManagerExt.DeviceManager().BtDevice().SetDeviceAddress(
            iBTSelectionResponse().BDAddr());
        iManagerExt.DeviceManager().BtDevice().SetDeviceClass(
            iBTSelectionResponse().DeviceClass());
#ifdef SYMBIAN_LOCATION_BTGPSCONFIG
        //Add this device to the list
        iManagerExt.DeviceListManager().AddDeviceInfo(iBTSelectionResponse().BDAddr());
#endif
        
        //Name field is ignored
        }
    iManagerExt.HandlerComplete(EDeviceSelector,iStatus.Int());
    TRACESTRING("CBTGPSDeviceSelector::RunL end")
    }

// -----------------------------------------------------------------------------
// CBTGPSDeviceSelector::DoCancel
// -----------------------------------------------------------------------------
void CBTGPSDeviceSelector::DoCancel()
    {
    iNotifier.CancelNotifier(KDeviceSelectionNotifierUid);
    }

// -----------------------------------------------------------------------------
// CBTGPSDeviceSelector::RunError
// -----------------------------------------------------------------------------
TInt CBTGPSDeviceSelector::RunError(TInt /*aError*/)
    {
    //Leaves in RunL. Should not happen
    return KErrNone;
    }

//  End of File