diff -r 000000000000 -r 9cfd9a3ee49c datasourcemodules/defaultpositioningmodule/inc/epos_cpospsylisthandler.h --- /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 +#include +#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