--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/lbssimulationpsy/src/ctlbssimulationpsypostp115.cpp Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,1608 @@
+// 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 "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:
+//
+
+
+
+// INCLUDES
+#include "ctlbssimulationpsypostp115.h"
+#include "ctlbssimulationpsyposnmeafilereader.h"
+#include "ctlbssimulationpsyfixconstants.h"
+
+
+// CONSTANTS
+const TInt KEPosAndPsyOverheadTime = 2000000; // Accepted EPos overhead delay
+
+// KMaxNrOfFixes is the maximum nr of requests we accept. If expected result has
+// not been achieved after this amount of fixes the test is considered to be unsuccessful
+const TInt KMaxNrOfFixes = 300;
+
+// KMinNrOfFixes is the minimum nr of fixes we require to be allowed to say that
+// the expected result was achieved.
+const TInt KMinNrOfFixes = 25;
+
+// Nr of tests in this TP
+const TInt KNrOfTests = 13;
+
+// Nr of NMEA PSY types existing,
+const TInt KNrOfNMEATypes = 6;
+
+const TInt KMaxStringLength = 50;
+
+_LIT(KService, "service");
+
+_LIT(KName0, "TP115 - SimPSY, NMEA raw data");
+_LIT(KName1, "TP115 - SimPSY, power-up time");
+_LIT(KName2, "TP115 - SimPSY, time to fix");
+_LIT(KName3, "TP115 - SimPSY, deterministic failure");
+_LIT(KName4, "TP115 - SimPSY, random failure");
+_LIT(KName5, "TP115 - SimPSY, altitude");
+_LIT(KName6, "TP115 - SimPSY, latitude and longitude");
+_LIT(KName7, "TP115 - SimPSY, movement");
+_LIT(KName8, "TP115 - SimPSY, bad input parameters");
+_LIT(KName9, "TP115 - Extended1 NMEA raw data");
+_LIT(KName10, "TP115 - Extended2 NMEA raw data");
+_LIT(KName11, "TP115 - SimPSY, correct fixes");
+_LIT(KName12, "TP115 - SimPSY, correct timing after cancel");
+
+
+#ifdef __WINS__
+ // Nmea raw data files
+ _LIT(KMagellanGPS315, "z:\\system\\test\\testdata\\MagellanGPS315.nme");
+ _LIT(KFix10MagellanGPS315, "z:\\system\\test\\testdata\\Fix10MagellanGPS315.nme");
+ _LIT(KMagellanTracker, "z:\\system\\test\\testdata\\MagellanTracker.nme");
+ _LIT(KGarmin12cx, "z:\\system\\test\\testdata\\garmin12cx.nme");
+ _LIT(KGarmin3plus, "z:\\system\\test\\testdata\\garmin3plus.nme");
+ _LIT(KGarminetrexlegend, "z:\\system\\test\\testdata\\garminetrexlegend.nme");
+ _LIT(KMagellanMeridian, "z:\\system\\test\\testdata\\magellanmeridianplatinum.nme");
+ //Ini files to corresponding nmea raw data file
+ _LIT(KMagellanTrackerIni, "z:\\system\\test\\testdata\\MagellanTracker.ini");
+ _LIT(KGarmin12cxIni, "z:\\system\\test\\testdata\\garmin12cx.ini");
+ _LIT(KGarmin3plusIni, "z:\\system\\test\\testdata\\garmin3plus.ini");
+ _LIT(KGarminetrexlegendIni, "z:\\system\\test\\testdata\\garminetrexlegend.ini");
+ _LIT(KMagellanMeridianIni, "z:\\system\\test\\testdata\\magellanmeridianplatinum.ini");
+#else
+ // Nmea raw data files
+ _LIT(KMagellanGPS315, "c:\\system\\test\\testdata\\MagellanGPS315.nme");
+ _LIT(KFix10MagellanGPS315, "c:\\system\\test\\testdata\\Fix10MagellanGPS315.nme");
+ _LIT(KMagellanTracker, "c:\\system\\test\\testdata\\MagellanTracker.nme");
+ _LIT(KGarmin12cx, "c:\\system\\test\\testdata\\garmin12cx.nme");
+ _LIT(KGarmin3plus, "c:\\system\\test\\testdata\\garmin3plus.nme");
+ _LIT(KGarminetrexlegend, "c:\\system\\test\\testdata\\garminetrexlegend.nme");
+ _LIT(KMagellanMeridian, "c:\\system\\test\\testdata\\magellanmeridianplatinum.nme");
+#endif
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------
+ CT_LbsSimulationPSYPosTp115::CT_LbsSimulationPSYPosTp115(CT_LbsServer& aParent, TInt aIndex): CT_LbsPortedStepBase(aParent)
+ {
+ TBuf<KMaxStringLength> aName;
+ GetIndexName(aIndex,aName);
+ SetTestStepName(aName);
+ iIndex = aIndex;
+ }
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsSimulationPSYPosTp115::~CT_LbsSimulationPSYPosTp115()
+ {
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::StartL()
+ {
+ // Setup test environment
+
+ iNrOfRequests = 0;
+ ConnectL();
+ SetupPsyL(iUidSimulationPsy);
+
+ TRAPD(err, ReplaceSwitchInTrapL(iIndex));
+
+ if (err != KErrNone)
+ {
+ ClosePositioner();
+ }
+
+ Disconnect();
+ // Wait for EPos server to terminate
+ User::After(2500000);
+
+ if (err != KErrNone)
+ {
+ User::Leave(err);
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::GetIndexName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::GetIndexName(TInt aIndex, TDes& aName) const
+ {
+ const TDesC* names[KNrOfTests] = {&KName0, &KName1, &KName2, &KName3, &KName4,
+ &KName5, &KName6, &KName7, &KName8, &KName9, &KName10, &KName11, &KName12};
+ aName = *names[aIndex];
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestSimulationNmeaReaderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestSimulationNmeaReaderL(const TDesC& aNMEASource)
+ {
+ const TInt KMaxNmeaSentenceLength = 82; // The maximum length of an NMEA sentence
+ _LIT(KNmeaDataMismatchError1, "NMEA data mismatch. NMEA data from Simulation Psy:");
+ _LIT(KNmeaDataMismatchError2, "NMEA data read from input file:");
+ _LIT(KNmeaSetError, "Not possible to set retrieval of request data");
+ _LIT(KNmeaSetError2, "The field is not in the desired fields list");
+ _LIT(KNmeaNoDataError, "No data returned from NMEA positioner");
+ _LIT(KNmeaGetError, "Error when calling GetValue() %d");
+ _LIT(KNmeaGetError2, "Error when calling GetValue(), field could not be found %d");
+ _LIT(KNmeaPositionError, "Position (lat/long/alt) is not a real finite number");
+ _LIT(KReqError, "Position could not be requested, err %d");
+ _LIT(KStart, "Testing TestSimulationNmeaReaderL() PSY:");
+ _LIT(KEnd, "TestSimulationNmeaReaderL() passed");
+
+ TInt err = 0;
+
+ // Set correct data file
+ SetSimDataFileL(aNMEASource);
+
+ _LIT(KServiceName, "SAAA");
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TBuf<200> buf;
+ buf.Append(KStart);
+ buf.Append(aNMEASource);
+ INFO_PRINTF1(buf);
+
+ //Check that SimPSY supports TPositionInfo
+ TPositionInfo posInfo = TPositionInfo();
+
+ // Request data from simulation psy
+ err = PerformSyncRequest(KServiceName, &posInfo);
+
+ AssertTrueL(err == KErrNone, KReqError, err);
+
+ TPosition position = TPosition();
+ posInfo.GetPosition(position);
+
+ TReal64 lat = position.Latitude();
+ TReal64 lon = position.Longitude();
+
+ // FrBo Add check that nmea data is correctly compiled into position
+ if (!Math::IsFinite(lat))
+ {
+ LogErrorAndLeaveL(KNmeaPositionError);
+ }
+ if (!Math::IsFinite(lon))
+ {
+ LogErrorAndLeaveL(KNmeaPositionError);
+ }
+
+ ClosePositioner();
+
+ // Check that Simulation PSY supports HPositionGenericInfo
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+ CT_LbsSimulationPSYPosNmeaFileReader* fileReader = CT_LbsSimulationPSYPosNmeaFileReader::NewLC(aNMEASource);
+
+ // Do everything two times just to test that it is
+ // possible to do two NotifyPositionUpdate()
+ for (TInt j=0; j<2; j++)
+ {
+ TBuf8<KMaxNmeaSentenceLength> nmeaDataFromFile;
+
+ HPositionGenericInfo* genericInfo = HPositionGenericInfo::NewLC();
+
+ AssertTrueL(genericInfo->SetRequestedField(EPositionFieldNMEASentences) == KErrNone, KNmeaSetError, -1);
+ AssertTrueL(genericInfo->SetRequestedField(EPositionFieldNMEASentencesStart) == KErrNone, KNmeaSetError, -1);
+
+ // Request data from simulation psy
+ err = PerformSyncRequest(KServiceName, genericInfo);
+
+ AssertTrueL(err == KErrNone, KReqError, err);
+
+ TPosition position = TPosition();
+ genericInfo->GetPosition(position);
+
+ TReal64 lat = position.Latitude();
+ TReal64 lon = position.Longitude();
+
+ // FrBo Add check that nmea data is correctly compiled into position
+ if (!Math::IsFinite(lat))
+ {
+ LogErrorAndLeaveL(KNmeaPositionError);
+ }
+ if (!Math::IsFinite(lon))
+ {
+ LogErrorAndLeaveL(KNmeaPositionError);
+ }
+
+ //Check that reuqested fields has been set
+ AssertTrueL(genericInfo->IsRequestedField(EPositionFieldNMEASentences), KNmeaSetError2, -1);
+ AssertTrueL(genericInfo->IsRequestedField(EPositionFieldNMEASentencesStart), KNmeaSetError2, -1);
+
+ TUint8 nrOfSentences;
+ err = genericInfo->GetValue(EPositionFieldNMEASentences, nrOfSentences);
+
+ AssertTrueL(err != KErrNotFound, KNmeaGetError2, err);
+ AssertTrueL(err == KErrNone, KNmeaGetError, err);
+
+ // Should always return something
+ AssertTrueL(nrOfSentences != 0, KNmeaNoDataError, -1);
+
+ for (TInt i=0; i<nrOfSentences; i++)
+ {
+ TPtrC8 nmeaDataFromPsy;
+ TUint16 sentnr = static_cast<TUint16> (EPositionFieldNMEASentencesStart + i);
+
+ genericInfo->GetValue(sentnr, nmeaDataFromPsy);
+
+ User::LeaveIfError(fileReader->ReadNmeaSentence(nmeaDataFromFile));
+
+ // Analyze NMEA data
+ if (nmeaDataFromPsy != nmeaDataFromFile)
+ {
+ ERR_PRINTF1(KNmeaDataMismatchError1);
+ INFO_PRINTF1(KNmeaDataMismatchError2);
+ User::Leave(KErrGeneral);
+ }
+ } // End for
+ CleanupStack::PopAndDestroy(genericInfo);
+ } // End for
+ CleanupStack::PopAndDestroy(fileReader);
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::Extended2TestSimulationNmeaReaderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::Extended2TestSimulationNmeaReaderL(const TDesC& aNMEASource)
+ {
+ _LIT(KStart, "Testing Extended2TestSimulationNmeaReaderL() PSY: ");
+ _LIT(KEnd, "Extended2TestSimulationNmeaReaderL() passed");
+
+ TInt err = 0;
+ // Set correct nmea data file
+ SetSimDataFileL(aNMEASource);
+
+ TBuf<200> buf;
+ buf.Append(KStart);
+ buf.Append(aNMEASource);
+ INFO_PRINTF1(buf);
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ CT_LbsSimulationPSYPosNmeaFileReader* fileReader = CT_LbsSimulationPSYPosNmeaFileReader::NewLC(aNMEASource);
+ TPositionCourseInfo courseInfo = TPositionCourseInfo();
+
+ // Request data from simulation psy
+ err = PerformSyncRequest(KService, &courseInfo);
+
+ _LIT(KERROR, "PerformSyncRequest Status should be OK when requesting TPositionCourseInfo");
+ AssertTrueL(err == KErrNone, KERROR, 0);
+ //<<New Code
+ //TODO The NMEA data from fileReader should be compared to data form courseInfo ?
+
+ //>>Orginal Code
+ CleanupStack::PopAndDestroy(fileReader);
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+
+
+void CT_LbsSimulationPSYPosTp115::Extended1TestSimulationNmeaReaderL(const TDesC& aNMEASource)
+ {
+
+ // Set correct nmea data file
+ SetSimDataFileL(aNMEASource);
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ // Create HPositionGenericInfo object to pass to PerformSyncRequest method
+ HPositionGenericInfo* genericInfo = HPositionGenericInfo::NewLC();
+
+ _LIT(KErrKNMEA, "KNMEA Set error");
+ AssertTrueL(genericInfo->SetRequestedField(EPositionFieldSatelliteSeaLevelAltitude) == KErrNone,
+ KErrKNMEA, -1);
+
+ // Request data from simulation psy
+ TInt err = PerformSyncRequest(KService, genericInfo);
+
+ //Assure that everything is OK
+ _LIT(KErrOpenSimpsy1, "Error when openeing simpsy1");
+ AssertTrueL(err == KErrNone, KErrOpenSimpsy1, err);
+
+ TReal32 satelliteAltitude;
+ genericInfo->GetValue(EPositionFieldSatelliteSeaLevelAltitude, satelliteAltitude);
+
+ CleanupStack::PopAndDestroy(genericInfo);
+
+ ClosePositioner();
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TPositionInfo posInfo = TPositionInfo();
+ err = PerformSyncRequest(KService, &posInfo);
+ _LIT(KErrOpenSimpsy2, "Error when openeing simpsy2");
+ AssertTrueL(err == KErrNone, KErrOpenSimpsy2, err);
+
+ TPosition myPos = TPosition();
+ posInfo.GetPosition(myPos);
+
+ ClosePositioner();
+}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestPowerUpTimeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestPowerUpTimeL()
+ {
+ // Time granularity on WINS is 0.1s (see ESLI-5HZKHN)
+#ifdef __WINS__
+ const TInt KPowerUpTime = 4900000;
+#else
+ const TInt KPowerUpTime = 5000000;
+#endif
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationPowerUp.sps");
+ //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationPowerUp.sps");
+ //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+ _LIT(KError1, "Error when requesting position");
+ _LIT(KStart, "Testing TestPowerUpTimeL()");
+ _LIT(KEnd, "TestPowerUpTimeL() passed");
+ INFO_PRINTF1(KStart);
+
+ // Set correct data file
+ SetSimDataFileL(KSimulationSource);
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TTime requestStart;
+ requestStart.UniversalTime();
+
+ // Request a pos. fix
+ TPositionInfo posInfo = TPositionInfo();
+ TInt err = PerformSyncRequest(KService, &posInfo);
+ if (err != KErrNone)
+ {
+ LogErrorAndLeaveL(KError1);
+ }
+
+ // Measure power-up time
+ TTime requestFinished;
+ requestFinished.UniversalTime();
+ TTimeIntervalMicroSeconds requestTime =
+ requestFinished.MicroSecondsFrom(requestStart);
+
+ // Time to complete first request should not be less than power-up time
+ if (requestTime.Int64() < KPowerUpTime ||
+ requestTime.Int64() > KPowerUpTime + KEPosAndPsyOverheadTime)
+ {
+ _LIT(KErr, "Power Up time = %d, is out of range");
+ iMsg.Format(KErr, requestTime.Int64());
+ LogErrorAndLeaveL(iMsg);
+ }
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestTimeToFixL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestTimeToFixL()
+ {
+ // Time granularity on WINS is 0.1s (see ESLI-5HZKHN)
+#ifdef __WINS__
+ const TInt KTimeToFixMin = 2900000;
+ const TInt KTimeToFixMax = 5100000;
+#else
+ const TInt KTimeToFixMin = 3000000;
+ const TInt KTimeToFixMax = 5000000;
+#endif
+ const TInt KNrOfFixes = 5;
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationTTF.sps");
+ //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationTTF.sps");
+ //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+ // Set correct data file
+ SetSimDataFileL(KSimulationSource);
+
+ _LIT(KError1, "Error when requesting position");
+ _LIT(KStart, "Testing TestTimeToFixL()");
+ _LIT(KEnd, "TestTimeToFixL() passed");
+ INFO_PRINTF1(KStart);
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TPositionInfo posInfo = TPositionInfo();
+
+ TTime requestStart, requestFinished;
+ TTimeIntervalMicroSeconds requestTime;
+
+ // Request TTF for KNrOfFixes pos. fixes
+ for (TInt i = 1; i <= KNrOfFixes; i++)
+ {
+ requestStart.UniversalTime();
+ TInt err = PerformSyncRequest(KService, &posInfo);
+ if (err != KErrNone)
+ {
+ LogErrorAndLeaveL(KError1);
+ }
+
+ requestFinished.UniversalTime();
+ requestTime = requestFinished.MicroSecondsFrom(requestStart);
+
+ // Verify that request time is kept within boundaries
+ if (requestTime.Int64() < KTimeToFixMin ||
+ requestTime.Int64() > KTimeToFixMax + KEPosAndPsyOverheadTime)
+ {
+ _LIT(KErr, "Time to fix (request nr. %d) = %d, is out of range");
+ iMsg.Format(KErr, i, requestTime.Int64());
+ LogErrorAndLeaveL(iMsg);
+ }
+ }
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestDeterministicFailureL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CT_LbsSimulationPSYPosTp115::TestDeterministicFailureL()
+ {
+ const TInt KDeterministicFailureProbability = 3;
+ const TInt KNrOfFixes = 15;
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationDeterministic.sps");
+ //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationDeterministic.sps");
+ //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+ // Set correct data file
+ SetSimDataFileL(KSimulationSource);
+
+ _LIT(KStart, "Testing TestDeterministicFailureL()");
+ _LIT(KEnd, "TestDeterministicFailureL() passed");
+ INFO_PRINTF1(KStart);
+ _LIT(KError1, "Wrong error occurred, was %d should be %d");
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TPositionInfo posInfo = TPositionInfo();
+ // Request KNrOfFixes pos. fixes
+ for (TInt i = 1; i <= KNrOfFixes; i++)
+ {
+ TBool willFail = (i % KDeterministicFailureProbability == 0);
+ TInt expectedErrorCode = willFail ? KPositionQualityLoss : KErrNone;
+
+ TInt err = PerformSyncRequest(KService, &posInfo);
+ if (err != expectedErrorCode)
+ {
+ TBuf<100> buf;
+ buf.Format(KError1, err, expectedErrorCode);
+ LogErrorAndLeaveL(buf);
+ }
+ }
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestRandomFailureL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestRandomFailureL()
+ {
+ // KRandomFailureProbability is the probability that a fix fails (percentage)
+ const TReal64 KRandomFailureProbability = 33.33;
+ _LIT(KMsg, "Random fail rate was achieved, %f");
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationRandom.sps");
+ //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationRandom.sps");
+ //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+
+ // Set correct data file
+ SetSimDataFileL(KSimulationSource);
+
+ _LIT(KStart, "Testing TestRandomFailureL()");
+ _LIT(KEnd, "TestRandomFailureL() passed");
+ INFO_PRINTF1(KStart);
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TPositionInfo posInfo = TPositionInfo();
+ TInt nrOfFailedFixes = 0;
+ TReal64 failRate = 0;
+ TBool resultsAchieved = EFalse;
+ TInt err = KErrNone;
+
+ // Request as many pos. fixes as necessary to achieve fail rate
+ for (TInt i = 1; i <= KMaxNrOfFixes && !resultsAchieved; i++)
+ {
+ err = PerformSyncRequest(KService, &posInfo);
+
+ if (err != KErrNone)
+ {
+ nrOfFailedFixes++;
+ }
+
+ if (i > KMinNrOfFixes)
+ {
+ failRate = (100.0 * nrOfFailedFixes) / i;
+ //need to make gap bit larger
+ if (Abs(failRate - KRandomFailureProbability) <= 6)
+ {
+ iMsg.Format(KMsg, failRate);
+ INFO_PRINTF1(iMsg);
+ resultsAchieved = ETrue;
+ }
+ }
+ }
+
+ if (!resultsAchieved)
+ {
+ iMsg.Format(KMsg, failRate);
+ LogErrorAndLeaveL(iMsg);
+ }
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestAltitudeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestAltitudeL()
+ {
+ const TInt KVerticalAccuracy = 30;
+ const TInt KMeanAltitude = 0;
+ _LIT(KMeanMsg, "Mean altitude of about zero meters was achieved, %f m");
+ _LIT(KStdDevMsg, "Standard deviation of altitude was achieved, %f");
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationPowerUp.sps");
+ //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationPowerUp.sps");
+ //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+ // Set correct data file
+ SetSimDataFileL(KSimulationSource);
+
+ _LIT(KStart, "Testing TestAltitudeL()");
+ _LIT(KEnd, "TestAltitudeL() passed");
+ _LIT(KError1, "Error when requesting location");
+ INFO_PRINTF1(KStart);
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TPositionInfo posInfo = TPositionInfo();
+ TReal altitudeVariance = 0;
+ TReal altitudeStandardDeviation = 0;
+ TReal altitudeSum = 0;
+ TReal squaredAltitudeSum = 0;
+ TReal altitudeMean = 0;
+ TBool meanAchieved = EFalse, stdDevAchieved = EFalse;
+
+ //need to change it because of the random genetatro which is not ideal
+ const TInt KAcceptedMeanError = 4;
+ const TInt KAcceptedStdError = 12;
+
+ // Request as many pos. fixes as necessary to achieve expected result
+ for (TInt i = 1; i <= KMaxNrOfFixes && !(meanAchieved && stdDevAchieved); i++)
+ {
+ TInt err = PerformSyncRequest(KService, &posInfo);
+
+ if (err != KErrNone)
+ {
+ LogErrorAndLeaveL(KError1);
+ }
+ TPosition myPos = TPosition();
+ posInfo.GetPosition(myPos);
+ TReal32 altitude = myPos.Altitude();
+ TReal64 latitude = myPos.Latitude();
+
+ TBuf<100> buf;
+ _LIT(KAltitude, "Altitude %g Lat: %g");
+ buf.Format(KAltitude, altitude, latitude);
+ INFO_PRINTF1(buf);
+
+ // calculate altitudeMean
+ altitudeSum += altitude;
+ altitudeMean = altitudeSum / i;
+
+ // calculate altitudeVariance
+ squaredAltitudeSum += altitude*altitude;
+ if (i > 1)
+ {
+ altitudeVariance = ((squaredAltitudeSum-(altitudeSum * altitudeSum / i)) / (i-1));
+ }
+
+ if (i > KMinNrOfFixes)
+ {
+ // Check altitudeMean
+ TReal res = Abs(altitudeMean - KMeanAltitude);
+
+ // Log
+ TBuf<100> buf;
+ _LIT(KRes, "Mean. Alt.: %.9g");
+ buf.Format(KRes, res);
+ INFO_PRINTF1(buf);
+
+ // Check
+ if (!meanAchieved &&
+ Abs(altitudeMean - KMeanAltitude) <= KAcceptedMeanError)
+ {
+ meanAchieved = ETrue;
+ _LIT(KRes1, "meanAchieved: ETrue");
+ INFO_PRINTF1(KRes1);
+
+ iMsg.Format(KMeanMsg, altitudeMean);
+ INFO_PRINTF1(iMsg);
+ }
+
+ // Check altitudeStdMean
+ if (!stdDevAchieved)
+ {
+ User::LeaveIfError(Math::Sqrt(altitudeStandardDeviation, altitudeVariance));
+
+ // Check standard deviation of altitude
+ TReal res = Abs(altitudeStandardDeviation - KVerticalAccuracy);
+
+ // Log
+ _LIT(KStdDev, "Std. Dev. Alt.: %.9g");
+ buf.Format(KStdDev, res);
+ INFO_PRINTF1(buf);
+
+ // Check
+ if (res <= KAcceptedStdError)
+ {
+ stdDevAchieved = ETrue;
+ _LIT(KRes1, "stdDevAchieved: ETrue");
+ INFO_PRINTF1(KRes1);
+
+ iMsg.Format(KStdDevMsg, altitudeStandardDeviation);
+ INFO_PRINTF1(iMsg);
+ }
+ }
+ }
+ }
+
+ // Log result
+ if (!meanAchieved || !stdDevAchieved)
+ {
+ if (!meanAchieved)
+ {
+ iMsg.Format(KMeanMsg, altitudeMean);
+ ERR_PRINTF1(iMsg);
+ }
+ if (!stdDevAchieved)
+ {
+ User::LeaveIfError(Math::Sqrt(altitudeStandardDeviation, altitudeVariance));
+ iMsg.Format(KStdDevMsg, altitudeStandardDeviation);
+ ERR_PRINTF1(iMsg);
+ }
+ User::Leave(KErrGeneral);
+ }
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestLongLatitudeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestLongLatitudeL()
+ {
+ const TInt KHorizontalAccuracy = 20;
+ const TReal64 KMeanLatitude = 78.338500;
+ const TReal64 KMeanLongitude = 56.338500;
+ // On earth surface KMetersPerDegree corresponds to an angle of 1 degree
+ // Following formula was used:
+ // KMetersPerDegree = 2*pi*R / 360, where R = radius of earth = 6371010 m
+ const TReal KMetersPerDegree = 111195.10117748393677876603122949;
+
+ _LIT(KMeanMsg, "Mean latitude and longitude was calculated to ; %10.7f ; %10.7f; respectively");
+ _LIT(KStdDevMsg, "Standard deviation of lat. and long. was calculated to ; %10.7f; %10.7f ; m resp.");
+
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationNoMove.sps");
+ //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationNoMove.sps");
+ //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+ // Set correct data file
+ SetSimDataFileL(KSimulationSource);
+
+ _LIT(KStart, "Testing TestLongLatitudeL()");
+ _LIT(KEnd, "TestLongLatitudeL() passed");
+ _LIT(KError1, "Error when requesting location");
+ INFO_PRINTF1(KStart);
+
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ TPositionInfo posInfo = TPositionInfo();
+
+ TReal longVar = 0, latVar = 0;
+ TReal longStdDev = 0, latStdDev = 0;
+ TReal longitudeSum = 0, latitudeSum = 0;
+ TReal sumOfSquaredLongitudes = 0, sumOfSquaredLatitudes = 0;
+ TReal longitudeMean = 0, latitudeMean = 0;
+ TBool meanValuesAchieved = EFalse, stdDevAchieved = EFalse;
+
+ // Request as many pos. fixes as necessary to achieve expected result
+ for (TInt i = 1; i <= KMaxNrOfFixes && !(meanValuesAchieved && stdDevAchieved); i++)
+ {
+ TInt err = PerformSyncRequest(KService, &posInfo);
+ if (err != KErrNone)
+ {
+ LogErrorAndLeaveL(KError1);
+ }
+
+ TPosition myPos = TPosition();
+ posInfo.GetPosition(myPos);
+
+ TReal64 longitude = myPos.Longitude();
+ TReal64 latitude = myPos.Latitude();
+
+ TBuf<100> buf;
+ _LIT(KLongLat, "Long %g Lat: %g");
+ buf.Format(KLongLat, longitude, latitude);
+ INFO_PRINTF1(buf);
+
+ // calculate longitudeMean
+ longitudeSum += longitude;
+ longitudeMean = longitudeSum / i;
+
+ // calculate latitudeMean
+ latitudeSum += latitude;
+ latitudeMean = latitudeSum / i;
+
+ const TInt KAcceptedMeanError = 2;
+ const TInt KAcceptedStdError = 4;
+
+ // calculate longitudeVariance and latitudeVariance
+ sumOfSquaredLongitudes += longitude*longitude;
+ sumOfSquaredLatitudes += latitude*latitude;
+ if (i > 1)
+ {
+ longVar = ((sumOfSquaredLongitudes-(longitudeSum * longitudeSum / i)) / (i-1));
+ latVar = ((sumOfSquaredLatitudes-(latitudeSum * latitudeSum / i)) / (i-1));
+ }
+
+ if (i > KMinNrOfFixes)
+ {
+ TReal meanLat = Abs(latitudeMean - KMeanLatitude) * KMetersPerDegree;
+ TReal meanLong = Abs(longitudeMean - KMeanLongitude) * KMetersPerDegree;
+
+ // Log
+ _LIT(KMeanLongLat, "Mean. Long %.9g, Mean. Lat: %.9g");
+ buf.Format(KMeanLongLat, meanLong, meanLat);
+ INFO_PRINTF1(buf);
+
+ // Check latitudeMean and longitudeMean
+ if (!meanValuesAchieved &&
+ Abs(latitudeMean - KMeanLatitude) * KMetersPerDegree <= KAcceptedMeanError &&
+ Abs(longitudeMean - KMeanLongitude) * KMetersPerDegree <= KAcceptedMeanError)
+ {
+ meanValuesAchieved = ETrue;
+ // Log purposes
+ iMsg.Format(KMeanMsg, Abs(latitudeMean - KMeanLatitude) * KMetersPerDegree, Abs(longitudeMean - KMeanLongitude) * KMetersPerDegree);
+
+ INFO_PRINTF1(iMsg);
+ }
+
+ if (!stdDevAchieved)
+ {
+ // Check standard deviation
+ User::LeaveIfError(Math::Sqrt(latStdDev, latVar));
+ User::LeaveIfError(Math::Sqrt(longStdDev, longVar));
+
+ // Log
+ TReal latDev = Abs(latStdDev * KMetersPerDegree - KHorizontalAccuracy);
+ TReal longDev = Abs(longStdDev * KMetersPerDegree - KHorizontalAccuracy);
+ _LIT(KStdLongLat, "Std.Dev. Long.: %.9g, Std.Dev. Lat.: %.9g");
+ buf.Format(KStdLongLat, longDev, latDev);
+ //INFO_PRINTF1(buf);
+
+ // Check
+ if (Abs(latStdDev * KMetersPerDegree - KHorizontalAccuracy) <= KAcceptedStdError &&
+ Abs(longStdDev * KMetersPerDegree - KHorizontalAccuracy) <= KAcceptedStdError)
+ {
+ stdDevAchieved = ETrue;
+ // Log purposes
+ iMsg.Format(KStdDevMsg, Abs(latStdDev * KMetersPerDegree - KHorizontalAccuracy), Abs(longStdDev * KMetersPerDegree - KHorizontalAccuracy));
+ INFO_PRINTF1(iMsg);
+ }
+ }
+ }
+ }
+
+ // Log result
+ if (!meanValuesAchieved || !stdDevAchieved)
+ {
+ if (!meanValuesAchieved)
+ {
+ iMsg.Format(KMeanMsg, latitudeMean, longitudeMean);
+ ERR_PRINTF1(iMsg);
+ }
+ if (!stdDevAchieved)
+ {
+ User::LeaveIfError(Math::Sqrt(latStdDev, latVar));
+ User::LeaveIfError(Math::Sqrt(longStdDev, longVar));
+ iMsg.Format(KStdDevMsg, latStdDev * KMetersPerDegree, longStdDev * KMetersPerDegree);
+ ERR_PRINTF1(iMsg);
+ }
+ User::Leave(KErrGeneral);
+ }
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestMovementL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CT_LbsSimulationPSYPosTp115::TestMovementL()
+ {
+ const TInt KNrOfFixes = 10;
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationPowerUp.sps");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationPowerUp.sps");
+#endif
+
+ // Set correct data file
+ SetSimDataFileL(KSimulationSource);
+
+ // Open simulationPSY
+ User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+ _LIT(KStart, "Testing TestMovementL()");
+ _LIT(KEnd, "TestMovementL() passed");
+ _LIT(KError1, "Error when requesting location");
+ INFO_PRINTF1(KStart);
+
+ // Make origin position request
+ TPositionInfo posInfo = TPositionInfo();
+ TInt err = PerformSyncRequest(KService, &posInfo);
+ if (err != KErrNone)
+ {
+ LogErrorAndLeaveL(KError1);
+ }
+
+ TPosition myPos = TPosition();
+ posInfo.GetPosition(myPos);
+ TTime timeOfFix = myPos.Time();
+ TReal64 longitude = myPos.Longitude();
+ TReal64 latitude = myPos.Latitude();
+
+ // Request the rest of the KMaxNrOfFixes pos. fixes with no
+ // errors and verify direction of movement
+ for (TInt i = 2; i <= KNrOfFixes; i++)
+ {
+ // save preceding values
+ TTime timeOfLastFix = timeOfFix;
+ TReal64 lastLongitude = longitude;
+ TReal64 lastLatitude = latitude;
+
+ // get new position info
+ TInt err = PerformSyncRequest(KService, &posInfo);
+ if (err != KErrNone)
+ {
+ LogErrorAndLeaveL(KError1);
+ }
+ posInfo.GetPosition(myPos);
+ longitude = myPos.Longitude();
+ latitude = myPos.Latitude();
+ timeOfFix = myPos.Time();
+
+ TTimeIntervalMicroSeconds fixTimeDiff = timeOfFix.MicroSecondsFrom(timeOfLastFix);
+ if (fixTimeDiff.Int64() <= 0)
+ {
+ _LIT(KErr, "Time difference between position fixes was non-positive");
+ LogErrorAndLeaveL(KErr);
+ }
+
+ // We are moving south-west at the norhern earth globe. Thus, Longitude
+ // should increase and latitude decrease. We don't care that the
+ // course changes dynamically as fixes are given. Speed is slow and course
+ // changes are small.
+ if (longitude <= lastLongitude)
+ {
+ _LIT(KErr, "Longitude was not increased as expected. Last longitude = %10.7f, current longitude = %10.7f");
+ iMsg.Format(KErr, lastLongitude, longitude);
+ LogErrorAndLeaveL(iMsg);
+ }
+ if (latitude >= lastLatitude)
+ {
+ _LIT(KErr, "Latitude was not decreased as expected. Last latitude = %10.7f, current latitude = %10.7f");
+ iMsg.Format(KErr, lastLatitude, latitude);
+ LogErrorAndLeaveL(iMsg);
+ }
+ }
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+ }
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestBadInputFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestBadInputFileL()
+ {
+ // This test tests only the syntax error caused by a misspelled parameter name.
+ // There are LOTS of other faults one can cause as developer. However, these
+ // are not tested here but should be tested in unit tests.
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationBadSyntax.sps");
+ _LIT(KSimulationSource1, "z:\\system\\test\\testdata\\simulationBadSyntax1.sps");
+ _LIT(KSimulationSource2, "z:\\system\\test\\testdata\\simulationBadSyntax2.sps");
+ _LIT(KSimulationSource3, "z:\\system\\test\\testdata\\simulationBadSyntax3.sps");
+ _LIT(KSimulationSource4, "z:\\system\\test\\testdata\\simulationBadSyntax4.sps");
+ _LIT(KSimulationSource5, "z:\\system\\test\\testdata\\simulationBadSyntax5.sps");
+ //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+ _LIT(KGarmin12cx, "z:\\system\\test\\testdata\\garmin12cxBadSyntax.nme");
+ //unused _LIT(KGarmin12cxIni, "z:\\system\\test\\testdata\\garmin12cxBadSyntax.ini");
+ _LIT(KGarmin3plus, "z:\\system\\test\\testdata\\garmin3plussatlost.nme");
+ //unused _LIT(KGarmin3plusIni, "z:\\system\\test\\testdata\\garmin3plussatlost.ini");
+ //unused _LIT(KWrongSimDataFileNameIni, "z:\\system\\test\\testdata\\WrongSimDataFileName.ini");
+ _LIT(KWrongSimDataFileNameSource, "z:\\system\\test\\testdata\\WrongSimDataFileName.txt");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationBadSyntax.sps");
+ _LIT(KSimulationSource1, "c:\\system\\test\\testdata\\simulationBadSyntax1.sps");
+ _LIT(KSimulationSource2, "c:\\system\\test\\testdata\\simulationBadSyntax2.sps");
+ _LIT(KSimulationSource3, "c:\\system\\test\\testdata\\simulationBadSyntax3.sps");
+ _LIT(KSimulationSource4, "c:\\system\\test\\testdata\\simulationBadSyntax4.sps");
+ _LIT(KSimulationSource5, "c:\\system\\test\\testdata\\simulationBadSyntax5.sps");
+ //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+ _LIT(KGarmin12cx, "c:\\system\\test\\testdata\\garmin12cxBadSyntax.nme");
+ //unused _LIT(KGarmin12cxIni, "c:\\system\\test\\testdata\\garmin12cxBadSyntax.ini");
+ _LIT(KGarmin3plus, "c:\\system\\test\\testdata\\garmin3plussatlost.nme");
+ //unused _LIT(KGarmin3plusIni, "c:\\system\\test\\testdata\\garmin3plussatlost.ini");
+ //unused _LIT(KWrongSimDataFileNameIni, "c:\\system\\test\\testdata\\WrongSimDataFileName.ini");
+ _LIT(KWrongSimDataFileNameSource, "c:\\system\\test\\testdata\\WrongSimDataFileName.txt");
+#endif
+
+ _LIT(KStart, "Testing TestBadInputFileL()");
+ _LIT(KEnd, "TestBadInputFileL() passed");
+ _LIT(KServiceName, "Service");
+ TInt errorsFound = KErrNone;
+
+ INFO_PRINTF1(KStart);
+ //Verification of error report EKJL-5M9JNF
+ CheckBadInputHelperL(KSimulationSource );
+ CheckBadInputHelperL(KSimulationSource1);
+ CheckBadInputHelperL(KSimulationSource2);
+ CheckBadInputHelperL(KSimulationSource3);
+ CheckBadInputHelperL(KSimulationSource4);
+ CheckBadInputHelperL(KSimulationSource5);
+
+ // Test that a .txt file generates error
+ SetSimDataFileL(KWrongSimDataFileNameSource);
+
+ TInt err = OpenPositionerByName(iUidSimulationPsy);
+
+ if (err == KErrNone)
+ {
+ _LIT(KErr, "ERROR: The data file with .txt name was unexpectedly successfully read");
+ INFO_PRINTF1(KErr);
+ errorsFound++;
+ ClosePositioner();
+ }
+
+ if (err != KErrNotSupported)
+ {
+ _LIT(KErr, "ERROR: The positioner returned wrong error, error code = %d");
+ iMsg.Format(KErr, err);
+ INFO_PRINTF1(iMsg);
+ errorsFound++;
+ }
+
+ // Test bad syntax for Garmin12cx below
+ // However not really bad syntax but causing problem in the SimPSY parser!
+ SetSimDataFileL(KGarmin12cx);
+
+ err = OpenPositionerByName(iUidSimulationPsy);
+ if (err != KErrNone)
+ {
+ _LIT(KErr, "ERROR: Simulation PSY could not be openend, error : %d");
+ TBuf<100> buf;
+ buf.Format(KErr, err);
+ INFO_PRINTF1(buf);
+ errorsFound++;
+ }
+
+ TPositionInfo posInfo = TPositionInfo();
+ // Request data from simulation psy
+ err = PerformSyncRequest(KServiceName, &posInfo);
+
+ // Behaviour changed in iteration 11 - KPositionQualityLoss has nothing to do with quality loss in PSY
+ _LIT(KReqError, "PerformSyncRequest should return KErrNone from SimPSY");
+ // The burst does not contain any position info and
+ // thus the quality factor should be 0
+ AssertTrueL(err == KErrNone, KReqError, err);
+
+ ClosePositioner();
+
+ // Test bad syntax for Garmin3plus below
+ // However not really bad syntax but causing problem in the SimPSY parser!
+ // Set data file
+ SetSimDataFileL(KGarmin3plus);
+
+ err = OpenPositionerByName(iUidSimulationPsy);
+ if (err != KErrNone)
+ {
+ _LIT(KErr, "ERROR: Simulation PSY could not be openend, error : %d");
+ TBuf<100> buf;
+ buf.Format(KErr, err);
+ INFO_PRINTF1(buf);
+ errorsFound++;
+ }
+
+ // Test nmea data when satellite data is lost as well as
+ // test that the simulationPSY starts over reading from file when EOF is reached
+ // 50 is enough to read through the whole file
+ //
+ for (TInt k=0;k<50;k++)
+ {
+ TPositionInfo posInfo2 = TPositionInfo();
+ // Request data from simulation psy
+ err = PerformSyncRequest(KServiceName, &posInfo2);
+
+ if (err != KErrNone)
+ {
+ if (err != KPositionQualityLoss)
+ {
+ _LIT(KErr, "PerformSyncRequest returned error other than KPositionQualityLoss, error: %d in burst nr: %d");
+ TBuf<100> buf;
+ buf.Format(KErr, err, k);
+ INFO_PRINTF1(buf);
+ errorsFound++;
+ }
+ }
+ }
+
+ ClosePositioner();
+ if (errorsFound != KErrNone)
+ {
+ _LIT(KErrorAndLeave, "Errors found in TestBadInputFileL");
+ LogErrorAndLeaveL(KErrorAndLeave);
+ }
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::CheckBadInputHelperL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::CheckBadInputHelperL(const TDesC& aSimulationSource)
+ {
+ // Set correct data file
+ SetSimDataFileL(aSimulationSource);
+
+ TInt err = OpenPositionerByName(iUidSimulationPsy);
+ if (err == KErrNone)
+ {
+ TPositionInfo posInfo = TPositionInfo();
+ // Request data from simulation psy
+ _LIT(KKallesService, "KallesService");
+ err = PerformSyncRequest(KKallesService, &posInfo);
+
+ if (err == KErrCorrupt)
+ {
+ _LIT(KInfoCorrupt, "********** Corrupt");
+ INFO_PRINTF1(KInfoCorrupt);
+ ClosePositioner();
+ }
+ else
+ {
+ ClosePositioner();
+ _LIT(KErr, "The simulation data file was unexpectedly successfully read");
+ LogErrorAndLeaveL(KErr);
+ }
+ }
+ if (err != KErrCorrupt)
+ {
+ _LIT(KErr, "The positioner was unable to read input file, error code = %d");
+ iMsg.Format(KErr, err);
+ LogErrorAndLeaveL(iMsg);
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestCorrectFixL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestCorrectFixL()
+ {
+ _LIT(KServiceName, "SAAA");
+ _LIT(KStart, "Testing TestCorrectFixL()");
+ _LIT(KEnd, "TestCorrectFixL() passed");
+ INFO_PRINTF1(KStart);
+
+ // Set correct data file
+ SetSimDataFileL(KFix10MagellanGPS315);
+
+ TInt err = OpenPositionerByName(iUidSimulationPsy);
+ if (err != KErrNone)
+ {
+ _LIT(KErr, "Simulation PSY could not be openend, error : %d");
+ TBuf<100> buf;
+ buf.Format(KErr, err);
+ LogErrorAndLeaveL(buf);
+ }
+
+ // The file contains 10 fixes, but 11 is read to ensure that the reading starts all over
+ // again
+ for (TInt k=1;k<12;k++)
+ {
+ TPositionInfo posInfo = TPositionInfo();
+ // Request data from simulation psy
+ err = PerformSyncRequest(KServiceName, &posInfo);
+ if (k == 11)
+ {
+ CheckPositionL(posInfo,1);
+ }
+ else
+ {
+ CheckPositionL(posInfo,k);
+ }
+ }
+
+ ClosePositioner();
+ INFO_PRINTF1(KEnd);
+
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestCorrectTimingAfterCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestCorrectTimingAfterCancelL()
+ {
+ TTimeIntervalMicroSeconds timetofixTime_MAX = TTimeIntervalMicroSeconds(8000000);
+ TTimeIntervalMicroSeconds timetofixTime_MIN = TTimeIntervalMicroSeconds(4000000);
+
+#ifdef __WINS__
+ _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationTimingAfterCancel.sps");
+ // unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+ _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationTimingAfterCancel.sps");
+ // unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+ _LIT(KStart, "Testing CorrectTimingAfterCancelL()");
+ _LIT(KEnd, "CorrectTimingAfterCancelL() passed");
+
+ INFO_PRINTF1(KStart);
+
+ // Set data file
+ SetSimDataFileL(KSimulationSource);
+
+ //Connecting to Position Server
+ _LIT(KConnectErr, "Error when connecing to Position Server, %d");
+ TInt err = iPosServer.Connect();
+ AssertTrueL(err == KErrNone, KConnectErr, err); //Leave if error
+
+ //Open Positioner Module
+ _LIT(KOpenErr, "Error when opening positioner, %d");
+ err = iPositioner.Open(iPosServer, iUidSimulationPsy);
+ AssertTrueL(err == KErrNone, KOpenErr, err); //Leave if error
+
+ //Set Requestor
+ _LIT(KServiceName3, "Some Name Uhh");
+ iPositioner.SetRequestor(CRequestor::ERequestorService,
+ CRequestor::EFormatApplication, KServiceName3);
+ //Request new position
+ TPositionInfo posInfo = TPositionInfo();
+ TRequestStatus status = KRequestPending;
+ iPositioner.NotifyPositionUpdate(posInfo, status);
+
+ User::After(2000000);
+ if(status.Int() != KRequestPending)
+ {
+ _LIT(KTooFastError, "PSY completed request too fast!");
+ TBuf<100> buf;
+ buf.Format(KTooFastError, KErrGeneral);
+ iPositioner.Close();
+ iPosServer.Close();
+ LogErrorAndLeaveL(buf);
+ }
+ else
+ {
+ err = iPositioner.CancelRequest(EPositionerNotifyPositionUpdate);
+ if (err != KErrNone)
+ {
+ _LIT(KCancelError, "Cancel of request failed!");
+ TBuf<100> buf;
+ buf.Format(KCancelError, err);
+ LogErrorAndLeaveL(buf);
+ }
+ }
+ User::WaitForRequest(status); //Wait for position request to complete
+
+ //check if request was cancelled
+ if(status.Int() != KErrCancel)
+ {
+ _LIT(KNoCancel, "Request was not cancelled!, error code = %d");
+ TBuf<100> buf;
+ buf.Format(KNoCancel, status.Int());
+ LogErrorAndLeaveL(buf);
+ }
+
+ TTime startTime;
+ TTime stopTime;
+
+ //Make another request
+ iPositioner.NotifyPositionUpdate(posInfo, status);
+
+ startTime.UniversalTime();
+ User::WaitForRequest(status);
+ stopTime.UniversalTime();
+
+ if(status.Int() != KErrNone)
+ {
+ iPositioner.Close();
+ iPosServer.Close();
+ _LIT(KSecondReqErr, "Second position request failed!, error code = %d");
+ TBuf<100> buf;
+ buf.Format(KSecondReqErr, status.Int());
+ LogErrorAndLeaveL(buf);
+ }
+
+ TTimeIntervalMicroSeconds requestTime = stopTime.MicroSecondsFrom(startTime);
+
+ //Check if request was performed within timeTofix_min and timeTofix_max
+ _LIT(KReqText, "Checking if request was performed within timeTofix_min(4s) and timeTofix_max(8s)->");
+ INFO_PRINTF1(KReqText);
+ TBuf<100> timeR;
+ timeR.Num(requestTime.Int64());
+ INFO_PRINTF1(timeR);
+ if(requestTime<timetofixTime_MIN)
+ {
+ _LIT(KRequestTimeErrMin, "Second request returned position too fast!");
+ TBuf<100> buf;
+ buf.Format(KRequestTimeErrMin, KErrGeneral);
+ LogErrorAndLeaveL(buf);
+ }
+ else if(requestTime>timetofixTime_MAX)
+ {
+ _LIT(KRequestTimeErrMax, "Second request returned position too slow!");
+ TBuf<100> buf;
+ buf.Format(KRequestTimeErrMax, KErrGeneral);
+ LogErrorAndLeaveL(buf);
+ }
+
+ //cleaning up the pieces...
+ iPositioner.Close();
+ iPosServer.Close();
+ INFO_PRINTF1(KEnd);
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::CheckPositionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::CheckPositionL(TPositionInfo& aPosInfo,TInt aFixNumber)
+ {
+ TPosition pos;
+ aPosInfo.GetPosition(pos);
+ TReal lat = pos.Latitude();
+ TReal lon = pos.Longitude();
+ TReal alt = pos.Altitude();
+ TReal horAcc = pos.HorizontalAccuracy();
+ TReal verAcc = pos.VerticalAccuracy();
+ TReal latComp = 0.0;
+ TReal lonComp = 0.0;
+ TReal altComp = 0.0;
+ TReal horAccComp = 0.0;
+ TReal verAccComp = 0.0;
+
+ _LIT(KFunctionName, "We are inside CheckPositionL()");
+ INFO_PRINTF1(KFunctionName);
+
+ switch (aFixNumber)
+ {
+ case 1:
+ {
+ horAccComp = KHdop1*10;
+ verAccComp = 1.5f*KHdop1*10;
+ latComp = ToCoordinate(KLat1(), KLatDir1());
+ lonComp = ToCoordinate(KLon1(), KLonDir1());
+ altComp = KAltitude1;
+ break;
+ }
+ case 2:
+ {
+ horAccComp = KHdop2*10;
+ verAccComp = 1.5f*KHdop2*10;
+ latComp = ToCoordinate(KLat2(), KLatDir2());
+ lonComp = ToCoordinate(KLon2(), KLonDir2());
+ altComp = KAltitude2;
+ break;
+ }
+ case 3:
+ {
+ horAccComp = KHdop3*10;
+ verAccComp = 1.5f*KHdop3*10;
+ latComp = ToCoordinate(KLat3(), KLatDir3());
+ lonComp = ToCoordinate(KLon3(), KLonDir3());
+ altComp = KAltitude3;
+ break;
+ }
+ case 4:
+ {
+ horAccComp = KHdop4*10;
+ verAccComp = 1.5f*KHdop4*10;
+ latComp = ToCoordinate(KLat4(), KLatDir4());
+ lonComp = ToCoordinate(KLon4(), KLonDir4());
+ altComp = KAltitude4;
+ break;
+ }
+ case 5:
+ {
+ horAccComp = KHdop5*10;
+ verAccComp = 1.5f*KHdop5*10;
+ latComp = ToCoordinate(KLat5(), KLatDir5());
+ lonComp = ToCoordinate(KLon5(), KLonDir5());
+ altComp = KAltitude5;
+ break;
+ }
+ case 6:
+ {
+ horAccComp = KHdop6*10;
+ verAccComp = 1.5f*KHdop6*10;
+ latComp = ToCoordinate(KLat6(), KLatDir6());
+ lonComp = ToCoordinate(KLon6(), KLonDir6());
+ altComp = KAltitude6;
+ break;
+ }
+ case 7:
+ {
+ horAccComp = KHdop7*10;
+ verAccComp = 1.5f*KHdop7*10;
+ latComp = ToCoordinate(KLat7(), KLatDir7());
+ lonComp = ToCoordinate(KLon7(), KLonDir7());
+ altComp = KAltitude7;
+ break;
+ }
+ case 8:
+ {
+ horAccComp = KHdop8*10;
+ verAccComp = 1.5f*KHdop8*10;
+ latComp = ToCoordinate(KLat8(), KLatDir8());
+ lonComp = ToCoordinate(KLon8(), KLonDir8());
+ altComp = KAltitude8;
+ break;
+ }
+ case 9:
+ {
+ horAccComp = KHdop9*10;
+ verAccComp = 1.5f*KHdop9*10;
+ latComp = ToCoordinate(KLat9(), KLatDir9());
+ lonComp = ToCoordinate(KLon9(), KLonDir9());
+ altComp = KAltitude9;
+ break;
+ }
+ case 10:
+ {
+ horAccComp = KHdop10*10;
+ verAccComp = 1.5f*KHdop10*10;
+ latComp = ToCoordinate(KLat10(), KLatDir10());
+ lonComp = ToCoordinate(KLon10(), KLonDir10());
+ altComp = KAltitude2;
+ break;
+ }
+ }
+
+ if( lat != latComp ||
+ lon != lonComp ||
+ alt != altComp ||
+ horAcc != horAccComp ||
+ verAcc != verAccComp)
+ {
+ _LIT(KErrPosition, "Wrong Postion from SimPSY:n, pos number = %d");
+ TBuf<100> buf;
+ buf.Format(KErrPosition, aFixNumber);
+ LogErrorAndLeaveL(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::ToCoordinate
+// used for creating simulation PSY settings files
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal CT_LbsSimulationPSYPosTp115::ToCoordinate(
+ const TDesC8& aDes, const TDesC8& aDir)
+ {
+ const TInt KPosMinutesIntegerLength = 2;
+ const TReal KPosMinutesPerDegree = 60.0;
+ const signed int KCoordTokenS = 'S';
+ const signed int KCoordTokenW = 'W';
+ const signed int KCoordTokenDot = '.';
+
+ TInt point = aDes.Locate(KCoordTokenDot);
+
+ TInt deg = DesToInt(aDes.Left(point - KPosMinutesIntegerLength));
+ TReal min = DesToReal(aDes.Mid(point - KPosMinutesIntegerLength));
+ TReal coordinate = TReal(deg) + min / KPosMinutesPerDegree;
+
+ if (aDir[0] == KCoordTokenS || aDir[0] == KCoordTokenW)
+ {
+ coordinate = - coordinate;
+ }
+ return coordinate;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::DesToInt
+// used for creating simulation PSY settings files
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CT_LbsSimulationPSYPosTp115::DesToInt(const TPtrC8& aDes)
+ {
+ TLex8 lexer(aDes);
+ TInt integer;
+
+ lexer.Val(integer);
+ return integer;
+ }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::DesToReal
+// used for creating simulation PSY settings files
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal CT_LbsSimulationPSYPosTp115::DesToReal(const TPtrC8& aDes)
+ {
+ TLex8 lexer(aDes);
+ TReal realNumber;
+
+ lexer.Val(realNumber, TChar('.'));
+ return realNumber;
+ }
+
+void CT_LbsSimulationPSYPosTp115::ReplaceSwitchInTrapL(TInt aIndex)
+ {
+ const TDesC *NMEASource[KNrOfNMEATypes] = {&KMagellanGPS315,
+ &KMagellanTracker,
+ &KGarmin12cx,
+ &KGarmin3plus,
+ &KGarminetrexlegend,
+ &KMagellanMeridian};
+
+ switch (aIndex)
+ {
+ case 0 :
+ {
+ for (TInt i=0; i<KNrOfNMEATypes;i++)
+ {
+ TestSimulationNmeaReaderL(*NMEASource[i]);
+ }
+ }
+ break;
+ case 1 : TestPowerUpTimeL(); break;
+ case 2 : TestTimeToFixL(); break;
+ case 3 : TestDeterministicFailureL(); break;
+ case 4 : TestRandomFailureL(); break;
+ case 5 : TestAltitudeL(); break;
+ case 6 : TestLongLatitudeL(); break;
+ case 7 : TestMovementL(); break;
+ case 8 : TestBadInputFileL(); break;
+
+ case 9:
+ {
+ for (TInt i=0; i<KNrOfNMEATypes;i++)
+ {
+ Extended1TestSimulationNmeaReaderL(*NMEASource[i]);
+ }
+ }
+ break;
+ case 10:
+ {
+ for (TInt i=0; i<KNrOfNMEATypes;i++)
+ {
+ Extended2TestSimulationNmeaReaderL(*NMEASource[i]);
+ }
+ }
+ break;
+ case 11: TestCorrectFixL(); break;
+ case 12: TestCorrectTimingAfterCancelL(); break;
+
+ }
+ }
+// End of File