os/mm/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestMultiClientARN.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// CPP file: Audio Resource Notification tests for Multiple Audio Clients.
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
/**
sl@0
    19
 @file TestMultiClientARN.cpp
sl@0
    20
*/
sl@0
    21
sl@0
    22
#include "TestAudioClientUtilitiesARN.h"
sl@0
    23
sl@0
    24
//------------------------------------------------------------------------------
sl@0
    25
//********************PREQ 797 - Audio Resource Notification********************
sl@0
    26
//------------------------------------------------------------------------------
sl@0
    27
sl@0
    28
//
sl@0
    29
//CTestMdaAudioMultiClientCallbackSupport
sl@0
    30
//
sl@0
    31
sl@0
    32
/**
sl@0
    33
 * NewL
sl@0
    34
 */
sl@0
    35
CTestMdaAudioMultiClientCallbackSupport* CTestMdaAudioMultiClientCallbackSupport::NewL(MTestAudioResourceNotificationCallback& aCallback)
sl@0
    36
	{
sl@0
    37
	return new(ELeave) CTestMdaAudioMultiClientCallbackSupport(aCallback);
sl@0
    38
	}
sl@0
    39
sl@0
    40
/**
sl@0
    41
 * MarncResourceAvailable
sl@0
    42
 */
sl@0
    43
void CTestMdaAudioMultiClientCallbackSupport::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData)
sl@0
    44
	{
sl@0
    45
	iCallback.MarncResourceAvailableTest(aNotificationEventId, aNotificationData, *this);
sl@0
    46
	}
sl@0
    47
sl@0
    48
/**
sl@0
    49
 * Constructor
sl@0
    50
 */
sl@0
    51
CTestMdaAudioMultiClientCallbackSupport::CTestMdaAudioMultiClientCallbackSupport(MTestAudioResourceNotificationCallback& aCallback):iCallback(aCallback)
sl@0
    52
	{
sl@0
    53
sl@0
    54
	}
sl@0
    55
sl@0
    56
//
sl@0
    57
//CTestMmfAclntMultiClientARN
sl@0
    58
//
sl@0
    59
sl@0
    60
/**
sl@0
    61
 * Constructor
sl@0
    62
 */
sl@0
    63
CTestMmfAclntMultiClientARN::CTestMmfAclntMultiClientARN(const TDesC& aTestName, const TDesC& aSectName)
sl@0
    64
	{
sl@0
    65
	// store the name of this test case
sl@0
    66
	// this is the name that is used by the script file
sl@0
    67
	// Each test step initialises it's own name
sl@0
    68
	iTestStepName=aTestName;
sl@0
    69
	iHeapSize = 800000;
sl@0
    70
	iSectName = aSectName;
sl@0
    71
	}
sl@0
    72
sl@0
    73
/**
sl@0
    74
 * MarncResourceAvailableTest
sl@0
    75
 */
sl@0
    76
void CTestMmfAclntMultiClientARN::MarncResourceAvailableTest(TUid aNotificationEventId, const TDesC8& aNotificationData, CTestMdaAudioMultiClientCallbackSupport& aMdaAudioMultiClientCallbackSupport)
sl@0
    77
	{
sl@0
    78
	if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable)
sl@0
    79
		{
sl@0
    80
		INFO_PRINTF1(_L("iAudioOutputStream::MMMFAudioResourceNotificationCallback -> KMMFEventCategoryAudioResourceAvailable"));
sl@0
    81
sl@0
    82
		//Convert TDesc8 to TInt64
sl@0
    83
		TMMFTimeIntervalMicroSecondsPckg timeIntvbuf;
sl@0
    84
		timeIntvbuf.Copy(aNotificationData);
sl@0
    85
		TTimeIntervalMicroSeconds intPos = timeIntvbuf();
sl@0
    86
		iPosition = intPos;
sl@0
    87
sl@0
    88
		if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioPlayerCallbackSupport)
sl@0
    89
			{
sl@0
    90
			INFO_PRINTF1(_L("iAudioPlayer -> MMMFAudioResourceNotificationCallback NotificationReceived"));
sl@0
    91
			TRAP(iError, FsmL(EMarncResourceAvailablePlayer));
sl@0
    92
			}
sl@0
    93
		else if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioRecorderCallbackSupport)
sl@0
    94
			{
sl@0
    95
			INFO_PRINTF1(_L("iAudioRecorder -> MMMFAudioResourceNotificationCallback NotificationReceived"));
sl@0
    96
			TRAP(iError, FsmL(EMarncResourceAvailableRecorder));
sl@0
    97
			}
sl@0
    98
		else if (&aMdaAudioMultiClientCallbackSupport == iMdaAudioOutputStreamCallbackSupport)
sl@0
    99
			{
sl@0
   100
			INFO_PRINTF1(_L("iAudioOutputStream -> MMMFAudioResourceNotificationCallback NotificationReceived"));
sl@0
   101
			TRAP(iError, FsmL(EMarncResourceAvailableOS));
sl@0
   102
			}
sl@0
   103
		}
sl@0
   104
	else
sl@0
   105
		{
sl@0
   106
		INFO_PRINTF1(_L("MMMFAudioResourceNotificationCallback, but NOT KMMFEventCategoryAudioResourceAvailable"));
sl@0
   107
		}
sl@0
   108
	}
sl@0
   109
sl@0
   110
/**
sl@0
   111
 * MapcInitCompleteTest
sl@0
   112
 */
sl@0
   113
void CTestMmfAclntMultiClientARN::MapcInitComplete(TInt aError, const TTimeIntervalMicroSeconds& aDuration)
sl@0
   114
	{
sl@0
   115
	iDuration = aDuration;
sl@0
   116
	INFO_PRINTF2(_L("iAudioPlayer -> MMdaAudioPlayerCallback InitComplete (%d)"),aError);
sl@0
   117
	TRAP(iError, FsmL(EMapcInitComplete, aError));
sl@0
   118
	}
sl@0
   119
sl@0
   120
/**
sl@0
   121
 * MapcPlayCompleteTest
sl@0
   122
 */
sl@0
   123
void CTestMmfAclntMultiClientARN::MapcPlayComplete(TInt aError)
sl@0
   124
	{
sl@0
   125
	INFO_PRINTF2(_L("iAudioPlayer -> MMdaAudioPlayerCallback PlayComplete (%d)"), aError);
sl@0
   126
	TRAP(iError, FsmL(EMapcPlayComplete, aError));
sl@0
   127
	}
sl@0
   128
sl@0
   129
/**
sl@0
   130
 * MoscoStateChangeEventTest
sl@0
   131
 */
sl@0
   132
void CTestMmfAclntMultiClientARN::MoscoStateChangeEvent(CBase* /*aObject*/, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode)
sl@0
   133
	{
sl@0
   134
	INFO_PRINTF1(_L("iAudioRecorder -> MMdaObjectStateChangeObserver StateChanged"));
sl@0
   135
	INFO_PRINTF4(_L("iTestAudioRecorder -> aErrorCode : %d, aPreviousState : %d, aCurrentState : %d"), aErrorCode, aPreviousState, aCurrentState);
sl@0
   136
	TRAP(iError, FsmL(EMoscoStateChangeEvent, aErrorCode, iTestAudioRecorder->State()));
sl@0
   137
	}
sl@0
   138
sl@0
   139
/**
sl@0
   140
 * MMdaAudioOutputStreamCallback->MaoscOpenComplete
sl@0
   141
 */
sl@0
   142
void CTestMmfAclntMultiClientARN::MaoscOpenComplete(TInt aError)
sl@0
   143
	{
sl@0
   144
	INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscOpenComplete (%d)"),aError);
sl@0
   145
	TRAP(iError, FsmL(EMaoscOpenComplete, aError));
sl@0
   146
	}
sl@0
   147
sl@0
   148
/**
sl@0
   149
 * MMdaAudioOutputStreamCallback->MaoscBufferCopied
sl@0
   150
 */
sl@0
   151
void CTestMmfAclntMultiClientARN::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/)
sl@0
   152
	{
sl@0
   153
	INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscBufferCopied  (%d)"), aError);
sl@0
   154
	TRAP(iError, FsmL(EMaoscBufferCopied, aError));
sl@0
   155
	}
sl@0
   156
sl@0
   157
/**
sl@0
   158
 * MMdaAudioOutputStreamCallback->MaoscPlayComplete
sl@0
   159
 */
sl@0
   160
void CTestMmfAclntMultiClientARN::MaoscPlayComplete(TInt aError)
sl@0
   161
	{
sl@0
   162
	INFO_PRINTF2(_L("iAudioOutputStream -> MMdaAudioOutputStreamCallback : MaoscPlayComplete  (%d)"), aError);
sl@0
   163
	TRAP(iError, FsmL(EMaoscPlayComplete, aError));
sl@0
   164
	}
sl@0
   165
sl@0
   166
/**
sl@0
   167
 * DoTestStepPreambleL
sl@0
   168
 */
sl@0
   169
TVerdict CTestMmfAclntMultiClientARN::DoTestStepPreambleL()
sl@0
   170
	{
sl@0
   171
	iError = KErrTimedOut;
sl@0
   172
	TPtrC filename;
sl@0
   173
	TVerdict verdict;
sl@0
   174
	
sl@0
   175
	// Install the scheduler - Call base DoTestStepPreambleL()
sl@0
   176
	verdict = CTestMmfAclntStep::DoTestStepPreambleL();
sl@0
   177
	if (verdict == EFail)
sl@0
   178
		{
sl@0
   179
		return verdict;
sl@0
   180
		}
sl@0
   181
	
sl@0
   182
	iEventChecker = CMultiEventChecker::NewL();
sl@0
   183
	//************** Initialise CMdaAudioPlayerUtility***************
sl@0
   184
	INFO_PRINTF1(_L("Initialise CMdaAudioPlayerUtility : EMdaPriorityNormal"));
sl@0
   185
	// Get file name
sl@0
   186
	if(!GetStringFromConfig(iSectName, _L("playerAudioFile1"), filename))
sl@0
   187
		{
sl@0
   188
		return EInconclusive;
sl@0
   189
		}
sl@0
   190
	GetDriveName(iFilenamePlayer);
sl@0
   191
	iFilenamePlayer.Append(filename);
sl@0
   192
	
sl@0
   193
	// Callback Handler
sl@0
   194
	iMdaAudioPlayerCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this);
sl@0
   195
	
sl@0
   196
	// Initialise Audio Player
sl@0
   197
	iTestAudioPlayer = CMdaAudioPlayerUtility::NewL(*this, EMdaPriorityNormal);
sl@0
   198
	
sl@0
   199
	//************** Initialise CMdaAudioRecorderUtility*************
sl@0
   200
	INFO_PRINTF1(_L("Initialise CMdaAudioRecorderUtility : EMdaPriorityMax"));
sl@0
   201
	// Get file name
sl@0
   202
	if(!GetStringFromConfig(iSectName, _L("playerAudioFile2"), filename))
sl@0
   203
		{
sl@0
   204
		return EInconclusive;
sl@0
   205
		}
sl@0
   206
	GetDriveName(iFilenameRecorder);
sl@0
   207
	iFilenameRecorder.Append(filename);
sl@0
   208
	
sl@0
   209
	// Callback Handler
sl@0
   210
	iMdaAudioRecorderCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this);
sl@0
   211
	
sl@0
   212
	// Initialise Audio Recorder
sl@0
   213
	iTestAudioRecorder = CMdaAudioRecorderUtility::NewL(*this, NULL, EMdaPriorityMax);
sl@0
   214
	
sl@0
   215
	//************** Initialise CMdaAudioOutputStream****************
sl@0
   216
	INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream  : EMdaPriorityMin"));
sl@0
   217
	// Connect RFs session
sl@0
   218
	TInt err = iFs.Connect();
sl@0
   219
	if (err != KErrNone)
sl@0
   220
		{
sl@0
   221
		INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err);
sl@0
   222
		return EFail;
sl@0
   223
		}
sl@0
   224
	// Callback Handler
sl@0
   225
	iMdaAudioOutputStreamCallbackSupport = CTestMdaAudioMultiClientCallbackSupport::NewL(*this);
sl@0
   226
	
sl@0
   227
	// Initialise iTestAudioOutputStream
sl@0
   228
	TRAP(err, iTestAudioOutputStream = CMdaAudioOutputStream::NewL(*this, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality));
sl@0
   229
	if (err != KErrNone || iTestAudioOutputStream == NULL )
sl@0
   230
		{
sl@0
   231
		INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream = %d"), err);
sl@0
   232
		return EInconclusive;
sl@0
   233
		}
sl@0
   234
	// Open RFile
sl@0
   235
	err = iFile.Open(iFs, KStreamRawFile1, EFileRead);
sl@0
   236
	if (err != KErrNone)
sl@0
   237
		{
sl@0
   238
		INFO_PRINTF2(_L("Error opening iFile = %d"), err);
sl@0
   239
		return EFail;
sl@0
   240
		}
sl@0
   241
	// Get size of iFile
sl@0
   242
	err = iFile.Size(iFileSize);
sl@0
   243
	if (err != KErrNone)
sl@0
   244
		{
sl@0
   245
		INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
sl@0
   246
		return EFail;
sl@0
   247
		}
sl@0
   248
	// Initialise iBuf
sl@0
   249
	iBuf.CreateMaxL(iFileSize);
sl@0
   250
	
sl@0
   251
	// Initialise the CCallBackTimer.
sl@0
   252
	iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler));
sl@0
   253
	
sl@0
   254
	return verdict;
sl@0
   255
	}
sl@0
   256
sl@0
   257
/**
sl@0
   258
 * DoTestStepPostambleL
sl@0
   259
 */
sl@0
   260
