lbstest/lbstestproduct/lbshybridmultiple/src/clbstestmolrsessionsequence.cpp
changeset 0 9cfd9a3ee49c
child 18 54d74d217042
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/lbshybridmultiple/src/clbstestmolrsessionsequence.cpp	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,206 @@
+// 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: Stores information for a MOLR test sequence
+// 
+//
+
+#include "clbstestmolrsessionsequence.h"
+
+/** 2nd Phase constructor
+ */
+CTestMolrSessionSequence* CTestMolrSessionSequence::NewL(CLbsTestNgMessageHandler& aNgProxy, MHybridMultipleTestCallBack& aTestCallback,
+		TInt aSequenceNum, const TDesC& aConfigFileName, const TDesC& aConfigSection)
+	{
+	CTestMolrSessionSequence* self = new (ELeave) CTestMolrSessionSequence(aNgProxy, aTestCallback);
+	CleanupStack::PushL(self);
+	self->ConstructL(aSequenceNum, aConfigFileName, aConfigSection);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+/** Destructor
+ */
+CTestMolrSessionSequence::~CTestMolrSessionSequence()
+	{
+	if(iSetupPsy)
+		{
+		iPos.Close();
+		iPosServer.Close();
+		delete iPosWatcher;
+		}
+	}
+	
+/** Standard C Constructor
+ */
+CTestMolrSessionSequence::CTestMolrSessionSequence(CLbsTestNgMessageHandler& aNgProxy, MHybridMultipleTestCallBack& aTestCallback) 
+: CTestSessionSequence(aNgProxy, aTestCallback),
+iSetupPsy(EFalse)
+	{
+	}
+	
+/** Second phase construction
+ */
+void CTestMolrSessionSequence::ConstructL(TInt aSequenceNum, const TDesC& aConfigFileName, const TDesC& aConfigSection)
+	{
+    CTestSessionSequence::ConstructL(aSequenceNum, aConfigFileName, aConfigSection);
+    iTestCallback.LogTestStatement(_L("Type = MOLR"));
+
+    // Default to NULL
+    iPsyUid = TUid::Null();        
+    
+    const TInt KMaxHexStringSize = 10;// enough for 0x12345678
+    TBuf<KMaxHexStringSize> hexBuffer;
+    TPtrC ptr;
+    ptr.Set(hexBuffer);
+    
+    // Find out what PSY to use
+    TBuf<10> psyUidName;
+    psyUidName.Format(_L("PsyUid%d"), iSequenceId);
+    if (iIniFile->FindVar(aConfigSection, psyUidName, ptr))
+        {
+        // strip any leading "0x" or "0X"
+        if(ptr[0] == TChar('0') && (ptr[1] == TChar('X') || ptr[1] == TChar('x')))
+            {
+            // leading "0x" encoded. So strip
+            hexBuffer = ptr.Right(ptr.Length()-2);
+            }
+        else
+            {
+            hexBuffer = ptr;
+            }
+        TLex lex(hexBuffer);
+        TUint32 uid;
+        if (lex.Val(uid, EHex) == KErrNone)
+            {
+            iPsyUid = TUid::Uid(uid);
+            }
+        else
+            {
+            LogTestStatement(_L("Invalid PsyUid setting: %s"),1,&ptr);
+            }
+        }
+    
+    if (iPsyUid == TUid::Null())
+        {
+        iTestCallback.LogTestStatement(_L("Using default PSY"));
+        }
+    else
+        {
+        LogTestStatement(_L("Using PSY %x"), 1, iPsyUid.iUid);        
+        }
+    
+    iTestCallback.LogTestStatement(_L("-----------------------------------------------------------------------"));
+	}
+
+/** Sets up the PSY (RPositioner)
+ */
+void CTestMolrSessionSequence::SetupPsy()
+	{
+	TInt err = iPosServer.Connect();
+
+	if (iPsyUid == TUid::Null())
+	    {
+	    err = iPos.Open(iPosServer);
+	    }
+	else 
+	    {
+	    err = iPos.Open(iPosServer, TPositionModuleId(iPsyUid));
+	    }
+			
+	TPositionUpdateOptions posOpts(TTimeIntervalMicroSeconds(0), TTimeIntervalMicroSeconds(240 * 1000 * 1000));
+	iPos.SetUpdateOptions(posOpts);
+	
+	iPosWatcher = CPosServerWatcher::NewLC(iPos, *this);
+	CleanupStack::Pop(iPosWatcher);
+	
+	iSetupPsy = ETrue;
+	}
+
+/* << Request Location Update
+ */
+void CTestMolrSessionSequence::RequestLocationUpdate()
+	{
+	if(!iSetupPsy)
+		{
+		SetupPsy();
+		}
+		
+	iPosWatcher->IssueNotifyPositionUpdate();
+	}
+
+/* << ProcessLocationRequest()
+ */
+void CTestMolrSessionSequence::SendProcessLocationRequest()
+	{
+	TBool emergency = EFalse;
+	MLbsNetworkProtocolObserver::TLbsNetProtocolService	service = MLbsNetworkProtocolObserver::EServiceSelfLocation;
+	TLbsNetPosRequestQuality quality = ArgUtils::Quality();
+	TLbsNetPosRequestMethod method   = ArgUtils::RequestHybridMethod();
+	iNgProxy.ProtocolProxy()->CallL(ENetMsgProcessLocationRequest, &iSessionId, &emergency, &service, &quality, &method);
+	}
+
+/* << ProcessStatusUpdate()
+ */
+void CTestMolrSessionSequence::SendProcessStatusUpdate()
+	{
+	MLbsNetworkProtocolObserver::TLbsNetProtocolServiceMask activeServiceMask = MLbsNetworkProtocolObserver::EServiceSelfLocation;
+	iNgProxy.ProtocolProxy()->CallL(ENetMsgProcessStatusUpdate, &activeServiceMask);
+	}
+
+/* >> SelfLocationRequest()
+ */
+void CTestMolrSessionSequence::CheckSelfLocationRequest(TLbsNetSessionId* aSessionId)
+	{
+	//Extract the Session ID and assign it to this sequence
+	iSessionId.SetSessionNum(aSessionId->SessionNum());
+	iSessionId.SetSessionOwner(aSessionId->SessionOwner());
+	}
+
+
+/* >> NetworkLocationRequest()
+ */
+void CTestMolrSessionSequence::CheckNetworkLocationRequest(TLbsNetSessionId* aSessionId)
+    {
+    //Extract the Session ID and assign it to this sequence
+    iSessionId.SetSessionNum(aSessionId->SessionNum());
+    iSessionId.SetSessionOwner(aSessionId->SessionOwner());
+    }
+
+
+/** MPosServerObserver callback when LastKnownPosition is called 
+ */
+void CTestMolrSessionSequence::OnGetLastKnownPosition(TInt32 aErr, const TPositionInfoBase& /*aPosInfo*/)
+	{
+	LogTestStatement(_L("-> LastKnownPosition(%d) [5001] Sq: %d"), 2, aErr, iSequenceId);
+		
+	//Check to see whether this was required in the current sequence
+	if(iStateSequence[iCurrentPosition] == EGetLastKnownLocation)
+		{
+		SignalCallbackIdleStart();
+		}
+	}
+
+/** MPosServerObserver callback when NotifyPositionUpdate is called
+ */
+void CTestMolrSessionSequence::OnNotifyPositionUpdate(TInt32 aErr, const TPositionInfoBase& aPosInfo)
+	{
+	LogTestStatement(_L("-> NotifyPositionUpdate(%d) [5000] Sq: %d"), 2, aErr, iSequenceId);
+	
+	const TPositionInfo posInfo = static_cast<const TPositionInfo&>(aPosInfo);
+	
+	//Check to see whether this was required in the current sequence
+	if(iStateSequence[iCurrentPosition] == ENotifyPositionUpdate)
+		{
+		SignalCallbackIdleStart();
+		}
+	}