diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackCCalls.cpp --- a/telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackCCalls.cpp Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/multimodetsy/test/Te_LoopBack/Te_LoopBackCCalls.cpp Thu May 06 15:10:38 2010 +0100 @@ -1,476 +1,476 @@ -// 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: -// - -/** - @file -*/ - -#include -#include "Te_LoopBackCCalls.h" - -#include "../../hayes/TSYCONFG.H" // for KInternetAccessPoint - -const TInt KOneSecond=1000000; // One second Pause - -// -// Test-side class -// With the assistance of the base class, this class must start the emulator -// and drive the ETel API. -// -CTestDriveAllCalls* CTestDriveAllCalls::NewL(const TScriptList aScriptListEntry) - { - CTestDriveAllCalls* phoneLine=new(ELeave) CTestDriveAllCalls(aScriptListEntry); - CleanupStack::PushL(phoneLine); - phoneLine->ConstructL(); - CleanupStack::Pop(); - return phoneLine; - } - -CTestDriveAllCalls::CTestDriveAllCalls(const TScriptList aScriptListEntry) : iScriptListEntry(aScriptListEntry) - { - - } - - -TInt CTestDriveAllCalls::RunTestL() - { - iCurrentScript=iScriptListEntry; - return StartEmulatorL(); - } - -TInt CTestDriveAllCalls::DriveETelApiL() -// -// This function contains the real meat of the Client-side test code -// - { - TRequestStatus reqStatus; - INFO_PRINTF1(_L("Initialising the Phone...")); - - RMobilePhone::TMMTableSettings tableSettings; - tableSettings.iLocId=KInternetAccessPoint; - RMobilePhone::TMMTableSettingsPckg tableSettingsPckg(tableSettings); - iPhone.InitialiseMM(reqStatus , tableSettingsPckg); - - User::WaitForRequest(reqStatus); - - TESTL(reqStatus == KErrNone); - - ERR_PRINTF1(_L("Voice Call tests")); - TestVoiceCallL(); - User::After(5*KOneSecond); // Give the user time to see the test results - - ERR_PRINTF1(_L("Cancel Requests test")); - TestCancelRequestsL(); - User::After(5*KOneSecond); // Give the user time to see the test results - - ERR_PRINTF1(_L("Data Call tests")); - TestDataCallL(); - - return KErrNone; - } - -void CTestDriveAllCalls::TestVoiceCallL() -/** - * This function performs Voice call tests - */ - { - RProcess().SetPriority(EPriorityForeground); - RThread().SetPriority(EPriorityNormal); - _LIT(KVoiceLineName,"Voice"); - TRequestStatus status1; - - // Open a voice line and call - RLine voiceLine; - INFO_PRINTF1(_L("Opening Voice Line")); - TESTL(voiceLine.Open(iPhone,KVoiceLineName)==KErrNone); - - RCall voiceCall; - INFO_PRINTF1(_L("Opening New Voice Call")); - TESTL(voiceCall.OpenNewCall(voiceLine)==KErrNone); - - // Get the call capabilities - INFO_PRINTF1(_L("\nGet Call Capabilities...\n")); - RCall::TCaps callCaps; - TInt ret=voiceCall.GetCaps(callCaps); - CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCaps() ***")); - if (ret==KErrNotSupported) - INFO_PRINTF1(_L("Get Call Capabilities is NOT Supported\n")); - if (ret==KErrNone) - { - INFO_PRINTF1(_L("Get Call Capabilities is Successful\n")); - - if ((callCaps.iFlags&RCall::KCapsVoice) !=0) - INFO_PRINTF1(_L("This call supports Voice calls\n")); - } - - // Get the Call Status (The script has posted +CRING: VOICE, so the call is ringing! - INFO_PRINTF1(_L("\nGet Call Status...\n")); - RCall::TStatus callStatus; - ret=voiceCall.GetStatus(callStatus); - CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetStatus() ***")); - if (ret==KErrNotSupported) - INFO_PRINTF1(_L("Get Call Status is NOT Supported\n")); - if (ret==KErrNone) - { - TESTL(callStatus==RCall::EStatusRinging); - INFO_PRINTF1(_L("This Voice call is currently ringing\n")); - } - - // Answer an incoming call - voiceCall.AnswerIncomingCall(status1); - User::WaitForRequest(status1); - TESTL(status1 == KErrNone); - - // Call Parameters - INFO_PRINTF1(_L("\nGet Call Parameters...\n")); - RCall::TCallParams callParams; - RCall::TCallParamsPckg callParamsPckg(callParams); - ret=voiceCall.GetCallParams(callParamsPckg); - CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCallParams() ***")); - if (ret==KErrNotSupported) - INFO_PRINTF1(_L("Get Call Parameters is NOT Supported\n")); - if (ret==KErrNone) - INFO_PRINTF1(_L("Get Call Parameters is successful\n")); - - INFO_PRINTF1(_L("The call is in progress...\n")); - User::After(5*KOneSecond); - - // Bearer Service Information - INFO_PRINTF1(_L("\nGet Bearer Service Info...\n")); - RCall::TBearerService bearerServiceInfo; - ret=voiceCall.GetBearerServiceInfo(bearerServiceInfo); - CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetBearerServiceInfo() ***")); - if (ret==KErrNotSupported) - INFO_PRINTF1(_L("Get BearerService Information is NOT Supported\n")); - if (ret==KErrNone) - INFO_PRINTF1(_L("Get BearerService Information is successful\n")); - - // Call Duration - INFO_PRINTF1(_L("Get Call Duration...\n")); - TTimeIntervalSeconds callDuration; - ret=voiceCall.GetCallDuration(callDuration); - CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCallDuration() ***")); - if (ret==KErrNotSupported) - { - INFO_PRINTF1(_L("Get Current Call Duration is NOT Supported")); - } - if (ret==KErrNone) - { - INFO_PRINTF2(_L("Call duration = %d"), callDuration.Int()); - } - - // Call Information - INFO_PRINTF1(_L("\nGet Current Call Info...")); - RCall::TCallInfo callInfo; - ret=voiceCall.GetInfo(callInfo); - CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCallInfo() ***")); - if (ret==KErrNotSupported) - INFO_PRINTF1(_L("Get Current Call info is NOT Supported")); - if (ret==KErrNone) - { - INFO_PRINTF1(_L("Displaying Information about the Current Call")); - INFO_PRINTF2(_L("Call name: %S"), &callInfo.iCallName); - INFO_PRINTF2(_L("Line name: %S"), &callInfo.iLineName); - if (callInfo.iHookStatus==RCall::EHookStatusOff) - { - INFO_PRINTF1(_L("Current Hook Status: Off")); - } - if (callInfo.iStatus==RCall::EStatusConnected) - { - INFO_PRINTF1(_L("Current Call Status: Connected")); - } - } - - - User::After(5*KOneSecond); // Give the user time to see the test results - - // Call Ownership information - INFO_PRINTF1(_L("Get Call Ownership..\n")); - RCall::TOwnershipStatus callOwner; - ret=voiceCall.GetOwnershipStatus(callOwner); - CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetOwnershipStatus() ***")); - if (ret==KErrNotSupported) - { - INFO_PRINTF1(_L("Get Call OwnerShip is NOT Supported")); - } - else if (ret==KErrNone) - { - INFO_PRINTF1(_L("Get Call OwnerShip is Supported")); - - switch(callOwner) - { - case RCall::EOwnershipUnowned: - INFO_PRINTF1(_L("The call is unowned")); - break; - case RCall::EOwnershipOwnedByAnotherClient: - INFO_PRINTF1(_L("The call is owned by another Client")); - break; - case RCall::EOwnershipOwnedByThisClient: - INFO_PRINTF1(_L("The call is owned by this client")); - break; - default: - INFO_PRINTF1(_L("Error in Call Ownership details")); - break; - } - } - else - INFO_PRINTF2(_L("Get Call Ownership returned Error: %d"), ret); - - - // Transfer Ownership Request (Note that no other client is interested in this call!) - INFO_PRINTF1(_L("Voice Call 1 is trying to Transfer Ownership of the Call..")); - ret=voiceCall.TransferOwnership(); - INFO_PRINTF2(_L("Transfer Ownership Request returned %d"), ret); - if (ret==KErrEtelNoClientInterestedInThisCall) - INFO_PRINTF1(_L("There is no Client interested in this call.")); - - - // Hang up Cancel Request - TRequestStatus cancelStatus; - INFO_PRINTF1(_L("Hang Up Cancel Request")); - voiceCall.HangUp(cancelStatus); - User::After(3*KOneSecond); // Want the TSY to receive the Hang up command. - voiceCall.HangUpCancel(); - User::WaitForRequest(cancelStatus); - TESTL(cancelStatus==KErrNone); - if (cancelStatus==KErrNone) - { - INFO_PRINTF1(_L("Hang up cancel Request Unsuccessful.")); - INFO_PRINTF1(_L("The Voice call has been dropped.")); - INFO_PRINTF1(_L("This is expected behaviour!.")); - } - else - { - INFO_PRINTF1(_L("Hang up cancel Request Successful.")); - INFO_PRINTF1(_L("This is unexpected!. Going to assume that the call has been dropped")); - } - - // Close the voice line and calls - voiceLine.Close(); - voiceCall.Close(); - RProcess().SetPriority(EPriorityHigh); - RThread().SetPriority(EPriorityMuchMore); - } - -void CTestDriveAllCalls::TestCancelRequestsL() -/** - * This function tests Cancel Requests, Notifications in particular. - */ - { - _LIT(KVoiceLineName,"Voice"); - - // Open a voice line and call - RLine voiceLine; - INFO_PRINTF1(_L("Opening Voice Line")); - TESTL(voiceLine.Open(iPhone,KVoiceLineName)==KErrNone); - - RCall voiceCall; - INFO_PRINTF1(_L("Opening a new Voice Call")); - TESTL(voiceCall.OpenNewCall(voiceLine)==KErrNone); - - RCall voiceCall2; - INFO_PRINTF1(_L("Opening a 2nd Voice Call")); - TESTL(voiceCall2.OpenNewCall(voiceLine)==KErrNone); - - // Answer Incoming call Cancel Request - TRequestStatus cancelStatus; - INFO_PRINTF1(_L("Answer Incoming Call Cancel Request")); - voiceCall.AnswerIncomingCall(cancelStatus); - voiceCall.AnswerIncomingCallCancel(); - User::WaitForRequest(cancelStatus); - INFO_PRINTF2(_L("Answer Incoming Cancel status = %d"), cancelStatus.Int()); - - // Notify Hook Change Cancel Request - INFO_PRINTF1(_L("Notify Hook Change Cancel Request")); - RCall::THookStatus hookStatus; - voiceCall.NotifyHookChange(cancelStatus, hookStatus); - voiceCall.NotifyHookChangeCancel(); - User::WaitForRequest(cancelStatus); - INFO_PRINTF2(_L("Notify Hook Change Cancel status = %d"), cancelStatus.Int()); - - // Notify Caps Change Cancel Request - INFO_PRINTF1(_L("Notify Caps change Cancel Request")); - RLine::TCaps lineCaps; - voiceLine.NotifyCapsChange(cancelStatus, lineCaps); - voiceLine.NotifyCapsChangeCancel(); - User::WaitForRequest(cancelStatus); - INFO_PRINTF2(_L("Notify caps Change Cancel status = %d"), cancelStatus.Int()); - - // Notify Call Status Change Cancel Request - INFO_PRINTF1(_L("Notify CallStatusChange Cancel Request...")); - RCall::TStatus callStatus1; - voiceCall.NotifyStatusChange(cancelStatus, callStatus1); - voiceCall.NotifyStatusChangeCancel(); - User::WaitForRequest(cancelStatus); - INFO_PRINTF2(_L("Notify CallStatusChange Cancel: %d"), cancelStatus.Int()); - - // Notify CallDuration Change Cancel Request - INFO_PRINTF1(_L("NotifyCallDurationChange Cancel Request...")); - TTimeIntervalSeconds callDuration; - voiceCall.NotifyCallDurationChange(cancelStatus, callDuration); - voiceCall.NotifyCallDurationChangeCancel(); - User::WaitForRequest(cancelStatus); - INFO_PRINTF2(_L("Notify CallDurationChange Cancel: %d"), cancelStatus.Int()); - - // Acquire Ownership Cancel Request - INFO_PRINTF1(_L("AcquireOwnership Cancel Request...")); - voiceCall2.AcquireOwnership(cancelStatus); - voiceCall2.AcquireOwnershipCancel(); - User::WaitForRequest(cancelStatus); - if (cancelStatus==KErrEtelCallNotActive) - { - INFO_PRINTF1(_L("Voice Call 2 is not currently active")); - } - else - { - INFO_PRINTF2(_L("AcquireOwnership Cancel status: %d"), cancelStatus.Int()); - } - - // Close the voice line and call - voiceLine.Close(); - voiceCall.Close(); - voiceCall2.Close(); - } - -void CTestDriveAllCalls::TestDataCallL() -/** - * This function performs Data calls tests. - */ - { - // The script has posted a +CRING: REL ASYNC, so a data call is expected - INFO_PRINTF1(_L("\nAnswering an incoming data call.\n")); - - _LIT(KDataLineName,"Data"); - - // Open a Data line - RLine dataLine; - INFO_PRINTF1(_L("Opening Data Line")); - TESTL(dataLine.Open(iPhone,KDataLineName)==KErrNone); - - // Post a Notification on an Incoming call - TRequestStatus notifyStatus; - TName callName; - dataLine.NotifyIncomingCall(notifyStatus, callName); - User::WaitForRequest(notifyStatus); - TESTL(notifyStatus==KErrNone); - INFO_PRINTF1(_L("An incoming data call has been detected.")); - - // Open and answer a Data call - RCall dataCall; - TRequestStatus status1; - TESTL(dataCall.OpenExistingCall(dataLine, callName)==KErrNone); - - dataCall.AnswerIncomingCall(status1); - User::WaitForRequest(status1); - TESTL(status1 == KErrNone); - - // Get the call's status - RCall::TStatus callStatus; - TESTL(dataCall.GetStatus(callStatus)==KErrNone); - if (callStatus==RCall::EStatusConnected) - { - INFO_PRINTF1(_L("Call Status: CONNECTED")); - } - - // LoanDataPort (Cancel) request - INFO_PRINTF1(_L("Loan Data Port Cancel request.")); - RCall::TCommPort commPort; - TRequestStatus cancelStatus; - dataCall.LoanDataPort(cancelStatus,commPort); - User::After(3*KOneSecond); // Want the request to get through to the TSY - dataCall.LoanDataPortCancel(); - User::WaitForRequest(cancelStatus); - INFO_PRINTF2(_L("LoanDataPort Cancel: %d"), cancelStatus.Int()); - - if (cancelStatus==KErrNone) - { - INFO_PRINTF1(_L("LoanDataPort Cancel request NOT successful.")); - } - else - { - INFO_PRINTF1(_L("LoanDataPort cancel request was successful.")); - INFO_PRINTF1(_L("This is unexpected, the rest of the test will not be executed!!")); - INFO_PRINTF1(_L("Closing the data line and call.")); - dataLine.Close(); - dataCall.Close(); - return; - } - - // Connect to the Comms Server and Open a serial port - INFO_PRINTF1(_L("Connecting to the Comms server and opening a serial port.")); - RCommServ commServer; - TESTL(commServer.Connect()==KErrNone); - - RComm port; - TESTL(port.Open(commServer,commPort.iPort,ECommShared)==KErrNone); - - // Write some data to the serial port - TRequestStatus writeStatus; - _LIT8(KTestData,"Telephony Test Code\r\n"); - port.Write(writeStatus,KTestData); - User::WaitForRequest(writeStatus); - TESTL(writeStatus==KErrNone); - INFO_PRINTF1(_L("Data has been successfully written to the serial port")); - - // Close the serial port & the comms Server. Recover the data port & hang up the call. - port.Close(); - commServer.Close(); - TESTL(dataCall.RecoverDataPort()==KErrNone); - - INFO_PRINTF1(_L("Hanging up the Data call.")); - TESTL(dataCall.HangUp()==KErrNone); - - // Close the Data line and call - dataLine.Close(); - dataCall.Close(); - } - - -// -// Emulator-side class -// With the assistance of the base class, this class must run the designated script -// -CTestAllCalls* CTestAllCalls::NewL(const TScript* aScript) - { - CTestAllCalls* allCalls=new(ELeave) CTestAllCalls(aScript); - CleanupStack::PushL(allCalls); - allCalls->ConstructL(); - CleanupStack::Pop(); - return allCalls; - } - -CTestAllCalls::CTestAllCalls(const TScript* aScript) : iScript(aScript) - {} - -void CTestAllCalls::ConstructL() - { - CATScriptEng::ConstructL(); - } - -TInt CTestAllCalls::Start() - { - StartScript(iScript); - return KErrNone; - } - -void CTestAllCalls::SpecificAlgorithmL(TInt /* aParam */) - { - } - -void CTestAllCalls::Complete(TInt aError) - { - iReturnValue=aError; - CActiveScheduler::Stop(); - } +// 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: +// + +/** + @file +*/ + +#include +#include "Te_LoopBackCCalls.h" + +#include "../../hayes/TSYCONFG.H" // for KInternetAccessPoint + +const TInt KOneSecond=1000000; // One second Pause + +// +// Test-side class +// With the assistance of the base class, this class must start the emulator +// and drive the ETel API. +// +CTestDriveAllCalls* CTestDriveAllCalls::NewL(const TScriptList aScriptListEntry) + { + CTestDriveAllCalls* phoneLine=new(ELeave) CTestDriveAllCalls(aScriptListEntry); + CleanupStack::PushL(phoneLine); + phoneLine->ConstructL(); + CleanupStack::Pop(); + return phoneLine; + } + +CTestDriveAllCalls::CTestDriveAllCalls(const TScriptList aScriptListEntry) : iScriptListEntry(aScriptListEntry) + { + + } + + +TInt CTestDriveAllCalls::RunTestL() + { + iCurrentScript=iScriptListEntry; + return StartEmulatorL(); + } + +TInt CTestDriveAllCalls::DriveETelApiL() +// +// This function contains the real meat of the Client-side test code +// + { + TRequestStatus reqStatus; + INFO_PRINTF1(_L("Initialising the Phone...")); + + RMobilePhone::TMMTableSettings tableSettings; + tableSettings.iLocId=KInternetAccessPoint; + RMobilePhone::TMMTableSettingsPckg tableSettingsPckg(tableSettings); + iPhone.InitialiseMM(reqStatus , tableSettingsPckg); + + User::WaitForRequest(reqStatus); + + TESTL(reqStatus == KErrNone); + + ERR_PRINTF1(_L("Voice Call tests")); + TestVoiceCallL(); + User::After(5*KOneSecond); // Give the user time to see the test results + + ERR_PRINTF1(_L("Cancel Requests test")); + TestCancelRequestsL(); + User::After(5*KOneSecond); // Give the user time to see the test results + + ERR_PRINTF1(_L("Data Call tests")); + TestDataCallL(); + + return KErrNone; + } + +void CTestDriveAllCalls::TestVoiceCallL() +/** + * This function performs Voice call tests + */ + { + RProcess().SetPriority(EPriorityForeground); + RThread().SetPriority(EPriorityNormal); + _LIT(KVoiceLineName,"Voice"); + TRequestStatus status1; + + // Open a voice line and call + RLine voiceLine; + INFO_PRINTF1(_L("Opening Voice Line")); + TESTL(voiceLine.Open(iPhone,KVoiceLineName)==KErrNone); + + RCall voiceCall; + INFO_PRINTF1(_L("Opening New Voice Call")); + TESTL(voiceCall.OpenNewCall(voiceLine)==KErrNone); + + // Get the call capabilities + INFO_PRINTF1(_L("\nGet Call Capabilities...\n")); + RCall::TCaps callCaps; + TInt ret=voiceCall.GetCaps(callCaps); + CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCaps() ***")); + if (ret==KErrNotSupported) + INFO_PRINTF1(_L("Get Call Capabilities is NOT Supported\n")); + if (ret==KErrNone) + { + INFO_PRINTF1(_L("Get Call Capabilities is Successful\n")); + + if ((callCaps.iFlags&RCall::KCapsVoice) !=0) + INFO_PRINTF1(_L("This call supports Voice calls\n")); + } + + // Get the Call Status (The script has posted +CRING: VOICE, so the call is ringing! + INFO_PRINTF1(_L("\nGet Call Status...\n")); + RCall::TStatus callStatus; + ret=voiceCall.GetStatus(callStatus); + CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetStatus() ***")); + if (ret==KErrNotSupported) + INFO_PRINTF1(_L("Get Call Status is NOT Supported\n")); + if (ret==KErrNone) + { + TESTL(callStatus==RCall::EStatusRinging); + INFO_PRINTF1(_L("This Voice call is currently ringing\n")); + } + + // Answer an incoming call + voiceCall.AnswerIncomingCall(status1); + User::WaitForRequest(status1); + TESTL(status1 == KErrNone); + + // Call Parameters + INFO_PRINTF1(_L("\nGet Call Parameters...\n")); + RCall::TCallParams callParams; + RCall::TCallParamsPckg callParamsPckg(callParams); + ret=voiceCall.GetCallParams(callParamsPckg); + CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCallParams() ***")); + if (ret==KErrNotSupported) + INFO_PRINTF1(_L("Get Call Parameters is NOT Supported\n")); + if (ret==KErrNone) + INFO_PRINTF1(_L("Get Call Parameters is successful\n")); + + INFO_PRINTF1(_L("The call is in progress...\n")); + User::After(5*KOneSecond); + + // Bearer Service Information + INFO_PRINTF1(_L("\nGet Bearer Service Info...\n")); + RCall::TBearerService bearerServiceInfo; + ret=voiceCall.GetBearerServiceInfo(bearerServiceInfo); + CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetBearerServiceInfo() ***")); + if (ret==KErrNotSupported) + INFO_PRINTF1(_L("Get BearerService Information is NOT Supported\n")); + if (ret==KErrNone) + INFO_PRINTF1(_L("Get BearerService Information is successful\n")); + + // Call Duration + INFO_PRINTF1(_L("Get Call Duration...\n")); + TTimeIntervalSeconds callDuration; + ret=voiceCall.GetCallDuration(callDuration); + CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCallDuration() ***")); + if (ret==KErrNotSupported) + { + INFO_PRINTF1(_L("Get Current Call Duration is NOT Supported")); + } + if (ret==KErrNone) + { + INFO_PRINTF2(_L("Call duration = %d"), callDuration.Int()); + } + + // Call Information + INFO_PRINTF1(_L("\nGet Current Call Info...")); + RCall::TCallInfo callInfo; + ret=voiceCall.GetInfo(callInfo); + CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetCallInfo() ***")); + if (ret==KErrNotSupported) + INFO_PRINTF1(_L("Get Current Call info is NOT Supported")); + if (ret==KErrNone) + { + INFO_PRINTF1(_L("Displaying Information about the Current Call")); + INFO_PRINTF2(_L("Call name: %S"), &callInfo.iCallName); + INFO_PRINTF2(_L("Line name: %S"), &callInfo.iLineName); + if (callInfo.iHookStatus==RCall::EHookStatusOff) + { + INFO_PRINTF1(_L("Current Hook Status: Off")); + } + if (callInfo.iStatus==RCall::EStatusConnected) + { + INFO_PRINTF1(_L("Current Call Status: Connected")); + } + } + + + User::After(5*KOneSecond); // Give the user time to see the test results + + // Call Ownership information + INFO_PRINTF1(_L("Get Call Ownership..\n")); + RCall::TOwnershipStatus callOwner; + ret=voiceCall.GetOwnershipStatus(callOwner); + CHECKPOINT_EXPR((ret == KErrNone || ret == KErrNotSupported), _L("*** Failed RCall::GetOwnershipStatus() ***")); + if (ret==KErrNotSupported) + { + INFO_PRINTF1(_L("Get Call OwnerShip is NOT Supported")); + } + else if (ret==KErrNone) + { + INFO_PRINTF1(_L("Get Call OwnerShip is Supported")); + + switch(callOwner) + { + case RCall::EOwnershipUnowned: + INFO_PRINTF1(_L("The call is unowned")); + break; + case RCall::EOwnershipOwnedByAnotherClient: + INFO_PRINTF1(_L("The call is owned by another Client")); + break; + case RCall::EOwnershipOwnedByThisClient: + INFO_PRINTF1(_L("The call is owned by this client")); + break; + default: + INFO_PRINTF1(_L("Error in Call Ownership details")); + break; + } + } + else + INFO_PRINTF2(_L("Get Call Ownership returned Error: %d"), ret); + + + // Transfer Ownership Request (Note that no other client is interested in this call!) + INFO_PRINTF1(_L("Voice Call 1 is trying to Transfer Ownership of the Call..")); + ret=voiceCall.TransferOwnership(); + INFO_PRINTF2(_L("Transfer Ownership Request returned %d"), ret); + if (ret==KErrEtelNoClientInterestedInThisCall) + INFO_PRINTF1(_L("There is no Client interested in this call.")); + + + // Hang up Cancel Request + TRequestStatus cancelStatus; + INFO_PRINTF1(_L("Hang Up Cancel Request")); + voiceCall.HangUp(cancelStatus); + User::After(3*KOneSecond); // Want the TSY to receive the Hang up command. + voiceCall.HangUpCancel(); + User::WaitForRequest(cancelStatus); + TESTL(cancelStatus==KErrNone); + if (cancelStatus==KErrNone) + { + INFO_PRINTF1(_L("Hang up cancel Request Unsuccessful.")); + INFO_PRINTF1(_L("The Voice call has been dropped.")); + INFO_PRINTF1(_L("This is expected behaviour!.")); + } + else + { + INFO_PRINTF1(_L("Hang up cancel Request Successful.")); + INFO_PRINTF1(_L("This is unexpected!. Going to assume that the call has been dropped")); + } + + // Close the voice line and calls + voiceLine.Close(); + voiceCall.Close(); + RProcess().SetPriority(EPriorityHigh); + RThread().SetPriority(EPriorityMuchMore); + } + +void CTestDriveAllCalls::TestCancelRequestsL() +/** + * This function tests Cancel Requests, Notifications in particular. + */ + { + _LIT(KVoiceLineName,"Voice"); + + // Open a voice line and call + RLine voiceLine; + INFO_PRINTF1(_L("Opening Voice Line")); + TESTL(voiceLine.Open(iPhone,KVoiceLineName)==KErrNone); + + RCall voiceCall; + INFO_PRINTF1(_L("Opening a new Voice Call")); + TESTL(voiceCall.OpenNewCall(voiceLine)==KErrNone); + + RCall voiceCall2; + INFO_PRINTF1(_L("Opening a 2nd Voice Call")); + TESTL(voiceCall2.OpenNewCall(voiceLine)==KErrNone); + + // Answer Incoming call Cancel Request + TRequestStatus cancelStatus; + INFO_PRINTF1(_L("Answer Incoming Call Cancel Request")); + voiceCall.AnswerIncomingCall(cancelStatus); + voiceCall.AnswerIncomingCallCancel(); + User::WaitForRequest(cancelStatus); + INFO_PRINTF2(_L("Answer Incoming Cancel status = %d"), cancelStatus.Int()); + + // Notify Hook Change Cancel Request + INFO_PRINTF1(_L("Notify Hook Change Cancel Request")); + RCall::THookStatus hookStatus; + voiceCall.NotifyHookChange(cancelStatus, hookStatus); + voiceCall.NotifyHookChangeCancel(); + User::WaitForRequest(cancelStatus); + INFO_PRINTF2(_L("Notify Hook Change Cancel status = %d"), cancelStatus.Int()); + + // Notify Caps Change Cancel Request + INFO_PRINTF1(_L("Notify Caps change Cancel Request")); + RLine::TCaps lineCaps; + voiceLine.NotifyCapsChange(cancelStatus, lineCaps); + voiceLine.NotifyCapsChangeCancel(); + User::WaitForRequest(cancelStatus); + INFO_PRINTF2(_L("Notify caps Change Cancel status = %d"), cancelStatus.Int()); + + // Notify Call Status Change Cancel Request + INFO_PRINTF1(_L("Notify CallStatusChange Cancel Request...")); + RCall::TStatus callStatus1; + voiceCall.NotifyStatusChange(cancelStatus, callStatus1); + voiceCall.NotifyStatusChangeCancel(); + User::WaitForRequest(cancelStatus); + INFO_PRINTF2(_L("Notify CallStatusChange Cancel: %d"), cancelStatus.Int()); + + // Notify CallDuration Change Cancel Request + INFO_PRINTF1(_L("NotifyCallDurationChange Cancel Request...")); + TTimeIntervalSeconds callDuration; + voiceCall.NotifyCallDurationChange(cancelStatus, callDuration); + voiceCall.NotifyCallDurationChangeCancel(); + User::WaitForRequest(cancelStatus); + INFO_PRINTF2(_L("Notify CallDurationChange Cancel: %d"), cancelStatus.Int()); + + // Acquire Ownership Cancel Request + INFO_PRINTF1(_L("AcquireOwnership Cancel Request...")); + voiceCall2.AcquireOwnership(cancelStatus); + voiceCall2.AcquireOwnershipCancel(); + User::WaitForRequest(cancelStatus); + if (cancelStatus==KErrEtelCallNotActive) + { + INFO_PRINTF1(_L("Voice Call 2 is not currently active")); + } + else + { + INFO_PRINTF2(_L("AcquireOwnership Cancel status: %d"), cancelStatus.Int()); + } + + // Close the voice line and call + voiceLine.Close(); + voiceCall.Close(); + voiceCall2.Close(); + } + +void CTestDriveAllCalls::TestDataCallL() +/** + * This function performs Data calls tests. + */ + { + // The script has posted a +CRING: REL ASYNC, so a data call is expected + INFO_PRINTF1(_L("\nAnswering an incoming data call.\n")); + + _LIT(KDataLineName,"Data"); + + // Open a Data line + RLine dataLine; + INFO_PRINTF1(_L("Opening Data Line")); + TESTL(dataLine.Open(iPhone,KDataLineName)==KErrNone); + + // Post a Notification on an Incoming call + TRequestStatus notifyStatus; + TName callName; + dataLine.NotifyIncomingCall(notifyStatus, callName); + User::WaitForRequest(notifyStatus); + TESTL(notifyStatus==KErrNone); + INFO_PRINTF1(_L("An incoming data call has been detected.")); + + // Open and answer a Data call + RCall dataCall; + TRequestStatus status1; + TESTL(dataCall.OpenExistingCall(dataLine, callName)==KErrNone); + + dataCall.AnswerIncomingCall(status1); + User::WaitForRequest(status1); + TESTL(status1 == KErrNone); + + // Get the call's status + RCall::TStatus callStatus; + TESTL(dataCall.GetStatus(callStatus)==KErrNone); + if (callStatus==RCall::EStatusConnected) + { + INFO_PRINTF1(_L("Call Status: CONNECTED")); + } + + // LoanDataPort (Cancel) request + INFO_PRINTF1(_L("Loan Data Port Cancel request.")); + RCall::TCommPort commPort; + TRequestStatus cancelStatus; + dataCall.LoanDataPort(cancelStatus,commPort); + User::After(3*KOneSecond); // Want the request to get through to the TSY + dataCall.LoanDataPortCancel(); + User::WaitForRequest(cancelStatus); + INFO_PRINTF2(_L("LoanDataPort Cancel: %d"), cancelStatus.Int()); + + if (cancelStatus==KErrNone) + { + INFO_PRINTF1(_L("LoanDataPort Cancel request NOT successful.")); + } + else + { + INFO_PRINTF1(_L("LoanDataPort cancel request was successful.")); + INFO_PRINTF1(_L("This is unexpected, the rest of the test will not be executed!!")); + INFO_PRINTF1(_L("Closing the data line and call.")); + dataLine.Close(); + dataCall.Close(); + return; + } + + // Connect to the Comms Server and Open a serial port + INFO_PRINTF1(_L("Connecting to the Comms server and opening a serial port.")); + RCommServ commServer; + TESTL(commServer.Connect()==KErrNone); + + RComm port; + TESTL(port.Open(commServer,commPort.iPort,ECommShared)==KErrNone); + + // Write some data to the serial port + TRequestStatus writeStatus; + _LIT8(KTestData,"Telephony Test Code\r\n"); + port.Write(writeStatus,KTestData); + User::WaitForRequest(writeStatus); + TESTL(writeStatus==KErrNone); + INFO_PRINTF1(_L("Data has been successfully written to the serial port")); + + // Close the serial port & the comms Server. Recover the data port & hang up the call. + port.Close(); + commServer.Close(); + TESTL(dataCall.RecoverDataPort()==KErrNone); + + INFO_PRINTF1(_L("Hanging up the Data call.")); + TESTL(dataCall.HangUp()==KErrNone); + + // Close the Data line and call + dataLine.Close(); + dataCall.Close(); + } + + +// +// Emulator-side class +// With the assistance of the base class, this class must run the designated script +// +CTestAllCalls* CTestAllCalls::NewL(const TScript* aScript) + { + CTestAllCalls* allCalls=new(ELeave) CTestAllCalls(aScript); + CleanupStack::PushL(allCalls); + allCalls->ConstructL(); + CleanupStack::Pop(); + return allCalls; + } + +CTestAllCalls::CTestAllCalls(const TScript* aScript) : iScript(aScript) + {} + +void CTestAllCalls::ConstructL() + { + CATScriptEng::ConstructL(); + } + +TInt CTestAllCalls::Start() + { + StartScript(iScript); + return KErrNone; + } + +void CTestAllCalls::SpecificAlgorithmL(TInt /* aParam */) + { + } + +void CTestAllCalls::Complete(TInt aError) + { + iReturnValue=aError; + CActiveScheduler::Stop(); + }