TVerdict CTestMmfAclntMultiClientARN::DoTestStepPostambleL()
sl@0
   261
	{
sl@0
   262
	// Delete all the Audio Client utilities.
sl@0
   263
	if (iTestAudioPlayer)
sl@0
   264
		iTestAudioPlayer->Close();
sl@0
   265
	delete iTestAudioPlayer;
sl@0
   266
	iTestAudioPlayer = NULL;
sl@0
   267
	iTestAudioRecorder->Close();
sl@0
   268
	delete iTestAudioRecorder;
sl@0
   269
	iTestAudioRecorder = NULL;
sl@0
   270
	delete iTestAudioOutputStream;
sl@0
   271
	iTestAudioOutputStream = NULL;
sl@0
   272
	// Delete CTestMdaAudioRecorderCallbackSupport
sl@0
   273
	delete iMdaAudioPlayerCallbackSupport;
sl@0
   274
	delete iMdaAudioRecorderCallbackSupport;
sl@0
   275
	delete iMdaAudioOutputStreamCallbackSupport;
sl@0
   276
	// Close RBuf8
sl@0
   277
	iBuf.Close();
sl@0
   278
	// Delete the CCallBackTimer.
sl@0
   279
	delete iCallBackTimer;
sl@0
   280
	iCallBackTimer=NULL;
sl@0
   281
	// Close the File Handles
sl@0
   282
	iFile.Close();
sl@0
   283
	iFs.Close();
sl@0
   284
	delete iEventChecker;
sl@0
   285
	
sl@0
   286
	return CTestMmfAclntStep::DoTestStepPostambleL();
sl@0
   287
	}
sl@0
   288
sl@0
   289
/**
sl@0
   290
 * DoTestStepL
sl@0
   291
 */
sl@0
   292
TVerdict CTestMmfAclntMultiClientARN::DoTestStepL()
sl@0
   293
	{
sl@0
   294
	return( DoTestL() );
sl@0
   295
	}
sl@0
   296
sl@0
   297
/**
sl@0
   298
 * StateInit
sl@0
   299
 */
sl@0
   300
void CTestMmfAclntMultiClientARN::StateInit()
sl@0
   301
	{
sl@0
   302
	iExpectedEvent=EIdleMulti;
sl@0
   303
	iExpectedRecorderState=CMdaAudioClipUtility::ENotReady;
sl@0
   304
	iExpectedError=KErrNone;
sl@0
   305
	iState=0;
sl@0
   306
	}
sl@0
   307
sl@0
   308
/**
sl@0
   309
 * StateChange
sl@0
   310
 */
sl@0
   311
void CTestMmfAclntMultiClientARN::StateChange(TMmfAudioMultiClientEvents aExpectedEvent, TInt aExpectedError, CMdaAudioClipUtility::TState aExpectedRecorderState)
sl@0
   312
	{
sl@0
   313
	iExpectedEvent=aExpectedEvent;
sl@0
   314
	iExpectedRecorderState=aExpectedRecorderState;
sl@0
   315
	iExpectedError=aExpectedError;
sl@0
   316
	iState++;
sl@0
   317
	}
sl@0
   318
sl@0
   319
/**
sl@0
   320
 * FsmCheck
sl@0
   321
 */
sl@0
   322
TBool CTestMmfAclntMultiClientARN::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
   323
	{
sl@0
   324
	TBool retFsmCheck = EFalse;
sl@0
   325
	if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow))
sl@0
   326
		{
sl@0
   327
		INFO_PRINTF1(_L("Underflow !"));
sl@0
   328
		}
sl@0
   329
	else if (iExpectedEvent != aEventCode)
sl@0
   330
		{
sl@0
   331
		ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
sl@0
   332
		iTestStepResult = EFail;
sl@0
   333
		CActiveScheduler::Stop();
sl@0
   334
		}
sl@0
   335
	else if (iExpectedError != aError)
sl@0
   336
		{
sl@0
   337
		ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
sl@0
   338
		iTestStepResult = EFail;
sl@0
   339
		CActiveScheduler::Stop();
sl@0
   340
		}
sl@0
   341
	else if (iExpectedRecorderState != aRecorderState)
sl@0
   342
		{
sl@0
   343
		ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState);
sl@0
   344
		iTestStepResult = EFail;
sl@0
   345
		CActiveScheduler::Stop();
sl@0
   346
		}
sl@0
   347
	else
sl@0
   348
		{
sl@0
   349
		retFsmCheck = ETrue;
sl@0
   350
		}
sl@0
   351
	return retFsmCheck;
sl@0
   352
	}
sl@0
   353
sl@0
   354
//
sl@0
   355
//CTestMmfAclntARN9001
sl@0
   356
//
sl@0
   357
sl@0
   358
/**
sl@0
   359
 * Constructor
sl@0
   360
 */
sl@0
   361
CTestMmfAclntARN9001::CTestMmfAclntARN9001(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   362
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
   363
	{}
sl@0
   364
sl@0
   365
/**
sl@0
   366
 * NewL
sl@0
   367
 */
sl@0
   368
CTestMmfAclntARN9001* CTestMmfAclntARN9001::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   369
	{
sl@0
   370
	CTestMmfAclntARN9001* self = new (ELeave) CTestMmfAclntARN9001(aTestName, aSectName);
sl@0
   371
	return self;
sl@0
   372
	}
sl@0
   373
sl@0
   374
/**
sl@0
   375
 * DoTestL
sl@0
   376
 */
sl@0
   377
TVerdict CTestMmfAclntARN9001::DoTestL()
sl@0
   378
	{
sl@0
   379
	return( PerformTestL() );
sl@0
   380
	}
sl@0
   381
sl@0
   382
/**
sl@0
   383
 * FsmCheck
sl@0
   384
 */
sl@0
   385
TBool CTestMmfAclntARN9001::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
   386
	{
sl@0
   387
	TBool retFsmCheck = EFalse;
sl@0
   388
	if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow))
sl@0
   389
		{
sl@0
   390
		INFO_PRINTF1(_L("Underflow !"));
sl@0
   391
		}
sl@0
   392
	else if (iExpectedEvent != aEventCode)
sl@0
   393
		{
sl@0
   394
        if ((aEventCode == EMoscoStateChangeEvent))
sl@0
   395
	        {
sl@0
   396
	        retFsmCheck = ETrue;
sl@0
   397
	        if (iEventOccured == EMarncResourceAvailableOS)
sl@0
   398
	            {
sl@0
   399
	            return retFsmCheck;
sl@0
   400
	            }
sl@0
   401
            else
sl@0
   402
                {
sl@0
   403
                iEventOccured = EMoscoStateChangeEvent;
sl@0
   404
                }
sl@0
   405
	        }
sl@0
   406
        else if (aEventCode == EMarncResourceAvailableOS)
sl@0
   407
            {
sl@0
   408
            retFsmCheck = ETrue;
sl@0
   409
            if (iEventOccured == EMoscoStateChangeEvent)
sl@0
   410
                {
sl@0
   411
                return retFsmCheck;
sl@0
   412
                }
sl@0
   413
            else
sl@0
   414
                {
sl@0
   415
                iEventOccured = EMarncResourceAvailableOS;
sl@0
   416
                }
sl@0
   417
            }
sl@0
   418
        else
sl@0
   419
            {
sl@0
   420
    		ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
sl@0
   421
    		iTestStepResult = EFail;
sl@0
   422
    		CActiveScheduler::Stop();
sl@0
   423
            }
sl@0
   424
		}
sl@0
   425
	else if (iExpectedError != aError)
sl@0
   426
		{
sl@0
   427
		ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
sl@0
   428
		iTestStepResult = EFail;
sl@0
   429
		CActiveScheduler::Stop();
sl@0
   430
		}
sl@0
   431
	else if (iExpectedRecorderState != aRecorderState)
sl@0
   432
		{
sl@0
   433
		ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState);
sl@0
   434
		iTestStepResult = EFail;
sl@0
   435
		CActiveScheduler::Stop();
sl@0
   436
		}
sl@0
   437
	else
sl@0
   438
		{
sl@0
   439
		retFsmCheck = ETrue;
sl@0
   440
		}
sl@0
   441
	return retFsmCheck;
sl@0
   442
	}
sl@0
   443
sl@0
   444
/**
sl@0
   445
 * FsmL
sl@0
   446
 */
sl@0
   447
void CTestMmfAclntARN9001::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
   448
	{
sl@0
   449
	if (FsmCheck(aEventCode, aError, aRecorderState))
sl@0
   450
		{
sl@0
   451
		TInt err = KErrNone;
sl@0
   452
		switch (iState)
sl@0
   453
			{
sl@0
   454
			case 0:
sl@0
   455
				// Open iTestAudioPlayer
sl@0
   456
				iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
   457
				INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
   458
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
   459
				StateChange(EMapcInitComplete);
sl@0
   460
				break;
sl@0
   461
			case 1:
sl@0
   462
				// Play iTestAudioPlayer
sl@0
   463
				iTestAudioPlayer->Play();
sl@0
   464
				INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
   465
				// Open iTestAudioRecorder
sl@0
   466
				iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
   467
				INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
   468
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
   469
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
   470
				break;
sl@0
   471
			case 2:
sl@0
   472
				// Play iTestAudioRecorder
sl@0
   473
				iTestAudioRecorder->PlayL();
sl@0
   474
				INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
   475
				// Set ExpectedEvent and change the State
sl@0
   476
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying);
sl@0
   477
				break;
sl@0
   478
			case 3:
sl@0
   479
				// iTestAudioPlayer gets PlayError.
sl@0
   480
				StateChange(EMapcPlayComplete, KErrInUse);
sl@0
   481
				break;
sl@0
   482
			case 4:
sl@0
   483
				// Register iTestAudioPlayer for Notification
sl@0
   484
				err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
   485
				INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
   486
				if( err != KErrNone )
sl@0
   487
					{
sl@0
   488
					ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   489
					iTestStepResult = EFail;
sl@0
   490
					CActiveScheduler::Stop();
sl@0
   491
					break;
sl@0
   492
					}
sl@0
   493
				// Register iTestAudioOutputStream for Notification
sl@0
   494
				err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
   495
				INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
   496
				if( err != KErrNone )
sl@0
   497
					{
sl@0
   498
					ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   499
					iTestStepResult = EFail;
sl@0
   500
					CActiveScheduler::Stop();
sl@0
   501
					break;
sl@0
   502
					}
sl@0
   503
				// Open iTestAudioOutputStream
sl@0
   504
				iTestAudioOutputStream->Open(NULL);
sl@0
   505
				INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
   506
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
   507
				StateChange(EMaoscOpenComplete);
sl@0
   508
				break;
sl@0
   509
			case 5:
sl@0
   510
				// iFile->Read()
sl@0
   511
				err = iFile.Read(iBuf); //-synchronous
sl@0
   512
				if (err != KErrNone)
sl@0
   513
					{
sl@0
   514
					INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
   515
					User::Leave(err);
sl@0
   516
					}
sl@0
   517
				// iTestAudioOutputStream->WriteL()
sl@0
   518
				INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
   519
				iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
   520
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   521
				StateChange(EMaoscBufferCopied, KErrInUse);
sl@0
   522
				break;
sl@0
   523
			case 6:
sl@0
   524
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   525
				StateChange(EMaoscPlayComplete, KErrInUse);
sl@0
   526
				break;
sl@0
   527
			case 7:
sl@0
   528
				// Delete the instance iTestAudioPlayer
sl@0
   529
				delete iTestAudioPlayer;
sl@0
   530
				iTestAudioPlayer = NULL;
sl@0
   531
				INFO_PRINTF1(_L("delete iTestAudioPlayer"));
sl@0
   532
				User::After(100000);
sl@0
   533
				// Wait for iTestAudioRecorder to complete playing
sl@0
   534
				// Set ExpectedEvent and change the State
sl@0
   535
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
   536
				break;
sl@0
   537
			case 8:
sl@0
   538
				// Timer to check if Notification Event Occurs.
sl@0
   539
				iCallBackTimer->After(2000000);
sl@0
   540
				// Set ExpectedEvent and change the State
sl@0
   541
				StateChange(EMarncResourceAvailableOS, KErrNone);
sl@0
   542
				break;
sl@0
   543
			case 9:
sl@0
   544
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
   545
				INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived"));
sl@0
   546
				iTestStepResult = EPass;
sl@0
   547
				CActiveScheduler::Stop();
sl@0
   548
				break;
sl@0
   549
			}
sl@0
   550
		}
sl@0
   551
	}
sl@0
   552
sl@0
   553
/**
sl@0
   554
 * PerformTestL
sl@0
   555
 */
sl@0
   556
TVerdict CTestMmfAclntARN9001::PerformTestL()
sl@0
   557
	{
sl@0
   558
	INFO_PRINTF1(_L("Receipt of Notification (on deleting the Audio Play Client instance of a Notified Client) of a Resource Available Event."));
sl@0
   559
	iTestStepResult = EFail;
sl@0
   560
	
sl@0
   561
	// Initialise the state variables
sl@0
   562
	StateInit();
sl@0
   563
	
sl@0
   564
	// Begin the process
sl@0
   565
	FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady);
sl@0
   566
	
sl@0
   567
	// Start the scheduler - Done only once !
sl@0
   568
	CActiveScheduler::Start();
sl@0
   569
	
sl@0
   570
	return iTestStepResult;
sl@0
   571
	}
sl@0
   572
sl@0
   573
sl@0
   574
//
sl@0
   575
//CTestMmfAclntARN9002
sl@0
   576
//
sl@0
   577
sl@0
   578
/**
sl@0
   579
 * Constructor
sl@0
   580
 */
sl@0
   581
