datasourcemodules/defaultpositioningmodule/inc/epos_cposexternalgpsmonitor.h
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datasourcemodules/defaultpositioningmodule/inc/epos_cposexternalgpsmonitor.h	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,209 @@
+/*
+* Copyright (c) 2007-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 CPOSEXTERNALGPSMONITOR_H
+#define CPOSEXTERNALGPSMONITOR_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "epos_mposrequestorlistener.h"
+#include "epos_mpospsylistlistener.h"
+
+// FORWARD DECLARATIONS
+class CPositioner;
+class CPosPsyListHandler;
+class CPosPsyFixStateManager;
+class CPosRequestor;
+class CPosConstManager;
+class MPosModuleStatusManager;
+
+// CLASS DECLARATION
+
+/**
+* The CPosExternalGpsMonitor minotors fix state of external GPS PSYs. It makes
+* location requests to external GPS PSYs periodically, and if a external GPS
+* PSY is able to give a fix, it will be moved to the front of dynamic list. 
+*/
+class CPosExternalGpsMonitor : 
+        public CBase, 
+        public MPosRequestorListener,
+        public MPosPsyListListener
+    {
+    public: // Constructors and destructor
+              
+        /**
+        * Get an instance of CPosExternalGpsMonitor.    
+        *
+        * @param aDefaultPositioner The reference to default positioner.
+        * @param aModuleStatusManager The reference to module status manager.
+        * @return The new instance of this class.
+        */
+        static CPosExternalGpsMonitor* GetInstanceL(
+            CPositioner& aDefaultPositioner,
+            MPosModuleStatusManager& aModuleStatusManager );
+        
+        /**
+        * Release the instance of CPosExternalGpsMonitor
+        *
+        * @param aDefaultPositioner A refence to the default prositioner.
+        */
+        void ReleaseInstance(
+            CPositioner& aDefaultPositioner );
+        
+        /**
+        * Notify external GPS monitor that a PSY is used 
+        * 
+        * @param aPsyId The module ID of the PSY that is used.
+        */
+        void PsyUsed( TPositionModuleId aPsyId );
+        
+        /**
+        * Notify external GPS monitor that a PSY is not 
+        * used any more.
+        *
+        * @param aPsyId The module ID of the PSY that is not used anymore.
+        */
+        void PsyNotUsed( TPositionModuleId aPsyId );
+        
+        /**
+        * Destructor.
+        */
+        ~CPosExternalGpsMonitor();
+        
+    protected:
+        /**
+        * From MPosRequestorListener
+        */
+        virtual void LocationRequestCompleted( 
+            TPositionModuleId aModuleId,
+            TInt aErr, 
+            const TPositionInfoBase& aPosInfo,
+            TBool aIsPosInfoUpToDate );
+            
+        /**
+        * From MPosPsyListListener
+        */
+        virtual void PsyListChanged( 
+            const TPosPsyListChangeEvent& aEvent );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CPosExternalGpsMonitor(
+            MPosModuleStatusManager& aModuleStatusManager );
+
+        /**
+        * EPOC constructor.
+        */
+        void ConstructL();
+        
+        /**
+        * Get external GPS PSY module Ids
+        */
+        void ConstructExtGpsPsyArrayL();
+        
+        /**
+        * External GPS PSY checking timeout callback
+        */
+        static TInt ExtPsyCheckingTimeoutCallback( TAny* aAny );
+        
+        /**
+        * External GPS PSY checking timeout
+        */
+        void ExtPsyCheckingTimeout();
+        
+        /**
+        * Get index of the PSY in iExtGpsPsyArray
+        */
+        TInt GetIndexInPsyArray( TPositionModuleId aModuleId ) const;
+        
+        /**
+        * Start timer if it is not started yet.
+        */
+        void StartTimer();
+        
+        /**
+        * Cancel location requesto to all modules
+        */
+        void CancelAllLocationRequests();
+        
+        /**
+        * Check if Ext GPS PSY in use
+        */
+        TBool IsExtGpsPsyInUse() const;
+        
+        /**
+        * Make location request to all external GPS PSY.
+        */
+        void MakeLocationRequests();
+        
+        /**
+        * Stop location request to the sepcific module
+        */
+        void CancelLocationRequest( TPositionModuleId aPsyId );
+        
+        // By default, prohibit copy constructor
+        CPosExternalGpsMonitor(const CPosExternalGpsMonitor&);
+        // Prohibit assigment operator
+        CPosExternalGpsMonitor& operator= (const CPosExternalGpsMonitor&);
+
+    private: // Data
+        //Reference to module status manager
+        MPosModuleStatusManager& iModuleStatusManager;
+        
+        //Default positioner
+        RPointerArray< CPositioner > iDefaultPositionerArray;
+        
+        //Reference count
+        TInt iRefCount;
+        
+        //Psy list handler
+        CPosPsyListHandler* iPsyListHandler;
+        
+        //Fix state manager
+        CPosPsyFixStateManager* iFixStateManager;
+        
+        //Const manager
+        CPosConstManager* iConstManager;
+        
+        //External GPS module id array
+        RPointerArray< CPosRequestor > iExtGpsPsyArray;
+        
+        //External GPS module used count
+        RArray< TInt > iExtGpsPsyUsedArray;
+        
+        //TPositionInfo for location request
+        TPositionInfo iPosInfo;
+        
+        //Indicate if location request has been made
+        TBool iIsLoacationRequestMade;
+        
+        //Indicate if external GPS PSY has been used during 
+        //the timer period
+        TBool iIsExtGpsPsyUsed;
+        
+        //External GPS checking timer
+        CPeriodic* iTimer;
+    };
+
+#endif      // CPOSEXTERNALGPSMONITOR_H  
+            
+// End of File