datasourcemodules/bluetoothgpspositioningmodule/btgpspsy/inc/RequestHandler/BTGPSRequestManager.h
author Pat Downey <patd@symbian.org>
Tue, 18 May 2010 17:19:28 +0100
branchRCL_3
changeset 29 625f3acddf73
parent 0 9cfd9a3ee49c
permissions -rw-r--r--
Merge UML model.

/*
* 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 BTGPSREQUESTMANAGER_H
#define BTGPSREQUESTMANAGER_H

//  INCLUDES

#include <e32base.h> 

#include "BTGPSMessageListener.h"

// CONSTANTS

// MACROS

// DATA TYPES

// FUNCTION  PROTOTYPES

// FORWARD DECLARATIONS
class CBTGPSConnectManager;
class CBTGPSConstantsManager;
class MBTGPSLocationFixListener;
class CBTGPSFix;
class CBTGPSNmeaBuffer;

// CLASS DECLARATION

/**
*  This class defines locaiton request managers. It's responsible of 
*  receiving NMEA sentence and retrieving fix information for sentence
*  stream. It also manage GSV sentence life time information.
* 
*/
class CBTGPSRequestManager: public CBase, private MBTGPSMessageListener
    {
    public: 

        /**
        * Two-phase construction.
		* @param aConnectManager Reference to connect manager.
        */
        static CBTGPSRequestManager * NewL(
            CBTGPSConnectManager& aConnectManager,
            CBTGPSConstantsManager& aConstantsManager);

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

    public:
        /**
        * Start to retrieve fix
        */
        void RetrieveFixL();

        /**
        * Stop retrieving fix
        */
        void StopRetrievingFix();
        
        /**
        * Receive last location
		* @param aFix On return contains pointer to fix information
		* @param aMaxAge Max age tath defined by client
		* @param aAcceptPartial If the client accept partial updates.
        */
        TInt LastLocation(
            const CBTGPSFix*& aFix,
            const TTime& aMaxAge,
            const TBool aAcceptPartial);
            
        /**
        * Invalid last location and GSV life time. This function is used 
        * by CBTGPSEnvChangeHandler. When system time is changed
        * last location shall be invalidated.
        */
        void SystemTimeChange();
        
        /**
        * Add listener
		* @param aListener Reference to listener
        */
        void AddListenerL(MBTGPSLocationFixListener& aListener);
        
        /**
        * Remove listener
		* @param aListener Reference to listener
        */
        void RemoveListener(MBTGPSLocationFixListener& aListener);
        
        /**
        * Get previous NMEA buffer index
        */
        TInt GetPreviousNmeaBufferBottom() const;

    private:
        /**
        * From MBTGPSMessageListener
        */
        void HandleMessage(const TBTGPSNmeaParser& aParser);
    
    private:

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

        /**
        * Private constructor
        */
        CBTGPSRequestManager(
            CBTGPSConnectManager& aConnectManager,
            CBTGPSConstantsManager& aConstantsManager);

        /**
        * Complete all request
        */
        void CompleteAllReqeust(TInt aErr);
        
        /**
        * Inform listners on new fix information
        */
        void InformListeners();
        
        /**
        * Timer callback
        */
        void TimerTick();
        
        /**
        * Static timer callback
        */
        static TInt TimerCallback(TAny* aAny);
        
    private:
        //Connect Manager
        CBTGPSConnectManager& iConnectManager;
        
        //Constants Manager
        CBTGPSConstantsManager& iConstantsManager;

        //Location fix listener
        RArray<MBTGPSLocationFixListener*> iListenerArray;

        //NMEA buffer. It's a FIFO circulate buffer that
        //holds all received NMEA message
        CBTGPSNmeaBuffer* iNmeaBuffer;
        
        //Index to the previous bottom in NMEA buffer
        TInt iPrevBottom;
        
        //Current Fix
        CBTGPSFix* iFix;
        
        //Last fix
        CBTGPSFix* iLastFix;

        //Start to receive message
        TBool iReceivingMessage;
        
        //GSV Timer
        CPeriodic* iTimer;
    };
#endif
// End of File