datasourcemodules/defaultpositioningmodule/inc/epos_cpospsylisthandler.h
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datasourcemodules/defaultpositioningmodule/inc/epos_cpospsylisthandler.h	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,234 @@
+/*
+* 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 CPOSPSYLISTHANDLER_H
+#define CPOSPSYLISTHANDLER_H
+
+#include <e32base.h>
+#include <lbs.h>
+#include "epos_mposmodulesettingsmanager.h"
+#include "epos_mposmodulesettingslistener.h"
+#include "epos_mpospsylistlistener.h"
+#include "epos_mpospsyfixstatelistener.h"
+
+class MPosModuleSettingsManager;
+class CPosPsyFixStateManager;
+class CPosConstManager;
+
+/**
+* The CPosPsyListHandler manages dynamic list that is used by Default
+* Proxy to make location requests.
+*/
+class CPosPsyListHandler : 
+        public CBase, 
+        public MPosModuleSettingsListener,
+        public MPosPsyFixStateListener
+    {
+    public: // Constructors and destructor
+              
+        /**
+        * Get an instance of CPosPsyListHandler.    
+        *
+        * This function must be called in pair with 
+        * ReleaseInstance()
+        *
+        * @return The new instance of this class.
+        */
+        static CPosPsyListHandler* GetInstanceL();
+        
+        /**
+        * Release the instance of CPosPsyListHandler
+        *
+        * This function must be called in pair with
+        * GetInstanceL()
+        */
+        void ReleaseInstance();
+
+        /**
+        * Set module settings manager. If the manager is already set,
+        * this function does nothing.
+        * 
+        * @param aManager Reference to module settings manager.
+        */
+        void SetModuleSettingsManagerL(
+            MPosModuleSettingsManager& aManager );
+        
+        /**
+        * Destructor.
+        */
+        ~CPosPsyListHandler();
+
+    public: // Functions from base classes
+        /**
+        * Add a PSY list change listener
+        * 
+        * @param aListener Pointer to the PSY list change listener
+        */
+        void AddListenerL(
+            MPosPsyListListener* aListener );
+            
+        /**
+        * Remove a PSY list change listener.
+        *
+        * @param aListener Pointer to the PSY list change listener
+        */
+        void RemoveListener(
+            MPosPsyListListener* aListener );
+        
+        /**
+        * Get module list.
+        *
+        * @return aPsyList The PSY list in priority order.
+        * the aPsyList will be emptied wether this function 
+        * succeed or not.
+        */
+        void GetPsyListL(
+            RArray< TPositionModuleId >& aPsyList );
+            
+        /**
+        * Get external GPS PSY module list.
+        *
+        * @return aPsyList The PSY list contains all external
+        * GPS modules. The list will be emptyied first.
+        */
+        void GetExtGpsPsyListL(
+            RArray< TPositionModuleId >& aPsyList );
+            
+        /**
+        * Check if first GPS PSY is located on external device.
+        *
+        * If there is no GPS PSY available in the list, this 
+        * function will return ETrue
+        */
+        TBool IsFirstGpsPsyExternal() const;
+            
+        /**
+        * Check if the PSY is based on Network technology.
+        */
+        TBool IsModuleNetworkBased(
+            TPositionModuleId aModuleId ) const;
+            
+        /**
+        * Check if the requested class is supported by the PSY
+        */
+        TBool IsClassSupported(
+            TUint32 aClassType,
+            TPositionModuleId aModuleId ) const;
+            
+        /**
+        * Get TTFF and TTNF value of a specific PSY.
+        *
+        * @return KErrNone if successful. If the module is not found
+        * then KErrNotFound is returned.
+        */
+        TInt GetTtffAndTtnf(
+            TPositionModuleId aModuleId,
+            TTimeIntervalMicroSeconds& aTtff,
+            TTimeIntervalMicroSeconds& aTtnf ) const;
+            
+    protected: //From base class
+        /*
+        * From MPosModulesObserver.
+        * Called when changes are made in the modules settings
+        */
+        virtual void HandleModuleSettingsChangedL(
+            TPosModulesEvent aEvent );
+            
+        /**
+        * From MPosPsyFixStateListener
+        */
+        virtual void PsyFixStateChanged( 
+            TPositionModuleId aModuleId,
+            CPosPsyFixStateManager::TPsyFixState aFixState ); 
+            
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CPosPsyListHandler();
+
+        /**
+        * EPOC constructor.
+        */
+        void ConstructL();
+        
+        /**
+        * Update module list
+        */
+        void UpdateModuleListL();
+        
+        /**
+        * Find module in module info array.
+        * This function returns KErrNotFound if module is not 
+        * found in the array.
+        */
+        TInt ModuleIndex( TPositionModuleId aModuleId ) const;
+        
+        /**
+        * Notify listener that PSY list is changed
+        */
+        void NotifyListeners( 
+            const TPosPsyListChangeEvent& aEvent );
+
+        /**
+        * Check if the module is GPS type of technology
+        */
+        TBool IsGpsTechnology( 
+            const TPositionModuleInfo& aModuleInfo ) const;
+            
+        /**
+        * Move PSY to the top of PSY list. If aId is KPositionNullModuleId,
+        * nothing will be done. Internal GPS PSY will not be moved if the 
+        * top GPS PSY on external device and fix state is Yes.
+        *
+        * @return ETrue if the list is modified. Otherwise returns EFalse.
+        */
+        TBool MovePsyToTop( TPositionModuleId aId );
+
+        // By default, prohibit copy constructor
+        CPosPsyListHandler(const CPosPsyListHandler&);
+        // Prohibit assigment operator
+        CPosPsyListHandler& operator= (const CPosPsyListHandler&);
+        
+    private: // Data
+        //Reference count
+        TInt iRefCount;
+        
+        //Fix state manager
+        CPosPsyFixStateManager* iFixStateManager;
+        
+        //Const manager
+        CPosConstManager* iConstManager;
+
+        //Listener array
+        RPointerArray < MPosPsyListListener > iListenerArray;
+
+        //modules
+        MPosModuleSettingsManager* iModulesSettings;
+        
+        //Module info array
+        RArray< TPositionModuleInfo > iModuleInfoArray;
+        
+    };
+
+#endif      // CPOSPSYLISTHANDLER_H  
+            
+// End of File