lbstest/lbstestproduct/lbssimulationpsy/src/ctlbssimulationpsypostp254.cpp
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/lbssimulationpsy/src/ctlbssimulationpsypostp254.cpp	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,390 @@
+// 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 "ctlbssimulationpsypostp254.h"
+#include "ctlbssimulationpsypostp242constants.h"
+
+// CONSTANTS
+_LIT(KServiceName, "TP254");
+
+#ifdef __WINS__
+    _LIT(KNmeaFile,         "z:\\system\\test\\testdata\\tp242.nme");           // Full fix
+    _LIT(KPartialNmeaFile,  "z:\\system\\test\\testdata\\TP254Partial.nme");    // Missing longitude
+    _LIT(KPartialNmeaFile2, "z:\\system\\test\\testdata\\TP254Partial2.nme");   // Missing latitude
+    _LIT(KPartialNmeaFile3, "z:\\system\\test\\testdata\\TP254Partial3.nme");   // Full fix
+    _LIT(KPartialNmeaFile4, "z:\\system\\test\\testdata\\TP254Partial4.nme");   // Missing longitude and latitude 
+    _LIT(KPartialNmeaFile5, "z:\\system\\test\\testdata\\TP254Partial5.nme");   // Missing longitude, latitude 
+    // Contains 8 locations fixes: 
+    // 1-full, 2-partial, 3-full, 4-partial, 5-partial(missing GGA), 6-full, 7-partial(missing GGA), 8-full 
+    _LIT(KPartialNmeaFile6, "z:\\system\\test\\testdata\\TP254Partial6.nme");   
+    
+#else
+    _LIT(KNmeaFile,         "c:\\system\\test\\testdata\\tp242.nme");           
+    _LIT(KPartialNmeaFile,  "c:\\system\\test\\testdata\\TP254Partial.nme");    
+    _LIT(KPartialNmeaFile2, "c:\\system\\test\\testdata\\TP254Partial2.nme");   
+    _LIT(KPartialNmeaFile3, "c:\\system\\test\\testdata\\TP254Partial3.nme");   
+    _LIT(KPartialNmeaFile4, "c:\\system\\test\\testdata\\TP254Partial4.nme");   
+    _LIT(KPartialNmeaFile5, "c:\\system\\test\\testdata\\TP254Partial5.nme");
+    _LIT(KPartialNmeaFile6, "c:\\system\\test\\testdata\\TP254Partial6.nme");
+    
+#endif
+
+const TInt KTimeOut = 3000000;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------
+CT_LbsSimulationPSYPosTp254::CT_LbsSimulationPSYPosTp254(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
+	{
+	_LIT(KTestName, "TP254 - Partial update");
+	SetTestStepName(KTestName);
+	}
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsSimulationPSYPosTp254::~CT_LbsSimulationPSYPosTp254()
+	{
+	}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp254::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp254::StartL()
+    {    	
+	_LIT(KConnectErr, "Error when connecting to Position Server,  %d");
+    _LIT(KNotifyErr, "NotifyPositionUpdate returns err %d when expected KErrNone");
+    _LIT(KPartialErr, "NotifyPositionUpdate returns err %d when expected KPositionPartialUpdate");
+    _LIT(KTimedOutErr, "NotifyPositionUpdate returns err %d when expected KErrTimedOut");   
+    
+    TInt err = iPosServer.Connect();
+	AssertTrueL(err == KErrNone, KConnectErr, err); 
+
+    SetupPsyL(iUidSimulationPsy);
+    TPositionInfo posInfo;
+    
+    
+    SetFileInUseL(KPartialNmeaFile, EFalse);
+    SetUpdateTimeOutL(KTimeOut);
+    
+    err = Request(posInfo);
+    AssertTrueL(err == KErrTimedOut, KTimedOutErr, err); // Since partial not accepted
+    
+    SetFileInUseL(KNmeaFile);
+    posInfo = TPositionInfo();
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone, KNotifyErr, err);    
+    CheckTPositionInfoL(posInfo, ENone);
+    
+    SetFileInUseL(KPartialNmeaFile);
+    posInfo = TPositionInfo();
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELongitude);
+    
+    SetFileInUseL(KPartialNmeaFile2);
+    posInfo = TPositionInfo();
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELatitude);
+    
+    SetFileInUseL(KPartialNmeaFile3);
+    posInfo = TPositionInfo();
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone, KNotifyErr, err);
+    CheckTPositionInfoL(posInfo, ENone);
+    
+    SetFileInUseL(KPartialNmeaFile4);
+    posInfo = TPositionInfo();
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELongitude | ELatitude | ETimeStamp);
+    
+    SetFileInUseL(KPartialNmeaFile5);
+    posInfo = TPositionInfo();
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELongitude | ELatitude | ETimeStamp);
+    
+    SetFileInUseL(KPartialNmeaFile6);
+    SetUpdateTimeOutL(KTimeOut);
+    posInfo = TPositionInfo();
+    
+    // 1
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone, KNotifyErr, err);
+    CheckTPositionInfoL(posInfo, ENone);
+    
+    // 2
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELongitude);
+    
+    // 3
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone, KNotifyErr, err);
+    CheckTPositionInfoL(posInfo, ENone);
+    
+    // 4
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELatitude);
+     
+    // 5
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELatitude | ELongitude | ETimeStamp | EAltitude);
+    
+    // 6
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone, KNotifyErr, err);
+    CheckTPositionInfoL(posInfo, ENone);
+    
+    // 7
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELatitude | ELongitude | ETimeStamp | EAltitude);
+    
+    // 8
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone, KNotifyErr, err);
+    CheckTPositionInfoL(posInfo, ENone);
+     
+    // 9 The NMEA file is parsed from the beginning 
+    SetPartialUpdateL(EFalse);
+    
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone, KNotifyErr, err);
+    CheckTPositionInfoL(posInfo, ENone);
+
+    // 10 - skipped by PSY since partial and partial not allowed
+    // 11
+    err = Request(posInfo);
+    AssertTrueL(err == KErrNone,KNotifyErr, err); // Since partial not accepted
+    CheckTPositionInfoL(posInfo, ENone);
+        
+    // 12
+    SetPartialUpdateL(ETrue);
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELatitude);
+
+    // 13
+    err = Request(posInfo);
+    AssertTrueL(err == KPositionPartialUpdate, KPartialErr, err);
+    CheckTPositionInfoL(posInfo, ELatitude | ELongitude | ETimeStamp | EAltitude);
+
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp254::CloseTest()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp254::CloseTest()
+	{
+    iPositioner.Close();
+	iPosServer.Close();
+	}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp254::RequestL()
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CT_LbsSimulationPSYPosTp254::Request(TPositionInfoBase& aPositionInfo)
+	{
+	_LIT(KFunctionName, "We are inside Request()");
+	INFO_PRINTF1(KFunctionName);
+    iPositioner.NotifyPositionUpdate(aPositionInfo, iStatus);
+    User::WaitForRequest(iStatus);
+    
+    return iStatus.Int();
+    }
+    
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp254::CheckTPositionInfo()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp254::CheckTPositionInfoL(const TPositionInfo& aPosInfo, TMissingPositionData aMissingData)
+    {
+    _LIT(KLongitudeErr, "Longitude is incorrect in TPositionInfo");
+    _LIT(KLatitudeErr, "Latitude is incorrect in TPositionInfo");
+    _LIT(KHorizontalErr, "Horizontal Accuracy is incorrect in TPositionInfo");
+    _LIT(KVerticalErr, "Vertical Accuracy is incorrect in TPositionInfo");
+    _LIT(KAltitudeErr, "Altitude is incorrect in TPositionInfo");
+    _LIT(KTimeErr, "Time is incorrect in TPositionInfo");
+
+    TPosition pos;
+	aPosInfo.GetPosition(pos);
+	TBool fullFix = ETrue;
+
+    if (aMissingData & ELongitude)
+        {
+        AssertTrueL(Math::IsNaN(pos.Longitude()), KLongitudeErr, KErrGeneral);
+        fullFix = EFalse;
+        }
+    else
+        {
+        AssertTrueL(pos.Longitude() == KLongitude, KLongitudeErr, KErrGeneral);
+        }
+    if (aMissingData & ELatitude)
+        {
+        AssertTrueL(Math::IsNaN(pos.Latitude()), KLatitudeErr, KErrGeneral);
+        fullFix = EFalse;
+        }
+    else
+        {
+        AssertTrueL(pos.Latitude() == KLatitude, KLatitudeErr, KErrGeneral);
+        }
+    if (aMissingData & ETimeStamp)
+        {
+        AssertTrueL(pos.Time().Int64() == 0, KTimeErr, KErrGeneral); 
+        fullFix = EFalse;
+        }
+
+	if (aMissingData & EAltitude)
+        {
+        AssertTrueL(Math::IsNaN(pos.Altitude()), KAltitudeErr, KErrGeneral);
+        _LIT(KIsNaN, "Altitude IsNaN");
+        INFO_PRINTF1(KIsNaN);
+        fullFix = EFalse;
+        }
+    else
+        {
+        AssertTrueL(pos.Altitude() == KAltitude, KAltitudeErr, KErrGeneral);
+        }
+        	    
+    AssertTrueL(pos.HorizontalAccuracy() == KHorizontalAcc, KHorizontalErr, KErrGeneral);
+    AssertTrueL(pos.VerticalAccuracy() == KVerticalAcc, KVerticalErr, KErrGeneral);
+    
+   	if (fullFix) 
+   		{
+   		_LIT(KFullFix, "Read fullFix");
+   		INFO_PRINTF1(KFullFix);
+   		}
+	else 
+		{
+		_LIT(KPartialUpdate, "Read partial update");
+		INFO_PRINTF1(KPartialUpdate);
+		}
+    
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp254::SetFileInUse()
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp254::SetFileInUseL(const TDesC& aFileName, TBool aPartial)
+    {
+    _LIT(KOpenErr, "Error when opening positioner,  %d");
+    _LIT(KSetUpdateOptionsErr, "Error %d when setting update options");
+    
+    iPositioner.Close();
+    SetSimDataFileL(aFileName); 
+
+    TInt err;
+    err = iPositioner.Open(iPosServer, iUidSimulationPsy);
+    AssertTrueL(err == KErrNone, KOpenErr, err);
+    
+    iPositioner.SetRequestor(CRequestor::ERequestorService,
+							CRequestor::EFormatApplication, KServiceName);
+
+    TPositionUpdateOptions posOption;
+	posOption.SetAcceptPartialUpdates(aPartial);
+	        
+	err = iPositioner.SetUpdateOptions(posOption);    
+    AssertTrueL(err == KErrNone, KSetUpdateOptionsErr, err);
+    
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp254::SetPartialUpdateL()
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp254::SetPartialUpdateL(TBool aPartial)
+    {
+    _LIT(KSetUpdateOptionsErr, "Error %d when setting update options");
+
+    TPositionUpdateOptions posOption;
+    iPositioner.GetUpdateOptions(posOption);
+
+	posOption.SetAcceptPartialUpdates(aPartial);
+	        
+	TInt err = iPositioner.SetUpdateOptions(posOption);    
+    AssertTrueL(err == KErrNone, KSetUpdateOptionsErr, err);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp254::SetUpdateTimeOutL()
+// 
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp254::SetUpdateTimeOutL(const TInt& aInterval)
+    {
+    _LIT(KSetUpdateOptionsErr, "Error %d when setting update options");
+
+    TPositionUpdateOptions posOption;
+    iPositioner.GetUpdateOptions(posOption);
+    
+	posOption.SetUpdateTimeOut(TTimeIntervalMicroSeconds(aInterval));
+	        
+	TInt err = iPositioner.SetUpdateOptions(posOption);    
+    AssertTrueL(err == KErrNone, KSetUpdateOptionsErr, err);
+    }
+    
+// ---------------------------------------------------------
+// TNmeaSentenceParser::PrintChecksum
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp254::PrintChecksum(const TDesC8& aSentence)
+    {
+    TUint8 checksum = 0;
+    
+    TInt i;
+    for (i = 1; i < aSentence.Length() && aSentence[i] != '*'; i++)
+        {
+        checksum ^= aSentence[i];
+        }
+
+    TUint8 lsb = (TUint8)(checksum & 0x0f);
+    TUint8 msb = (TUint8)(checksum >> 4); 
+   
+    _LIT(KStatus, "Checksum field  = %x%x");
+    TBuf<32> info;
+    info.Format(KStatus, msb, lsb);
+	RDebug::Print(info);
+    }
+
+//  End of File