CTestMmfAclntARN9002::CTestMmfAclntARN9002(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   582
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
   583
	{}
sl@0
   584
sl@0
   585
/**
sl@0
   586
 * NewL
sl@0
   587
 */
sl@0
   588
CTestMmfAclntARN9002* CTestMmfAclntARN9002::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   589
	{
sl@0
   590
	CTestMmfAclntARN9002* self = new (ELeave) CTestMmfAclntARN9002(aTestName, aSectName);
sl@0
   591
	return self;
sl@0
   592
	}
sl@0
   593
sl@0
   594
/**
sl@0
   595
 * DoTestL
sl@0
   596
 */
sl@0
   597
TVerdict CTestMmfAclntARN9002::DoTestL()
sl@0
   598
	{
sl@0
   599
	return( PerformTestL() );
sl@0
   600
	}
sl@0
   601
sl@0
   602
void CTestMmfAclntARN9002::InitTest()
sl@0
   603
	{
sl@0
   604
	iEventChecker = CMultiEventChecker::NewL();
sl@0
   605
	//Keep adding handlers
sl@0
   606
	iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9002::HandleStateApInitComplete;
sl@0
   607
	iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9002::HandleStateRecorderOpen;
sl@0
   608
	iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9002::HandleStateRecorderPlaying;
sl@0
   609
	iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9002::HandleApPlayCompleteKErrInUse;
sl@0
   610
	iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9002::HandleStateAosOpenComplete;
sl@0
   611
	iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9002::HandleStateAosBufferCopiedKErrInUse;
sl@0
   612
	iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9002::HandleStateAosPlayCompleteKErrInUse;
sl@0
   613
	iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9002::HandleStateRecorderrelease;
sl@0
   614
	iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9002::HandleStateApResourceAvailable;
sl@0
   615
	iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9002::HandleStateApPlayComplete;
sl@0
   616
	iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9002::HandleStateAosResourceAvailable;
sl@0
   617
	}
sl@0
   618
	
sl@0
   619
void CTestMmfAclntARN9002::StartTestL()
sl@0
   620
	{
sl@0
   621
	// Open iTestAudioPlayer
sl@0
   622
	iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
   623
	INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
   624
	iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone);
sl@0
   625
	iEventChecker->SetExpectedState(EStateApInitComplete);
sl@0
   626
	}
sl@0
   627
	
sl@0
   628
TVerdict CTestMmfAclntARN9002::HandleStateApInitComplete()
sl@0
   629
	{
sl@0
   630
	iTestAudioPlayer->Play();
sl@0
   631
	INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
   632
	// Open iTestAudioRecorder
sl@0
   633
	iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
   634
	INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
   635
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
   636
	iEventChecker->SetExpectedState(EStateRecoderOpen);
sl@0
   637
	return EPass;
sl@0
   638
	}
sl@0
   639
	
sl@0
   640
TVerdict CTestMmfAclntARN9002::HandleStateRecorderOpen()
sl@0
   641
	{
sl@0
   642
	iTestAudioRecorder->PlayL();
sl@0
   643
	INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
   644
	// Set ExpectedEvent and change the State
sl@0
   645
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying);
sl@0
   646
	iEventChecker->SetExpectedState(EStateRecoderPlaying);
sl@0
   647
	return EPass;
sl@0
   648
	}
sl@0
   649
sl@0
   650
TVerdict CTestMmfAclntARN9002::HandleStateRecorderPlaying()
sl@0
   651
	{
sl@0
   652
	iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse);
sl@0
   653
	iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse);
sl@0
   654
	return EPass;
sl@0
   655
	}
sl@0
   656
	
sl@0
   657
TVerdict CTestMmfAclntARN9002::HandleApPlayCompleteKErrInUse()
sl@0
   658
	{
sl@0
   659
	TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
   660
	INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
   661
	if( err != KErrNone )
sl@0
   662
		{
sl@0
   663
		ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   664
		iTestStepResult = EFail;
sl@0
   665
		CActiveScheduler::Stop();
sl@0
   666
		}
sl@0
   667
	// Register iTestAudioOutputStream for Notification
sl@0
   668
	err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
   669
	INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
   670
	if( err != KErrNone )
sl@0
   671
		{
sl@0
   672
		ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   673
		iTestStepResult = EFail;
sl@0
   674
		CActiveScheduler::Stop();
sl@0
   675
		}
sl@0
   676
	// Open iTestAudioOutputStream
sl@0
   677
	iTestAudioOutputStream->Open(NULL);
sl@0
   678
	INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
   679
	// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
   680
	iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone);
sl@0
   681
	iEventChecker->SetExpectedState(EStateAosOpenComplete);
sl@0
   682
	return EPass;
sl@0
   683
	}
sl@0
   684
sl@0
   685
TVerdict CTestMmfAclntARN9002::HandleStateAosOpenComplete()
sl@0
   686
	{
sl@0
   687
	// iFile->Read()
sl@0
   688
	TInt err = iFile.Read(iBuf); //-synchronous
sl@0
   689
	if (err != KErrNone)
sl@0
   690
		{
sl@0
   691
		INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
   692
		User::Leave(err);
sl@0
   693
		}
sl@0
   694
	// iTestAudioOutputStream->WriteL()
sl@0
   695
	INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
   696
	iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
   697
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
   698
	iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse);
sl@0
   699
	iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse);
sl@0
   700
	return EPass;	
sl@0
   701
	}
sl@0
   702
sl@0
   703
TVerdict CTestMmfAclntARN9002::HandleStateAosBufferCopiedKErrInUse()
sl@0
   704
	{
sl@0
   705
	iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse);
sl@0
   706
	iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse);
sl@0
   707
	return EPass;
sl@0
   708
	}
sl@0
   709
sl@0
   710
TVerdict CTestMmfAclntARN9002::HandleStateAosPlayCompleteKErrInUse()
sl@0
   711
	{
sl@0
   712
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
   713
	iEventChecker->SetExpectedState(EStateRecorderrelease);
sl@0
   714
	return EPass;
sl@0
   715
	}
sl@0
   716
	
sl@0
   717
TVerdict CTestMmfAclntARN9002::HandleStateRecorderrelease()
sl@0
   718
	{
sl@0
   719
	// Timer to check if Notification Event Occurs.
sl@0
   720
	iCallBackTimer->After(2000000);
sl@0
   721
	// Set ExpectedEvent and change the State
sl@0
   722
	iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone);
sl@0
   723
	iEventChecker->SetExpectedState(EStateApResourceAvailable);
sl@0
   724
	return EPass;
sl@0
   725
	}
sl@0
   726
	
sl@0
   727
TVerdict CTestMmfAclntARN9002::HandleStateApResourceAvailable()
sl@0
   728
	{
sl@0
   729
	iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
   730
	INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived"));
sl@0
   731
	TInt err = iTestAudioPlayer->WillResumePlay();
sl@0
   732
	INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()"));
sl@0
   733
	if( err != KErrNone )
sl@0
   734
		{
sl@0
   735
		ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err);
sl@0
   736
		iTestStepResult = EFail;
sl@0
   737
		CActiveScheduler::Stop();
sl@0
   738
		}
sl@0
   739
	iTestAudioPlayer->SetPosition(iPosition);
sl@0
   740
	INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()"));
sl@0
   741
	// Play iTestAudioPlayer
sl@0
   742
	iTestAudioPlayer->Play();
sl@0
   743
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
   744
	iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrNone,EStateApPlayComplete);
sl@0
   745
	iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable);
sl@0
   746
	iEventChecker->EnableMultipleEventMonitor();
sl@0
   747
	return EPass;
sl@0
   748
	}
sl@0
   749
	
sl@0
   750
TVerdict CTestMmfAclntARN9002::HandleStateApPlayComplete()
sl@0
   751
	{
sl@0
   752
	INFO_PRINTF1(_L("AudioPlayer->PlayComplete"));
sl@0
   753
	if(iEventChecker->IsMonitoringFinished())
sl@0
   754
		{
sl@0
   755
		iTestStepResult = EPass;
sl@0
   756
		iCallBackTimer->Cancel();
sl@0
   757
		iEventChecker->StopTest();
sl@0
   758
		}
sl@0
   759
	else
sl@0
   760
		{
sl@0
   761
		iEventChecker->EnableMultipleEventMonitor();
sl@0
   762
		}
sl@0
   763
	return EPass;		
sl@0
   764
	}
sl@0
   765
	
sl@0
   766
TVerdict CTestMmfAclntARN9002::HandleStateAosResourceAvailable()
sl@0
   767
	{
sl@0
   768
	INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived"));
sl@0
   769
	if(iEventChecker->IsMonitoringFinished())
sl@0
   770
		{
sl@0
   771
		iCallBackTimer->Cancel();
sl@0
   772
		iTestStepResult = EPass;
sl@0
   773
		iEventChecker->StopTest();
sl@0
   774
		}
sl@0
   775
	else
sl@0
   776
		{
sl@0
   777
		iEventChecker->EnableMultipleEventMonitor();
sl@0
   778
		}
sl@0
   779
	return EPass;	
sl@0
   780
	}
sl@0
   781
	
sl@0
   782
void CTestMmfAclntARN9002::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState)
sl@0
   783
	{
sl@0
   784
	if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState))
sl@0
   785
		{
sl@0
   786
		iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))();
sl@0
   787
 		if(iTestStepResult != EPass)
sl@0
   788
 			{
sl@0
   789
 			iEventChecker->StopTest();
sl@0
   790
 			}
sl@0
   791
		}
sl@0
   792
	}
sl@0
   793
sl@0
   794
void CTestMmfAclntARN9002::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
   795
	{
sl@0
   796
	if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer)
sl@0
   797
		{
sl@0
   798
			DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError);
sl@0
   799
		}
sl@0
   800
	if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder)
sl@0
   801
		{
sl@0
   802
			DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState);
sl@0
   803
		}
sl@0
   804
	if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS)
sl@0
   805
		{
sl@0
   806
			DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError);
sl@0
   807
		}
sl@0
   808
	}
sl@0
   809
sl@0
   810
TVerdict CTestMmfAclntARN9002::PerformTestL()
sl@0
   811
	{
sl@0
   812
	INFO_PRINTF1(_L("Receipt of Notification (on completion of play of a Notifed Client) of a Resource Available Event."));
sl@0
   813
	iTestStepResult = EFail;
sl@0
   814
	
sl@0
   815
	// Initialise the handler functions
sl@0
   816
	InitTest();
sl@0
   817
	
sl@0
   818
	// Initiate the process
sl@0
   819
	StartTestL();
sl@0
   820
	
sl@0
   821
	// Start the scheduler - Done only once !
sl@0
   822
	CActiveScheduler::Start();
sl@0
   823
	
sl@0
   824
	return iTestStepResult;
sl@0
   825
	}
sl@0
   826
sl@0
   827
sl@0
   828
//
sl@0
   829
//CTestMmfAclntARN9003
sl@0
   830
//
sl@0
   831
sl@0
   832
/**
sl@0
   833
 * Constructor
sl@0
   834
 */
sl@0
   835
CTestMmfAclntARN9003::CTestMmfAclntARN9003(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   836
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
   837
	{}
sl@0
   838
sl@0
   839
/**
sl@0
   840
 * NewL
sl@0
   841
 */
sl@0
   842
CTestMmfAclntARN9003* CTestMmfAclntARN9003::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   843
	{
sl@0
   844
	CTestMmfAclntARN9003* self = new (ELeave) CTestMmfAclntARN9003(aTestName, aSectName);
sl@0
   845
	return self;
sl@0
   846
	}
sl@0
   847
sl@0
   848
/**
sl@0
   849
 * DoTestL
sl@0
   850
 */
sl@0
   851
TVerdict CTestMmfAclntARN9003::DoTestL()
sl@0
   852
	{
sl@0
   853
	return( PerformTestL() );
sl@0
   854
	}
sl@0
   855
sl@0
   856
/**
sl@0
   857
 * FsmL
sl@0
   858
 */
sl@0
   859
void CTestMmfAclntARN9003::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
   860
	{
sl@0
   861
	if (FsmCheck(aEventCode, aError, aRecorderState))
sl@0
   862
		{
sl@0
   863
		TInt err = KErrNone;
sl@0
   864
		switch (iState)
sl@0
   865
			{
sl@0
   866
			case 0:
sl@0
   867
				// Open iTestAudioPlayer
sl@0
   868
				iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
   869
				INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
   870
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
   871
				StateChange(EMapcInitComplete);
sl@0
   872
				break;
sl@0
   873
			case 1:
sl@0
   874
				// Play iTestAudioPlayer
sl@0
   875
				iTestAudioPlayer->Play();
sl@0
   876
				INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
   877
				// Open iTestAudioRecorder
sl@0
   878
				iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
   879
				INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
   880
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
   881
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
   882
				break;
sl@0
   883
			case 2:
sl@0
   884
				// Play iTestAudioRecorder
sl@0
   885
				iTestAudioRecorder->PlayL();
sl@0
   886
				INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
   887
				// Set ExpectedEvent and change the State
sl@0
   888
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying);
sl@0
   889
				break;
sl@0
   890
			case 3:
sl@0
   891
				// iTestAudioPlayer gets PlayError.
sl@0
   892
				StateChange(EMapcPlayComplete, KErrInUse);
sl@0
   893
				break;
sl@0
   894
			case 4:
sl@0
   895
				// Register iTestAudioPlayer for Notification
sl@0
   896
				err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
   897
				INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
   898
				if( err != KErrNone )
sl@0
   899
					{
sl@0
   900
					ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   901
					iTestStepResult = EFail;
sl@0
   902
					CActiveScheduler::Stop();
sl@0
   903
					break;
sl@0
   904
					}
sl@0
   905
				// Register iTestAudioOutputStream for Notification
sl@0
   906
				err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
   907
				INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
   908
				if( err != KErrNone )
sl@0
   909
					{
sl@0
   910
					ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   911
					iTestStepResult = EFail;
sl@0
   912
					CActiveScheduler::Stop();
sl@0
   913
					break;
sl@0
   914
					}
sl@0
   915
				// Open iTestAudioOutputStream
sl@0
   916
				iTestAudioOutputStream->Open(NULL);
sl@0
   917
				INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
   918
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
   919
				StateChange(EMaoscOpenComplete);
sl@0
   920
				break;
sl@0
   921
			case 5:
sl@0
   922
				// iFile->Read()
sl@0
   923
				err = iFile.Read(iBuf); //-synchronous
sl@0
   924
				if (err != KErrNone)
sl@0
   925
					{
sl@0
   926
					INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
   927
					User::Leave(err);
sl@0
   928
					}
sl@0
   929
				// iTestAudioOutputStream->WriteL()
sl@0
   930
				INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
   931
				iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
   932
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   933
				StateChange(EMaoscBufferCopied, KErrInUse);
sl@0
   934
				break;
sl@0
   935
			case 6:
sl@0
   936
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   937
				StateChange(EMaoscPlayComplete, KErrInUse);
sl@0
   938
				break;			
sl@0
   939
			case 7:
sl@0
   940
				// Wait for iTestAudioRecorder to complete playing
sl@0
   941
				// Set ExpectedEvent and change the State
sl@0
   942
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
   943
				break;
sl@0
   944
			case 8:
sl@0
   945
				// Timer to check if Notification Event Occurs.
sl@0
   946
				iCallBackTimer->After(2000000);
sl@0
   947
				// Set ExpectedEvent and change the State
sl@0
   948
				StateChange(EMarncResourceAvailablePlayer, KErrNone);
sl@0
   949
				break;
sl@0
   950
			case 9:
sl@0
   951
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
   952
				INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived"));
sl@0
   953
				err = iTestAudioPlayer->WillResumePlay();
sl@0
   954
				INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()"));
sl@0
   955
				if( err != KErrNone )
sl@0
   956
					{
sl@0
   957
					ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err);
sl@0
   958
					iTestStepResult = EFail;
sl@0
   959
					CActiveScheduler::Stop();
sl@0
   960
					break;
sl@0
   961
					}
sl@0
   962
				iTestAudioPlayer->SetPosition(iPosition);
sl@0
   963
				INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()"));
sl@0
   964
				// Play iTestAudioPlayer
sl@0
   965
				iTestAudioPlayer->Play();
sl@0
   966
				// Stop & Close iTestAudioPlayer
sl@0
   967
				WaitWithTimeout(iRequestStatus,1000000);
sl@0
   968
				iTestAudioPlayer->Stop();
sl@0
   969
				INFO_PRINTF1(_L("iTestAudioPlayer->Stop()"));
sl@0
   970
				iTestAudioPlayer->Close();
sl@0
   971
				INFO_PRINTF1(_L("iTestAudioPlayer->Close()"));
sl@0
   972
				// Timer to check if Notification Event Occurs.
sl@0
   973
				iCallBackTimer->After(2000000);
sl@0
   974
				// Set ExpectedEvent and change the State
sl@0
   975
				StateChange(EMarncResourceAvailableOS);
sl@0
   976
				break;
sl@0
   977
			case 10:
sl@0
   978
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
   979
				INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived"));
sl@0
   980
				iTestStepResult = EPass;
sl@0
   981
				CActiveScheduler::Stop();
sl@0
   982
				break;
sl@0
   983
			}
sl@0
   984
		}
