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 Multiple Audio Clients. sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file TestMultiClientARN.cpp sl@0: */ sl@0: sl@0: #include "TestAudioClientUtilitiesARN.h" sl@0: sl@0: //------------------------------------------------------------------------------ sl@0: //********************PREQ 797 - Audio Resource Notification******************** sl@0: //------------------------------------------------------------------------------ sl@0: sl@0: // sl@0: //CTestMdaAudioMultiClientCallbackSupport sl@0: // sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMdaAudioMultiClientCallbackSupport* CTestMdaAudioMultiClientCallbackSupport::NewL(MTestAudioResourceNotificationCallback& aCallback) sl@0: { sl@0: return new(ELeave) CTestMdaAudioMultiClientCallbackSupport(aCallback); sl@0: } sl@0: sl@0: /** sl@0: * MarncResourceAvailable sl@0: */ sl@0: void CTestMdaAudioMultiClientCallbackSupport::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: CTestMdaAudioMultiClientCallbackSupport::CTestMdaAudioMultiClientCallbackSupport(MTestAudioResourceNotificationCallback& aCallback):iCallback(aCallback) sl@0: { sl@0: sl@0: } sl@0: sl@0: // sl@0: //CTestMmfAclntMultiClientARN sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntMultiClientARN::CTestMmfAclntMultiClientARN(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: // store the name of this test case sl@0: // this is the name that is used by the script file sl@0: // Each test step initialises it's own name sl@0: iTestStepName=aTestName; sl@0: iHeapSize = 800000; sl@0: iSectName = aSectName; sl@0: } sl@0: sl@0: /** sl@0: * MarncResourceAvailableTest sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::MarncResourceAvailableTest(TUid aNotificationEventId, const TDesC8& aNotificationData, CTestMdaAudioMultiClientCallbackSupport& aMdaAudioMultiClientCallbackSupport) 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 (&aMdaAudioMultiClientCallbackSupport == iMdaAudioPlayerCallbackSupport) sl@0: { sl@0: INFO_PRINTF1(_L("iAudioPlayer -> MMMFAudioResourceNotificationCallback NotificationReceived")); sl@0: TRAP(iError, FsmL(EMarncResourceAvailablePlayer)); sl@0: } sl@0: else if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioRecorderCallbackSupport) sl@0: { sl@0: INFO_PRINTF1(_L("iAudioRecorder -> MMMFAudioResourceNotificationCallback NotificationReceived")); sl@0: TRAP(iError, FsmL(EMarncResourceAvailableRecorder)); sl@0: } sl@0: else if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioOutputStreamCallbackSupport) sl@0: { sl@0: INFO_PRINTF1(_L("iAudioOutputStream -> MMMFAudioResourceNotificationCallback NotificationReceived")); sl@0: TRAP(iError, FsmL(EMarncResourceAvailableOS)); 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: * MapcInitCompleteTest sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration) sl@0: { sl@0: iDuration = aDuration; sl@0: INFO_PRINTF2(_L("iAudioPlayer -> MMdaAudioPlayerCallback InitComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMapcInitComplete, aError)); sl@0: } sl@0: sl@0: /** sl@0: * MapcPlayCompleteTest sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::MapcPlayComplete(TInt aError) sl@0: { sl@0: INFO_PRINTF2(_L("iAudioPlayer -> MMdaAudioPlayerCallback PlayComplete (%d)"), aError); sl@0: TRAP(iError, FsmL(EMapcPlayComplete, aError)); sl@0: } sl@0: sl@0: /** sl@0: * MoscoStateChangeEventTest sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::MoscoStateChangeEvent(CBase* /*aObject*/, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode) sl@0: { sl@0: INFO_PRINTF1(_L("iAudioRecorder -> MMdaObjectStateChangeObserver StateChanged")); sl@0: INFO_PRINTF4(_L("iTestAudioRecorder -> aErrorCode : %d, aPreviousState : %d, aCurrentState : %d"), aErrorCode, aPreviousState, aCurrentState); sl@0: TRAP(iError, FsmL(EMoscoStateChangeEvent, aErrorCode, iTestAudioRecorder->State())); sl@0: } sl@0: sl@0: /** sl@0: * MMdaAudioOutputStreamCallback->MaoscOpenComplete sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::MaoscOpenComplete(TInt aError) sl@0: { sl@0: INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscOpenComplete (%d)"),aError); sl@0: TRAP(iError, FsmL(EMaoscOpenComplete, aError)); sl@0: } sl@0: sl@0: /** sl@0: * MMdaAudioOutputStreamCallback->MaoscBufferCopied sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/) sl@0: { sl@0: INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscBufferCopied (%d)"), aError); sl@0: TRAP(iError, FsmL(EMaoscBufferCopied, aError)); sl@0: } sl@0: sl@0: /** sl@0: * MMdaAudioOutputStreamCallback->MaoscPlayComplete sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::MaoscPlayComplete(TInt aError) sl@0: { sl@0: INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscPlayComplete (%d)"), aError); sl@0: TRAP(iError, FsmL(EMaoscPlayComplete, aError)); sl@0: } sl@0: sl@0: /** sl@0: * DoTestStepPreambleL sl@0: */ sl@0: TVerdict CTestMmfAclntMultiClientARN::DoTestStepPreambleL() sl@0: { sl@0: iError = KErrTimedOut; sl@0: TPtrC filename; sl@0: TVerdict verdict; sl@0: sl@0: // Install the scheduler - Call base DoTestStepPreambleL() sl@0: verdict = CTestMmfAclntStep::DoTestStepPreambleL(); sl@0: if (verdict == EFail) sl@0: { sl@0: return verdict; sl@0: } sl@0: sl@0: iEventChecker = CMultiEventChecker::NewL(); sl@0: //************** Initialise CMdaAudioPlayerUtility*************** sl@0: INFO_PRINTF1(_L("Initialise CMdaAudioPlayerUtility : EMdaPriorityNormal")); sl@0: // Get file name sl@0: if(!GetStringFromConfig(iSectName, _L("playerAudioFile1"), filename)) sl@0: { sl@0: return EInconclusive; sl@0: } sl@0: GetDriveName(iFilenamePlayer); sl@0: iFilenamePlayer.Append(filename); sl@0: sl@0: // Callback Handler sl@0: iMdaAudioPlayerCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this); sl@0: sl@0: // Initialise Audio Player sl@0: iTestAudioPlayer = CMdaAudioPlayerUtility::NewL(*this, EMdaPriorityNormal); sl@0: sl@0: //************** Initialise CMdaAudioRecorderUtility************* sl@0: INFO_PRINTF1(_L("Initialise CMdaAudioRecorderUtility : EMdaPriorityMax")); sl@0: // Get file name sl@0: if(!GetStringFromConfig(iSectName, _L("playerAudioFile2"), filename)) sl@0: { sl@0: return EInconclusive; sl@0: } sl@0: GetDriveName(iFilenameRecorder); sl@0: iFilenameRecorder.Append(filename); sl@0: sl@0: // Callback Handler sl@0: iMdaAudioRecorderCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this); sl@0: sl@0: // Initialise Audio Recorder sl@0: iTestAudioRecorder = CMdaAudioRecorderUtility::NewL(*this, NULL, EMdaPriorityMax); sl@0: sl@0: //************** Initialise CMdaAudioOutputStream**************** sl@0: INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream : EMdaPriorityMin")); 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: // Callback Handler sl@0: iMdaAudioOutputStreamCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this); sl@0: sl@0: // Initialise iTestAudioOutputStream sl@0: TRAP(err, iTestAudioOutputStream = CMdaAudioOutputStream::NewL(*this, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality)); sl@0: if (err != KErrNone || iTestAudioOutputStream == NULL ) sl@0: { sl@0: INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream = %d"), err); sl@0: return EInconclusive; sl@0: } sl@0: // Open RFile sl@0: err = iFile.Open(iFs, KStreamRawFile1, EFileRead); sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error opening iFile = %d"), err); sl@0: return EFail; sl@0: } sl@0: // Get size of iFile sl@0: err = iFile.Size(iFileSize); 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: // Initialise iBuf sl@0: iBuf.CreateMaxL(iFileSize); 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 CTestMmfAclntMultiClientARN::DoTestStepPostambleL() sl@0: { sl@0: // Delete all the Audio Client utilities. sl@0: if (iTestAudioPlayer) sl@0: iTestAudioPlayer->Close(); sl@0: delete iTestAudioPlayer; sl@0: iTestAudioPlayer = NULL; sl@0: iTestAudioRecorder->Close(); sl@0: delete iTestAudioRecorder; sl@0: iTestAudioRecorder = NULL; sl@0: delete iTestAudioOutputStream; sl@0: iTestAudioOutputStream = NULL; sl@0: // Delete CTestMdaAudioRecorderCallbackSupport sl@0: delete iMdaAudioPlayerCallbackSupport; sl@0: delete iMdaAudioRecorderCallbackSupport; sl@0: delete iMdaAudioOutputStreamCallbackSupport; sl@0: // Close RBuf8 sl@0: iBuf.Close(); sl@0: // Delete the CCallBackTimer. sl@0: delete iCallBackTimer; sl@0: iCallBackTimer=NULL; sl@0: // Close the File Handles sl@0: iFile.Close(); sl@0: iFs.Close(); sl@0: delete iEventChecker; sl@0: sl@0: return CTestMmfAclntStep::DoTestStepPostambleL(); sl@0: } sl@0: sl@0: /** sl@0: * DoTestStepL sl@0: */ sl@0: TVerdict CTestMmfAclntMultiClientARN::DoTestStepL() sl@0: { sl@0: return( DoTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * StateInit sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::StateInit() sl@0: { sl@0: iExpectedEvent=EIdleMulti; sl@0: iExpectedRecorderState=CMdaAudioClipUtility::ENotReady; sl@0: iExpectedError=KErrNone; sl@0: iState=0; sl@0: } sl@0: sl@0: /** sl@0: * StateChange sl@0: */ sl@0: void CTestMmfAclntMultiClientARN::StateChange(TMmfAudioMultiClientEvents aExpectedEvent, TInt aExpectedError, CMdaAudioClipUtility::TState aExpectedRecorderState) sl@0: { sl@0: iExpectedEvent=aExpectedEvent; sl@0: iExpectedRecorderState=aExpectedRecorderState; sl@0: iExpectedError=aExpectedError; sl@0: iState++; sl@0: } sl@0: sl@0: /** sl@0: * FsmCheck sl@0: */ sl@0: TBool CTestMmfAclntMultiClientARN::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: TBool retFsmCheck = EFalse; sl@0: if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) sl@0: { sl@0: INFO_PRINTF1(_L("Underflow !")); sl@0: } sl@0: else 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 if (iExpectedRecorderState != aRecorderState) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); 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: //CTestMmfAclntARN9001 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9001::CTestMmfAclntARN9001(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9001* CTestMmfAclntARN9001::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9001* self = new (ELeave) CTestMmfAclntARN9001(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9001::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmCheck sl@0: */ sl@0: TBool CTestMmfAclntARN9001::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: TBool retFsmCheck = EFalse; sl@0: if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) sl@0: { sl@0: INFO_PRINTF1(_L("Underflow !")); sl@0: } sl@0: else if (iExpectedEvent != aEventCode) sl@0: { sl@0: if ((aEventCode == EMoscoStateChangeEvent)) sl@0: { sl@0: retFsmCheck = ETrue; sl@0: if (iEventOccured == EMarncResourceAvailableOS) sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: iEventOccured = EMoscoStateChangeEvent; sl@0: } sl@0: } sl@0: else if (aEventCode == EMarncResourceAvailableOS) sl@0: { sl@0: retFsmCheck = ETrue; sl@0: if (iEventOccured == EMoscoStateChangeEvent) sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: iEventOccured = EMarncResourceAvailableOS; 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 if (iExpectedRecorderState != aRecorderState) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); 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 CTestMmfAclntARN9001::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (FsmCheck(aEventCode, aError, aRecorderState)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMapcInitComplete); sl@0: break; sl@0: case 1: sl@0: // Play iTestAudioPlayer sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 2: sl@0: // Play iTestAudioRecorder sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); sl@0: break; sl@0: case 3: sl@0: // iTestAudioPlayer gets PlayError. sl@0: StateChange(EMapcPlayComplete, KErrInUse); sl@0: break; sl@0: case 4: sl@0: // Register iTestAudioPlayer for Notification sl@0: err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMaoscOpenComplete); sl@0: break; sl@0: case 5: sl@0: // iFile->Read() sl@0: err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied, KErrInUse); sl@0: break; sl@0: case 6: sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete, KErrInUse); sl@0: break; sl@0: case 7: sl@0: // Delete the instance iTestAudioPlayer sl@0: delete iTestAudioPlayer; sl@0: iTestAudioPlayer = NULL; sl@0: INFO_PRINTF1(_L("delete iTestAudioPlayer")); sl@0: User::After(100000); sl@0: // Wait for iTestAudioRecorder to complete playing sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 8: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMarncResourceAvailableOS, KErrNone); sl@0: break; sl@0: case 9: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->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 CTestMmfAclntARN9001::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Receipt of Notification (on deleting the Audio Play Client instance of a Notified Client) of a Resource Available Event.")); 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(EIdleMulti, CMdaAudioClipUtility::ENotReady); 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: //CTestMmfAclntARN9002 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9002::CTestMmfAclntARN9002(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9002* CTestMmfAclntARN9002::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9002* self = new (ELeave) CTestMmfAclntARN9002(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9002::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: void CTestMmfAclntARN9002::InitTest() sl@0: { sl@0: iEventChecker = CMultiEventChecker::NewL(); sl@0: //Keep adding handlers sl@0: iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9002::HandleStateApInitComplete; sl@0: iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9002::HandleStateRecorderOpen; sl@0: iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9002::HandleStateRecorderPlaying; sl@0: iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9002::HandleApPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9002::HandleStateAosOpenComplete; sl@0: iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9002::HandleStateAosBufferCopiedKErrInUse; sl@0: iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9002::HandleStateAosPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9002::HandleStateRecorderrelease; sl@0: iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9002::HandleStateApResourceAvailable; sl@0: iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9002::HandleStateApPlayComplete; sl@0: iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9002::HandleStateAosResourceAvailable; sl@0: } sl@0: sl@0: void CTestMmfAclntARN9002::StartTestL() sl@0: { sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApInitComplete); sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateApInitComplete() sl@0: { sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecoderOpen); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateRecorderOpen() sl@0: { sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); sl@0: iEventChecker->SetExpectedState(EStateRecoderPlaying); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateRecorderPlaying() sl@0: { sl@0: iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleApPlayCompleteKErrInUse() sl@0: { sl@0: TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateAosOpenComplete); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateAosOpenComplete() sl@0: { sl@0: // iFile->Read() sl@0: TInt err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateAosBufferCopiedKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateAosPlayCompleteKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecorderrelease); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateRecorderrelease() sl@0: { sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApResourceAvailable); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateApResourceAvailable() sl@0: { sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); sl@0: TInt err = iTestAudioPlayer->WillResumePlay(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: iTestAudioPlayer->SetPosition(iPosition); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); sl@0: // Play iTestAudioPlayer sl@0: iTestAudioPlayer->Play(); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrNone,EStateApPlayComplete); sl@0: iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable); sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateApPlayComplete() sl@0: { sl@0: INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); sl@0: if(iEventChecker->IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: iCallBackTimer->Cancel(); sl@0: iEventChecker->StopTest(); sl@0: } sl@0: else sl@0: { sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::HandleStateAosResourceAvailable() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); sl@0: if(iEventChecker->IsMonitoringFinished()) sl@0: { sl@0: iCallBackTimer->Cancel(); sl@0: iTestStepResult = EPass; sl@0: iEventChecker->StopTest(); sl@0: } sl@0: else sl@0: { sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: void CTestMmfAclntARN9002::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) sl@0: { sl@0: iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); sl@0: if(iTestStepResult != EPass) sl@0: { sl@0: iEventChecker->StopTest(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN9002::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) sl@0: { sl@0: DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); sl@0: } sl@0: if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) sl@0: { sl@0: DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); sl@0: } sl@0: if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) sl@0: { sl@0: DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); sl@0: } sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9002::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Receipt of Notification (on completion of play of a Notifed Client) of a Resource Available Event.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the handler functions sl@0: InitTest(); sl@0: sl@0: // Initiate the process 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: // sl@0: //CTestMmfAclntARN9003 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9003::CTestMmfAclntARN9003(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9003* CTestMmfAclntARN9003::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9003* self = new (ELeave) CTestMmfAclntARN9003(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9003::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmL sl@0: */ sl@0: void CTestMmfAclntARN9003::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (FsmCheck(aEventCode, aError, aRecorderState)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMapcInitComplete); sl@0: break; sl@0: case 1: sl@0: // Play iTestAudioPlayer sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 2: sl@0: // Play iTestAudioRecorder sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); sl@0: break; sl@0: case 3: sl@0: // iTestAudioPlayer gets PlayError. sl@0: StateChange(EMapcPlayComplete, KErrInUse); sl@0: break; sl@0: case 4: sl@0: // Register iTestAudioPlayer for Notification sl@0: err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMaoscOpenComplete); sl@0: break; sl@0: case 5: sl@0: // iFile->Read() sl@0: err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied, KErrInUse); sl@0: break; sl@0: case 6: sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete, KErrInUse); sl@0: break; sl@0: case 7: sl@0: // Wait for iTestAudioRecorder to complete playing sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 8: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMarncResourceAvailablePlayer, KErrNone); sl@0: break; sl@0: case 9: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); sl@0: err = iTestAudioPlayer->WillResumePlay(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: iTestAudioPlayer->SetPosition(iPosition); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); sl@0: // Play iTestAudioPlayer sl@0: iTestAudioPlayer->Play(); sl@0: // Stop & Close iTestAudioPlayer sl@0: WaitWithTimeout(iRequestStatus,1000000); sl@0: iTestAudioPlayer->Stop(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Stop()")); sl@0: iTestAudioPlayer->Close(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Close()")); sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMarncResourceAvailableOS); sl@0: break; sl@0: case 10: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->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 CTestMmfAclntARN9003::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Receipt of Notification (on stopping play of a Notitifed Client) of a Resource Available Event.")); 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(EIdleMulti, CMdaAudioClipUtility::ENotReady); 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: //CTestMmfAclntARN9004 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9004::CTestMmfAclntARN9004(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9004* CTestMmfAclntARN9004::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9004* self = new (ELeave) CTestMmfAclntARN9004(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9004::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmCheck sl@0: */ sl@0: TBool CTestMmfAclntARN9004::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: TBool retFsmCheck = EFalse; sl@0: if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) sl@0: { sl@0: INFO_PRINTF1(_L("Underflow !")); sl@0: } sl@0: else if (iExpectedEvent != aEventCode) sl@0: { sl@0: if ((aEventCode == EMoscoStateChangeEvent)) sl@0: { sl@0: retFsmCheck = ETrue; sl@0: #ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND sl@0: if (iEventOccured == EMarncResourceAvailablePlayer) sl@0: #else sl@0: if (iEventOccured == EMarncResourceAvailableOS) sl@0: #endif sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: iEventOccured = EMoscoStateChangeEvent; sl@0: } sl@0: } sl@0: #ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND sl@0: else if (aEventCode == EMarncResourceAvailablePlayer) sl@0: #else sl@0: else if (aEventCode == EMarncResourceAvailableOS) sl@0: #endif sl@0: { sl@0: retFsmCheck = ETrue; sl@0: if (iEventOccured == EMoscoStateChangeEvent) sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: #ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND sl@0: iEventOccured = EMarncResourceAvailablePlayer; sl@0: #else sl@0: iEventOccured = EMarncResourceAvailableOS; sl@0: #endif 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 if (iExpectedRecorderState != aRecorderState) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); 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 CTestMmfAclntARN9004::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (FsmCheck(aEventCode, aError, aRecorderState)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMapcInitComplete); sl@0: break; sl@0: case 1: sl@0: // Play iTestAudioPlayer sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 2: sl@0: // Play iTestAudioRecorder sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); sl@0: break; sl@0: case 3: sl@0: // iTestAudioPlayer gets PlayError. sl@0: StateChange(EMapcPlayComplete, KErrInUse); sl@0: break; sl@0: case 4: sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Register iTestAudioPlayer for Notification sl@0: err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMaoscOpenComplete); sl@0: break; sl@0: case 5: sl@0: // iFile->Read() sl@0: err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied, KErrInUse); sl@0: break; sl@0: case 6: sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete, KErrInUse); sl@0: break; sl@0: case 7: sl@0: // Wait for iTestAudioRecorder to complete playing sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 8: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMarncResourceAvailableOS); sl@0: break; sl@0: case 9: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); sl@0: #ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND sl@0: StateChange(EMarncResourceAvailablePlayer); sl@0: #else sl@0: iTestStepResult = EPass; sl@0: CActiveScheduler::Stop(); sl@0: #endif sl@0: break; sl@0: #ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND sl@0: case 10: sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); sl@0: err = iTestAudioPlayer->WillResumePlay(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: iTestStepResult = EPass; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: #endif sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9004::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Receipt of Notification (chronological order for equal priority clients) of a Resource Available Event.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: StateInit(); sl@0: sl@0: // Set the priorities sl@0: iTestAudioPlayer->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality); sl@0: INFO_PRINTF1(_L("Reset Priority for CMdaAudioPlayerUtility : EMdaPriorityMin")); sl@0: iTestAudioOutputStream->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality); sl@0: INFO_PRINTF1(_L("Reset Priority for CMdaAudioOutputStream : EMdaPriorityMin")); sl@0: sl@0: // Begin the process sl@0: FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady); 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: //CTestMmfAclntARN9005 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9005::CTestMmfAclntARN9005(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9005* CTestMmfAclntARN9005::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9005* self = new (ELeave) CTestMmfAclntARN9005(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9005::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: void CTestMmfAclntARN9005::InitTest() sl@0: { sl@0: //Keep adding handlers sl@0: iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9005::HandleStateApInitComplete; sl@0: iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9005::HandleStateRecorderOpen; sl@0: iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9005::HandleStateRecorderPlaying; sl@0: iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9005::HandleApPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9005::HandleStateAosOpenComplete; sl@0: iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9005::HandleStateAosBufferCopiedKErrInUse; sl@0: iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9005::HandleStateAosPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9005::HandleStateRecorderrelease; sl@0: iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9005::HandleStateApResourceAvailable; sl@0: iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9005::HandleStateApPlayComplete; sl@0: iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9005::HandleStateAosResourceAvailable; sl@0: } sl@0: sl@0: void CTestMmfAclntARN9005::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) sl@0: { sl@0: iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); sl@0: if(iTestStepResult != EPass) sl@0: { sl@0: iEventChecker->StopTest(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN9005::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) sl@0: { sl@0: DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); sl@0: } sl@0: if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) sl@0: { sl@0: DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); sl@0: } sl@0: if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) sl@0: { sl@0: DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN9005::StartTestL() sl@0: { sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApInitComplete); sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateApInitComplete() sl@0: { sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecoderOpen); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateRecorderOpen() sl@0: { sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); sl@0: iEventChecker->SetExpectedState(EStateRecoderPlaying); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateRecorderPlaying() sl@0: { sl@0: iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleApPlayCompleteKErrInUse() sl@0: { sl@0: TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateAosOpenComplete); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateAosOpenComplete() sl@0: { sl@0: // iFile->Read() sl@0: TInt err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateAosBufferCopiedKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateAosPlayCompleteKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecorderrelease); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateRecorderrelease() sl@0: { sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApResourceAvailable); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateApResourceAvailable() sl@0: { sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); sl@0: TInt err = iTestAudioPlayer->WillResumePlay(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: return EFail; sl@0: } sl@0: iTestAudioPlayer->SetPosition(iPosition); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); sl@0: // Play iTestAudioPlayer sl@0: iTestAudioPlayer->Play(); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrNone,EStateApPlayComplete); sl@0: iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable); sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateApPlayComplete() sl@0: { sl@0: INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); sl@0: if(iEventChecker->IsMonitoringFinished()) sl@0: { sl@0: iTestStepResult = EPass; sl@0: iCallBackTimer->Cancel(); sl@0: iEventChecker->StopTest(); sl@0: } sl@0: else sl@0: { sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9005::HandleStateAosResourceAvailable() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); sl@0: if(iEventChecker->IsMonitoringFinished()) sl@0: { sl@0: iCallBackTimer->Cancel(); sl@0: iTestStepResult = EPass; sl@0: iEventChecker->StopTest(); sl@0: } sl@0: else sl@0: { sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9005::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Non Receipt of Notification (on calling WillResumePlay() of a notified client) of a Resource Available Event.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the state variables sl@0: InitTest(); sl@0: sl@0: // Begin the process 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: //CTestMmfAclntARN9006 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9006::CTestMmfAclntARN9006(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9006* CTestMmfAclntARN9006::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9006* self = new (ELeave) CTestMmfAclntARN9006(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9006::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: void CTestMmfAclntARN9006::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) sl@0: { sl@0: iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); sl@0: if(iTestStepResult != EPass) sl@0: { sl@0: iEventChecker->StopTest(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN9006::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) sl@0: { sl@0: DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); sl@0: } sl@0: if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) sl@0: { sl@0: DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); sl@0: } sl@0: if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) sl@0: { sl@0: DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN9006::InitTest() sl@0: { sl@0: //Keep adding handlers sl@0: iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9006::HandleStateApInitComplete; sl@0: iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9006::HandleStateRecorderOpen; sl@0: iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9006::HandleStateRecorderPlaying; sl@0: iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9006::HandleApPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9006::HandleStateAosOpenComplete; sl@0: iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9006::HandleStateAosBufferCopiedKErrInUse; sl@0: iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9006::HandleStateAosPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9006::HandleStateRecorderrelease; sl@0: iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9006::HandleStateApResourceAvailable; sl@0: iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9006::HandleStateAosResourceAvailable; sl@0: } sl@0: sl@0: void CTestMmfAclntARN9006::StartTestL() sl@0: { sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApInitComplete); sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateApInitComplete() sl@0: { sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecoderOpen); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateRecorderOpen() sl@0: { sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); sl@0: iEventChecker->SetExpectedState(EStateRecoderPlaying); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateRecorderPlaying() sl@0: { sl@0: iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleApPlayCompleteKErrInUse() sl@0: { sl@0: TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: return EFail; sl@0: } sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: return EFail; sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateAosOpenComplete); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateAosOpenComplete() sl@0: { sl@0: // iFile->Read() sl@0: TInt err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateAosBufferCopiedKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateAosPlayCompleteKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecorderrelease); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateRecorderrelease() sl@0: { sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApResourceAvailable); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateApResourceAvailable() sl@0: { sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived")); sl@0: TInt err = iTestAudioPlayer->WillResumePlay(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()")); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: return EFail; sl@0: } sl@0: iCallBackTimer->After(10000000); sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMarncResourceAvailableOS,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateAosResourceAvailable); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9006::HandleStateAosResourceAvailable() sl@0: { sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived")); sl@0: iCallBackTimer->Cancel(); sl@0: iTestStepResult = EPass; sl@0: iEventChecker->StopTest(); sl@0: return EPass; sl@0: } sl@0: sl@0: /** sl@0: * PerformTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9006::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Receipt of Notification (on timeout of a notified client, 1 sec assumed, call WillResumePlay() after 1 second) of a Resource Available Event.")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the handler functions sl@0: InitTest(); sl@0: sl@0: // Initiate the process 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: //CTestMmfAclntARN9007 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9007::CTestMmfAclntARN9007(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9007* CTestMmfAclntARN9007::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9007* self = new (ELeave) CTestMmfAclntARN9007(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9007::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: /** sl@0: * FsmCheck sl@0: */ sl@0: TBool CTestMmfAclntARN9007::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: TBool retFsmCheck = EFalse; sl@0: if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow)) sl@0: { sl@0: INFO_PRINTF1(_L("Underflow !")); sl@0: } sl@0: else if (iExpectedEvent != aEventCode) sl@0: { sl@0: if ((aEventCode == EMoscoStateChangeEvent)) sl@0: { sl@0: retFsmCheck = ETrue; sl@0: if (iEventOccured == EMarncResourceAvailableOS) sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: iEventOccured = EMoscoStateChangeEvent; sl@0: } sl@0: } sl@0: else if (aEventCode == EMarncResourceAvailableOS) sl@0: { sl@0: retFsmCheck = ETrue; sl@0: if (iEventOccured == EMoscoStateChangeEvent) sl@0: { sl@0: return retFsmCheck; sl@0: } sl@0: else sl@0: { sl@0: iEventOccured = EMarncResourceAvailableOS; 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 if (iExpectedRecorderState != aRecorderState) sl@0: { sl@0: ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState); 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 CTestMmfAclntARN9007::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (FsmCheck(aEventCode, aError, aRecorderState)) sl@0: { sl@0: TInt err = KErrNone; sl@0: switch (iState) sl@0: { sl@0: case 0: sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMapcInitComplete); sl@0: break; sl@0: case 1: sl@0: // Play iTestAudioPlayer sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 2: sl@0: // Play iTestAudioRecorder sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying); sl@0: break; sl@0: case 3: sl@0: // iTestAudioPlayer gets PlayError. sl@0: StateChange(EMapcPlayComplete, KErrInUse); sl@0: break; sl@0: case 4: sl@0: // Register iTestAudioPlayer for Notification sl@0: err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: StateChange(EMaoscOpenComplete); sl@0: break; sl@0: case 5: sl@0: // iFile->Read() sl@0: err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscBufferCopied, KErrInUse); sl@0: break; sl@0: case 6: sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: StateChange(EMaoscPlayComplete, KErrInUse); sl@0: break; sl@0: case 7: sl@0: // Cancel the Notification request for iTestAudioPlayer sl@0: err = iTestAudioPlayer->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification : Return Code = %d"), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: break; sl@0: } sl@0: // Wait for iTestAudioRecorder to complete playing sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: break; sl@0: case 8: sl@0: // Timer to check if Notification Event Occurs. sl@0: iCallBackTimer->After(2000000); sl@0: // Set ExpectedEvent and change the State sl@0: StateChange(EMarncResourceAvailableOS); sl@0: break; sl@0: case 9: sl@0: iCallBackTimer->Cancel(); // in case something else stopped the AS sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->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 CTestMmfAclntARN9007::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Receipt of Notification (on cancellation of the notification of a client that has requested for notification) of a Resource Available Event.")); sl@0: INFO_PRINTF1(_L("[Cancel before receipt of Notification]")); 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(EIdleMulti, CMdaAudioClipUtility::ENotReady); 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: //CTestMmfAclntARN9008 sl@0: // sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestMmfAclntARN9008::CTestMmfAclntARN9008(const TDesC& aTestName, const TDesC& aSectName) sl@0: : CTestMmfAclntMultiClientARN(aTestName, aSectName) sl@0: {} sl@0: sl@0: /** sl@0: * NewL sl@0: */ sl@0: CTestMmfAclntARN9008* CTestMmfAclntARN9008::NewL(const TDesC& aTestName, const TDesC& aSectName) sl@0: { sl@0: CTestMmfAclntARN9008* self = new (ELeave) CTestMmfAclntARN9008(aTestName, aSectName); sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * DoTestL sl@0: */ sl@0: TVerdict CTestMmfAclntARN9008::DoTestL() sl@0: { sl@0: return( PerformTestL() ); sl@0: } sl@0: sl@0: void CTestMmfAclntARN9008::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState)) sl@0: { sl@0: iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))(); sl@0: if(iTestStepResult != EPass) sl@0: { sl@0: iEventChecker->StopTest(); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN9008::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer) sl@0: { sl@0: DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError); sl@0: } sl@0: if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder) sl@0: { sl@0: DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState); sl@0: } sl@0: if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS) sl@0: { sl@0: DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError); sl@0: } sl@0: } sl@0: sl@0: void CTestMmfAclntARN9008::InitTest() sl@0: { sl@0: //Keep adding handlers sl@0: iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9008::HandleStateApInitComplete; sl@0: iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9008::HandleStateRecorderOpen; sl@0: iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9008::HandleStateRecorderPlaying; sl@0: iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9008::HandleApPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9008::HandleStateAosOpenComplete; sl@0: iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9008::HandleStateAosBufferCopiedKErrInUse; sl@0: iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9008::HandleStateAosPlayCompleteKErrInUse; sl@0: iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9008::HandleStateRecorderrelease; sl@0: iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9008::HandleStateApResourceAvailable; sl@0: iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9008::HandleStateApPlayComplete; sl@0: iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9008::HandleStateAosResourceAvailable; sl@0: iStateHandlers[EStateRecorderResumePlay] = &CTestMmfAclntARN9008::HandleStateRecorderResumePlay; sl@0: iStateHandlers[EStateRecorderPlayComplete]= &CTestMmfAclntARN9008::HandleStateRecorderPlayComplete; sl@0: } sl@0: sl@0: void CTestMmfAclntARN9008::StartTestL() sl@0: { sl@0: // Open iTestAudioPlayer sl@0: iTestAudioPlayer->OpenFileL(iFilenamePlayer); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApInitComplete); sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateApInitComplete() sl@0: { sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Open iTestAudioRecorder sl@0: iTestAudioRecorder->OpenFileL(iFilenameRecorder); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()")); sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecoderOpen); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateRecorderOpen() sl@0: { sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); sl@0: iEventChecker->SetExpectedState(EStateRecoderPlaying); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateRecorderPlaying() sl@0: { sl@0: iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleApPlayCompleteKErrInUse() sl@0: { sl@0: TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: // Register iTestAudioOutputStream for Notification sl@0: err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: // Open iTestAudioOutputStream sl@0: iTestAudioOutputStream->Open(NULL); sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->Open()")); sl@0: // Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateAosOpenComplete); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateAosOpenComplete() sl@0: { sl@0: // iFile->Read() sl@0: TInt err = iFile.Read(iBuf); //-synchronous sl@0: if (err != KErrNone) sl@0: { sl@0: INFO_PRINTF2(_L("Error reading iFile %d"), err); sl@0: User::Leave(err); sl@0: } sl@0: // iTestAudioOutputStream->WriteL() sl@0: INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()")); sl@0: iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error. sl@0: // Set ExpectedEvent & ExpectedError and change the State sl@0: iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateAosBufferCopiedKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse); sl@0: iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateAosPlayCompleteKErrInUse() sl@0: { sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecorderrelease); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateRecorderrelease() sl@0: { sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone); sl@0: iEventChecker->SetExpectedState(EStateApResourceAvailable); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateApResourceAvailable() sl@0: { sl@0: // iTestAudioPlayer resumes the playback. sl@0: iTestAudioPlayer->SetPosition(iPosition); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()")); sl@0: iTestAudioPlayer->Play(); sl@0: INFO_PRINTF1(_L("iTestAudioPlayer->Play()")); sl@0: // Cancel the Notification request for iTestAudioPlayer sl@0: TInt err = iTestAudioPlayer->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable); sl@0: INFO_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification : Return Code = %d"), err); sl@0: if( err != KErrNone ) sl@0: { sl@0: ERR_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err); sl@0: iTestStepResult = EFail; sl@0: CActiveScheduler::Stop(); sl@0: return EFail; sl@0: } sl@0: // Play iTestAudioRecorder sl@0: iTestAudioRecorder->PlayL(); sl@0: INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()")); sl@0: // Set ExpectedEvent and change the State sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying); sl@0: iEventChecker->SetExpectedState(EStateRecorderResumePlay); sl@0: return EPass; sl@0: } sl@0: TVerdict CTestMmfAclntARN9008::HandleStateRecorderResumePlay() sl@0: { sl@0: iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrInUse,EStateApPlayComplete); sl@0: iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable); sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: return EPass; sl@0: } sl@0: TVerdict CTestMmfAclntARN9008::HandleStateApPlayComplete() sl@0: { sl@0: INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); sl@0: if(iEventChecker->IsMonitoringFinished()) sl@0: { sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecorderPlayComplete); sl@0: } sl@0: else sl@0: { sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateAosResourceAvailable() sl@0: { sl@0: INFO_PRINTF1(_L("AudioPlayer->PlayComplete")); sl@0: if(iEventChecker->IsMonitoringFinished()) sl@0: { sl@0: iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen); sl@0: iEventChecker->SetExpectedState(EStateRecorderPlayComplete); sl@0: } sl@0: else sl@0: { sl@0: iEventChecker->EnableMultipleEventMonitor(); sl@0: } sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::HandleStateRecorderPlayComplete() sl@0: { sl@0: INFO_PRINTF1(_L("AudioRecorder->Complete")); sl@0: iEventChecker->StopTest(); sl@0: return EPass; sl@0: } sl@0: sl@0: TVerdict CTestMmfAclntARN9008::PerformTestL() sl@0: { sl@0: INFO_PRINTF1(_L("Receipt of Notification (on cancellation of notification of a client that has just received notification) of a Resource Available Event.")); sl@0: INFO_PRINTF1(_L("[Cancel after receipt of Notification]")); sl@0: iTestStepResult = EFail; sl@0: sl@0: // Initialise the handler functions sl@0: InitTest(); sl@0: sl@0: // Initiate the process 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: CMultiEventChecker* CMultiEventChecker::NewL() sl@0: { sl@0: CMultiEventChecker* s = new(ELeave) CMultiEventChecker(); sl@0: CleanupStack::PushL(s); sl@0: s->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return s; sl@0: } sl@0: sl@0: CMultiEventChecker::CMultiEventChecker() sl@0: { sl@0: } sl@0: sl@0: void CMultiEventChecker::ConstructL() sl@0: { sl@0: iExpectedRecorderState = CMdaAudioClipUtility::ENotReady; sl@0: iMonitorMultipleEvents = EFalse; sl@0: } sl@0: sl@0: void CMultiEventChecker::SetExpectedState(TInt aState) sl@0: { sl@0: iNextState = aState; sl@0: } sl@0: sl@0: void CMultiEventChecker::StopTest() sl@0: { sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: sl@0: void CMultiEventChecker::SetExpectedEvent(TInt aClientNumber, TInt aExpectedEvent, TInt aExpectedError,CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: iClientEventsToMonitor[aClientNumber]= aExpectedEvent; sl@0: iClientError[aClientNumber] = aExpectedError; sl@0: iExpectedRecorderState = aRecorderState; sl@0: } sl@0: sl@0: void CMultiEventChecker::RegisterClientEventToMonitor(TInt aClientNumber, TInt aEventCode, TInt aError, TInt aFsmState,CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: iClientsRegistered++; sl@0: iClientEventsToMonitor[aClientNumber] = aEventCode; sl@0: iClientError[aClientNumber] = aError; sl@0: iFsmStateforClient[aClientNumber] = aFsmState; sl@0: iExpectedRecorderState = aRecorderState; sl@0: } sl@0: sl@0: TBool CMultiEventChecker::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: TBool CMultiEventChecker::CheckFsm(TInt aClientNumber,TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState) sl@0: { sl@0: TBool retFsmCheck = ETrue; sl@0: if (iMonitorMultipleEvents) sl@0: { sl@0: if(iClientEventsToMonitor[aClientNumber] == aEventCode && iClientError[aClientNumber] == aError ) sl@0: { sl@0: SetExpectedState(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: iMonitorMultipleEvents = EFalse; sl@0: } sl@0: else sl@0: { sl@0: if(iClientEventsToMonitor[aClientNumber] != aEventCode) sl@0: { sl@0: retFsmCheck = EFalse; sl@0: } sl@0: else if(iClientError[aClientNumber] != aError) sl@0: { sl@0: retFsmCheck = EFalse; sl@0: } sl@0: else if (aClientType == EAudioRecorder) sl@0: { sl@0: if (iExpectedRecorderState != aRecorderState) sl@0: { sl@0: retFsmCheck = EFalse; sl@0: } sl@0: } sl@0: } sl@0: return retFsmCheck; sl@0: }