diff -r 000000000000 -r 9cfd9a3ee49c locationrequestmgmt/locationserver/inc/EPos_CPosModulesStatus.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/locationrequestmgmt/locationserver/inc/EPos_CPosModulesStatus.h Tue Feb 02 01:50:39 2010 +0200 @@ -0,0 +1,112 @@ +/* +* 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 CPOSMODULESSTATUS_H +#define CPOSMODULESSTATUS_H + +// INCLUDES +#include +#include "EPos_MPosStatusObserver.h" +#include +#include "epos_mposmodulestatusmanager.h" + +// FORWARD DECLARATIONS +class CPosModules; + +// CLASS DECLARATION + +/** +* Holds the status of all installed modules. +* Used to get current module status and to get notification of +* module status changes. +*/ +class CPosModulesStatus : public CBase, + public MPosStatusObserver, + public MPosModuleStatusManager + { + public: // Data types + + struct TPosSubscriber + { + TAny* iClient; + TInt iClientTimeStamp; + TBool iToBeRemoved; + TBool iHasRequest; + RMessage2 iMsg; + TPositionModuleId iModuleId; + TPositionModuleStatusEvent iEvent; + }; + + struct TPosModule + { + TPositionModuleId iModuleId; + TPositionModuleStatus iStatus; + TInt iDeviceTimeStamp; + TInt iDataQualityTimeStamp; + }; + + public: // Constructors and destructor + static CPosModulesStatus* NewL(CPosModules& aModules); + static CPosModulesStatus* NewL(CPosModules& aModules,const TTimeIntervalMicroSeconds32& aTimerInterval); + virtual ~CPosModulesStatus(); + + public: //From base class + virtual void AddListenerL(MPosModuleStatusListener& aListener); + virtual void RemoveListener(MPosModuleStatusListener& aListener); + virtual TInt GetModuleStatus(const TPositionModuleId& aModuleId,TPositionModuleStatusBase& aStatus ) const; + + public: // New functions + void NotifyModuleStatusEventL(const RMessage2& aMessage, TAny* aClient); + void CancelNotifyModuleStatusEventL(TAny* aClient); + void NotifySessionClosed(TAny* aClient); + void HandleSettingsChangeL(TPosModulesEvent aEvent); + + protected: // Functions from base classes + void ReportStatus(const TPositionModuleId& aImplementationUid, const TPositionModuleStatus& aStatus); + + private: + CPosModulesStatus(CPosModules& aModules, const TTimeIntervalMicroSeconds32& aTimerInterval); + void ConstructL(); + CPosModulesStatus( const CPosModulesStatus& ); + CPosModulesStatus& operator= ( const CPosModulesStatus& ); + + + void ValidateRequestL(const RMessage2& aMessage, TPositionModuleId& aId, TPositionModuleStatusEvent& aEvent); + TBool HasValidEventsQueued(TPosSubscriber& aSubscriber); + void NotifySubscribers(TPositionModuleStatusEvent& aOccurredEvent); + void NotifyListeners(TPositionModuleStatusEvent& aOccurredEvent); + static TInt TimerCallback(TAny* aModulesStatus); + TInt DoTimerCallback(); + void RequestComplete(const RMessage2& aMessage, TInt aCompleteCode); + void NotifyEventToSubscriber(TPositionModuleStatusEvent& aOccurredEvent, const CPosModulesStatus::TPosSubscriber& aSubscriber); + + private: // Data + CPosModules& iModules; + RPointerArray< MPosModuleStatusListener > iListenerArray; + RArray iModuleStatusArray; + RArray iSubscribers; + TInt iSequenceNo; + CPeriodic* iTimer; + TTimeIntervalMicroSeconds32 iTimerInterval; + + }; + +#endif // CPOSMODULESSTATUS_H + +// End of File