sl@0
   985
	}
sl@0
   986
sl@0
   987
/**
sl@0
   988
 * PerformTestL
sl@0
   989
 */
sl@0
   990
TVerdict CTestMmfAclntARN9003::PerformTestL()
sl@0
   991
	{
sl@0
   992
	INFO_PRINTF1(_L("Receipt of Notification (on stopping play of a Notitifed Client) of a Resource Available Event."));
sl@0
   993
	iTestStepResult = EFail;
sl@0
   994
	
sl@0
   995
	// Initialise the state variables
sl@0
   996
	StateInit();
sl@0
   997
	
sl@0
   998
	// Begin the process
sl@0
   999
	FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady);
sl@0
  1000
	
sl@0
  1001
	// Start the scheduler - Done only once !
sl@0
  1002
	CActiveScheduler::Start();
sl@0
  1003
	
sl@0
  1004
	return iTestStepResult;
sl@0
  1005
	}
sl@0
  1006
sl@0
  1007
//
sl@0
  1008
//CTestMmfAclntARN9004
sl@0
  1009
//
sl@0
  1010
sl@0
  1011
/**
sl@0
  1012
 * Constructor
sl@0
  1013
 */
sl@0
  1014
CTestMmfAclntARN9004::CTestMmfAclntARN9004(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1015
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
  1016
	{}
sl@0
  1017
sl@0
  1018
/**
sl@0
  1019
 * NewL
sl@0
  1020
 */
sl@0
  1021
CTestMmfAclntARN9004* CTestMmfAclntARN9004::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1022
	{
sl@0
  1023
	CTestMmfAclntARN9004* self = new (ELeave) CTestMmfAclntARN9004(aTestName, aSectName);
sl@0
  1024
	return self;
sl@0
  1025
	}
sl@0
  1026
sl@0
  1027
/**
sl@0
  1028
 * DoTestL
sl@0
  1029
 */
sl@0
  1030
TVerdict CTestMmfAclntARN9004::DoTestL()
sl@0
  1031
	{
sl@0
  1032
	return( PerformTestL() );
sl@0
  1033
	}
sl@0
  1034
sl@0
  1035
/**
sl@0
  1036
 * FsmCheck
sl@0
  1037
 */
sl@0
  1038
TBool CTestMmfAclntARN9004::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1039
	{
sl@0
  1040
	TBool retFsmCheck = EFalse;
sl@0
  1041
	if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow))
sl@0
  1042
		{
sl@0
  1043
		INFO_PRINTF1(_L("Underflow !"));
sl@0
  1044
		}
sl@0
  1045
	else if (iExpectedEvent != aEventCode)
sl@0
  1046
		{
sl@0
  1047
        if ((aEventCode == EMoscoStateChangeEvent))
sl@0
  1048
	        {
sl@0
  1049
	        retFsmCheck = ETrue;
sl@0
  1050
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
sl@0
  1051
	        if (iEventOccured == EMarncResourceAvailablePlayer)
sl@0
  1052
#else
sl@0
  1053
   	        if (iEventOccured == EMarncResourceAvailableOS)
sl@0
  1054
#endif
sl@0
  1055
	            {
sl@0
  1056
	            return retFsmCheck;
sl@0
  1057
	            }
sl@0
  1058
            else
sl@0
  1059
                {
sl@0
  1060
                iEventOccured = EMoscoStateChangeEvent;
sl@0
  1061
                }
sl@0
  1062
	        }
sl@0
  1063
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
sl@0
  1064
        else if (aEventCode == EMarncResourceAvailablePlayer)
sl@0
  1065
#else
sl@0
  1066
        else if (aEventCode == EMarncResourceAvailableOS)
sl@0
  1067
#endif
sl@0
  1068
            {
sl@0
  1069
            retFsmCheck = ETrue;
sl@0
  1070
            if (iEventOccured == EMoscoStateChangeEvent)
sl@0
  1071
                {
sl@0
  1072
                return retFsmCheck;
sl@0
  1073
                }
sl@0
  1074
            else
sl@0
  1075
                {
sl@0
  1076
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
sl@0
  1077
                iEventOccured = EMarncResourceAvailablePlayer;
sl@0
  1078
#else
sl@0
  1079
				iEventOccured = EMarncResourceAvailableOS;
sl@0
  1080
#endif
sl@0
  1081
		       }
sl@0
  1082
            }
sl@0
  1083
        else
sl@0
  1084
            {
sl@0
  1085
    		ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
sl@0
  1086
    		iTestStepResult = EFail;
sl@0
  1087
    		CActiveScheduler::Stop();
sl@0
  1088
            }
sl@0
  1089
		}
sl@0
  1090
	else if (iExpectedError != aError)
sl@0
  1091
		{
sl@0
  1092
		ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
sl@0
  1093
		iTestStepResult = EFail;
sl@0
  1094
		CActiveScheduler::Stop();
sl@0
  1095
		}
sl@0
  1096
	else if (iExpectedRecorderState != aRecorderState)
sl@0
  1097
		{
sl@0
  1098
		ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState);
sl@0
  1099
		iTestStepResult = EFail;
sl@0
  1100
		CActiveScheduler::Stop();
sl@0
  1101
		}
sl@0
  1102
	else
sl@0
  1103
		{
sl@0
  1104
		retFsmCheck = ETrue;
sl@0
  1105
		}
sl@0
  1106
	return retFsmCheck;
sl@0
  1107
	}
sl@0
  1108
sl@0
  1109
/**
sl@0
  1110
 * FsmL
sl@0
  1111
 */
sl@0
  1112
void CTestMmfAclntARN9004::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1113
	{
sl@0
  1114
	if (FsmCheck(aEventCode, aError, aRecorderState))
sl@0
  1115
		{
sl@0
  1116
		TInt err = KErrNone;
sl@0
  1117
		switch (iState)
sl@0
  1118
			{
sl@0
  1119
			case 0:
sl@0
  1120
				// Open iTestAudioPlayer
sl@0
  1121
				iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
  1122
				INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
  1123
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1124
				StateChange(EMapcInitComplete);
sl@0
  1125
				break;
sl@0
  1126
			case 1:
sl@0
  1127
				// Play iTestAudioPlayer
sl@0
  1128
				iTestAudioPlayer->Play();
sl@0
  1129
				INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
  1130
				// Open iTestAudioRecorder
sl@0
  1131
				iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
  1132
				INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
  1133
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1134
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
  1135
				break;
sl@0
  1136
			case 2:
sl@0
  1137
				// Play iTestAudioRecorder
sl@0
  1138
				iTestAudioRecorder->PlayL();
sl@0
  1139
				INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
  1140
				// Set ExpectedEvent and change the State
sl@0
  1141
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying);
sl@0
  1142
				break;
sl@0
  1143
			case 3:
sl@0
  1144
				// iTestAudioPlayer gets PlayError.
sl@0
  1145
				StateChange(EMapcPlayComplete, KErrInUse);
sl@0
  1146
				break;
sl@0
  1147
			case 4:
sl@0
  1148
				// Register iTestAudioOutputStream for Notification
sl@0
  1149
				err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1150
				INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1151
				if( err != KErrNone )
sl@0
  1152
					{
sl@0
  1153
					ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1154
					iTestStepResult = EFail;
sl@0
  1155
					CActiveScheduler::Stop();
sl@0
  1156
					break;
sl@0
  1157
					}
sl@0
  1158
				// Register iTestAudioPlayer for Notification
sl@0
  1159
				err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1160
				INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1161
				if( err != KErrNone )
sl@0
  1162
					{
sl@0
  1163
					ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1164
					iTestStepResult = EFail;
sl@0
  1165
					CActiveScheduler::Stop();
sl@0
  1166
					break;
sl@0
  1167
					}
sl@0
  1168
				// Open iTestAudioOutputStream
sl@0
  1169
				iTestAudioOutputStream->Open(NULL);
sl@0
  1170
				INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
  1171
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1172
				StateChange(EMaoscOpenComplete);
sl@0
  1173
				break;
sl@0
  1174
			case 5:
sl@0
  1175
				// iFile->Read()
sl@0
  1176
				err = iFile.Read(iBuf); //-synchronous
sl@0
  1177
				if (err != KErrNone)
sl@0
  1178
					{
sl@0
  1179
					INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
  1180
					User::Leave(err);
sl@0
  1181
					}
sl@0
  1182
				// iTestAudioOutputStream->WriteL()
sl@0
  1183
				INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
  1184
				iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
  1185
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1186
				StateChange(EMaoscBufferCopied, KErrInUse);
sl@0
  1187
				break;
sl@0
  1188
			case 6:
sl@0
  1189
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1190
				StateChange(EMaoscPlayComplete, KErrInUse);
sl@0
  1191
				break;			
sl@0
  1192
			case 7:
sl@0
  1193
				// Wait for iTestAudioRecorder to complete playing
sl@0
  1194
				// Set ExpectedEvent and change the State
sl@0
  1195
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
  1196
				break;
sl@0
  1197
			case 8:
sl@0
  1198
				// Timer to check if Notification Event Occurs.
sl@0
  1199
				iCallBackTimer->After(2000000);
sl@0
  1200
				// Set ExpectedEvent and change the State
sl@0
  1201
				StateChange(EMarncResourceAvailableOS);
sl@0
  1202
				break;
sl@0
  1203
			case 9:
sl@0
  1204
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
  1205
				INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived"));
sl@0
  1206
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
sl@0
  1207
				StateChange(EMarncResourceAvailablePlayer);
sl@0
  1208
#else
sl@0
  1209
				iTestStepResult = EPass;
sl@0
  1210
				CActiveScheduler::Stop();
sl@0
  1211
#endif
sl@0
  1212
				break;
sl@0
  1213
#ifdef SYMBIAN_MULTIMEDIA_A3FDEVSOUND
sl@0
  1214
			case 10:
sl@0
  1215
				INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived"));
sl@0
  1216
				err = iTestAudioPlayer->WillResumePlay();
sl@0
  1217
				INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()"));
sl@0
  1218
				if( err != KErrNone )
sl@0
  1219
					{
sl@0
  1220
					ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err);
sl@0
  1221
					iTestStepResult = EFail;
sl@0
  1222
					CActiveScheduler::Stop();
sl@0
  1223
					break;
sl@0
  1224
					}
sl@0
  1225
				iTestStepResult = EPass;
sl@0
  1226
				CActiveScheduler::Stop();
sl@0
  1227
				break;
sl@0
  1228
#endif
sl@0
  1229
			}
sl@0
  1230
		}
sl@0
  1231
	}
sl@0
  1232
sl@0
  1233
/**
sl@0
  1234
 * PerformTestL
sl@0
  1235
 */
sl@0
  1236
