datasourceadaptation/gpsdatasourceadaptation/pospluginapi/inc/EPos_CPositioner.h
author William Roberts <williamr@symbian.org>
Fri, 28 May 2010 15:35:11 +0100
branchRCL_3
changeset 32 24bd7242888d
parent 0 9cfd9a3ee49c
permissions -rw-r--r--
Re-merge fix for bug 2680

/*
* Copyright (c) 2006-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:
* Name        : EPos_CPositioner.h
* Part of     : Mobile Location Framework / Positioning Plugin FW
* Interface   : Positioning Plug-in API
* Base class for all positioners
* Version     : %version: 2 %
*
*/




/**
 @file
 @publishedPartner
 @released
*/

#ifndef CPOSITIONER_H
#define CPOSITIONER_H

class MPositionerStatus;
class TPositionInfoBase;
class TPositionQuality;
class CPositionerExtension;

/**
 * This class is used when Location Framework needs to acquire a position and 
 * quality from the PSY. The interface of this class is used for loading and 
 * using PSYs and as a framework for developing PSYs. It requires that users 
 * define new subclasses to the API classes. It is also used for implementing
 * more advanced PSY features, e.g. periodic position updates, and the maximum 
 * age for positions. It can also handle parallel requests.
 */
class CPositioner : public CBase 
    {
    public:
        
    	IMPORT_C static CPositioner* NewL( TAny* aConstructionParameters );
        IMPORT_C static CPositioner* NewL(
            TUid aImplementationUid,
            const CPositioner& aPositioner
        );

        IMPORT_C ~CPositioner();

    protected:

    	IMPORT_C CPositioner();
        IMPORT_C void BaseConstructL( TAny* aConstructionParameters );

    public:

        /**
        * Requests position info asynchronously.
        *
        * @param aPosInfo A reference to a position info object. This object
        *                 must be in scope until the request has completed.
        *                 The position (TPosition) of this position info object
        *                 must be in WGS84 geodetic datum.
        * @param aStatus The request status
        *
        */
        virtual void NotifyPositionUpdate(
            TPositionInfoBase& aPosInfo,
            TRequestStatus& aStatus
        ) = 0;

        /**
        * Cancels position info request.
        */
        virtual void CancelNotifyPositionUpdate() = 0;

        IMPORT_C virtual TBool TrackingOverridden() const;
        IMPORT_C virtual void StartTrackingL(
            const TTimeIntervalMicroSeconds& aInterval
        );

        IMPORT_C virtual void StopTracking();
        IMPORT_C virtual void ServiceL( RMessage2& aMessage );
        IMPORT_C TUid ImplementationUid() const;

    protected:

        IMPORT_C TInt GetRequiredPositionQuality(
            TPositionQuality& aPositionQuality
        ) const;

        IMPORT_C void GetMaxAge( TTime& aMaxAge ) const;
        IMPORT_C TBool IsPartialUpdateAllowed() const;
        IMPORT_C MPositionerStatus* PositionerStatus();

    public:        
        IMPORT_C virtual void CancelNotifyPositionUpdate(TInt aError);
        
    private:
    	//IMPORT_C virtual void CPositioner_Reserved1();
	    // Reserved for future expansion - do not call
	    IMPORT_C virtual void CPositioner_Reserved2();
	    
    protected:
    	IMPORT_C void GetUpdateTimeOut(TTimeIntervalMicroSeconds& aUpdateTimeOut) const;
    	IMPORT_C void SetPsyDefaultUpdateTimeOut(const TTimeIntervalMicroSeconds& aUpdateTimeOut);
    	IMPORT_C void ExtendUpdateTimeOut(const TTimeIntervalMicroSeconds& aAdditionalTime);

    private:

        TUid iDtorIdKey;
        CPositionerExtension* iExtension;
    };  

#endif  // CPOSITIONER_H