diff -r 000000000000 -r 9cfd9a3ee49c datasourceadaptation/gpsdatasourceadaptation/common/inc/crequesthandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datasourceadaptation/gpsdatasourceadaptation/common/inc/crequesthandler.h Tue Feb 02 01:50:39 2010 +0200 @@ -0,0 +1,93 @@ +// Copyright (c) 2008-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: +// + +/** + @file + @InternalComponent +*/ + +#ifndef __LBSREQUESTHANDLER_H__ +#define __LBSREQUESTHANDLER_H__ + +#include +#include +#include +#include +#include "lbstimer.h" // for MLbsCallbackTimerObserver & CLbsCallbackTimer +#include "LbsInternalInterface.h" + +class CPositionerQ; +class TRequestParameters; +class MPositioner; + +class CRequestHandler : public CBase, public MLbsCallbackTimerObserver + + { + public: + virtual ~CRequestHandler(); + virtual void ReMergeWithCancelRequestL(TInt aError); + virtual void CancelRequestL(); + virtual void SubmitNewRequestL(MPositioner* aNewRequest); + virtual void WarmDownTimerExpired(); + + void NotifyRequestComplete(); + + // from MLbsCallbackTimerObserver + void OnTimerEventL(TInt aTimerId); + TInt OnTimerError(TInt aError, TInt aTimerId); + + enum TEventId // timer event ID at request queue level + { + EPowerStandByTimerEvent = 0 + }; + + enum TRequestHandlerPanic + { + KUnknownTimerEventId + }; + + protected: + CRequestHandler(); + void ConstructL(); + + virtual void IssueStatus(TBool aTracking, TLbsPositionUpdateRequestBase::TPowerAdvice aPower = TLbsPositionUpdateRequestBase::ENoPowerAdvice) = 0; + virtual void IssueCancel(TBool aTracking, TLbsPositionUpdateRequestBase::TPowerAdvice aPower = TLbsPositionUpdateRequestBase::EPowerAdviceStandby) = 0; + virtual void IssueMergedRequestL() = 0; + void BuildUpdateRequest(TLbsLocRequestQuality& aRequest, const TTimeIntervalMicroSeconds& aTimeForFix, const TPositionQuality& aQuality); + virtual TInt MergeRequest(const TRequestParameters* aRequestParameters, + const TBool aTracking, + TLbsPositionUpdateRequestBase::TPowerAdvice aPower = TLbsPositionUpdateRequestBase::ENoPowerAdvice) = 0; + + virtual void ResetMergedRequest() = 0; + + protected: + TLbsPositionUpdateRequest iMergedRequest; // next potential position update request + TLbsPositionUpdateRequest iCurrentRequest; // current update request that's on the bus + CPositionerQ* iPositionerQ; + + private: + void SubmitRequestL(); + TBool MergedDifferent(); + + void MergeAllRequests(); + TInt MergeNewRequest(TInt aNewRequest); + void TimeOutTimerEvent(); + TInt TimeOutTimerError(TInt /*aError*/); + + TUint iTrackingCount; + CLbsCallbackTimer* iPowerStandByTimer; // sends a standby if no requests in the queue + }; + +#endif // __LBSREQUESTHANDLER_H__