TVerdict CTestMmfAclntARN9004::PerformTestL()
sl@0
  1237
	{
sl@0
  1238
	INFO_PRINTF1(_L("Receipt of Notification (chronological order for equal priority clients) of a Resource Available Event."));
sl@0
  1239
	iTestStepResult = EFail;
sl@0
  1240
	
sl@0
  1241
	// Initialise the state variables
sl@0
  1242
	StateInit();
sl@0
  1243
	
sl@0
  1244
	// Set the priorities
sl@0
  1245
	iTestAudioPlayer->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality);
sl@0
  1246
	INFO_PRINTF1(_L("Reset Priority for CMdaAudioPlayerUtility  : EMdaPriorityMin"));
sl@0
  1247
	iTestAudioOutputStream->SetPriority(EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality);
sl@0
  1248
	INFO_PRINTF1(_L("Reset Priority for CMdaAudioOutputStream   : EMdaPriorityMin"));
sl@0
  1249
	
sl@0
  1250
	// Begin the process
sl@0
  1251
	FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady);
sl@0
  1252
	
sl@0
  1253
	// Start the scheduler - Done only once !
sl@0
  1254
	CActiveScheduler::Start();
sl@0
  1255
	
sl@0
  1256
	return iTestStepResult;
sl@0
  1257
	}
sl@0
  1258
sl@0
  1259
//
sl@0
  1260
//CTestMmfAclntARN9005
sl@0
  1261
//
sl@0
  1262
sl@0
  1263
/**
sl@0
  1264
 * Constructor
sl@0
  1265
 */
sl@0
  1266
CTestMmfAclntARN9005::CTestMmfAclntARN9005(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1267
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
  1268
	{}
sl@0
  1269
sl@0
  1270
/**
sl@0
  1271
 * NewL
sl@0
  1272
 */
sl@0
  1273
CTestMmfAclntARN9005* CTestMmfAclntARN9005::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1274
	{
sl@0
  1275
	CTestMmfAclntARN9005* self = new (ELeave) CTestMmfAclntARN9005(aTestName, aSectName);
sl@0
  1276
	return self;
sl@0
  1277
	}
sl@0
  1278
sl@0
  1279
/**
sl@0
  1280
 * DoTestL
sl@0
  1281
 */
sl@0
  1282
TVerdict CTestMmfAclntARN9005::DoTestL()
sl@0
  1283
	{
sl@0
  1284
	return( PerformTestL() );
sl@0
  1285
	}
sl@0
  1286
sl@0
  1287
void CTestMmfAclntARN9005::InitTest()
sl@0
  1288
	{
sl@0
  1289
	//Keep adding handlers
sl@0
  1290
	iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9005::HandleStateApInitComplete;
sl@0
  1291
	iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9005::HandleStateRecorderOpen;
sl@0
  1292
	iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9005::HandleStateRecorderPlaying;
sl@0
  1293
	iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9005::HandleApPlayCompleteKErrInUse;
sl@0
  1294
	iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9005::HandleStateAosOpenComplete;
sl@0
  1295
	iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9005::HandleStateAosBufferCopiedKErrInUse;
sl@0
  1296
	iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9005::HandleStateAosPlayCompleteKErrInUse;
sl@0
  1297
	iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9005::HandleStateRecorderrelease;
sl@0
  1298
	iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9005::HandleStateApResourceAvailable;
sl@0
  1299
	iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9005::HandleStateApPlayComplete;
sl@0
  1300
	iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9005::HandleStateAosResourceAvailable;
sl@0
  1301
	}
sl@0
  1302
sl@0
  1303
void CTestMmfAclntARN9005::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1304
	{
sl@0
  1305
	if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState))
sl@0
  1306
		{
sl@0
  1307
		iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))();
sl@0
  1308
 		if(iTestStepResult != EPass)
sl@0
  1309
 			{
sl@0
  1310
 			iEventChecker->StopTest();
sl@0
  1311
 			}
sl@0
  1312
		}
sl@0
  1313
	}
sl@0
  1314
sl@0
  1315
void CTestMmfAclntARN9005::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1316
	{
sl@0
  1317
	if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer)
sl@0
  1318
		{
sl@0
  1319
			DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError);
sl@0
  1320
		}
sl@0
  1321
	if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder)
sl@0
  1322
		{
sl@0
  1323
			DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState);
sl@0
  1324
		}
sl@0
  1325
	if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS)
sl@0
  1326
		{
sl@0
  1327
			DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError);
sl@0
  1328
		}
sl@0
  1329
	}
sl@0
  1330
sl@0
  1331
void CTestMmfAclntARN9005::StartTestL()
sl@0
  1332
	{
sl@0
  1333
	// Open iTestAudioPlayer
sl@0
  1334
	iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
  1335
	INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
  1336
	iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone);
sl@0
  1337
	iEventChecker->SetExpectedState(EStateApInitComplete);
sl@0
  1338
	}
sl@0
  1339
	
sl@0
  1340
TVerdict CTestMmfAclntARN9005::HandleStateApInitComplete()
sl@0
  1341
	{
sl@0
  1342
	iTestAudioPlayer->Play();
sl@0
  1343
	INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
  1344
	// Open iTestAudioRecorder
sl@0
  1345
	iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
  1346
	INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
  1347
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
  1348
	iEventChecker->SetExpectedState(EStateRecoderOpen);
sl@0
  1349
	return EPass;
sl@0
  1350
	}	
sl@0
  1351
sl@0
  1352
TVerdict CTestMmfAclntARN9005::HandleStateRecorderOpen()
sl@0
  1353
	{
sl@0
  1354
	iTestAudioRecorder->PlayL();
sl@0
  1355
	INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
  1356
	// Set ExpectedEvent and change the State
sl@0
  1357
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying);
sl@0
  1358
	iEventChecker->SetExpectedState(EStateRecoderPlaying);
sl@0
  1359
	return EPass;
sl@0
  1360
	}
sl@0
  1361
sl@0
  1362
TVerdict CTestMmfAclntARN9005::HandleStateRecorderPlaying()
sl@0
  1363
	{
sl@0
  1364
	iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse);
sl@0
  1365
	iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse);
sl@0
  1366
	return EPass;
sl@0
  1367
	}
sl@0
  1368
	
sl@0
  1369
TVerdict CTestMmfAclntARN9005::HandleApPlayCompleteKErrInUse()
sl@0
  1370
	{
sl@0
  1371
	TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1372
	INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1373
	if( err != KErrNone )
sl@0
  1374
		{
sl@0
  1375
		ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1376
		iTestStepResult = EFail;
sl@0
  1377
		CActiveScheduler::Stop();
sl@0
  1378
		}
sl@0
  1379
	// Register iTestAudioOutputStream for Notification
sl@0
  1380
	err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1381
	INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1382
	if( err != KErrNone )
sl@0
  1383
		{
sl@0
  1384
		ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1385
		iTestStepResult = EFail;
sl@0
  1386
		CActiveScheduler::Stop();
sl@0
  1387
		}
sl@0
  1388
	// Open iTestAudioOutputStream
sl@0
  1389
	iTestAudioOutputStream->Open(NULL);
sl@0
  1390
	INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
  1391
	// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1392
	iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone);
sl@0
  1393
	iEventChecker->SetExpectedState(EStateAosOpenComplete);
sl@0
  1394
	return EPass;
sl@0
  1395
	}
sl@0
  1396
sl@0
  1397
TVerdict CTestMmfAclntARN9005::HandleStateAosOpenComplete()
sl@0
  1398
	{
sl@0
  1399
	// iFile->Read()
sl@0
  1400
	TInt err = iFile.Read(iBuf); //-synchronous
sl@0
  1401
	if (err != KErrNone)
sl@0
  1402
		{
sl@0
  1403
		INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
  1404
		User::Leave(err);
sl@0
  1405
		}
sl@0
  1406
	// iTestAudioOutputStream->WriteL()
sl@0
  1407
	INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
  1408
	iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
  1409
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1410
	iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse);
sl@0
  1411
	iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse);
sl@0
  1412
	return EPass;	
sl@0
  1413
	}
sl@0
  1414
sl@0
  1415
TVerdict CTestMmfAclntARN9005::HandleStateAosBufferCopiedKErrInUse()
sl@0
  1416
	{
sl@0
  1417
	iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse);
sl@0
  1418
	iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse);
sl@0
  1419
	return EPass;
sl@0
  1420
	}
sl@0
  1421
sl@0
  1422
TVerdict CTestMmfAclntARN9005::HandleStateAosPlayCompleteKErrInUse()
sl@0
  1423
	{
sl@0
  1424
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
  1425
	iEventChecker->SetExpectedState(EStateRecorderrelease);
sl@0
  1426
	return EPass;
sl@0
  1427
	}
sl@0
  1428
sl@0
  1429
TVerdict CTestMmfAclntARN9005::HandleStateRecorderrelease()
sl@0
  1430
	{
sl@0
  1431
	// Timer to check if Notification Event Occurs.
sl@0
  1432
	iCallBackTimer->After(2000000);
sl@0
  1433
	// Set ExpectedEvent and change the State
sl@0
  1434
	iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone);
sl@0
  1435
	iEventChecker->SetExpectedState(EStateApResourceAvailable);
sl@0
  1436
	return EPass;
sl@0
  1437
	}	
sl@0
  1438
	
sl@0
  1439
TVerdict CTestMmfAclntARN9005::HandleStateApResourceAvailable()
sl@0
  1440
	{
sl@0
  1441
	iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
  1442
	INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived"));
sl@0
  1443
	TInt err = iTestAudioPlayer->WillResumePlay();
sl@0
  1444
	INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()"));
sl@0
  1445
	if( err != KErrNone )
sl@0
  1446
		{
sl@0
  1447
		ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err);
sl@0
  1448
		iTestStepResult = EFail;
sl@0
  1449
		CActiveScheduler::Stop();
sl@0
  1450
		return EFail;
sl@0
  1451
		}
sl@0
  1452
	iTestAudioPlayer->SetPosition(iPosition);
sl@0
  1453
	INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()"));
sl@0
  1454
	// Play iTestAudioPlayer
sl@0
  1455
	iTestAudioPlayer->Play();
sl@0
  1456
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1457
	iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrNone,EStateApPlayComplete);
sl@0
  1458
	iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable);
sl@0
  1459
	iEventChecker->EnableMultipleEventMonitor();
sl@0
  1460
	return EPass;
sl@0
  1461
	}
sl@0
  1462
sl@0
  1463
TVerdict CTestMmfAclntARN9005::HandleStateApPlayComplete()
sl@0
  1464
	{
sl@0
  1465
	INFO_PRINTF1(_L("AudioPlayer->PlayComplete"));
sl@0
  1466
	if(iEventChecker->IsMonitoringFinished())
sl@0
  1467
		{
sl@0
  1468
		iTestStepResult = EPass;
sl@0
  1469
		iCallBackTimer->Cancel();
sl@0
  1470
		iEventChecker->StopTest();
sl@0
  1471
		}
sl@0
  1472
	else
sl@0
  1473
		{
sl@0
  1474
		iEventChecker->EnableMultipleEventMonitor();
sl@0
  1475
		}
sl@0
  1476
	return EPass;		
sl@0
  1477
	}
sl@0
  1478
	
sl@0
  1479
TVerdict CTestMmfAclntARN9005::HandleStateAosResourceAvailable()
sl@0
  1480
	{
sl@0
  1481
	INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived"));
sl@0
  1482
	if(iEventChecker->IsMonitoringFinished())
sl@0
  1483
		{
sl@0
  1484
		iCallBackTimer->Cancel();
sl@0
  1485
		iTestStepResult = EPass;
sl@0
  1486
		iEventChecker->StopTest();
sl@0
  1487
		}
sl@0
  1488
	else
sl@0
  1489
		{
sl@0
  1490
		iEventChecker->EnableMultipleEventMonitor();
sl@0
  1491
		}
sl@0
  1492
	return EPass;	
sl@0
  1493
	}	
sl@0
  1494
	
sl@0
  1495
/**
sl@0
  1496
 * PerformTestL
sl@0
  1497
 */
sl@0
  1498
TVerdict CTestMmfAclntARN9005::PerformTestL()
sl@0
  1499
	{
sl@0
  1500
	INFO_PRINTF1(_L("Non Receipt of Notification (on calling WillResumePlay() of a notified client) of a Resource Available Event."));
sl@0
  1501
	iTestStepResult = EFail;
sl@0
  1502
	
sl@0
  1503
	// Initialise the state variables
sl@0
  1504
	InitTest();
sl@0
  1505
	
sl@0
  1506
	// Begin the process
sl@0
  1507
	StartTestL();
sl@0
  1508
	
sl@0
  1509
	// Start the scheduler - Done only once !
sl@0
  1510
	CActiveScheduler::Start();
sl@0
  1511
	
sl@0
  1512
	return iTestStepResult;
sl@0
  1513
	}
sl@0
  1514
sl@0
  1515
//
sl@0
  1516
//CTestMmfAclntARN9006
sl@0
  1517
//
sl@0
  1518
sl@0
  1519
/**
sl@0
  1520
 * Constructor
sl@0
  1521
 */
sl@0
  1522
CTestMmfAclntARN9006::CTestMmfAclntARN9006(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1523
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
  1524
	{}
sl@0
  1525
sl@0
  1526
/**
sl@0
  1527
 * NewL
sl@0
  1528
 */
sl@0
  1529
CTestMmfAclntARN9006* CTestMmfAclntARN9006::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1530
	{
sl@0
  1531
	CTestMmfAclntARN9006* self = new (ELeave) CTestMmfAclntARN9006(aTestName, aSectName);
sl@0
  1532
	return self;
sl@0
  1533
	}
sl@0
  1534
sl@0
  1535
/**
sl@0
  1536
 * DoTestL
sl@0
  1537
 */
sl@0
  1538
TVerdict CTestMmfAclntARN9006::DoTestL()
sl@0
  1539
	{
sl@0
  1540
	return( PerformTestL() );
sl@0
  1541
	}
sl@0
  1542
sl@0
  1543
void CTestMmfAclntARN9006::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1544
	{
sl@0
  1545
	if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState))
