telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackCNoCnmi.cpp
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackCNoCnmi.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,184 @@
+// Copyright (c) 1997-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:
+//
+
+#include <e32test.h>
+#include <etelmm.h>
+#include "Te_LoopBackCNoCnmi.h"
+
+#include "../../hayes/TSYCONFG.H" // for KInternetAccessPoint
+
+//
+// Test-side class
+// With the assistance of the base class, this class must start the emulator
+// and drive the ETel API.
+//
+CTestDriveNoCnmi* CTestDriveNoCnmi::NewL(const TScriptList aScriptListEntry)
+	{
+	CTestDriveNoCnmi* cnmi=new(ELeave) CTestDriveNoCnmi(aScriptListEntry);
+	CleanupStack::PushL(cnmi);
+	cnmi->ConstructL();
+	CleanupStack::Pop();
+	return cnmi;
+	}
+
+CTestDriveNoCnmi::CTestDriveNoCnmi(const TScriptList aScriptListEntry) : iScriptListEntry(aScriptListEntry)
+	{}
+
+TInt CTestDriveNoCnmi::RunTestL()
+	{
+	iCurrentScript=iScriptListEntry;
+	return StartEmulatorL();
+	}
+
+TInt CTestDriveNoCnmi::DriveETelApiL()
+/**
+ * This file contains a slightly different initialisation sequence. This iPhone does not
+ * return a response to the AT+CNMI=? Query.
+ * @return KErrNone
+ */
+	{
+	// Open and initialise the iPhone object
+	_LIT(KMmPhoneName,"GsmPhone1");
+	TESTL(iCnPhone.Open(iServer,KMmPhoneName)==KErrNone);
+	
+	TRequestStatus	reqStatus;
+	INFO_PRINTF1(_L("Initialising the Phone...\n"));
+
+	RMobilePhone::TMMTableSettings tableSettings;
+	tableSettings.iLocId=KInternetAccessPoint;
+	RMobilePhone::TMMTableSettingsPckg tableSettingsPckg(tableSettings);
+	iCnPhone.InitialiseMM(reqStatus , tableSettingsPckg); 	
+
+	User::WaitForRequest(reqStatus);
+
+	TESTL(reqStatus == KErrNone);
+
+
+	// Post a Modem Notification request
+	TRequestStatus modemStatus;
+	RPhone::TModemDetection detected;
+	iCnPhone.NotifyModemDetected(modemStatus, detected);
+
+	// Get the iPhone's status 
+	RPhone::TStatus phoneStatus1;
+	TInt ret=iCnPhone.GetStatus(phoneStatus1);
+	CHECKPOINT(ret, KErrNone, _L("*** Error retrieving the Phone's status ***\n"));
+	if (ret==KErrNone)
+		{
+		TESTL(phoneStatus1.iModemDetected==RPhone::EDetectedPresent);
+		INFO_PRINTF1(_L("The iPhone's modem has been detected\n"));
+		TESTL(phoneStatus1.iMode==RPhone::EModeIdle);
+		INFO_PRINTF1(_L("The iPhone is currently idle\n"));
+		}
+
+	// Establish a call in order to change the status of the iPhone. 
+	// This should enable the modem notification request to complete.
+	_LIT(KVoiceLineName,"Voice");
+	RLine voiceLine;				
+	TESTL(voiceLine.Open(iCnPhone,KVoiceLineName)==KErrNone);
+	RCall voiceCall;
+	TESTL(voiceCall.OpenNewCall(voiceLine)==KErrNone);
+
+	// Answer an incoming call 
+	INFO_PRINTF1(_L("Answer incoming call...\n"));
+	TRequestStatus status;
+	voiceCall.AnswerIncomingCall(status);		
+	User::WaitForRequest(status);
+	TESTL(status==KErrNone);
+
+	// Get the iPhone's current status 
+	RPhone::TStatus phoneStatus2;
+	ret=iCnPhone.GetStatus(phoneStatus2);
+	CHECKPOINT(ret, KErrNone, _L("*** Error retrieving the Phone's status ***\n"));
+
+	// Confirm that the iPhone's current status is different from its initial status
+	if (ret==KErrNone)
+		{
+		TESTL(phoneStatus2.iMode!=phoneStatus1.iMode);
+		if (phoneStatus2.iMode == RPhone::EModeUnknown)
+			{
+			INFO_PRINTF1(_L("Phone mode: unknown\n"));
+			}
+		else if (phoneStatus2.iMode == RPhone::EModeEstablishingLink)
+			{
+			INFO_PRINTF1(_L("Phone mode: establishing link\n"));
+			}
+		else if (phoneStatus2.iMode == RPhone::EModeOnlineData)
+			{
+			INFO_PRINTF1(_L("Phone mode: on line data\n"));
+			}
+		else if (phoneStatus2.iMode == RPhone::EModeOnlineCommand)
+			{
+			INFO_PRINTF1(_L("Phone mode: on line command\n"));
+			}
+		else
+			{
+			ERR_PRINTF1(_L("Error: Phone mode undefined.\n"));
+			User::Leave(KErrGeneral) ;
+			}
+		}
+	
+	// Complete the modem notification request
+	User::WaitForRequest(modemStatus);
+
+	// Hang up the call and Close the voice line and call
+	voiceCall.HangUp(status);
+	User::WaitForRequest(status);
+	TESTL(status==KErrNone);
+	voiceLine.Close();
+	voiceCall.Close();
+
+	// Close the iPhone
+	iCnPhone.Close();		
+	return KErrNone;
+	}
+
+
+//
+// Emulator-side class
+// With the assistance of the base class, this class must run the designated script
+//
+CTestNoCnmi* CTestNoCnmi::NewL(const TScript* aScript)
+	{
+	CTestNoCnmi* cnmi=new(ELeave) CTestNoCnmi(aScript);
+	CleanupStack::PushL(cnmi);
+	cnmi->ConstructL();
+	CleanupStack::Pop();
+	return cnmi;
+	}
+
+CTestNoCnmi::CTestNoCnmi(const TScript* aScript) : iScript(aScript)
+	{}
+
+void CTestNoCnmi::ConstructL()
+	{
+	CATScriptEng::ConstructL();
+	}
+
+TInt CTestNoCnmi::Start()
+	{
+	StartScript(iScript);
+	return KErrNone;
+	}
+
+void CTestNoCnmi::SpecificAlgorithmL(TInt /* aParam */)
+	{
+	}
+
+void CTestNoCnmi::Complete(TInt aError)
+	{
+	iReturnValue=aError;
+	CActiveScheduler::Stop();
+	}