bluetoothengine/btserviceutil/export/advancedevdiscoverer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:25:10 +0300
branchRCL_3
changeset 55 613943a21004
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2010 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:  Declares Bluetooth device inquiry helper class.
*
*/

#ifndef ADVANCEBTDEVDISCOVERER_H
#define ADVANCEBTDEVDISCOVERER_H

#include <btdevice.h>
#include <bt_sock.h>
#include <btservices/devdiscoveryobserver.h>
#include <btservices/btdevrepository.h>

class CAdvanceDevDiscovererImpl;

/**
 * APIs from this class offer functionalities that are common in mw and app 
 * components of Bluetooth packages. They do not serve as domain APIs.
 * 
 * Using these from external components is risky, due to possible source
 * and binary breaks in future.
 * 
 */

/**
* The interface of discovering in-range Bluetooth devices via Host Resolver.
* This class offers some options to search certain devices by CoD and other 
* filters e.g., bonded and blocked.
* 
* It requires the client to supply a CBtDevRepository instance for filtering
* devices.
*/
NONSHARABLE_CLASS( CAdvanceDevDiscoverer ) : public CBase
    {

public: // Constructor and destructor

    /**
     * Options for clients to specify criteria on discovered devices.
     */
    enum TDevDiscoveryFilter
        {
        // do not filter in-range devices
        ENoFilter = 0,

        // Excludes an in-range device if its device name is not available
        ExcludeIfNoDevName = 0x01,
        
        // Excludes an in-range device if it is user-aware bonded with phone.
        ExcludeUserAwareBonded = 0x02,
        
        // Excludes an in-range device if it is banned by phone.
        ExcludeBanned = 0x04,
        };

    IMPORT_C static CAdvanceDevDiscoverer* NewL(
            CBtDevRepository& aDevRep,
            MDevDiscoveryObserver& aObserver );
    
    /**
    * Destructor.
    */
    IMPORT_C virtual ~CAdvanceDevDiscoverer();

    /**
     * sets the discovery result receiver.
     * 
     * @param aObserver the new observer to receive inquiry results
     */
    IMPORT_C void SetObserver( MDevDiscoveryObserver& aObserver );
    
    /**
    * Discover currently in-range devices that matches the given major 
    * device class type.
     
    * Found devices will be informed by 
    * MBtDevDiscoveryObserver::HandleNextDiscoveryResult().
    * 
    * When no more device can be found, 
    * MBtDevDiscoveryObserver::HandleDiscoveryCompleted() will be issued.
    * 
    * @param aFilter the filter that shall be applied when a device 
    *        is discovered. If this is specified, only a device passing 
    *        the filter will be informed to client. 
    *        By default, no filter is applied.
    * 
    * @param aDeviceClass the major device class which a found device 
    *        must match. 
    *        By default, it includes any device types.
    */
    IMPORT_C void DiscoverDeviceL( 
            TDevDiscoveryFilter aFilter = CAdvanceDevDiscoverer::ENoFilter, 
            TBTMajorDeviceClass aDeviceClass = EMajorDeviceMisc );

    /**
    * Cancels any outstanding discovery request.
    */
    IMPORT_C void CancelDiscovery();
    
private:

    /**
    * C++ default constructor.
    */
    CAdvanceDevDiscoverer();

    /**
    * The 2nd phase constructor
    */
    void ConstructL( CBtDevRepository& aDevRep, MDevDiscoveryObserver& aObserver );

private:  // Data

    CAdvanceDevDiscovererImpl* iImpl;
};

#endif

// End of File