sl@0: // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // CPP file: Audio Resource Notification tests for Audio Output Stream. sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file TestOutputStreamARN.cpp sl@0: */ sl@0: sl@0: #include "TestAudioClientUtilitiesARN.h" sl@0: sl@0: const TInt KSampleRate = 8000; sl@0: const TInt KBytesPerSample = 2; sl@0: //------------------------------------------------------------------------------ sl@0: //********************PREQ 797 - Audio Resource Notification******************** sl@0: //------------------------------------------------------------------------------ sl@0: sl@0: // sl@0: //CTestMdaAudioOutputStreamCallbackSupport sl@0: // sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMdaAudioOutputStreamCallbackSupport* CTestMdaAudioOutputStreamCallbackSupport::NewL(MTestAudioOutputStreamCallback& aCallback) sl@0: { sl@0: return new(ELeave) CTestMdaAudioOutputStreamCallbackSupport(aCallback); sl@0: } sl@0: sl@0: /** sl@0: * MaoscOpenComplete sl@0: */ sl@0: void CTestMdaAudioOutputStreamCallbackSupport::MaoscOpenComplete(TInt aError) sl@0: { sl@0: iCallback.MaoscOpenCompleteTest(aError, *this); sl@0: } sl@0: sl@0: /** sl@0: * MaoscBufferCopied sl@0: */ sl@0: void CTestMdaAudioOutputStreamCallbackSupport::MaoscBufferCopied(TInt aError, const TDesC8& aBuffer) sl@0: { sl@0: iCallback.MaoscBufferCopiedTest(aError, aBuffer, *this); sl@0: } sl@0: sl@0: /** sl@0: * MaoscPlayComplete sl@0: */ sl@0: void CTestMdaAudioOutputStreamCallbackSupport::MaoscPlayComplete(TInt aError) sl@0: { sl@0: iCallback.MaoscPlayCompleteTest(aError, *this); sl@0: } sl@0: sl@0: /** sl@0: * MarncResourceAvailable sl@0: */ sl@0: void CTestMdaAudioOutputStreamCallbackSupport::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData) sl@0: { sl@0: iCallback.MarncResourceAvailableTest(aNotificationEventId, aNotificationData, *this); sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMdaAudioOutputStreamCallbackSupport::CTestMdaAudioOutputStreamCallbackSupport(MTestAudioOutputStreamCallback& aCallback):iCallback(aCallback) sl@0: { sl@0: sl@0: } sl@0: sl@0: // sl@0: //CTestStepAudioOutputStreamARN sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestStepAudioOutputStreamARN::CTestStepAudioOutputStreamARN(const TDesC& aTestName) sl@0: { sl@0: iTestStepName = aTestName; sl@0: iFileSize1 = 0; sl@0: iFileSize2 = 0; sl@0: iHeapSize = 3600000; sl@0: } sl@0: sl@0: /** sl@0: * MMdaAudioOutputStreamCallback->MaoscOpenComplete sl@0: */ sl@0: void CTestStepAudioOutputStreamARN::MaoscOpenCompleteTest(TInt aError, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport) sl@0: { sl@0: if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscOpenComplete1, aError)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscOpenComplete2, aError)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscOpenComplete3, aError)); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * MMdaAudioOutputStreamCallback->MaoscBufferCopied sl@0: */ sl@0: void CTestStepAudioOutputStreamARN::MaoscBufferCopiedTest(TInt aError, const TDesC8& /*aBuffer*/, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport) sl@0: { sl@0: if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscBufferCopied1, aError)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscBufferCopied2, aError)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscBufferCopied3, aError)); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * MMdaAudioOutputStreamCallback->MaoscPlayComplete sl@0: */ sl@0: void CTestStepAudioOutputStreamARN::MaoscPlayCompleteTest(TInt aError, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport) sl@0: { sl@0: if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscPlayComplete1, aError)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscPlayComplete2, aError)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscPlayComplete3, aError)); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * MMMFAudioResourceNotificationCallback->MarncResourceAvailable sl@0: */ sl@0: void CTestStepAudioOutputStreamARN::MarncResourceAvailableTest(TUid aNotificationEventId, const TDesC8& aNotificationData, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport) sl@0: { sl@0: if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable) sl@0: { sl@0: INFO_PRINTF1(_L("iAudioOutputStream::MMMFAudioResourceNotificationCallback -> KMMFEventCategoryAudioResourceAvailable")); sl@0: sl@0: //Convert TDesc8 to TInt64 sl@0: TMMFTimeIntervalMicroSecondsPckg timeIntvbuf; sl@0: timeIntvbuf.Copy(aNotificationData); sl@0: TTimeIntervalMicroSeconds intPos = timeIntvbuf(); sl@0: iPosition = intPos; sl@0: sl@0: if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1) sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1 -> MMMFAudioResourceNotificationCallback NotificationReceived")); sl@0: TRAP(iError, FsmL(EMarncResourceAvailableOS1, KErrNone)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2) sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2 -> MMMFAudioResourceNotificationCallback NotificationReceived")); sl@0: TRAP(iError, FsmL(EMarncResourceAvailableOS2, KErrNone)); sl@0: } sl@0: else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3) sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream3 -> MMMFAudioResourceNotificationCallback NotificationReceived")); sl@0: TRAP(iError, FsmL(EMarncResourceAvailableOS3, KErrNone)); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("MMMFAudioResourceNotificationCallback, but NOT KMMFEventCategoryAudioResourceAvailable")); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * DoTestStepPreambleL sl@0: */ sl@0: TVerdict CTestStepAudioOutputStreamARN::DoTestStepPreambleL() sl@0: { sl@0: // Local Variable to hold verdict sl@0: TVerdict verdict; sl@0: sl@0: // Install the scheduler sl@0: verdict = CTestMmfAclntStep::DoTestStepPreambleL(); sl@0: sl@0: if (verdict == EFail) sl@0: { sl@0: return verdict; sl@0: } sl@0: sl@0: // Connect RFs session sl@0: TInt err = iFs.Connect(); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Initialise iTestAudioOutputStream1 sl@0: INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream1 : EMdaPriorityNormal")); sl@0: iMdaAudioOutputStreamCallbackSupport1 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this); sl@0: TRAP(err, iTestAudioOutputStream1 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport1, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality)); sl@0: if (err != KErrNone || iTestAudioOutputStream1 == NULL ) sl@0: { sl@0: INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream1 = %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: sl@0: // Open RFile#1 sl@0: err = iFile1.Open(iFs, KStreamRawFile1, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error opening iFile1 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Get size of iFile1 sl@0: err = iFile1.Size(iFileSize1); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error getting size of iFile1 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Initialise iBuf1 sl@0: iBuf1.CreateMaxL(iFileSize1); sl@0: sl@0: // Initialise iTestAudioOutputStream2 sl@0: INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream2 : EMdaPriorityMax")); sl@0: iMdaAudioOutputStreamCallbackSupport2 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this); sl@0: TRAP(err, iTestAudioOutputStream2 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport2, EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality)); sl@0: if (err != KErrNone || iTestAudioOutputStream2 == NULL ) sl@0: { sl@0: INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream2 = %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: sl@0: // Open RFile#2 sl@0: err = iFile2.Open(iFs, KStreamRawFile2, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error opening iFile2 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Get size of iFile2 sl@0: err = iFile2.Size(iFileSize2); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error getting size of iFile2 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Initialise iBuf2 sl@0: iBuf2.CreateMaxL(iFileSize2); sl@0: sl@0: // Initialise iTestAudioOutputStream3 sl@0: INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream3 : EMdaPriorityMin")); sl@0: iMdaAudioOutputStreamCallbackSupport3 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this); sl@0: TRAP(err, iTestAudioOutputStream3 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport3, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality)); sl@0: if (err != KErrNone || iTestAudioOutputStream3 == NULL ) sl@0: { sl@0: INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream3 = %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: sl@0: // Open RFile#3 sl@0: err = iFile3.Open(iFs, KStreamRawFile3, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error opening iFile3 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Get size of iFile3 sl@0: err = iFile3.Size(iFileSize3); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error getting size of iFile3 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Initialise iBuf3 sl@0: iBuf3.CreateMaxL(iFileSize3); sl@0: sl@0: // Initialise the CCallBackTimer. sl@0: iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler)); sl@0: sl@0: return verdict; sl@0: } sl@0: sl@0: /** sl@0: * DoTestStepPostambleL sl@0: */ sl@0: TVerdict CTestStepAudioOutputStreamARN::DoTestStepPostambleL() sl@0: { sl@0: // Delete all the iTestAudioOutputStream utilities. sl@0: delete iTestAudioOutputStream1; sl@0: iTestAudioOutputStream1=NULL; sl@0: delete iTestAudioOutputStream2; sl@0: iTestAudioOutputStream2=NULL; sl@0: delete iTestAudioOutputStream3; sl@0: iTestAudioOutputStream3=NULL; sl@0: // Destroy File Handles sl@0: iFile1.Close(); sl@0: iFile2.Close(); sl@0: iFile3.Close(); sl@0: iFs.Close(); sl@0: // Delete RBuf8 sl@0: iBuf1.Close(); sl@0: iBuf2.Close(); sl@0: iBuf3.Close(); sl@0: // Delete CTestMdaAudioOutputStreamCallbackSupport sl@0: delete iMdaAudioOutputStreamCallbackSupport1; sl@0: delete iMdaAudioOutputStreamCallbackSupport2; sl@0: delete iMdaAudioOutputStreamCallbackSupport3; sl@0: // Delete the CCallBackTimer. sl@0: delete iCallBackTimer; sl@0: iCallBackTimer=NULL; sl@0: // Destroy the scheduler sl@0: return CTestMmfAclntStep::DoTestStepPostambleL(); sl@0: } sl@0: sl@0: /** sl@0: * DoTestStepL sl@0: */ sl@0: TVerdict CTestStepAudioOutputStreamARN::DoTestStepL() sl@0: { sl@0: return( DoTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * StateInit sl@0: */ sl@0: void CTestStepAudioOutputStreamARN::StateInit() sl@0: { sl@0: iExpectedEvent=EIdleOutputStream; sl@0: iExpectedError=KErrNone; sl@0: iState=0; sl@0: } sl@0: sl@0: /** sl@0: * StateChange sl@0: */ sl@0: void CTestStepAudioOutputStreamARN::StateChange(TMmfAudioOutputStreamEvents aExpectedEvent, TInt aExpectedError) sl@0: { sl@0: iExpectedEvent=aExpectedEvent; sl@0: iExpectedError=aExpectedError; sl@0: iState++; sl@0: } sl@0: sl@0: /** sl@0: * FsmCheck sl@0: */ sl@0: TBool CTestStepAudioOutputStreamARN::FsmCheck(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: TBool retFsmCheck = EFalse; sl@0: if (iExpectedEvent != aEventCode) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: else if (iExpectedError != aError) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: else sl@0: { sl@0: retFsmCheck = ETrue; sl@0: } sl@0: return retFsmCheck; sl@0: } sl@0: sl@0: CTestStepAudioOutputStreamARN2::CTestStepAudioOutputStreamARN2(const TDesC& aTestName) sl@0: { sl@0: iTestStepName = aTestName; sl@0: iHeapSize = 3600000; sl@0: } sl@0: sl@0: /** sl@0: * DoTestStepPreambleL sl@0: */ sl@0: TVerdict CTestStepAudioOutputStreamARN2::DoTestStepPreambleL() sl@0: { sl@0: TVerdict verdict; sl@0: verdict = CTestMmfAclntStep::DoTestStepPreambleL(); sl@0: if (verdict == EFail) sl@0: { sl@0: return verdict; sl@0: } sl@0: sl@0: iClientList[1] = CFsmAudioOutputStreamClient::NewL(1, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality, this); sl@0: iClientList[2] = CFsmAudioOutputStreamClient::NewL(2, EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality, this); sl@0: iClientList[3] = CFsmAudioOutputStreamClient::NewL(3, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality, this); sl@0: sl@0: // Connect RFs session sl@0: TInt err = iFs.Connect(); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: err = iFileHandle[1].Open(iFs, KStreamRawFile1, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error opening iFile1 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: err = iFileHandle[2].Open(iFs, KStreamRawFile2, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error opening iFile2 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: err = iFileHandle[3].Open(iFs, KStreamRawFile3, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error opening iFile2 = %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: for(TInt fileNumber=1; fileNumber<=3; fileNumber++) sl@0: { sl@0: err = iFileHandle[fileNumber].Size(iFileSize[fileNumber]); sl@0: if(err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error getting size of iFile = %d"), err); sl@0: return EFail; sl@0: } sl@0: iBuf[fileNumber].CreateMaxL(iFileSize[fileNumber]); sl@0: } sl@0: sl@0: // Initialise the CCallBackTimer. sl@0: iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler)); sl@0: sl@0: return verdict; sl@0: } sl@0: sl@0: /** sl@0: * DoTestStepPostambleL sl@0: */ sl@0: TVerdict CTestStepAudioOutputStreamARN2::DoTestStepPostambleL() sl@0: { sl@0: iClientList.DeleteAll(); sl@0: for(TInt fileNumber=1; fileNumber <=3; fileNumber++) sl@0: { sl@0: iFileHandle[fileNumber].Close(); sl@0: } sl@0: sl@0: for(TInt bufNumber=1 ; bufNumber <=3; bufNumber++) sl@0: { sl@0: iBuf[bufNumber].Close(); sl@0: } sl@0: sl@0: delete iCallBackTimer; sl@0: return CTestMmfAclntStep::DoTestStepPostambleL(); sl@0: } sl@0: sl@0: sl@0: /** sl@0: * DoTestStepL sl@0: */ sl@0: TVerdict CTestStepAudioOutputStreamARN2::DoTestStepL() sl@0: { sl@0: return( DoTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * StateChange sl@0: */ sl@0: void CTestStepAudioOutputStreamARN2::StateChange(TFsmAosState aState) sl@0: { sl@0: iState = aState; sl@0: } sl@0: sl@0: void CTestStepAudioOutputStreamARN2::StopTest() sl@0: { sl@0: //We can add other cleanup things here sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: sl@0: void CTestStepAudioOutputStreamARN2::SetExpectedEvent(TInt aClientNumber, TInt aExpectedEvent, TInt aExpectedError) sl@0: { sl@0: iClientEventsToMonitor[aClientNumber]= aExpectedEvent; sl@0: iClientError[aClientNumber] = aExpectedError; sl@0: } sl@0: sl@0: /** sl@0: * FsmCheck sl@0: */ sl@0: TBool CTestStepAudioOutputStreamARN2::FsmCheck(TInt aClientNumber, TInt aEventCode, TInt aError) sl@0: { sl@0: TBool retFsmCheck = ETrue; sl@0: sl@0: if (iState == EStateMonitoringEvents) /*special state to make decisions depending on clients events */ sl@0: { sl@0: if(iClientEventsToMonitor[aClientNumber] == aEventCode && iClientError[aClientNumber] == aError ) sl@0: { sl@0: StateChange(iFsmStateforClient[aClientNumber]); sl@0: } sl@0: else sl@0: { sl@0: retFsmCheck = EFalse; sl@0: } sl@0: sl@0: if(retFsmCheck) sl@0: { sl@0: //Client event has finished sl@0: iClientsRegistered--; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: if(iClientEventsToMonitor[aClientNumber] != aEventCode) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode); sl@0: retFsmCheck = EFalse; sl@0: iTestStepResult = EFail; sl@0: } sl@0: else if(iClientError[aClientNumber] != aError) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError); sl@0: retFsmCheck = EFalse; sl@0: iTestStepResult = EFail; sl@0: } sl@0: } sl@0: return retFsmCheck; sl@0: } sl@0: sl@0: void CTestStepAudioOutputStreamARN2::RegisterClientEventToMonitor(TInt aClientNumber, TInt aEventCode, TInt aError, TFsmAosState aFsmState) sl@0: { sl@0: iClientsRegistered++; sl@0: iClientEventsToMonitor[aClientNumber] = aEventCode; sl@0: iClientError[aClientNumber] = aError; sl@0: iFsmStateforClient[aClientNumber] = aFsmState; sl@0: } sl@0: sl@0: TBool CTestStepAudioOutputStreamARN2::IsMonitoringFinished() sl@0: { sl@0: if(iClientsRegistered == 0) sl@0: { sl@0: return ETrue; sl@0: } sl@0: else sl@0: { sl@0: return EFalse; sl@0: } sl@0: } sl@0: sl@0: CFsmAudioOutputStreamClient::CFsmAudioOutputStreamClient(TInt aClientNumber, TInt aPriority, TMdaPriorityPreference aPref, CTestStepAudioOutputStreamARN2* aParent):iClientNumber(aClientNumber),iParent(aParent) sl@0: { sl@0: iPriority = aPriority; sl@0: iPref = aPref; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * NewL sl@0: * CFsmAudioOutputStreamClient* sl@0: * sl@0: */ sl@0: CFsmAudioOutputStreamClient* CFsmAudioOutputStreamClient::NewL(TInt aClientNumber, TInt aPriority,TMdaPriorityPreference aPref, CTestStepAudioOutputStreamARN2* aParent) sl@0: { sl@0: CFsmAudioOutputStreamClient* s = new(ELeave) CFsmAudioOutputStreamClient(aClientNumber, aPriority, aPref, aParent); sl@0: CleanupStack::PushL(s); sl@0: s->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return s; sl@0: } sl@0: sl@0: /** sl@0: * sl@0: * ConstructL sl@0: * @result void sl@0: * sl@0: */ sl@0: void CFsmAudioOutputStreamClient::ConstructL() sl@0: { sl@0: iMmfAudioOutputStream = CMdaAudioOutputStream::NewL(*this, iPriority, iPref); sl@0: } sl@0: sl@0: CFsmAudioOutputStreamClient::~CFsmAudioOutputStreamClient() sl@0: { sl@0: delete iMmfAudioOutputStream; sl@0: } sl@0: sl@0: void CFsmAudioOutputStreamClient::MaoscOpenComplete(TInt aError) sl@0: { sl@0: iEvent = EAudioOuputStreamOpenComplete; sl@0: iError = aError; sl@0: iParent->Fsm(iClientNumber, iEvent, iError); sl@0: } sl@0: sl@0: void CFsmAudioOutputStreamClient::MaoscPlayComplete(TInt aError) sl@0: { sl@0: iEvent = EAudioOutputStreamPlayComplete; sl@0: iError = aError; sl@0: iParent->Fsm(iClientNumber, iEvent, iError); sl@0: } sl@0: sl@0: void CFsmAudioOutputStreamClient::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/) sl@0: { sl@0: iEvent = EAudioOutputStreamBufferCopied; sl@0: iError = aError; sl@0: iParent->Fsm(iClientNumber, iEvent, iError); sl@0: } sl@0: sl@0: void CFsmAudioOutputStreamClient::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData) sl@0: { sl@0: if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable) sl@0: { sl@0: iEvent = EAudioOutputStreamResourceAvailable; sl@0: iError = KErrNone; sl@0: //Convert TDesc8 to TInt64 sl@0: TMMFTimeIntervalMicroSecondsPckg timeIntvbuf; sl@0: timeIntvbuf.Copy(aNotificationData); sl@0: iResumedPosition = timeIntvbuf(); sl@0: sl@0: iParent->Fsm(iClientNumber, iEvent, iError); sl@0: } sl@0: } sl@0: sl@0: void CFsmAudioOutputStreamClient::TestOpen() sl@0: { sl@0: iMmfAudioOutputStream->Open(NULL); sl@0: } sl@0: sl@0: TInt CFsmAudioOutputStreamClient::TestRegisterAsClient() sl@0: { sl@0: return iMmfAudioOutputStream->RegisterAudioResourceNotification(*this, KMMFEventCategoryAudioResourceAvailable); sl@0: } sl@0: sl@0: TInt CFsmAudioOutputStreamClient::TestWrite(const TDesC8 &aData) sl@0: { sl@0: TRAPD(err,iMmfAudioOutputStream->WriteL(aData)); sl@0: return err; sl@0: } sl@0: sl@0: const TTimeIntervalMicroSeconds& CFsmAudioOutputStreamClient::GetCurrentPosition() sl@0: { sl@0: return iMmfAudioOutputStream->Position(); sl@0: } sl@0: sl@0: TTimeIntervalMicroSeconds& CFsmAudioOutputStreamClient::GetResumedPosition() sl@0: { sl@0: return iResumedPosition; sl@0: } sl@0: sl@0: TInt CFsmAudioOutputStreamClient::BytesPlayed() sl@0: { sl@0: return iMmfAudioOutputStream->GetBytes(); sl@0: } sl@0: // sl@0: //POSITIVE TESTS// sl@0: // sl@0: sl@0: // sl@0: //CTestMmfAclntARN8021 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN8021::CTestMmfAclntARN8021(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN8021* CTestMmfAclntARN8021::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN8021* self = new (ELeave) CTestMmfAclntARN8021(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8021::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN8021::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aEventCode, aError)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioOutputStream1 sl@0: iTestAudioOutputStream1->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete1); sl@0: break; sl@0: case 1: sl@0: // Register iTestAudioOutputStream1 for Notification sl@0: err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: User::Leave(err); sl@0: break; sl@0: } sl@0: // Open iTestAudioOutputStream2 sl@0: iTestAudioOutputStream2->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete2); sl@0: break; sl@0: case 2: sl@0: // iFile2->Read() sl@0: err = iFile2.Read(iBuf2); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading file %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream2->WriteL() sl@0: iTestAudioOutputStream2->WriteL(iBuf2); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied2); sl@0: break; sl@0: case 3: sl@0: // Wait for PlayComplete event for iTestAudioOutputStream2 sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete2, KErrUnderflow); sl@0: break; sl@0: case 4: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: iTestStepResult = EPass; sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMarncResourceAvailableOS1); sl@0: break; sl@0: case 5: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived")); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8021::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Register for notification, but make no request to play audio")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleOutputStream); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN8022 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN8022::CTestMmfAclntARN8022(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN2(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN8022* CTestMmfAclntARN8022::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN8022* self = new (ELeave) CTestMmfAclntARN8022(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8022::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN8022::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aClientNumber, aEventCode, aError)) sl@0: { sl@0: iTestStepResult = (this->*(iStateHandlers[iState]))(); sl@0: if(iTestStepResult != EPass) sl@0: { sl@0: StopTest(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: sl@0: void CTestMmfAclntARN8022::StartTestL() sl@0: { sl@0: iClientList[1]->TestOpen(); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: //Wait for EAudioOuputStreamOpenComplete event sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone); sl@0: StateChange(EStateOpenComplete1); sl@0: } sl@0: sl@0: void CTestMmfAclntARN8022::InitTest() sl@0: { sl@0: iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8022::HandleStateOpenComplete1; sl@0: iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8022::HandleStateOpenComplete2; sl@0: iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8022::HandleStateStreaming2; sl@0: iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8022::HandleStateStreamingComplete1ErrInUse; sl@0: iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8022::HandleStateResourceAvailableOS1; sl@0: iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8022::HandleStateStreamingComplete2ErrUnderflow; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8022::HandleStateOpenComplete1() sl@0: { sl@0: // Register Client1 for Notification sl@0: TInt err = KErrNone; sl@0: err = iClientList[1]->TestRegisterAsClient(); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()")); sl@0: if(err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: iClientList[2]->TestOpen(); sl@0: //Wait for EAudioOuputStreamOpenComplete event sl@0: SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone); sl@0: StateChange(EStateOpenComplete2); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8022::HandleStateOpenComplete2() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()")); sl@0: TInt err = iFileHandle[2].Read(iBuf[2]); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading file %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: INFO_PRINTF1(_L("Pre iTestAudioOutputStream2->WriteL()")); sl@0: err = iClientList[2]->TestWrite(iBuf[2]); sl@0: if( err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream2->WriteL failed %d"),err); sl@0: User::Leave(err); sl@0: } sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()")); sl@0: SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone); sl@0: StateChange(EStateStreaming2); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8022::HandleStateStreaming2() sl@0: { sl@0: TInt err = KErrNone; sl@0: err = iFileHandle[1].Read(iBuf[1]); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile1 %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()")); sl@0: err = iClientList[1]->TestWrite(iBuf[1]); //-Should get Play Error. sl@0: if( err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err); sl@0: return EInconclusive; sl@0: } sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse); sl@0: StateChange(EStateStreamingComplete1ErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8022::HandleStateStreamingComplete1ErrInUse() sl@0: { sl@0: RegisterClientEventToMonitor(1, CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable, KErrNone, EStateResourceAvailableOS1); sl@0: RegisterClientEventToMonitor(2, CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrUnderflow, EStateStreamingComplete2ErrUnderflow); sl@0: StateChange(EStateMonitoringEvents); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8022::HandleStateResourceAvailableOS1() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived")); sl@0: if(IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: StopTest(); sl@0: } sl@0: else sl@0: { sl@0: StateChange(EStateMonitoringEvents); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8022::HandleStateStreamingComplete2ErrUnderflow() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete")); sl@0: if(IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: StopTest(); sl@0: } sl@0: else sl@0: { sl@0: StateChange(EStateMonitoringEvents); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8022::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Register (b4 play, after Open) and Receive Notification of a Resource Available Event.")); sl@0: INFO_PRINTF1(_L("(when audio resource is currently unavailable and then available)")); sl@0: iTestStepResult = EFail; sl@0: sl@0: InitTest(); sl@0: StartTestL(); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN8023 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN8023::CTestMmfAclntARN8023(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN2(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN8023* CTestMmfAclntARN8023::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN8023* self = new (ELeave) CTestMmfAclntARN8023(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8023::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN8023::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError) sl@0: { sl@0: if(FsmCheck(aClientNumber, aEventCode, aError)) sl@0: { sl@0: iTestStepResult = (this->*(iStateHandlers[iState]))(); sl@0: if(iTestStepResult != EPass) sl@0: { sl@0: StopTest(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN8023::InitTest() sl@0: { sl@0: iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8023::HandleStateOpenComplete1; sl@0: iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8023::HandleStateOpenComplete2; sl@0: iStateHandlers[EStateStreaming1] = &CTestMmfAclntARN8023::HandleStateStreaming1; sl@0: iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8023::HandleStateStreaming2; sl@0: iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8023::HandleStateStreamingComplete1ErrInUse; sl@0: iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8023::HandleStateResourceAvailableOS1; sl@0: iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8023::HandleStateStreamingComplete2ErrUnderflow; sl@0: } sl@0: sl@0: void CTestMmfAclntARN8023::StartTestL() sl@0: { sl@0: //Open Client1 sl@0: iClientList[1]->TestOpen(); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: //Wait for EAudioOuputStreamOpenComplete event sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone); sl@0: StateChange(EStateOpenComplete1); sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8023::HandleStateOpenComplete1() sl@0: { sl@0: TInt err = KErrNone; sl@0: err = iFileHandle[1].Read(iBuf[1]); sl@0: if(err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile1 %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: err = iClientList[1]->TestWrite(iBuf[1]); sl@0: if( err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err); sl@0: User::Leave(err); sl@0: } sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()")); sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone); sl@0: StateChange(EStateStreaming1); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8023::HandleStateStreaming1() sl@0: { sl@0: TInt err = KErrNone; sl@0: err = iClientList[1]->TestRegisterAsClient(); sl@0: if(err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: sl@0: iClientList[2]->TestOpen(); sl@0: //Wait for EAudioOuputStreamOpenComplete event sl@0: SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone); sl@0: StateChange(EStateOpenComplete2); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8023::HandleStateOpenComplete2() sl@0: { sl@0: TInt err = iFileHandle[2].Read(iBuf[2]); sl@0: if(err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile2 %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: err = iClientList[2]->TestWrite(iBuf[2]); sl@0: if( err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream2->WriteL failed %d"),err); sl@0: return EInconclusive; sl@0: } sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()")); sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse); sl@0: StateChange(EStateStreamingComplete1ErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8023::HandleStateStreamingComplete1ErrInUse() sl@0: { sl@0: SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone); sl@0: StateChange(EStateStreaming2); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8023::HandleStateStreaming2() sl@0: { sl@0: RegisterClientEventToMonitor(1,CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable,KErrNone,EStateResourceAvailableOS1); sl@0: RegisterClientEventToMonitor(2,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete,KErrUnderflow,EStateStreamingComplete2ErrUnderflow); sl@0: StateChange(EStateMonitoringEvents); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8023::HandleStateResourceAvailableOS1() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived")); sl@0: if(IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: StopTest(); sl@0: } sl@0: else sl@0: { sl@0: StateChange(EStateMonitoringEvents); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8023::HandleStateStreamingComplete2ErrUnderflow() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete")); sl@0: if(IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: StopTest(); sl@0: } sl@0: else sl@0: { sl@0: StateChange(EStateMonitoringEvents); //Didn't finish monitoring sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8023::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Register (at the time of Play) and Receive Notification of a Resource Available Event.")); sl@0: INFO_PRINTF1(_L("(when audio resource is currently available and subsequently unavailable, and then available)")); sl@0: iTestStepResult = EFail; sl@0: sl@0: InitTest(); sl@0: sl@0: StartTestL(); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN8024 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN8024::CTestMmfAclntARN8024(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN8024* CTestMmfAclntARN8024::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN8024* self = new (ELeave) CTestMmfAclntARN8024(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8024::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN8024::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aEventCode, aError)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioOutputStream1 sl@0: iTestAudioOutputStream1->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete1); sl@0: break; sl@0: case 1: sl@0: // iFile1->Read() sl@0: err = iFile1.Read(iBuf1); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile1 %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream1->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()")); sl@0: iTestAudioOutputStream1->WriteL(iBuf1); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied1); sl@0: break; sl@0: case 2: sl@0: // Open iTestAudioOutputStream2 sl@0: iTestAudioOutputStream2->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete2); sl@0: break; sl@0: case 3: sl@0: // iFile2->Read() sl@0: err = iFile2.Read(iBuf2); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading file %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream2->WriteL() sl@0: iTestAudioOutputStream2->WriteL(iBuf2); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete1, KErrInUse); sl@0: break; sl@0: case 4: sl@0: // Wait for BufferCopied event for iTestAudioOutputStream2 sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied2); sl@0: break; sl@0: case 5: sl@0: // Cancellation of notification request for iTestAudioOutputStream1 sl@0: err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification : Return Code = %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: User::Leave(err); sl@0: break; sl@0: } sl@0: // Wait for PlayComplete event for iTestAudioOutputStream2 sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete2, KErrUnderflow); sl@0: break; sl@0: case 6: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: iTestStepResult = EPass; sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMarncResourceAvailableOS1); sl@0: break; sl@0: case 7: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived")); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8024::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Registration (b4 File Open) and Cancellation of the notification request")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Register iTestAudioOutputStream1 for Notification sl@0: TInt err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: return EFail; sl@0: } sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleOutputStream); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN8025 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN8025::CTestMmfAclntARN8025(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN2(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN8025* CTestMmfAclntARN8025::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN8025* self = new (ELeave) CTestMmfAclntARN8025(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8025::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: sl@0: void CTestMmfAclntARN8025::InitTest() sl@0: { sl@0: iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8025::HandleStateOpenComplete1; sl@0: iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8025::HandleStateOpenComplete2; sl@0: iStateHandlers[EStateStreaming1] = &CTestMmfAclntARN8025::HandleStateStreaming1; sl@0: iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8025::HandleStateStreaming2; sl@0: iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8025::HandleStateStreamingComplete1ErrInUse; sl@0: iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8025::HandleStateResourceAvailableOS1; sl@0: iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8025::HandleStateStreamingComplete2ErrUnderflow; sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN8025::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError) sl@0: { sl@0: if(FsmCheck(aClientNumber, aEventCode, aError)) sl@0: { sl@0: iTestStepResult = (this->*(iStateHandlers[iState]))(); sl@0: if(iTestStepResult != EPass) sl@0: { sl@0: StopTest(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN8025::StartTestL() sl@0: { sl@0: //Open Client1 sl@0: iClientList[1]->TestOpen(); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: //Wait for EAudioOuputStreamOpenComplete event sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone); sl@0: StateChange(EStateOpenComplete1); sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8025::HandleStateOpenComplete1() sl@0: { sl@0: TInt err = KErrNone; sl@0: err = iFileHandle[1].Read(iBuf[1]); sl@0: if(err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile1 %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: err = iClientList[1]->TestWrite(iBuf[1]); sl@0: if( err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err); sl@0: User::Leave(err); sl@0: } sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()")); sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone); sl@0: StateChange(EStateStreaming1); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8025::HandleStateStreaming1() sl@0: { sl@0: TInt err = KErrNone; sl@0: err = iClientList[1]->TestRegisterAsClient(); sl@0: if(err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: sl@0: iClientList[2]->TestOpen(); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()")); sl@0: //Wait for EAudioOuputStreamOpenComplete event sl@0: SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone); sl@0: StateChange(EStateOpenComplete2); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8025::HandleStateOpenComplete2() sl@0: { sl@0: TInt err = iFileHandle[2].Read(iBuf[2]); sl@0: if(err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile2 %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: err = iClientList[2]->TestWrite(iBuf[2]); sl@0: if( err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err); sl@0: return EInconclusive; sl@0: } sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()")); sl@0: SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse); sl@0: StateChange(EStateStreamingComplete1ErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8025::HandleStateStreamingComplete1ErrInUse() sl@0: { sl@0: iPositionStop = (static_cast(iClientList[1]->BytesPlayed())* KMicroSecsInOneSec)/(KSampleRate*KBytesPerSample); sl@0: SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone); sl@0: StateChange(EStateStreaming2); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8025::HandleStateStreaming2() sl@0: { sl@0: RegisterClientEventToMonitor(1,CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable,KErrNone,EStateResourceAvailableOS1); sl@0: RegisterClientEventToMonitor(2,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete,KErrUnderflow,EStateStreamingComplete2ErrUnderflow); sl@0: StateChange(EStateMonitoringEvents); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8025::HandleStateResourceAvailableOS1() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived")); sl@0: sl@0: if(IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: StopTest(); sl@0: } sl@0: else sl@0: { sl@0: StateChange(EStateMonitoringEvents); sl@0: } sl@0: TTimeIntervalMicroSeconds positionResume = iClientList[1]->GetResumedPosition(); sl@0: iPositionResume = ((positionResume.Int64()) * KMicroSecsInOneSec / KSampleRate8000Hz); sl@0: if(iPositionResume == iPositionStop) sl@0: { sl@0: INFO_PRINTF3(_L("iTestAudioOutputStream1->Audio Resource Position Matches, Expected=%d, Actual=%d"), I64LOW(iPositionStop.Int64()), I64LOW(iPositionResume.Int64())); sl@0: iTestStepResult = EPass; sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF3(_L("iTestAudioOutputStream1->Audio Resource Position does NOT Match, Expected=%d, Actual=%d"), I64LOW(iPositionStop.Int64()), I64LOW(iPositionResume.Int64())); sl@0: iTestStepResult=EFail; sl@0: } sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN8025::HandleStateStreamingComplete2ErrUnderflow() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete")); sl@0: if(IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: StopTest(); sl@0: } sl@0: else sl@0: { sl@0: StateChange(EStateMonitoringEvents); //Didn't finish monitoring sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8025::PerformTestL() sl@0: { sl@0: INFO_PRINTF1( _L("Get the actual position from where the paused audio can be resumed.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: InitTest(); sl@0: sl@0: StartTestL(); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN8026 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN8026::CTestMmfAclntARN8026(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN8026* CTestMmfAclntARN8026::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN8026* self = new (ELeave) CTestMmfAclntARN8026(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8026::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmCheck sl@0: */ sl@0: TBool CTestMmfAclntARN8026::FsmCheck(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: TBool retFsmCheck = EFalse; sl@0: if (iExpectedEvent != aEventCode) sl@0: { sl@0: if ((aEventCode == EMaoscPlayComplete2)) sl@0: { sl@0: retFsmCheck = ETrue; sl@0: if (iEventOccured == EMarncResourceAvailableOS1) sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: iEventOccured = EMaoscPlayComplete2; sl@0: } sl@0: } sl@0: else if (aEventCode == EMarncResourceAvailableOS1) sl@0: { sl@0: retFsmCheck = ETrue; sl@0: if (iEventOccured == EMaoscPlayComplete2) sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: iEventOccured = EMarncResourceAvailableOS1; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: } sl@0: else if (iExpectedError != aError) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: else sl@0: { sl@0: retFsmCheck = ETrue; sl@0: } sl@0: return retFsmCheck; sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN8026::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aEventCode, aError)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioOutputStream1 sl@0: iTestAudioOutputStream1->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete1); sl@0: break; sl@0: case 1: sl@0: // iFile1->Read() sl@0: err = iFile1.Read(iBuf1); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile1 %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream1->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()")); sl@0: iTestAudioOutputStream1->WriteL(iBuf1); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied1); sl@0: break; sl@0: case 2: sl@0: // Register iTestAudioOutputStream1 for Notification sl@0: err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: User::Leave(err); sl@0: break; sl@0: } sl@0: // Register iTestAudioOutputStream3 for Notification sl@0: err = iTestAudioOutputStream3->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport3, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream3->RegisterAudioResourceNotification()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream3->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: User::Leave(err); sl@0: break; sl@0: } sl@0: // Open iTestAudioOutputStream3 sl@0: iTestAudioOutputStream3->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream3->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete3); sl@0: break; sl@0: case 3: sl@0: // Open iTestAudioOutputStream2 sl@0: iTestAudioOutputStream2->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete2); sl@0: break; sl@0: case 4: sl@0: // iFile2->Read() sl@0: err = iFile2.Read(iBuf2); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading file %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream2->WriteL() sl@0: iTestAudioOutputStream2->WriteL(iBuf2); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete1, KErrInUse); sl@0: break; sl@0: case 5: sl@0: // Wait for BufferCopied event for iTestAudioOutputStream2 sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied2); sl@0: break; sl@0: case 6: sl@0: // iFile3->Read() sl@0: err = iFile3.Read(iBuf3); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile2 %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream3->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream3->WriteL()")); sl@0: iTestAudioOutputStream3->WriteL(iBuf3); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied3, KErrInUse); sl@0: break; sl@0: case 7: sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete3, KErrInUse); sl@0: break; sl@0: case 8: sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete2, KErrUnderflow); sl@0: break; sl@0: case 9: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMarncResourceAvailableOS1); sl@0: break; sl@0: case 10: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived")); sl@0: err = iTestAudioOutputStream1->WillResumePlay(); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WillResumePlay()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->WillResumePlay() - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Set the resume position.. or may be not, since its an offset. sl@0: // iTestAudioOutputStream1->SetPosition(iPosition); sl@0: // iTestAudioOutputStream1->WriteL() sl@0: iTestAudioOutputStream1->WriteL(iBuf1); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()")); sl@0: StateChange(EMaoscBufferCopied1); sl@0: break; sl@0: case 11: sl@0: // Wait for PlayComplete event for iTestAudioOutputStream1 sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete1, KErrUnderflow); sl@0: break; sl@0: case 12: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMarncResourceAvailableOS3); sl@0: break; sl@0: case 13: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream3->NotificationReceived")); sl@0: iTestStepResult = EPass; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN8026::PerformTestL() sl@0: { sl@0: INFO_PRINTF1( _L("Call WillResumePlay()")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleOutputStream); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: sl@0: // sl@0: //NEGATIVE TESTS// sl@0: // sl@0: sl@0: // sl@0: //CTestMmfAclntARN1321 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN1321::CTestMmfAclntARN1321(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN1321* CTestMmfAclntARN1321::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN1321* self = new (ELeave) CTestMmfAclntARN1321(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1321::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN1321::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aEventCode, aError)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioOutputStream1 sl@0: iTestAudioOutputStream1->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete1); sl@0: break; sl@0: case 1: sl@0: // Register iTestAudioOutputStream1 for Notification sl@0: err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryPlaybackComplete); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryPlaybackComplete)")); sl@0: if( err == KErrNotSupported ) sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Returned KErrNotSupported ") ); sl@0: iTestStepResult = EPass; sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: } sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1321::PerformTestL() sl@0: { sl@0: INFO_PRINTF1( _L("Register for notification with an unsupported event type.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleOutputStream); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN1322 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN1322::CTestMmfAclntARN1322(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN1322* CTestMmfAclntARN1322::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN1322* self = new (ELeave) CTestMmfAclntARN1322(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1322::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN1322::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aEventCode, aError)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioOutputStream1 sl@0: iTestAudioOutputStream1->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete1); sl@0: break; sl@0: case 1: sl@0: // Register iTestAudioOutputStream1 for Notification sl@0: err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: User::Leave(err); sl@0: break; sl@0: } sl@0: // Cancellation of notification request for iTestAudioOutputStream1 sl@0: err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryPlaybackComplete); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryPlaybackComplete)")); sl@0: if( err == KErrNotSupported ) sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Returned KErrNotSupported ") ); sl@0: iTestStepResult = EPass; sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: } sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1322::PerformTestL() sl@0: { sl@0: INFO_PRINTF1( _L("Cancel the request for notification with an unsupported event type.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleOutputStream); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN1323 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN1323::CTestMmfAclntARN1323(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN1323* CTestMmfAclntARN1323::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN1323* self = new (ELeave) CTestMmfAclntARN1323(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1323::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN1323::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aEventCode, aError)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioOutputStream1 sl@0: iTestAudioOutputStream1->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete1); sl@0: break; sl@0: case 1: sl@0: // Cancellation of notification request for iTestAudioOutputStream1 sl@0: err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification()")); sl@0: if( err == KErrCancel ) sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Returned KErrCancel ") ); sl@0: iTestStepResult = EPass; sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: } sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1323::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Cancel when no resource Notification is requested.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleOutputStream); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntARN1324 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN1324::CTestMmfAclntARN1324(const TDesC& aTestName) sl@0: : CTestStepAudioOutputStreamARN(aTestName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN1324* CTestMmfAclntARN1324::NewL(const TDesC& aTestName) sl@0: { sl@0: CTestMmfAclntARN1324* self = new (ELeave) CTestMmfAclntARN1324(aTestName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1324::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN1324::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError) sl@0: { sl@0: if (FsmCheck(aEventCode, aError)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioOutputStream1 sl@0: iTestAudioOutputStream1->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()")); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscOpenComplete1); sl@0: break; sl@0: case 1: sl@0: // Register iTestAudioOutputStream1 for Notification sl@0: err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()#1")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#1 - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: User::Leave(err); sl@0: break; sl@0: } sl@0: // Register iTestAudioOutputStream1 for Notification (again) sl@0: err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()#2")); sl@0: if( err == KErrAlreadyExists ) sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#2 - Returned KErrAlreadyExists ") ); sl@0: iTestStepResult = EPass; sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#2 - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: } sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN1324::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Multiple Registration for notification for the same event type.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleOutputStream); sl@0: sl@0: // Start the scheduler - Done only once ! sl@0: CActiveScheduler::Start(); sl@0: sl@0: return iTestStepResult; sl@0: }