diff -r e8c1ea2c6496 -r 8758140453c0 lbs/lbsclient/src/ctlbsclientperiodictester.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lbs/lbsclient/src/ctlbsclientperiodictester.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,457 @@ +// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + + +// INCLUDE FILES +#include "ctlbsclientperiodictester.h" +#include "ctlbsclientlog.h" + +// CONSTANTS +const TInt KSmallestUpdateIntervalToLog = 4000000; //2000000 +const TInt KMilliSecondTolerance = 2500000; //One second + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPeriodicTester::CPeriodicTester +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CT_LbsClientPeriodicTester::CT_LbsClientPeriodicTester() : CActive(CActive::EPriorityHigh), iError(EFalse), iErrorCode(KErrNone) + { + } + +// ----------------------------------------------------------------------------- +// CPeriodicTester::ConstructL +// +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::ConstructL( + TTimeIntervalMicroSeconds aInterval, + const TDesC& aServiceName, + CT_LbsClientLog* aLog, + TUid aUid, + TInt aNumberOfRuns) + { + iLog = aLog; + iName = aServiceName; + iNumberOfRuns = aNumberOfRuns; + iInterval = aInterval; + iUid = aUid; + iNumberOfUpdates = 0; + iPrematureChangeOfParameters = EFalse; + iCanceledRequest = EFalse; + iCancelRequest = EFalse; + iWriteToLog = ETrue; //EFalse + iRecentTime = TTime(0); + iPositionInfo = TPositionInfo(); + + _LIT(KConnectErr, "Error when connecing to EPos server, %d"); + TInt err = iPosServer.Connect(); + AssertTrueL(err == KErrNone, KConnectErr, err); + + _LIT(KOpenErr, "Error when opening positioner, %d"); + err = iPositioner.Open(iPosServer, aUid); + AssertTrueL(err == KErrNone, KOpenErr, err); + + TPositionUpdateOptions posOption; + posOption.SetUpdateInterval(aInterval); + + _LIT(KUpdateErr, "Error when setting update interval, %d"); + err = iPositioner.SetUpdateOptions(posOption); + AssertTrueL(err == KErrNone, KUpdateErr, err); + + iPositioner.SetRequestor(CRequestor::ERequestorService, + CRequestor::EFormatApplication, aServiceName); + + CActiveScheduler::Add(this); + } + +// ----------------------------------------------------------------------------- +// CPeriodicTester::NewL +// +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CT_LbsClientPeriodicTester* CT_LbsClientPeriodicTester::NewL( + TTimeIntervalMicroSeconds aInterval, + const TDesC& aServiceName, + CT_LbsClientLog* aLog, + TUid aUid, + TInt aNumberOfRuns) + { + CT_LbsClientPeriodicTester* self = new( ELeave ) CT_LbsClientPeriodicTester; + + CleanupStack::PushL(self); + self->ConstructL(aInterval, aServiceName, aLog, aUid, aNumberOfRuns); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CT_LbsClientPeriodicTester::~CT_LbsClientPeriodicTester() + { + iPositioner.Close(); + iPosServer.Close(); + + iLog = NULL; + } + +// ----------------------------------------------------------------------------- +// CPeriodicTester::RunL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::RunL() + { + iNumberOfUpdates++; + //User::Leave(-10); //used for testing the test code + TBuf<175> buf; + _LIT(KStatus,"Status invalid in RunL, status = %d"); + buf.Format(KStatus, iStatus.Int()); + AssertTrueL((iStatus == KErrNone || iStatus == KPositionQualityLoss || + iStatus == KErrCancel), buf, iStatus.Int()); + if(iNumberOfUpdates <= iNumberOfRuns) + { + _LIT(KTime, "%F%H:%F%T:%F%S:%F%*C3"); + TBuf<100> time; + TTime now; + now.UniversalTime(); + TInt difference; + TInt smallestIntervalToLog = KSmallestUpdateIntervalToLog; + if(iNumberOfUpdates == 1) + { + difference = I64LOW(now.MicroSecondsFrom(iRecentTime).Int64()); + } + else + { + difference = I64LOW(now.MicroSecondsFrom(iRecentTime).Int64()); + } + + _LIT(KInterval, "The interval is %d, and the difference is %d"); + TBuf<150> buf; + buf.Format(KInterval,iInterval.Int64(), difference); + iLog->Put (buf); + if((iInterval.Int64() > smallestIntervalToLog) && (I64LOW(iRecentTime.Int64()) != 0)) + { + _LIT(KTimeErr, "ERROR: Time difference greater than tolerated interval, time difference = %d"); + AssertTrueL(difference < (iInterval.Int64() + KMilliSecondTolerance), KTimeErr, I64LOW(now.MicroSecondsFrom(iRecentTime).Int64())); + + if(difference < 0) + { + #ifdef __WINS__ + _LIT(KEarlyErr, "ERROR: Negative time difference on WINS greater than 0.4s"); + AssertTrueL((KToleratedEarliness > -(difference)), KEarlyErr, KErrTotalLossOfPrecision); + #else + _LIT(KEarlyErr, "ERROR: Time difference negative on target"); + iLog->Put(KEarlyErr); + User::LeaveIfError(KErrTotalLossOfPrecision); + #endif + + } + } + + if(iWriteToLog && ((iNumberOfUpdates % KTracePeriod) == 0)) + { + now.UniversalTime(); + now.FormatL(time, KTime); + _LIT(KLog, "Client got update no. %d at %S, Time-diff = %d, Status = "); + TBuf<175> buf; + buf.Format(KLog, iNumberOfUpdates, &time, difference); + buf.AppendNum(iStatus.Int()); + buf.Append(iName); + _LIT(KNrOfRuns, "Nr of runs = "); + buf.Append(KNrOfRuns); + buf.AppendNum(iNumberOfRuns); + iLog->Put(buf); + } + + if(iPrematureChangeOfParameters) + { + iInterval = TTimeIntervalMicroSeconds(2000000); + User::After(I64LOW(iInterval.Int64())); + + TPositionUpdateOptions posOption; + posOption.SetUpdateInterval(iInterval); + + TInt err = iPositioner.SetUpdateOptions(posOption); + _LIT(KChange, "ERROR: Got error code when setting update options prematurely in ChangeTestParameters"); + AssertTrueL(err == KErrNone, KChange, err); + iPrematureChangeOfParameters = EFalse; + } + + RequestNotification(); + + if(iCancelRequest) + { + User::After(3000000); + iPositioner.CancelRequest(EPositionerNotifyPositionUpdate); + iCancelRequest = EFalse; + iCanceledRequest = ETrue; + } + + if(iCanceledRequest) + { + iCanceledRequest = EFalse; + _LIT(KCancelErr, "ERROR: Status was not KErrCancel after CancelRequest"); + AssertTrueL(iStatus.Int() == KErrCancel, KCancelErr, KErrCancel); + } + } + else + { + CActiveScheduler::Stop(); + } + + } + + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::RunError +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CT_LbsClientPeriodicTester::RunError(TInt aError) + { + iError = ETrue; + iErrorCode = aError; + CActiveScheduler::Stop(); + _LIT(KErrorInRunL, "Error code in RunError is, %d"); + TBuf<100> buf; + buf.Format(KErrorInRunL, aError); + iLog -> Put(buf); + return KErrNone; + } + + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::IsCompletedOK +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CT_LbsClientPeriodicTester::IsCompletedOK() + { + return !iError; + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::GetError +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CT_LbsClientPeriodicTester::GetError() + { + return iErrorCode; + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::ChangeTestParametersL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::ChangeTestParametersL(TTimeIntervalMicroSeconds aInterval, TInt aNumberOfRuns) + { + iNumberOfRuns = aNumberOfRuns; + iNumberOfUpdates = 0; + iInterval = aInterval; + iRecentTime = TTime(0); + iError = EFalse; + iErrorCode = KErrNone; + + TPositionUpdateOptions posOption; + posOption.SetUpdateInterval(aInterval); + + TInt err = iPositioner.SetUpdateOptions(posOption); + _LIT(KChange, "ERROR: When setting update options in ChangeTestParameters, err: %d"); + AssertTrueL(err == KErrNone, KChange, err); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::ChangeRequestorInformation +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::ChangeRequestorInformation(const TDesC& aServiceName) + { + iPositioner.SetRequestor(CRequestor::ERequestorService, + CRequestor::EFormatApplication, aServiceName); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::ClosePositioner +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::ClosePositioner() + { + iPositioner.Close(); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::OpenPositionerL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::OpenPositionerL(const TDesC& aServiceName) + { + _LIT(KOpenErr, "Error when opening positioner, %d"); + TInt err = iPositioner.Open(iPosServer, iUid); + AssertTrueL(err == KErrNone, KOpenErr, err); + + iPositioner.SetRequestor(CRequestor::ERequestorService, + CRequestor::EFormatApplication, aServiceName); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::SetMaxAgeL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::SetMaxAgeL(TTimeIntervalMicroSeconds aInterval) + { + TPositionUpdateOptions posOption; + posOption.SetUpdateInterval(iInterval); + posOption.SetMaxUpdateAge(aInterval); + + TInt err = iPositioner.SetUpdateOptions(posOption); + _LIT(KChange, "ERROR: When setting max age in SetMaxAge, err: %d"); + AssertTrueL(err == KErrNone, KChange, err); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::SetPartialUpdateL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::SetPartialUpdateL(TBool aUpdateOption) + { + TPositionUpdateOptions posOption; + posOption.SetUpdateInterval(iInterval); + posOption.SetAcceptPartialUpdates(aUpdateOption); + + TInt err = iPositioner.SetUpdateOptions(posOption); + _LIT(KChange, "ERROR: When setting partial update in SetPartialUpdate, err: %d"); + AssertTrueL(err == KErrNone, KChange, err); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::SetTimeOutL +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::SetTimeOutL(TTimeIntervalMicroSeconds aInterval) + { + TPositionUpdateOptions posOption; + posOption.SetUpdateInterval(iInterval); + posOption.SetUpdateTimeOut(aInterval); + + TInt err = iPositioner.SetUpdateOptions(posOption); + _LIT(KChange, "ERROR: When setting timeout in SetTimeOut"); + AssertTrueL(err == KErrNone, KChange, err); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::SetChangeParametersPrematurely +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::SetChangeParametersPrematurely(TBool aCondition) + { + iPrematureChangeOfParameters = aCondition; + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::CancelRequest +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::CancelRequest() + { + iCancelRequest= ETrue; + iCanceledRequest = EFalse; + } + + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::RequestNotification +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::RequestNotification() + { + TTime now; + now.UniversalTime(); + iRecentTime = now; + iPositioner.NotifyPositionUpdate(iPositionInfo, iStatus); + SetActive(); + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::RequestNotification +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::GetPosition(TPositionInfo& aPosInfo) + { + aPosInfo = iPositionInfo; + } + +// ----------------------------------------------------------------------------- +// CT_LbsClientPeriodicTester::DoCancel +// +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::DoCancel() + { + } + +// --------------------------------------------------------- +// CT_LbsClientPeriodicTester::AssertTrueL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CT_LbsClientPeriodicTester::AssertTrueL(TBool aCondition, const TDesC& aErrorMsg, TInt aErrorCode) + { + if (!aCondition) + { + TBuf<100> buf; + buf.Format(aErrorMsg, aErrorCode); + iLog->Put(buf); + User::Leave(aErrorCode); + } + } + +// End of File