sl@0
  1546
		{
sl@0
  1547
		iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))();
sl@0
  1548
 		if(iTestStepResult != EPass)
sl@0
  1549
 			{
sl@0
  1550
 			iEventChecker->StopTest();
sl@0
  1551
 			}
sl@0
  1552
		}
sl@0
  1553
	}
sl@0
  1554
sl@0
  1555
void CTestMmfAclntARN9006::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1556
	{
sl@0
  1557
	if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer)
sl@0
  1558
		{
sl@0
  1559
			DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError);
sl@0
  1560
		}
sl@0
  1561
	if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder)
sl@0
  1562
		{
sl@0
  1563
			DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState);
sl@0
  1564
		}
sl@0
  1565
	if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS)
sl@0
  1566
		{
sl@0
  1567
			DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError);
sl@0
  1568
		}
sl@0
  1569
	}
sl@0
  1570
sl@0
  1571
void CTestMmfAclntARN9006::InitTest()
sl@0
  1572
	{
sl@0
  1573
	//Keep adding handlers
sl@0
  1574
	iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9006::HandleStateApInitComplete;
sl@0
  1575
	iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9006::HandleStateRecorderOpen;
sl@0
  1576
	iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9006::HandleStateRecorderPlaying;
sl@0
  1577
	iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9006::HandleApPlayCompleteKErrInUse;
sl@0
  1578
	iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9006::HandleStateAosOpenComplete;
sl@0
  1579
	iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9006::HandleStateAosBufferCopiedKErrInUse;
sl@0
  1580
	iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9006::HandleStateAosPlayCompleteKErrInUse;
sl@0
  1581
	iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9006::HandleStateRecorderrelease;
sl@0
  1582
	iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9006::HandleStateApResourceAvailable;
sl@0
  1583
	iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9006::HandleStateAosResourceAvailable;
sl@0
  1584
	}
sl@0
  1585
	
sl@0
  1586
void CTestMmfAclntARN9006::StartTestL()
sl@0
  1587
	{
sl@0
  1588
	// Open iTestAudioPlayer
sl@0
  1589
	iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
  1590
	INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
  1591
	iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone);
sl@0
  1592
	iEventChecker->SetExpectedState(EStateApInitComplete);
sl@0
  1593
	}
sl@0
  1594
sl@0
  1595
TVerdict CTestMmfAclntARN9006::HandleStateApInitComplete()
sl@0
  1596
	{
sl@0
  1597
	iTestAudioPlayer->Play();
sl@0
  1598
	INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
  1599
	// Open iTestAudioRecorder
sl@0
  1600
	iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
  1601
	INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
  1602
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
  1603
	iEventChecker->SetExpectedState(EStateRecoderOpen);
sl@0
  1604
	return EPass;
sl@0
  1605
	}
sl@0
  1606
sl@0
  1607
TVerdict CTestMmfAclntARN9006::HandleStateRecorderOpen()
sl@0
  1608
	{
sl@0
  1609
	iTestAudioRecorder->PlayL();
sl@0
  1610
	INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
  1611
	// Set ExpectedEvent and change the State
sl@0
  1612
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying);
sl@0
  1613
	iEventChecker->SetExpectedState(EStateRecoderPlaying);
sl@0
  1614
	return EPass;
sl@0
  1615
	}
sl@0
  1616
sl@0
  1617
TVerdict CTestMmfAclntARN9006::HandleStateRecorderPlaying()
sl@0
  1618
	{
sl@0
  1619
	iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse);
sl@0
  1620
	iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse);
sl@0
  1621
	return EPass;
sl@0
  1622
	}
sl@0
  1623
sl@0
  1624
TVerdict CTestMmfAclntARN9006::HandleApPlayCompleteKErrInUse()
sl@0
  1625
	{
sl@0
  1626
	TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1627
	INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1628
	if( err != KErrNone )
sl@0
  1629
		{
sl@0
  1630
		ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1631
		iTestStepResult = EFail;
sl@0
  1632
		CActiveScheduler::Stop();
sl@0
  1633
		return EFail;
sl@0
  1634
		}
sl@0
  1635
	// Register iTestAudioOutputStream for Notification
sl@0
  1636
	err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1637
	INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1638
	if( err != KErrNone )
sl@0
  1639
		{
sl@0
  1640
		ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1641
		iTestStepResult = EFail;
sl@0
  1642
		CActiveScheduler::Stop();
sl@0
  1643
		return EFail;
sl@0
  1644
		}
sl@0
  1645
	// Open iTestAudioOutputStream
sl@0
  1646
	iTestAudioOutputStream->Open(NULL);
sl@0
  1647
	INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
  1648
	// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1649
	iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone);
sl@0
  1650
	iEventChecker->SetExpectedState(EStateAosOpenComplete);
sl@0
  1651
	return EPass;
sl@0
  1652
	}
sl@0
  1653
sl@0
  1654
TVerdict CTestMmfAclntARN9006::HandleStateAosOpenComplete()
sl@0
  1655
	{
sl@0
  1656
	// iFile->Read()
sl@0
  1657
	TInt err = iFile.Read(iBuf); //-synchronous
sl@0
  1658
	if (err != KErrNone)
sl@0
  1659
		{
sl@0
  1660
		INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
  1661
		User::Leave(err);
sl@0
  1662
		}
sl@0
  1663
	// iTestAudioOutputStream->WriteL()
sl@0
  1664
	INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
  1665
	iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
  1666
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1667
	iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse);
sl@0
  1668
	iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse);
sl@0
  1669
	return EPass;	
sl@0
  1670
	}
sl@0
  1671
sl@0
  1672
TVerdict CTestMmfAclntARN9006::HandleStateAosBufferCopiedKErrInUse()
sl@0
  1673
	{
sl@0
  1674
	iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse);
sl@0
  1675
	iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse);
sl@0
  1676
	return EPass;
sl@0
  1677
	}
sl@0
  1678
sl@0
  1679
TVerdict CTestMmfAclntARN9006::HandleStateAosPlayCompleteKErrInUse()
sl@0
  1680
	{
sl@0
  1681
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
  1682
	iEventChecker->SetExpectedState(EStateRecorderrelease);
sl@0
  1683
	return EPass;
sl@0
  1684
	}
sl@0
  1685
sl@0
  1686
TVerdict CTestMmfAclntARN9006::HandleStateRecorderrelease()
sl@0
  1687
	{
sl@0
  1688
	// Timer to check if Notification Event Occurs.
sl@0
  1689
	iCallBackTimer->After(2000000);
sl@0
  1690
	// Set ExpectedEvent and change the State
sl@0
  1691
	iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone);
sl@0
  1692
	iEventChecker->SetExpectedState(EStateApResourceAvailable);
sl@0
  1693
	return EPass;
sl@0
  1694
	}
sl@0
  1695
sl@0
  1696
TVerdict CTestMmfAclntARN9006::HandleStateApResourceAvailable()
sl@0
  1697
	{
sl@0
  1698
	iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
  1699
	INFO_PRINTF1(_L("iTestAudioPlayer->NotificationReceived"));
sl@0
  1700
	TInt err = iTestAudioPlayer->WillResumePlay();
sl@0
  1701
	INFO_PRINTF1(_L("iTestAudioPlayer->WillResumePlay()"));
sl@0
  1702
	if( err != KErrNone )
sl@0
  1703
		{
sl@0
  1704
		ERR_PRINTF2(_L("iTestAudioPlayer->WillResumePlay() - Failed with Error : %d"), err);
sl@0
  1705
		iTestStepResult = EFail;
sl@0
  1706
		CActiveScheduler::Stop();
sl@0
  1707
		return EFail;
sl@0
  1708
		}
sl@0
  1709
	iCallBackTimer->After(10000000);
sl@0
  1710
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1711
	iEventChecker->SetExpectedEvent(2,EMarncResourceAvailableOS,KErrNone);
sl@0
  1712
	iEventChecker->SetExpectedState(EStateAosResourceAvailable);
sl@0
  1713
	return EPass;
sl@0
  1714
	}
sl@0
  1715
sl@0
  1716
TVerdict CTestMmfAclntARN9006::HandleStateAosResourceAvailable()
sl@0
  1717
	{
sl@0
  1718
	INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived"));
sl@0
  1719
	iCallBackTimer->Cancel();
sl@0
  1720
	iTestStepResult = EPass;
sl@0
  1721
	iEventChecker->StopTest();
sl@0
  1722
	return EPass;
sl@0
  1723
	}
sl@0
  1724
sl@0
  1725
/**
sl@0
  1726
 * PerformTestL
sl@0
  1727
 */
sl@0
  1728
TVerdict CTestMmfAclntARN9006::PerformTestL()
sl@0
  1729
	{
sl@0
  1730
	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
  1731
	iTestStepResult = EFail;
sl@0
  1732
	
sl@0
  1733
	// Initialise the handler functions
sl@0
  1734
	InitTest();
sl@0
  1735
	
sl@0
  1736
	// Initiate the process
sl@0
  1737
	StartTestL();
sl@0
  1738
	
sl@0
  1739
	// Start the scheduler - Done only once !
sl@0
  1740
	CActiveScheduler::Start();
sl@0
  1741
	
sl@0
  1742
	return iTestStepResult;
sl@0
  1743
	}
sl@0
  1744
sl@0
  1745
//
sl@0
  1746
//CTestMmfAclntARN9007
sl@0
  1747
//
sl@0
  1748
sl@0
  1749
/**
sl@0
  1750
 * Constructor
sl@0
  1751
 */
sl@0
  1752
