common/tools/ats/smoketest/lbs/common/src/ctlbsstepconfighybridmodule.cpp
changeset 748 e13acd883fbe
child 872 17498133d9ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/lbs/common/src/ctlbsstepconfighybridmodule.cpp	Tue Nov 10 13:50:58 2009 +0000
@@ -0,0 +1,282 @@
+// Copyright (c) 2007-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:
+// This is the class implementation for the configuration of the AGPS Hybrid Module
+// The main purpose of this test step is to allow flexible configurability of the AGps Hybrid Module
+// from the Test Harness.
+// Various configuration options are read from the ini files and sent to the AGps Hybrid Module through the TH channel.
+// The AGps Hybrid Module always acknowledges each configuration message (see ProcessAGpsResponseMessage() method below).
+// This test step has been written to understand '.ini' files containing sections such as [Config2] below:
+// [Config2]
+// agps_module_update_file = c:\testdata\configs\lbs_molr.ini
+// agps_module_multi_updates_opt = on
+// agps_module_assistance_data_opt= on
+// $update,1,2,49.2,NAN,NAN,2,3*
+// $update,1,2,49.2,NAN,NAN,2,3*
+// $update,1,2,49.2,3.5,50,2,3*
+// => Current module possible options are:
+// agps_module_multi_updates_opt = [ on | off ]
+// It sets the module to send multiple updates after Target Time.
+// - When this mode is "off" only one update is sent just after 'Target time' (that is, the next update item available 
+// from the module's update array).
+// - When this mode is "on", the module sends N + 1 updates between 'Target time' and 'Max fix time'
+// (currently hardcoded -> N = 2).
+// The final update is the next update item available from the module's update array.
+// The module calculates the first N updates from the final update, these updates contain incomplete
+// positions (NAN longitude and latitude, ...). 
+// Note:'Target time' specifies the time when the location update should be provided by the AGPS module.
+// 'Max fix time' specifies the time maximum time the module should spend calculating the current location.
+// agps_module_assistance_data_opt = [ on | off ]
+// Only applicable when in Preferred Terminal Mode. 
+// - When this mode is "on", for each new location request the AGps Module may Request new Assistance Data
+// (if it has not been delivered already, sometimes assistance data is delivered to the module before it is requested).
+// - When this mode is off, the default RequestAssistanceData(EAssistanceDataNone) call will always be made.		
+// agps_module_dynamic_ass_data_opt = [ on | off ] (off by default)
+// Switches between different assistance data delivery methods:
+// -> OFF - On the first RequestAssistanceData requests the assistance data aDataMask is always set to
+// the assistance data that it needs.  However for all subsequent assistance data requests the
+// aDataMask will always be set to 0.  This is the method used in all the hybrid tests.
+// -> ON - Here the module will always request any assistance data that it has not yet received. So on
+// the first assistanceData request the aDataMask is set to the assistance data it requires.  On
+// subsequent assistance data requests it will re-request the assistance data that has not yet
+// been delivered.  This is the method that should be used in SUPL tests.
+// agps_module_clear_all_opt = [ on | off ]
+// Sets all the possible module options to on.
+// agps_module_set_all_opt = [ on | off ]
+// Sets all the possible module options to off.
+// => $update command: 
+// The $update entries in the ini files are used to populate the AGps Hybrid Module update array.
+// Note: The Module's update array contains the update items used to generate the updates sent to the AGps Manager.
+// The $update command syntax should be as follows:
+// $update,num_of_updates,[num_of_measurements],[latitude],[longitude],[altitude],[horz_accuracy],[vert_accuracy],[update_err]*
+// - where num_of_updates is the number of updates to add to the update array. For values greater than 1, each update
+// will contain the same data position and measurement data as defined by the reminder of the sentence.
+// - where num_of_measurements is the number of satellite measurements to define (see TPositionGpsMeasurementData). 
+// If this value is 0 no measurement data is defined and only the position data is defined. 
+// Values for the actual measurement data will be generated automatically.
+// - where latitude, longitude, altitude, horz_accuracy, vert_accuracy are used to define the values for the 
+// TPositionInfo part of the TPositionSatelliteInfo.
+// - where update_err, is the error code to return to the manager for the update. If NOT defined the value will be KErrNone.
+// => Possible Enhancements: This test step might be enhanced later on to also additional functionality such as:
+// agps_module_update_error = -1
+// agps_module_update_timeout = 5000000
+// agps_module_multi_updates_opt = 2	// where 2 is the number of multi updates sent before  
+// // the final update is sent prior to 'Max fix time'
+// 
+//
+
+
+ 
+#include "ctlbsstepconfighybridmodule.h"
+
+#include "tlbsutils.h"
+
+
+_LIT(KUpdateFile, "agps_module_update_file");
+_LIT(KClearAllOpt, "agps_module_clear_all_opt");
+_LIT(KAssistanceDataOpt, "agps_module_assistance_data_opt");
+_LIT(KMultiUpdateOpt, "agps_module_multi_updates_opt");
+_LIT(KReqAssDatReqOpt, "agps_module_req_ass_data_req_opt");
+_LIT(KSetAllOpt, "agps_module_set_all_opt");
+_LIT(KSuplAssDataOpt, "agps_module_dynamic_ass_data_opt");
+_LIT(KUpdateTimeout, "agps_module_update_timeout");
+_LIT(KOption_OFF, "off");
+_LIT(KOption_ON, "on");
+_LIT(KNoFileName, "");
+
+
+/**
+ * Constructor
+ */
+CT_LbsStep_ConfigHybridModule::CT_LbsStep_ConfigHybridModule(CT_LbsServer& aParent) : CT_LbsStep(aParent)
+	{
+	SetTestStepName(KLbsStep_ConfigHybridModule);
+	}
+
+
+/**
+Static Constructor
+*/
+CT_LbsStep_ConfigHybridModule* CT_LbsStep_ConfigHybridModule::New(CT_LbsServer& aParent)
+	{
+	return new CT_LbsStep_ConfigHybridModule(aParent);
+	// Note the lack of ELeave.
+	// This means that having insufficient memory will return NULL;
+	}
+
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+TVerdict CT_LbsStep_ConfigHybridModule::doTestStepPreambleL()
+	{
+	INFO_PRINTF1(_L("Test Preamble. CT_LbsStep_ConfigHybridModule"));
+
+	// create the test channel handler
+	iAGpsHandler = CT_LbsAGpsHandler::NewL(this);
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+TVerdict CT_LbsStep_ConfigHybridModule::doTestStepPostambleL()
+	{
+	INFO_PRINTF1(_L("Test Postamble. CT_LbsStep_ConfigHybridModule"));
+
+	delete iAGpsHandler;
+	iAGpsHandler = NULL;
+		
+	return TestStepResult();
+	}
+	
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+TVerdict CT_LbsStep_ConfigHybridModule::doTestStepL()
+	{
+	INFO_PRINTF1(_L(">>CT_LbsStep_ConfigHybridModule::doTestStepL()")); // ??
+
+	if (TestStepResult() == EPass)
+		{
+		TPtrC configFileName;
+		GetStringFromConfig(ConfigSection(), KUpdateFile, configFileName);
+		if (configFileName != KNoFileName)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestUpdateInitMsg(configFileName, ConfigSection());		
+			}
+						
+		TPtrC clearAllOpt;
+		GetStringFromConfig(ConfigSection(), KClearAllOpt, clearAllOpt);
+		if (clearAllOpt == KOption_ON)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestClearAllModuleOptions();
+			}
+
+		TPtrC updateOpt;
+		GetStringFromConfig(ConfigSection(), KMultiUpdateOpt, updateOpt);
+		if (updateOpt == KOption_OFF)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_MultiUpdatesOn, EFalse);
+			}
+		else if (updateOpt == KOption_ON)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_MultiUpdatesOn, ETrue);
+			}
+			
+		TPtrC assDataOpt;
+		GetStringFromConfig(ConfigSection(), KAssistanceDataOpt, assDataOpt);
+		if (assDataOpt == KOption_OFF)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_AssistanceDataOn, EFalse);
+			}
+		else if (assDataOpt == KOption_ON)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_AssistanceDataOn, ETrue);
+			}
+
+
+		TPtrC reqAssDataOpt;
+		GetStringFromConfig(ConfigSection(), KReqAssDatReqOpt, reqAssDataOpt);
+		if (reqAssDataOpt == KOption_OFF)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_DisableReqAssistData, EFalse);
+			}
+		else if (reqAssDataOpt == KOption_ON)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_DisableReqAssistData, ETrue);
+			}
+		
+		
+		TPtrC suplAssDataOpt;
+		GetStringFromConfig(ConfigSection(), KSuplAssDataOpt, suplAssDataOpt);
+		if (suplAssDataOpt == KOption_OFF)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_DynamicAssistanceData, EFalse);
+			}
+		else if (suplAssDataOpt == KOption_ON)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestModuleOption(ELbsHybridModuleOptions_DynamicAssistanceData, ETrue);
+			}
+
+
+
+		TPtrC setAllOpt;
+		GetStringFromConfig(ConfigSection(), KSetAllOpt, setAllOpt);
+		if (setAllOpt == KOption_ON)
+			{
+			iConfigCtr++;
+			iAGpsHandler->SendRequestSetAllModuleOptions();
+			}
+		TInt updateTimeout;
+		if (GetIntFromConfig(ConfigSection(), KUpdateTimeout, updateTimeout))
+			{
+			TTimeIntervalMicroSeconds timeoutVal(updateTimeout);
+			
+			iConfigCtr++;
+			iAGpsHandler->SendRequestTimeOutMsg(timeoutVal); 
+			}		
+
+		// All the configuration requests sent, now start the active scheduler
+		if (iConfigCtr)
+			{
+			CActiveScheduler::Start();
+			}
+		}
+	
+	
+	INFO_PRINTF1(_L("<<CT_LbsStep_ConfigHybridModule::doTestStepL()"));	//??
+
+	return TestStepResult();
+	}
+
+
+void CT_LbsStep_ConfigHybridModule::ProcessAGpsResponseMessage(const TT_LbsAGpsResponseMsg::TModuleResponseType aResponse)
+	{
+	iConfigCtr--;
+
+	if (TT_LbsAGpsResponseMsg::EModuleResponseOk == aResponse)
+		{
+		// If any of the previous responses has failed do not override the verdict
+		if (iVerdict != EFail)
+			{
+			iVerdict = EPass;
+			}
+		}
+	else
+		{
+		iVerdict = EFail;
+		}
+	
+	if (!iConfigCtr)
+		{
+		SetTestStepResult(iVerdict);
+		CActiveScheduler::Stop();
+		}
+	}