datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/inc/RequestHandler/BTGPSPsyConnectionManager.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:50:39 +0200
changeset 0 9cfd9a3ee49c
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:
*
*/




#ifndef BTGPSPSYCONNECTIONMANAGER_H
#define BTGPSPSYCONNECTIONMANAGER_H

//  INCLUDES

#include <e32base.h> 


// CONSTANTS

// MACROS

// DATA TYPES

// FUNCTION  PROTOTYPES

// FORWARD DECLARATIONS

// CLASS DECLARATION
class MBTGPSPositionerExt;
class CBTGPSFix;
class TPositionModuleStatus;
class MBTGPSPsyConnectionListener;
    

/**
*  This class defines PSY connection information manager. It manage PSY connection
*  informaiton as well as location request and tracking status of each PSY. 
*
*/
class CBTGPSPsyConnectionManager: public CBase
    {
    public: 

        /**
        * Two-phase construction.
        */
        static CBTGPSPsyConnectionManager * NewL();

        /**
        * Destructor
        */
        virtual ~CBTGPSPsyConnectionManager();

    public:
        /**
        * Register PSY
		* @param aPSY Pointer to new positioner
        */
        void RegisterPSYL(MBTGPSPositionerExt* aPSY);

        /**
        * UnregisterPSY
		* @param aPSY Pointer to positioner
        */
        void UnregisterPSY(MBTGPSPositionerExt* aPSY);

        /**
        * PSY start to acquire location
		* @param aPSY Pointer to positioner
        */
        void AcquireLocation(MBTGPSPositionerExt* aPSY);

        /**
        * PSY cancel a location request
		* @param aPSY Pointer to positioner
        */
        void CancelAcquireLocation(MBTGPSPositionerExt* aPSY);

        /**
        * Complete request with error code. This function is called
		* when the locaitn request shall be completed with error code.
		*
		* @param aPSY Reference to positioner
		* @param aErr The error code that location request shall be completed.
        */
        void CompleteRequest(
            MBTGPSPositionerExt& aPSY,
            TInt aErr);
        
        /**
        * Complete all requests with error code
		* @param aErr Error code
        */
        void CompleteAllRequests(TInt aErr);
        
        /**
        * Location fix update. Inform all PSY that there is location information
		* updates.
		* @param aFix Reference to location fix information.
        */
        void LocationFixUpdate(const CBTGPSFix& aFix);
        
        /**
        * Report posintion module status.
		* @param aStatus new position module status.
        */
        void ReportStatus(const TPositionModuleStatus& aStatus);
            
        /**
        * Get number of connected PSY
		* @return The number of connected PSy
        */
        TInt Count() const;

        /**
        * Get number of active location requests
		* @return The number of PSY that has location requests on going.
        */
        TInt LocationRequestCount() const;
        
        /**
        * Get number of tracking session
		* @return The number of PSY that has tracking session on going.
        */
        TInt TrackingSessionCount() const;

        /**
        * Inform a tracking session is started
		* @param aPSY Pointer to PSY that starts a tracking session.
		* @param aInterval The tracking interval.
        */
        void TrackingSessionStartL(
            MBTGPSPositionerExt* aPSY,
            TTimeIntervalMicroSeconds aInterval);

        /**
        * Tracking session stops
		* @param aPSY Pointer to positioner
        */
        void TrackingSessionStop(MBTGPSPositionerExt* aPSY);
        
        /**
        * Add PSY connection information change listener
		* @param aListener Reference to listener
        */
        void AddListenerL(MBTGPSPsyConnectionListener& aListener);
        
        /**
        * Remove PSY connection information change listener
		* @param aListener Reference to listener.
        */
        void RemoveListener(MBTGPSPsyConnectionListener& aListener);
    
    private:
		/**
		* Structer of connected PSY and it's status
		*/
        struct TPSYStatusStruct
            {
            //Pointer to connected PSY
            MBTGPSPositionerExt* iPsy;
            
            //If PSY has a location request on going
            TBool iLocationRequest;
            
            //Tracking Interval. If PSY doesn't has a tracking session,
            //the value is -1
            TTimeIntervalMicroSeconds iTrackingInterval;
            };
        
    private:

        /**
        * Second phase of the construction
        */
        void ConstructL();

        /**
        * Private constructor
        */
        CBTGPSPsyConnectionManager();
        
        /**
        * Find PSY Status from PSY array
        */
        TInt FindPsy(MBTGPSPositionerExt* aPSY);
        
        /**
        * Complete location request with fix or error code
        */
        void CompleteLocationRequest(
            TInt aIndex,
            const CBTGPSFix* aFix,
            TInt aErr);
            
        /**
        * Inform listeners the connection status is changed
        */
        void InformListenersChange();
        
    private:
        //Connected PSY array
        RArray<TPSYStatusStruct> iPsyArray;
        
        //Listener array
        RArray<MBTGPSPsyConnectionListener*> iListenerArray;

    };
#endif
// End of File