CTestMmfAclntARN9007::CTestMmfAclntARN9007(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1753
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
  1754
	{}
sl@0
  1755
sl@0
  1756
/**
sl@0
  1757
 * NewL
sl@0
  1758
 */
sl@0
  1759
CTestMmfAclntARN9007* CTestMmfAclntARN9007::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1760
	{
sl@0
  1761
	CTestMmfAclntARN9007* self = new (ELeave) CTestMmfAclntARN9007(aTestName, aSectName);
sl@0
  1762
	return self;
sl@0
  1763
	}
sl@0
  1764
sl@0
  1765
/**
sl@0
  1766
 * DoTestL
sl@0
  1767
 */
sl@0
  1768
TVerdict CTestMmfAclntARN9007::DoTestL()
sl@0
  1769
	{
sl@0
  1770
	return( PerformTestL() );
sl@0
  1771
	}
sl@0
  1772
sl@0
  1773
/**
sl@0
  1774
 * FsmCheck
sl@0
  1775
 */
sl@0
  1776
TBool CTestMmfAclntARN9007::FsmCheck(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1777
	{
sl@0
  1778
	TBool retFsmCheck = EFalse;
sl@0
  1779
	if ((iExpectedError !=KErrUnderflow) && (aError == KErrUnderflow))
sl@0
  1780
		{
sl@0
  1781
		INFO_PRINTF1(_L("Underflow !"));
sl@0
  1782
		}
sl@0
  1783
	else if (iExpectedEvent != aEventCode)
sl@0
  1784
		{
sl@0
  1785
        if ((aEventCode == EMoscoStateChangeEvent))
sl@0
  1786
	        {
sl@0
  1787
	        retFsmCheck = ETrue;
sl@0
  1788
	        if (iEventOccured == EMarncResourceAvailableOS)
sl@0
  1789
	            {
sl@0
  1790
	            return retFsmCheck;
sl@0
  1791
	            }
sl@0
  1792
            else
sl@0
  1793
                {
sl@0
  1794
                iEventOccured = EMoscoStateChangeEvent;
sl@0
  1795
                }
sl@0
  1796
	        }
sl@0
  1797
        else if (aEventCode == EMarncResourceAvailableOS)
sl@0
  1798
            {
sl@0
  1799
            retFsmCheck = ETrue;
sl@0
  1800
            if (iEventOccured == EMoscoStateChangeEvent)
sl@0
  1801
                {
sl@0
  1802
                return retFsmCheck;
sl@0
  1803
                }
sl@0
  1804
            else
sl@0
  1805
                {
sl@0
  1806
                iEventOccured = EMarncResourceAvailableOS;
sl@0
  1807
                }
sl@0
  1808
            }
sl@0
  1809
        else
sl@0
  1810
            {
sl@0
  1811
    		ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
sl@0
  1812
    		iTestStepResult = EFail;
sl@0
  1813
    		CActiveScheduler::Stop();
sl@0
  1814
            }
sl@0
  1815
		}
sl@0
  1816
	else if (iExpectedError != aError)
sl@0
  1817
		{
sl@0
  1818
		ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
sl@0
  1819
		iTestStepResult = EFail;
sl@0
  1820
		CActiveScheduler::Stop();
sl@0
  1821
		}
sl@0
  1822
	else if (iExpectedRecorderState != aRecorderState)
sl@0
  1823
		{
sl@0
  1824
		ERR_PRINTF3(_L("ExpectedRecorderState : %d, ActualRecorderState : %d"), iExpectedRecorderState, aRecorderState);
sl@0
  1825
		iTestStepResult = EFail;
sl@0
  1826
		CActiveScheduler::Stop();
sl@0
  1827
		}
sl@0
  1828
	else
sl@0
  1829
		{
sl@0
  1830
		retFsmCheck = ETrue;
sl@0
  1831
		}
sl@0
  1832
	return retFsmCheck;
sl@0
  1833
	}
sl@0
  1834
sl@0
  1835
/**
sl@0
  1836
 * FsmL
sl@0
  1837
 */
sl@0
  1838
void CTestMmfAclntARN9007::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1839
	{
sl@0
  1840
	if (FsmCheck(aEventCode, aError, aRecorderState))
sl@0
  1841
		{
sl@0
  1842
		TInt err = KErrNone;
sl@0
  1843
		switch (iState)
sl@0
  1844
			{
sl@0
  1845
			case 0:
sl@0
  1846
				// Open iTestAudioPlayer
sl@0
  1847
				iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
  1848
				INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
  1849
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1850
				StateChange(EMapcInitComplete);
sl@0
  1851
				break;
sl@0
  1852
			case 1:
sl@0
  1853
				// Play iTestAudioPlayer
sl@0
  1854
				iTestAudioPlayer->Play();
sl@0
  1855
				INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
  1856
				// Open iTestAudioRecorder
sl@0
  1857
				iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
  1858
				INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
  1859
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1860
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
  1861
				break;
sl@0
  1862
			case 2:
sl@0
  1863
				// Play iTestAudioRecorder
sl@0
  1864
				iTestAudioRecorder->PlayL();
sl@0
  1865
				INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
  1866
				// Set ExpectedEvent and change the State
sl@0
  1867
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EPlaying);
sl@0
  1868
				break;
sl@0
  1869
			case 3:
sl@0
  1870
				// iTestAudioPlayer gets PlayError.
sl@0
  1871
				StateChange(EMapcPlayComplete, KErrInUse);
sl@0
  1872
				break;
sl@0
  1873
			case 4:
sl@0
  1874
				// Register iTestAudioPlayer for Notification
sl@0
  1875
				err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1876
				INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1877
				if( err != KErrNone )
sl@0
  1878
					{
sl@0
  1879
					ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1880
					iTestStepResult = EFail;
sl@0
  1881
					CActiveScheduler::Stop();
sl@0
  1882
					break;
sl@0
  1883
					}
sl@0
  1884
				// Register iTestAudioOutputStream for Notification
sl@0
  1885
				err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1886
				INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  1887
				if( err != KErrNone )
sl@0
  1888
					{
sl@0
  1889
					ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1890
					iTestStepResult = EFail;
sl@0
  1891
					CActiveScheduler::Stop();
sl@0
  1892
					break;
sl@0
  1893
					}
sl@0
  1894
				// Open iTestAudioOutputStream
sl@0
  1895
				iTestAudioOutputStream->Open(NULL);
sl@0
  1896
				INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
  1897
				// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  1898
				StateChange(EMaoscOpenComplete);
sl@0
  1899
				break;
sl@0
  1900
			case 5:
sl@0
  1901
				// iFile->Read()
sl@0
  1902
				err = iFile.Read(iBuf); //-synchronous
sl@0
  1903
				if (err != KErrNone)
sl@0
  1904
					{
sl@0
  1905
					INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
  1906
					User::Leave(err);
sl@0
  1907
					}
sl@0
  1908
				// iTestAudioOutputStream->WriteL()
sl@0
  1909
				INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
  1910
				iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
  1911
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1912
				StateChange(EMaoscBufferCopied, KErrInUse);
sl@0
  1913
				break;
sl@0
  1914
			case 6:
sl@0
  1915
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1916
				StateChange(EMaoscPlayComplete, KErrInUse);
sl@0
  1917
				break;
sl@0
  1918
			case 7:
sl@0
  1919
				// Cancel the Notification request for iTestAudioPlayer
sl@0
  1920
				err = iTestAudioPlayer->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
sl@0
  1921
				INFO_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification : Return Code = %d"), err);
sl@0
  1922
				if( err != KErrNone )
sl@0
  1923
					{
sl@0
  1924
					ERR_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1925
					iTestStepResult = EFail;
sl@0
  1926
					CActiveScheduler::Stop();
sl@0
  1927
					break;
sl@0
  1928
					}
sl@0
  1929
				// Wait for iTestAudioRecorder to complete playing
sl@0
  1930
				// Set ExpectedEvent and change the State
sl@0
  1931
				StateChange(EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
  1932
				break;
sl@0
  1933
			case 8:
sl@0
  1934
				// Timer to check if Notification Event Occurs.
sl@0
  1935
				iCallBackTimer->After(2000000);
sl@0
  1936
				// Set ExpectedEvent and change the State
sl@0
  1937
				StateChange(EMarncResourceAvailableOS);
sl@0
  1938
				break;
sl@0
  1939
			case 9:
sl@0
  1940
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
  1941
				INFO_PRINTF1(_L("iTestAudioOutputStream->NotificationReceived"));
sl@0
  1942
				iTestStepResult = EPass;
sl@0
  1943
				CActiveScheduler::Stop();
sl@0
  1944
				break;
sl@0
  1945
			}
sl@0
  1946
		}
sl@0
  1947
	}
sl@0
  1948
sl@0
  1949
/**
sl@0
  1950
 * PerformTestL
sl@0
  1951
 */
sl@0
  1952
TVerdict CTestMmfAclntARN9007::PerformTestL()
sl@0
  1953
	{
sl@0
  1954
	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
  1955
	INFO_PRINTF1(_L("[Cancel before receipt of Notification]"));
sl@0
  1956
	iTestStepResult = EFail;
sl@0
  1957
	
sl@0
  1958
	// Initialise the state variables
sl@0
  1959
	StateInit();
sl@0
  1960
	
sl@0
  1961
	// Begin the process
sl@0
  1962
	FsmL(EIdleMulti, CMdaAudioClipUtility::ENotReady);
sl@0
  1963
	
sl@0
  1964
	// Start the scheduler - Done only once !
sl@0
  1965
	CActiveScheduler::Start();
sl@0
  1966
	
sl@0
  1967
	return iTestStepResult;
sl@0
  1968
	}
sl@0
  1969
sl@0
  1970
//
sl@0
  1971
//CTestMmfAclntARN9008
sl@0
  1972
//
sl@0
  1973
sl@0
  1974
/**
sl@0
  1975
 * Constructor
sl@0
  1976
 */
sl@0
  1977
CTestMmfAclntARN9008::CTestMmfAclntARN9008(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1978
	: CTestMmfAclntMultiClientARN(aTestName, aSectName)
sl@0
  1979
	{}
sl@0
  1980
sl@0
  1981
/**
sl@0
  1982
 * NewL
sl@0
  1983
 */
sl@0
  1984
CTestMmfAclntARN9008* CTestMmfAclntARN9008::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1985
	{
sl@0
  1986
	CTestMmfAclntARN9008* self = new (ELeave) CTestMmfAclntARN9008(aTestName, aSectName);
sl@0
  1987
	return self;
sl@0
  1988
	}
sl@0
  1989
sl@0
  1990
/**
sl@0
  1991
 * DoTestL
sl@0
  1992
 */
sl@0
  1993
TVerdict CTestMmfAclntARN9008::DoTestL()
sl@0
  1994
	{
sl@0
  1995
	return( PerformTestL() );
sl@0
  1996
	}
sl@0
  1997
sl@0
  1998
void CTestMmfAclntARN9008::DecideFsmState(TInt aClientNumber,CMultiEventChecker::TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState)
sl@0
  1999
	{
sl@0
  2000
	if (iEventChecker->CheckFsm(aClientNumber, aClientType, aEventCode, aError,aRecorderState))
sl@0
  2001
		{
sl@0
  2002
		iTestStepResult = (this->*(iStateHandlers[iEventChecker->NextState()]))();
sl@0
  2003
 		if(iTestStepResult != EPass)
sl@0
  2004
 			{
sl@0
  2005
 			iEventChecker->StopTest();
sl@0
  2006
 			}
sl@0
  2007
		}
sl@0
  2008
	}
sl@0
  2009
sl@0
  2010
void CTestMmfAclntARN9008::FsmL(TMmfAudioMultiClientEvents aEventCode, TInt aError, CMdaAudioClipUtility::TState aRecorderState)
sl@0
  2011
	{
sl@0
  2012
	if (aEventCode == EMapcInitComplete || aEventCode == EMapcPlayComplete || aEventCode == EMarncResourceAvailablePlayer)
sl@0
  2013
		{
sl@0
  2014
			DecideFsmState(0,CMultiEventChecker::EAudioPlayer,aEventCode,aError);
sl@0
  2015
		}
sl@0
  2016
	if (aEventCode == EMoscoStateChangeEvent || aEventCode == EMarncResourceAvailableRecorder)
sl@0
  2017
		{
sl@0
  2018
			DecideFsmState(1,CMultiEventChecker::EAudioRecorder,aEventCode,aError,aRecorderState);
sl@0
  2019
		}
sl@0
  2020
	if (aEventCode == EMaoscOpenComplete || aEventCode == EMaoscBufferCopied || aEventCode == EMaoscPlayComplete || aEventCode == EMarncResourceAvailableOS)
sl@0
  2021
		{
sl@0
  2022
			DecideFsmState(2,CMultiEventChecker::EAudioStream,aEventCode,aError);
sl@0
  2023
		}
sl@0
  2024
	}
sl@0
  2025
sl@0
  2026
void CTestMmfAclntARN9008::InitTest()
sl@0
  2027
	{
sl@0
  2028
	//Keep adding handlers
sl@0
  2029
	iStateHandlers[EStateApInitComplete] = &CTestMmfAclntARN9008::HandleStateApInitComplete;
sl@0
  2030
	iStateHandlers[EStateRecoderOpen] = &CTestMmfAclntARN9008::HandleStateRecorderOpen;
sl@0
  2031
	iStateHandlers[EStateRecoderPlaying] = &CTestMmfAclntARN9008::HandleStateRecorderPlaying;
sl@0
  2032
	iStateHandlers[EStateApPlayCompleteKErrInUse] = &CTestMmfAclntARN9008::HandleApPlayCompleteKErrInUse;
sl@0
  2033
	iStateHandlers[EStateAosOpenComplete] = &CTestMmfAclntARN9008::HandleStateAosOpenComplete;
sl@0
  2034
	iStateHandlers[EStateAosBufferCopiedKErrInUse] = &CTestMmfAclntARN9008::HandleStateAosBufferCopiedKErrInUse;
sl@0
  2035
	iStateHandlers[EStateAosPlayCompleteKErrInUse] = &CTestMmfAclntARN9008::HandleStateAosPlayCompleteKErrInUse;
sl@0
  2036
	iStateHandlers[EStateRecorderrelease] = &CTestMmfAclntARN9008::HandleStateRecorderrelease;
sl@0
  2037
	iStateHandlers[EStateApResourceAvailable] = &CTestMmfAclntARN9008::HandleStateApResourceAvailable;
sl@0
  2038
	iStateHandlers[EStateApPlayComplete] = &CTestMmfAclntARN9008::HandleStateApPlayComplete;
sl@0
  2039
	iStateHandlers[EStateAosResourceAvailable] = &CTestMmfAclntARN9008::HandleStateAosResourceAvailable;
sl@0
  2040
	iStateHandlers[EStateRecorderResumePlay] = &CTestMmfAclntARN9008::HandleStateRecorderResumePlay;
sl@0
  2041
	iStateHandlers[EStateRecorderPlayComplete]= &CTestMmfAclntARN9008::HandleStateRecorderPlayComplete;
sl@0
  2042
	}
sl@0
  2043
	
sl@0
  2044
void CTestMmfAclntARN9008::StartTestL()
sl@0
  2045
	{
sl@0
  2046
	// Open iTestAudioPlayer
sl@0
  2047
	iTestAudioPlayer->OpenFileL(iFilenamePlayer);
sl@0
  2048
	INFO_PRINTF1(_L("iTestAudioPlayer->OpenFileL()"));
sl@0
  2049
	iEventChecker->SetExpectedEvent(0,EMapcInitComplete,KErrNone);
sl@0
  2050
	iEventChecker->SetExpectedState(EStateApInitComplete);
sl@0
  2051
	}
sl@0
  2052
	
sl@0
  2053
TVerdict CTestMmfAclntARN9008::HandleStateApInitComplete()
sl@0
  2054
	{
sl@0
  2055
	iTestAudioPlayer->Play();
sl@0
  2056
	INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
  2057
	// Open iTestAudioRecorder
sl@0
  2058
	iTestAudioRecorder->OpenFileL(iFilenameRecorder);
sl@0
  2059
	INFO_PRINTF1(_L("iTestAudioRecorder->OpenFileL()"));
sl@0
  2060
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
  2061
	iEventChecker->SetExpectedState(EStateRecoderOpen);
sl@0
  2062
	return EPass;
sl@0
  2063
	}
sl@0
  2064
sl@0
  2065
TVerdict CTestMmfAclntARN9008::HandleStateRecorderOpen()
sl@0
  2066
	{
sl@0
  2067
	iTestAudioRecorder->PlayL();
sl@0
  2068
	INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
  2069
	// Set ExpectedEvent and change the State
sl@0
  2070
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying);
sl@0
  2071
	iEventChecker->SetExpectedState(EStateRecoderPlaying);
sl@0
  2072
	return EPass;
sl@0
  2073
	}
sl@0
  2074
sl@0
  2075
TVerdict CTestMmfAclntARN9008::HandleStateRecorderPlaying()
sl@0
  2076
	{
sl@0
  2077
	iEventChecker->SetExpectedEvent(0,EMapcPlayComplete,KErrInUse);
sl@0
  2078
	iEventChecker->SetExpectedState(EStateApPlayCompleteKErrInUse);
sl@0
  2079
	return EPass;
sl@0
  2080
	}
sl@0
  2081
sl@0
  2082
TVerdict CTestMmfAclntARN9008::HandleApPlayCompleteKErrInUse()
sl@0
  2083
	{
sl@0
  2084
	TInt err = iTestAudioPlayer->RegisterAudioResourceNotification(*iMdaAudioPlayerCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  2085
	INFO_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  2086
	if( err != KErrNone )
sl@0
  2087
		{
sl@0
  2088
		ERR_PRINTF2(_L("iTestAudioPlayer->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  2089
		iTestStepResult = EFail;
sl@0
  2090
		CActiveScheduler::Stop();
sl@0
  2091
		}
sl@0
  2092
	// Register iTestAudioOutputStream for Notification
sl@0
  2093
	err = iTestAudioOutputStream->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport, KMMFEventCategoryAudioResourceAvailable);
sl@0
  2094
	INFO_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification : Status - %d "), err);
sl@0
  2095
	if( err != KErrNone )
sl@0
  2096
		{
sl@0
  2097
		ERR_PRINTF2(_L("iTestAudioOutputStream->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  2098
		iTestStepResult = EFail;
sl@0
  2099
		CActiveScheduler::Stop();
sl@0
  2100
		}
sl@0
  2101
	// Open iTestAudioOutputStream
sl@0
  2102
	iTestAudioOutputStream->Open(NULL);
sl@0
  2103
	INFO_PRINTF1(_L("iTestAudioOutputStream->Open()"));
sl@0
  2104
	// Set ExpectedEvent, ExpectedError, ExpectedRecorderState and change the State
sl@0
  2105
	iEventChecker->SetExpectedEvent(2,EMaoscOpenComplete,KErrNone);
sl@0
  2106
	iEventChecker->SetExpectedState(EStateAosOpenComplete);
sl@0
  2107
	return EPass;
sl@0
  2108
	}
sl@0
  2109
	
sl@0
  2110
TVerdict CTestMmfAclntARN9008::HandleStateAosOpenComplete()
sl@0
  2111
	{
sl@0
  2112
	// iFile->Read()
sl@0
  2113
	TInt err = iFile.Read(iBuf); //-synchronous
sl@0
  2114
	if (err != KErrNone)
sl@0
  2115
		{
sl@0
  2116
		INFO_PRINTF2(_L("Error reading iFile %d"), err);
sl@0
  2117
		User::Leave(err);
sl@0
  2118
		}
sl@0
  2119
	// iTestAudioOutputStream->WriteL()
sl@0
  2120
	INFO_PRINTF1(_L("iTestAudioOutputStream->WriteL()"));
sl@0
  2121
	iTestAudioOutputStream->WriteL(iBuf); //-Should get Play Error.
sl@0
  2122
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
  2123
	iEventChecker->SetExpectedEvent(2,EMaoscBufferCopied,KErrInUse);
sl@0
  2124
	iEventChecker->SetExpectedState(EStateAosBufferCopiedKErrInUse);
sl@0
  2125
	return EPass;	
sl@0
  2126
	}
sl@0
  2127
sl@0
  2128
TVerdict CTestMmfAclntARN9008::HandleStateAosBufferCopiedKErrInUse()
sl@0
  2129
	{
sl@0
  2130
	iEventChecker->SetExpectedEvent(2,EMaoscPlayComplete,KErrInUse);
sl@0
  2131
	iEventChecker->SetExpectedState(EStateAosPlayCompleteKErrInUse);
sl@0
  2132
	return EPass;
sl@0
  2133
	}
sl@0
  2134
	
sl@0
  2135
TVerdict CTestMmfAclntARN9008::HandleStateAosPlayCompleteKErrInUse()
sl@0
  2136
	{
sl@0
  2137
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EOpen);
sl@0
  2138
	iEventChecker->SetExpectedState(EStateRecorderrelease);
sl@0
  2139
	return EPass;
sl@0
  2140
	}
sl@0
  2141
sl@0
  2142
TVerdict CTestMmfAclntARN9008::HandleStateRecorderrelease()
sl@0
  2143
	{
sl@0
  2144
	// Set ExpectedEvent and change the State
sl@0
  2145
	iEventChecker->SetExpectedEvent(0,EMarncResourceAvailablePlayer,KErrNone);
sl@0
  2146
	iEventChecker->SetExpectedState(EStateApResourceAvailable);
sl@0
  2147
	return EPass;
sl@0
  2148
	}
sl@0
  2149
sl@0
  2150
TVerdict CTestMmfAclntARN9008::HandleStateApResourceAvailable()
sl@0
  2151
	{
sl@0
  2152
	// iTestAudioPlayer resumes the playback.
sl@0
  2153
	iTestAudioPlayer->SetPosition(iPosition);
sl@0
  2154
	INFO_PRINTF1(_L("iTestAudioPlayer->SetPosition()"));
sl@0
  2155
	iTestAudioPlayer->Play();
sl@0
  2156
	INFO_PRINTF1(_L("iTestAudioPlayer->Play()"));
sl@0
  2157
	// Cancel the Notification request for iTestAudioPlayer
sl@0
  2158
	TInt err = iTestAudioPlayer->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
sl@0
  2159
	INFO_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification : Return Code = %d"), err);
sl@0
  2160
	if( err != KErrNone )
sl@0
  2161
		{
sl@0
  2162
		ERR_PRINTF2(_L("iTestAudioPlayer->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  2163
		iTestStepResult = EFail;
sl@0
  2164
		CActiveScheduler::Stop();
sl@0
  2165
		return EFail;
sl@0
  2166
		}
sl@0
  2167
	// Play iTestAudioRecorder
sl@0
  2168
	iTestAudioRecorder->PlayL();
sl@0
  2169
	INFO_PRINTF1(_L("iTestAudioRecorder->PlayL()"));
sl@0
  2170
	// Set ExpectedEvent and change the State
sl@0
  2171
	iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent,KErrNone,CMdaAudioClipUtility::EPlaying);
sl@0
  2172
	iEventChecker->SetExpectedState(EStateRecorderResumePlay);
sl@0
  2173
	return EPass;
sl@0
  2174
	}
sl@0
  2175
TVerdict CTestMmfAclntARN9008::HandleStateRecorderResumePlay()
sl@0
  2176
	{
sl@0
  2177
	iEventChecker->RegisterClientEventToMonitor(0,EMapcPlayComplete,KErrInUse,EStateApPlayComplete);
sl@0
  2178
	iEventChecker->RegisterClientEventToMonitor(2,EMarncResourceAvailableOS,KErrNone,EStateAosResourceAvailable);
sl@0
  2179
	iEventChecker->EnableMultipleEventMonitor();
sl@0
  2180
	return EPass;
sl@0
  2181
	}
sl@0
  2182
TVerdict CTestMmfAclntARN9008::HandleStateApPlayComplete()
sl@0
  2183
	{
sl@0
  2184
	INFO_PRINTF1(_L("AudioPlayer->PlayComplete"));
sl@0
  2185
	if(iEventChecker->IsMonitoringFinished())
sl@0
  2186
		{
sl@0
  2187
		iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
  2188
		iEventChecker->SetExpectedState(EStateRecorderPlayComplete);
sl@0
  2189
		}
sl@0
  2190
	else
sl@0
  2191
		{
sl@0
  2192
		iEventChecker->EnableMultipleEventMonitor();
sl@0
  2193
		}
sl@0
  2194
	return EPass;		
sl@0
  2195
	}
sl@0
  2196
sl@0
  2197
TVerdict CTestMmfAclntARN9008::HandleStateAosResourceAvailable()
sl@0
  2198
	{
sl@0
  2199
	INFO_PRINTF1(_L("AudioPlayer->PlayComplete"));
sl@0
  2200
	if(iEventChecker->IsMonitoringFinished())
sl@0
  2201
		{
sl@0
  2202
		iEventChecker->SetExpectedEvent(1,EMoscoStateChangeEvent, KErrNone, CMdaAudioClipUtility::EOpen);
sl@0
  2203
		iEventChecker->SetExpectedState(EStateRecorderPlayComplete);
sl@0
  2204
		}
sl@0
  2205
	else
sl@0
  2206
		{
sl@0
  2207
		iEventChecker->EnableMultipleEventMonitor();
sl@0
  2208
		}
sl@0
  2209
	return EPass;	
sl@0
  2210
	}
sl@0
  2211
sl@0
  2212
TVerdict CTestMmfAclntARN9008::HandleStateRecorderPlayComplete()
sl@0
  2213
	{
sl@0
  2214
	INFO_PRINTF1(_L("AudioRecorder->Complete"));
sl@0
  2215
	iEventChecker->StopTest();
sl@0
  2216
	return EPass;
sl@0
  2217
	}
sl@0
  2218
sl@0
  2219
TVerdict CTestMmfAclntARN9008::PerformTestL()
sl@0
  2220
	{
sl@0
  2221
	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
  2222
	INFO_PRINTF1(_L("[Cancel after receipt of Notification]"));
sl@0
  2223
	iTestStepResult = EFail;
sl@0
  2224
		
sl@0
  2225
	// Initialise the handler functions
sl@0
  2226
	InitTest();
sl@0
  2227
	
sl@0
  2228
	// Initiate the process
sl@0
  2229
	StartTestL();
sl@0
  2230
	
sl@0
  2231
	// Start the scheduler - Done only once !
sl@0
  2232
	CActiveScheduler::Start();
sl@0
  2233
	
sl@0
  2234
	return iTestStepResult;
sl@0
  2235
	}
sl@0
  2236
sl@0
  2237
CMultiEventChecker* CMultiEventChecker::NewL()
sl@0
  2238
	{
sl@0
  2239
	CMultiEventChecker* s = new(ELeave) CMultiEventChecker();
sl@0
  2240
	CleanupStack::PushL(s);
sl@0
  2241
	s->ConstructL();
sl@0
  2242
	CleanupStack::Pop();
sl@0
  2243
	return s;
sl@0
  2244
	}
sl@0
  2245
sl@0
  2246
CMultiEventChecker::CMultiEventChecker()
sl@0
  2247
	{		
sl@0
  2248
	}
sl@0
  2249
	
sl@0
  2250
void CMultiEventChecker::ConstructL()
sl@0
  2251
	{
sl@0
  2252
	iExpectedRecorderState = CMdaAudioClipUtility::ENotReady;	
sl@0
  2253
	iMonitorMultipleEvents = EFalse;
sl@0
  2254
	}
sl@0
  2255
sl@0
  2256
void CMultiEventChecker::SetExpectedState(TInt aState)
sl@0
  2257
	{
sl@0
  2258
	iNextState = aState;
sl@0
  2259
	}
sl@0
  2260
	
sl@0
  2261
void CMultiEventChecker::StopTest()
sl@0
  2262
	{ 
sl@0
  2263
	CActiveScheduler::Stop();
sl@0
  2264
	}
sl@0
  2265
sl@0
  2266
void CMultiEventChecker::SetExpectedEvent(TInt aClientNumber, TInt aExpectedEvent, TInt aExpectedError,CMdaAudioClipUtility::TState aRecorderState)
sl@0
  2267
	{
sl@0
  2268
	iClientEventsToMonitor[aClientNumber]= aExpectedEvent;
sl@0
  2269
	iClientError[aClientNumber] = aExpectedError;
sl@0
  2270
	iExpectedRecorderState = aRecorderState;
sl@0
  2271
	}
sl@0
  2272
	
sl@0
  2273
void CMultiEventChecker::RegisterClientEventToMonitor(TInt aClientNumber, TInt aEventCode, TInt aError, TInt aFsmState,CMdaAudioClipUtility::TState aRecorderState)
sl@0
  2274
	{
sl@0
  2275
	iClientsRegistered++;
sl@0
  2276
	iClientEventsToMonitor[aClientNumber] = aEventCode;
sl@0
  2277
	iClientError[aClientNumber] = aError;
sl@0
  2278
	iFsmStateforClient[aClientNumber] = aFsmState;
sl@0
  2279
	iExpectedRecorderState = aRecorderState;
sl@0
  2280
	}
sl@0
  2281
sl@0
  2282
TBool CMultiEventChecker::IsMonitoringFinished()
sl@0
  2283
	{
sl@0
  2284
	 if(iClientsRegistered == 0)
sl@0
  2285
	 	{
sl@0
  2286
	 	return ETrue;
sl@0
  2287
	 	}
sl@0
  2288
	 else
sl@0
  2289
	 	{
sl@0
  2290
	 	return EFalse;
sl@0
  2291
	 	}
sl@0
  2292
	}
sl@0
  2293
	
sl@0
  2294
TBool CMultiEventChecker::CheckFsm(TInt aClientNumber,TClientUtilityType aClientType, TInt aEventCode, TInt aError,CMdaAudioClipUtility::TState aRecorderState)
sl@0
  2295
	{
sl@0
  2296
	TBool retFsmCheck = ETrue;
sl@0
  2297
	if (iMonitorMultipleEvents)
sl@0
  2298
		{
sl@0
  2299
		if(iClientEventsToMonitor[aClientNumber] == aEventCode && iClientError[aClientNumber] == aError )
sl@0
  2300
			{
sl@0
  2301
			SetExpectedState(iFsmStateforClient[aClientNumber]);
sl@0
  2302
			}
sl@0
  2303
		else
sl@0
  2304
			{
sl@0
  2305
			retFsmCheck = EFalse;
sl@0
  2306
			}
sl@0
  2307
		
sl@0
  2308
		if(retFsmCheck)
sl@0
  2309
			{
sl@0
  2310
			//Client event has finished
sl@0
  2311
			iClientsRegistered--;
sl@0
  2312
			}
sl@0
  2313
		iMonitorMultipleEvents = EFalse;
sl@0
  2314
		}
sl@0
  2315
	else
sl@0
  2316
		{
sl@0
  2317
		if(iClientEventsToMonitor[aClientNumber] != aEventCode)
sl@0
  2318
			{
sl@0
  2319
			retFsmCheck = EFalse;
sl@0
  2320
			}
sl@0
  2321
		else if(iClientError[aClientNumber] != aError)
sl@0
  2322
			{
sl@0
  2323
			retFsmCheck = EFalse;
sl@0
  2324
			} 
sl@0
  2325
		else if (aClientType == EAudioRecorder)
sl@0
  2326
			{
sl@0
  2327
			if (iExpectedRecorderState != aRecorderState)
sl@0
  2328
				{
sl@0
  2329
				retFsmCheck = EFalse;		
sl@0
  2330
				}
sl@0
  2331
			}
sl@0
  2332
		}
sl@0
  2333
	return retFsmCheck;
sl@0
  2334
	}