os/mm/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestOutputStreamARN.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 Audio Output Stream.
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
/**
sl@0
    19
 @file TestOutputStreamARN.cpp
sl@0
    20
*/
sl@0
    21
sl@0
    22
#include "TestAudioClientUtilitiesARN.h"
sl@0
    23
sl@0
    24
const TInt KSampleRate = 8000;
sl@0
    25
const TInt KBytesPerSample = 2; 
sl@0
    26
//------------------------------------------------------------------------------
sl@0
    27
//********************PREQ 797 - Audio Resource Notification********************
sl@0
    28
//------------------------------------------------------------------------------
sl@0
    29
sl@0
    30
//
sl@0
    31
//CTestMdaAudioOutputStreamCallbackSupport
sl@0
    32
//
sl@0
    33
sl@0
    34
/**
sl@0
    35
 * NewL
sl@0
    36
 */
sl@0
    37
CTestMdaAudioOutputStreamCallbackSupport* CTestMdaAudioOutputStreamCallbackSupport::NewL(MTestAudioOutputStreamCallback& aCallback)
sl@0
    38
	{
sl@0
    39
	return new(ELeave) CTestMdaAudioOutputStreamCallbackSupport(aCallback);
sl@0
    40
	}
sl@0
    41
sl@0
    42
/**
sl@0
    43
 * MaoscOpenComplete
sl@0
    44
 */
sl@0
    45
void CTestMdaAudioOutputStreamCallbackSupport::MaoscOpenComplete(TInt aError)
sl@0
    46
	{
sl@0
    47
	iCallback.MaoscOpenCompleteTest(aError, *this);
sl@0
    48
	}
sl@0
    49
sl@0
    50
/**
sl@0
    51
 * MaoscBufferCopied
sl@0
    52
 */
sl@0
    53
void CTestMdaAudioOutputStreamCallbackSupport::MaoscBufferCopied(TInt aError, const TDesC8& aBuffer)
sl@0
    54
	{
sl@0
    55
	iCallback.MaoscBufferCopiedTest(aError, aBuffer, *this);
sl@0
    56
	}
sl@0
    57
sl@0
    58
/**
sl@0
    59
 * MaoscPlayComplete
sl@0
    60
 */
sl@0
    61
void CTestMdaAudioOutputStreamCallbackSupport::MaoscPlayComplete(TInt aError)
sl@0
    62
	{
sl@0
    63
	iCallback.MaoscPlayCompleteTest(aError, *this);
sl@0
    64
	}
sl@0
    65
sl@0
    66
/**
sl@0
    67
 * MarncResourceAvailable
sl@0
    68
 */
sl@0
    69
void CTestMdaAudioOutputStreamCallbackSupport::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData)
sl@0
    70
	{
sl@0
    71
	iCallback.MarncResourceAvailableTest(aNotificationEventId, aNotificationData, *this);
sl@0
    72
	}
sl@0
    73
sl@0
    74
/**
sl@0
    75
 * Constructor
sl@0
    76
 */
sl@0
    77
CTestMdaAudioOutputStreamCallbackSupport::CTestMdaAudioOutputStreamCallbackSupport(MTestAudioOutputStreamCallback& aCallback):iCallback(aCallback)
sl@0
    78
	{
sl@0
    79
sl@0
    80
	}
sl@0
    81
sl@0
    82
//
sl@0
    83
//CTestStepAudioOutputStreamARN
sl@0
    84
//
sl@0
    85
sl@0
    86
/**
sl@0
    87
 * Constructor
sl@0
    88
 */
sl@0
    89
CTestStepAudioOutputStreamARN::CTestStepAudioOutputStreamARN(const TDesC& aTestName)
sl@0
    90
	{
sl@0
    91
	iTestStepName = aTestName;
sl@0
    92
	iFileSize1 = 0;
sl@0
    93
	iFileSize2 = 0;
sl@0
    94
	iHeapSize = 3600000;
sl@0
    95
	}
sl@0
    96
sl@0
    97
/**
sl@0
    98
 * MMdaAudioOutputStreamCallback->MaoscOpenComplete
sl@0
    99
 */
sl@0
   100
void CTestStepAudioOutputStreamARN::MaoscOpenCompleteTest(TInt aError, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
sl@0
   101
	{
sl@0
   102
	if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
sl@0
   103
		{
sl@0
   104
		INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError);
sl@0
   105
		TRAP(iError, FsmL(EMaoscOpenComplete1, aError));
sl@0
   106
		}
sl@0
   107
	else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
sl@0
   108
		{
sl@0
   109
		INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError);
sl@0
   110
		TRAP(iError, FsmL(EMaoscOpenComplete2, aError));
sl@0
   111
		}
sl@0
   112
	else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
sl@0
   113
		{
sl@0
   114
		INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscOpenComplete (%d)"),aError);
sl@0
   115
		TRAP(iError, FsmL(EMaoscOpenComplete3, aError));
sl@0
   116
		}
sl@0
   117
	}
sl@0
   118
sl@0
   119
/**
sl@0
   120
 * MMdaAudioOutputStreamCallback->MaoscBufferCopied
sl@0
   121
 */
sl@0
   122
void CTestStepAudioOutputStreamARN::MaoscBufferCopiedTest(TInt aError, const TDesC8& /*aBuffer*/, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
sl@0
   123
	{
sl@0
   124
	if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
sl@0
   125
		{
sl@0
   126
		INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError);
sl@0
   127
		TRAP(iError, FsmL(EMaoscBufferCopied1, aError));
sl@0
   128
		}
sl@0
   129
	else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
sl@0
   130
		{
sl@0
   131
		INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError);
sl@0
   132
		TRAP(iError, FsmL(EMaoscBufferCopied2, aError));
sl@0
   133
		}
sl@0
   134
	else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
sl@0
   135
		{
sl@0
   136
		INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscBufferCopied (%d)"),aError);
sl@0
   137
		TRAP(iError, FsmL(EMaoscBufferCopied3, aError));
sl@0
   138
		}
sl@0
   139
	}
sl@0
   140
sl@0
   141
/**
sl@0
   142
 * MMdaAudioOutputStreamCallback->MaoscPlayComplete
sl@0
   143
 */
sl@0
   144
void CTestStepAudioOutputStreamARN::MaoscPlayCompleteTest(TInt aError, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
sl@0
   145
	{
sl@0
   146
	if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
sl@0
   147
		{
sl@0
   148
		INFO_PRINTF2(_L("iTestAudioOutputStream1::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError);
sl@0
   149
		TRAP(iError, FsmL(EMaoscPlayComplete1, aError));
sl@0
   150
		}
sl@0
   151
	else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
sl@0
   152
		{
sl@0
   153
		INFO_PRINTF2(_L("iTestAudioOutputStream2::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError);
sl@0
   154
		TRAP(iError, FsmL(EMaoscPlayComplete2, aError));
sl@0
   155
		}
sl@0
   156
	else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
sl@0
   157
		{
sl@0
   158
		INFO_PRINTF2(_L("iTestAudioOutputStream3::MMdaAudioOutputStreamCallback->MaoscPlayComplete (%d)"),aError);
sl@0
   159
		TRAP(iError, FsmL(EMaoscPlayComplete3, aError));
sl@0
   160
		}
sl@0
   161
	}
sl@0
   162
sl@0
   163
/**
sl@0
   164
 * MMMFAudioResourceNotificationCallback->MarncResourceAvailable
sl@0
   165
 */
sl@0
   166
void CTestStepAudioOutputStreamARN::MarncResourceAvailableTest(TUid aNotificationEventId, const TDesC8& aNotificationData, CTestMdaAudioOutputStreamCallbackSupport& aMdaAudioOutputStreamCallbackSupport)
sl@0
   167
	{
sl@0
   168
	if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable)
sl@0
   169
		{
sl@0
   170
		INFO_PRINTF1(_L("iAudioOutputStream::MMMFAudioResourceNotificationCallback -> KMMFEventCategoryAudioResourceAvailable"));
sl@0
   171
sl@0
   172
		//Convert TDesc8 to TInt64
sl@0
   173
		TMMFTimeIntervalMicroSecondsPckg timeIntvbuf;
sl@0
   174
		timeIntvbuf.Copy(aNotificationData);
sl@0
   175
		TTimeIntervalMicroSeconds intPos = timeIntvbuf();
sl@0
   176
		iPosition = intPos;
sl@0
   177
sl@0
   178
		if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport1)
sl@0
   179
			{
sl@0
   180
			INFO_PRINTF1(_L("iTestAudioOutputStream1 -> MMMFAudioResourceNotificationCallback NotificationReceived"));
sl@0
   181
			TRAP(iError, FsmL(EMarncResourceAvailableOS1, KErrNone));
sl@0
   182
			}
sl@0
   183
		else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport2)
sl@0
   184
			{
sl@0
   185
			INFO_PRINTF1(_L("iTestAudioOutputStream2 -> MMMFAudioResourceNotificationCallback NotificationReceived"));
sl@0
   186
			TRAP(iError, FsmL(EMarncResourceAvailableOS2, KErrNone));
sl@0
   187
			}
sl@0
   188
		else if (&aMdaAudioOutputStreamCallbackSupport == iMdaAudioOutputStreamCallbackSupport3)
sl@0
   189
			{
sl@0
   190
			INFO_PRINTF1(_L("iTestAudioOutputStream3 -> MMMFAudioResourceNotificationCallback NotificationReceived"));
sl@0
   191
			TRAP(iError, FsmL(EMarncResourceAvailableOS3, KErrNone));
sl@0
   192
			}
sl@0
   193
		}
sl@0
   194
	else
sl@0
   195
		{
sl@0
   196
		INFO_PRINTF1(_L("MMMFAudioResourceNotificationCallback, but NOT KMMFEventCategoryAudioResourceAvailable"));
sl@0
   197
		}
sl@0
   198
	}
sl@0
   199
sl@0
   200
/**
sl@0
   201
 * DoTestStepPreambleL
sl@0
   202
 */
sl@0
   203
TVerdict CTestStepAudioOutputStreamARN::DoTestStepPreambleL()
sl@0
   204
	{
sl@0
   205
	// Local Variable to hold verdict
sl@0
   206
	TVerdict verdict;
sl@0
   207
	
sl@0
   208
	// Install the scheduler
sl@0
   209
	verdict = CTestMmfAclntStep::DoTestStepPreambleL();
sl@0
   210
	
sl@0
   211
	if (verdict == EFail)
sl@0
   212
		{
sl@0
   213
		return verdict;
sl@0
   214
		}
sl@0
   215
sl@0
   216
	// Connect RFs session
sl@0
   217
	TInt err = iFs.Connect();
sl@0
   218
	if (err != KErrNone)
sl@0
   219
		{
sl@0
   220
		INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err);
sl@0
   221
		return EFail;
sl@0
   222
		}
sl@0
   223
sl@0
   224
	// Initialise iTestAudioOutputStream1
sl@0
   225
	INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream1 : EMdaPriorityNormal"));
sl@0
   226
	iMdaAudioOutputStreamCallbackSupport1 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this);
sl@0
   227
	TRAP(err, iTestAudioOutputStream1 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport1, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality));
sl@0
   228
	if (err != KErrNone || iTestAudioOutputStream1 == NULL )
sl@0
   229
		{
sl@0
   230
		INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream1 = %d"), err);
sl@0
   231
		return EInconclusive;
sl@0
   232
		}
sl@0
   233
sl@0
   234
	// Open RFile#1
sl@0
   235
	err = iFile1.Open(iFs, KStreamRawFile1, EFileRead);
sl@0
   236
	if (err != KErrNone)
sl@0
   237
		{
sl@0
   238
		INFO_PRINTF2(_L("Error opening iFile1 = %d"), err);
sl@0
   239
		return EFail;
sl@0
   240
		}
sl@0
   241
	
sl@0
   242
	// Get size of iFile1
sl@0
   243
	err = iFile1.Size(iFileSize1);
sl@0
   244
	if (err != KErrNone)
sl@0
   245
		{
sl@0
   246
		INFO_PRINTF2(_L("Error getting size of iFile1 = %d"), err);
sl@0
   247
		return EFail;
sl@0
   248
		}
sl@0
   249
	
sl@0
   250
	// Initialise iBuf1
sl@0
   251
	iBuf1.CreateMaxL(iFileSize1);
sl@0
   252
	
sl@0
   253
	// Initialise iTestAudioOutputStream2
sl@0
   254
	INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream2 : EMdaPriorityMax"));
sl@0
   255
	iMdaAudioOutputStreamCallbackSupport2 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this);
sl@0
   256
	TRAP(err, iTestAudioOutputStream2 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport2, EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality));
sl@0
   257
	if (err != KErrNone || iTestAudioOutputStream2 == NULL )
sl@0
   258
		{
sl@0
   259
		INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream2 = %d"), err);
sl@0
   260
		return EInconclusive;
sl@0
   261
		}
sl@0
   262
sl@0
   263
	// Open RFile#2
sl@0
   264
	err = iFile2.Open(iFs, KStreamRawFile2, EFileRead);
sl@0
   265
	if (err != KErrNone)
sl@0
   266
		{
sl@0
   267
		INFO_PRINTF2(_L("Error opening iFile2 = %d"), err);
sl@0
   268
		return EFail;
sl@0
   269
		}
sl@0
   270
	
sl@0
   271
	// Get size of iFile2
sl@0
   272
	err = iFile2.Size(iFileSize2);
sl@0
   273
	if (err != KErrNone)
sl@0
   274
		{
sl@0
   275
		INFO_PRINTF2(_L("Error getting size of iFile2 = %d"), err);
sl@0
   276
		return EFail;
sl@0
   277
		}
sl@0
   278
	
sl@0
   279
	// Initialise iBuf2
sl@0
   280
	iBuf2.CreateMaxL(iFileSize2);
sl@0
   281
	
sl@0
   282
	// Initialise iTestAudioOutputStream3
sl@0
   283
	INFO_PRINTF1(_L("Initialise CMdaAudioOutputStream3 : EMdaPriorityMin"));
sl@0
   284
	iMdaAudioOutputStreamCallbackSupport3 = CTestMdaAudioOutputStreamCallbackSupport::NewL(*this);
sl@0
   285
	TRAP(err, iTestAudioOutputStream3 = CMdaAudioOutputStream::NewL(*iMdaAudioOutputStreamCallbackSupport3, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality));
sl@0
   286
	if (err != KErrNone || iTestAudioOutputStream3 == NULL )
sl@0
   287
		{
sl@0
   288
		INFO_PRINTF2(_L("Error Creating iTestAudioOutputStream3 = %d"), err);
sl@0
   289
		return EInconclusive;
sl@0
   290
		}
sl@0
   291
sl@0
   292
	// Open RFile#3
sl@0
   293
	err = iFile3.Open(iFs, KStreamRawFile3, EFileRead);
sl@0
   294
	if (err != KErrNone)
sl@0
   295
		{
sl@0
   296
		INFO_PRINTF2(_L("Error opening iFile3 = %d"), err);
sl@0
   297
		return EFail;
sl@0
   298
		}
sl@0
   299
	
sl@0
   300
	// Get size of iFile3
sl@0
   301
	err = iFile3.Size(iFileSize3);
sl@0
   302
	if (err != KErrNone)
sl@0
   303
		{
sl@0
   304
		INFO_PRINTF2(_L("Error getting size of iFile3 = %d"), err);
sl@0
   305
		return EFail;
sl@0
   306
		}
sl@0
   307
	
sl@0
   308
	// Initialise iBuf3
sl@0
   309
	iBuf3.CreateMaxL(iFileSize3);
sl@0
   310
	
sl@0
   311
	// Initialise the CCallBackTimer.
sl@0
   312
	iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler));
sl@0
   313
	
sl@0
   314
	return verdict;
sl@0
   315
	}
sl@0
   316
sl@0
   317
/**
sl@0
   318
 * DoTestStepPostambleL
sl@0
   319
 */
sl@0
   320
TVerdict CTestStepAudioOutputStreamARN::DoTestStepPostambleL()
sl@0
   321
	{
sl@0
   322
	// Delete all the iTestAudioOutputStream utilities.
sl@0
   323
	delete iTestAudioOutputStream1;
sl@0
   324
	iTestAudioOutputStream1=NULL;
sl@0
   325
	delete iTestAudioOutputStream2;
sl@0
   326
	iTestAudioOutputStream2=NULL;
sl@0
   327
	delete iTestAudioOutputStream3;
sl@0
   328
	iTestAudioOutputStream3=NULL;
sl@0
   329
	// Destroy File Handles
sl@0
   330
	iFile1.Close();
sl@0
   331
	iFile2.Close();
sl@0
   332
	iFile3.Close();
sl@0
   333
	iFs.Close();
sl@0
   334
	// Delete RBuf8
sl@0
   335
	iBuf1.Close();
sl@0
   336
	iBuf2.Close();
sl@0
   337
	iBuf3.Close();
sl@0
   338
	// Delete CTestMdaAudioOutputStreamCallbackSupport
sl@0
   339
	delete iMdaAudioOutputStreamCallbackSupport1;
sl@0
   340
	delete iMdaAudioOutputStreamCallbackSupport2;
sl@0
   341
	delete iMdaAudioOutputStreamCallbackSupport3;
sl@0
   342
	// Delete the CCallBackTimer.
sl@0
   343
	delete iCallBackTimer;
sl@0
   344
	iCallBackTimer=NULL;
sl@0
   345
	// Destroy the scheduler
sl@0
   346
	return CTestMmfAclntStep::DoTestStepPostambleL();
sl@0
   347
	}
sl@0
   348
sl@0
   349
/**
sl@0
   350
 * DoTestStepL
sl@0
   351
 */
sl@0
   352
TVerdict CTestStepAudioOutputStreamARN::DoTestStepL()
sl@0
   353
	{
sl@0
   354
	return( DoTestL() );
sl@0
   355
	}
sl@0
   356
sl@0
   357
/**
sl@0
   358
 * StateInit
sl@0
   359
 */
sl@0
   360
void CTestStepAudioOutputStreamARN::StateInit()
sl@0
   361
	{
sl@0
   362
	iExpectedEvent=EIdleOutputStream;
sl@0
   363
	iExpectedError=KErrNone;
sl@0
   364
	iState=0;
sl@0
   365
	}
sl@0
   366
sl@0
   367
/**
sl@0
   368
 * StateChange
sl@0
   369
 */
sl@0
   370
void CTestStepAudioOutputStreamARN::StateChange(TMmfAudioOutputStreamEvents aExpectedEvent, TInt aExpectedError)
sl@0
   371
	{
sl@0
   372
	iExpectedEvent=aExpectedEvent;
sl@0
   373
	iExpectedError=aExpectedError;
sl@0
   374
	iState++;
sl@0
   375
	}
sl@0
   376
	
sl@0
   377
/**
sl@0
   378
 * FsmCheck
sl@0
   379
 */
sl@0
   380
TBool CTestStepAudioOutputStreamARN::FsmCheck(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
   381
	{
sl@0
   382
	TBool retFsmCheck = EFalse;
sl@0
   383
	if (iExpectedEvent != aEventCode)
sl@0
   384
		{
sl@0
   385
		ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
sl@0
   386
		iTestStepResult = EFail;
sl@0
   387
		CActiveScheduler::Stop();
sl@0
   388
		}
sl@0
   389
	else if (iExpectedError != aError)
sl@0
   390
		{
sl@0
   391
		ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
sl@0
   392
		iTestStepResult = EFail;
sl@0
   393
		CActiveScheduler::Stop();
sl@0
   394
		}
sl@0
   395
	else
sl@0
   396
		{
sl@0
   397
		retFsmCheck = ETrue;
sl@0
   398
		}
sl@0
   399
	return retFsmCheck;	
sl@0
   400
	}
sl@0
   401
sl@0
   402
CTestStepAudioOutputStreamARN2::CTestStepAudioOutputStreamARN2(const TDesC& aTestName)
sl@0
   403
	{
sl@0
   404
	iTestStepName = aTestName;
sl@0
   405
	iHeapSize = 3600000;
sl@0
   406
	}
sl@0
   407
	
sl@0
   408
/**
sl@0
   409
 * DoTestStepPreambleL
sl@0
   410
 */
sl@0
   411
TVerdict CTestStepAudioOutputStreamARN2::DoTestStepPreambleL()
sl@0
   412
	{
sl@0
   413
	TVerdict verdict;
sl@0
   414
	verdict = CTestMmfAclntStep::DoTestStepPreambleL();
sl@0
   415
	if (verdict == EFail)
sl@0
   416
		{
sl@0
   417
		return verdict;
sl@0
   418
		}
sl@0
   419
		
sl@0
   420
	iClientList[1] = CFsmAudioOutputStreamClient::NewL(1, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality, this);
sl@0
   421
	iClientList[2] = CFsmAudioOutputStreamClient::NewL(2, EMdaPriorityMax, EMdaPriorityPreferenceTimeAndQuality, this);
sl@0
   422
	iClientList[3] = CFsmAudioOutputStreamClient::NewL(3, EMdaPriorityMin, EMdaPriorityPreferenceTimeAndQuality, this);
sl@0
   423
sl@0
   424
	// Connect RFs session
sl@0
   425
	TInt err = iFs.Connect();
sl@0
   426
	if (err != KErrNone)
sl@0
   427
		{
sl@0
   428
		INFO_PRINTF2(_L("Error connecting to File session (RFs) = %d"), err);
sl@0
   429
		return EFail;
sl@0
   430
		}
sl@0
   431
sl@0
   432
	err = iFileHandle[1].Open(iFs, KStreamRawFile1, EFileRead);
sl@0
   433
	if (err != KErrNone)
sl@0
   434
		{
sl@0
   435
		INFO_PRINTF2(_L("Error opening iFile1 = %d"), err);
sl@0
   436
		return EFail;
sl@0
   437
		}
sl@0
   438
	
sl@0
   439
	err = iFileHandle[2].Open(iFs, KStreamRawFile2, EFileRead);
sl@0
   440
	if (err != KErrNone)
sl@0
   441
		{
sl@0
   442
		INFO_PRINTF2(_L("Error opening iFile2 = %d"), err);
sl@0
   443
		return EFail;
sl@0
   444
		}	
sl@0
   445
		
sl@0
   446
	err = iFileHandle[3].Open(iFs, KStreamRawFile3, EFileRead);
sl@0
   447
	if (err != KErrNone)
sl@0
   448
		{
sl@0
   449
		INFO_PRINTF2(_L("Error opening iFile2 = %d"), err);
sl@0
   450
		return EFail;
sl@0
   451
		}	
sl@0
   452
	
sl@0
   453
	for(TInt fileNumber=1; fileNumber<=3; fileNumber++)
sl@0
   454
		{
sl@0
   455
		err = iFileHandle[fileNumber].Size(iFileSize[fileNumber]);
sl@0
   456
		if(err != KErrNone)
sl@0
   457
			{
sl@0
   458
			INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
sl@0
   459
			return EFail;
sl@0
   460
			}
sl@0
   461
		iBuf[fileNumber].CreateMaxL(iFileSize[fileNumber]);
sl@0
   462
		}
sl@0
   463
	
sl@0
   464
	// Initialise the CCallBackTimer.
sl@0
   465
	iCallBackTimer = CCallBackTimer::NewL(TCallBack(stopActiveScheduler));
sl@0
   466
	
sl@0
   467
	return verdict;
sl@0
   468
	}
sl@0
   469
	
sl@0
   470
/**
sl@0
   471
 * DoTestStepPostambleL
sl@0
   472
 */
sl@0
   473
TVerdict CTestStepAudioOutputStreamARN2::DoTestStepPostambleL()
sl@0
   474
	{
sl@0
   475
	iClientList.DeleteAll();
sl@0
   476
	for(TInt fileNumber=1; fileNumber <=3; fileNumber++)
sl@0
   477
		{
sl@0
   478
		iFileHandle[fileNumber].Close();
sl@0
   479
		}
sl@0
   480
	
sl@0
   481
	for(TInt bufNumber=1 ; bufNumber <=3; bufNumber++)
sl@0
   482
		{
sl@0
   483
		iBuf[bufNumber].Close();
sl@0
   484
		}
sl@0
   485
	
sl@0
   486
	delete iCallBackTimer;
sl@0
   487
	return CTestMmfAclntStep::DoTestStepPostambleL();
sl@0
   488
	}
sl@0
   489
	
sl@0
   490
	
sl@0
   491
/**
sl@0
   492
 * DoTestStepL
sl@0
   493
 */
sl@0
   494
TVerdict CTestStepAudioOutputStreamARN2::DoTestStepL()
sl@0
   495
	{
sl@0
   496
	return( DoTestL() );
sl@0
   497
	}
sl@0
   498
sl@0
   499
/**
sl@0
   500
 * StateChange
sl@0
   501
 */
sl@0
   502
void CTestStepAudioOutputStreamARN2::StateChange(TFsmAosState aState)
sl@0
   503
	{
sl@0
   504
	iState = aState;
sl@0
   505
	}
sl@0
   506
	
sl@0
   507
void CTestStepAudioOutputStreamARN2::StopTest()
sl@0
   508
	{
sl@0
   509
	//We can add other cleanup things here 
sl@0
   510
	CActiveScheduler::Stop();
sl@0
   511
	}
sl@0
   512
sl@0
   513
void CTestStepAudioOutputStreamARN2::SetExpectedEvent(TInt aClientNumber, TInt aExpectedEvent, TInt aExpectedError)
sl@0
   514
	{
sl@0
   515
	iClientEventsToMonitor[aClientNumber]= aExpectedEvent;
sl@0
   516
	iClientError[aClientNumber] = aExpectedError;
sl@0
   517
	}
sl@0
   518
	
sl@0
   519
/**
sl@0
   520
 * FsmCheck
sl@0
   521
 */
sl@0
   522
TBool CTestStepAudioOutputStreamARN2::FsmCheck(TInt aClientNumber, TInt aEventCode, TInt aError)
sl@0
   523
	{
sl@0
   524
	TBool retFsmCheck = ETrue;
sl@0
   525
	
sl@0
   526
	if (iState == EStateMonitoringEvents) /*special state to make decisions depending on clients events */
sl@0
   527
		{
sl@0
   528
		if(iClientEventsToMonitor[aClientNumber] == aEventCode && iClientError[aClientNumber] == aError )
sl@0
   529
			{
sl@0
   530
			StateChange(iFsmStateforClient[aClientNumber]);
sl@0
   531
			}
sl@0
   532
		else
sl@0
   533
			{
sl@0
   534
			retFsmCheck = EFalse;
sl@0
   535
			}
sl@0
   536
				
sl@0
   537
		if(retFsmCheck)
sl@0
   538
			{
sl@0
   539
			//Client event has finished
sl@0
   540
			iClientsRegistered--;
sl@0
   541
			}
sl@0
   542
		}
sl@0
   543
	else
sl@0
   544
		{
sl@0
   545
		if(iClientEventsToMonitor[aClientNumber] != aEventCode)
sl@0
   546
			{
sl@0
   547
			ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
sl@0
   548
			retFsmCheck = EFalse;
sl@0
   549
			iTestStepResult = EFail;
sl@0
   550
			}
sl@0
   551
		else if(iClientError[aClientNumber] != aError)
sl@0
   552
			{
sl@0
   553
			ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
sl@0
   554
			retFsmCheck = EFalse;
sl@0
   555
			iTestStepResult = EFail;
sl@0
   556
			}
sl@0
   557
		}
sl@0
   558
	return retFsmCheck;
sl@0
   559
	}
sl@0
   560
	
sl@0
   561
void CTestStepAudioOutputStreamARN2::RegisterClientEventToMonitor(TInt aClientNumber, TInt aEventCode, TInt aError, TFsmAosState aFsmState)
sl@0
   562
	{
sl@0
   563
	iClientsRegistered++;
sl@0
   564
	iClientEventsToMonitor[aClientNumber] = aEventCode;
sl@0
   565
	iClientError[aClientNumber] = aError;
sl@0
   566
	iFsmStateforClient[aClientNumber] = aFsmState;
sl@0
   567
	}
sl@0
   568
sl@0
   569
TBool CTestStepAudioOutputStreamARN2::IsMonitoringFinished()
sl@0
   570
	{
sl@0
   571
	 if(iClientsRegistered == 0)
sl@0
   572
	 	{
sl@0
   573
	 	return ETrue;
sl@0
   574
	 	}
sl@0
   575
	 else
sl@0
   576
	 	{
sl@0
   577
	 	return EFalse;
sl@0
   578
	 	}
sl@0
   579
	}
sl@0
   580
	
sl@0
   581
CFsmAudioOutputStreamClient::CFsmAudioOutputStreamClient(TInt aClientNumber, TInt aPriority, TMdaPriorityPreference aPref, CTestStepAudioOutputStreamARN2* aParent):iClientNumber(aClientNumber),iParent(aParent)
sl@0
   582
	{
sl@0
   583
	iPriority = aPriority;
sl@0
   584
	iPref = aPref;
sl@0
   585
	}
sl@0
   586
	
sl@0
   587
/**
sl@0
   588
 *
sl@0
   589
 * NewL
sl@0
   590
 * CFsmAudioOutputStreamClient*
sl@0
   591
 *
sl@0
   592
 */
sl@0
   593
CFsmAudioOutputStreamClient* CFsmAudioOutputStreamClient::NewL(TInt aClientNumber, TInt aPriority,TMdaPriorityPreference aPref, CTestStepAudioOutputStreamARN2* aParent)
sl@0
   594
	{
sl@0
   595
	CFsmAudioOutputStreamClient* s = new(ELeave) CFsmAudioOutputStreamClient(aClientNumber, aPriority, aPref, aParent);
sl@0
   596
	CleanupStack::PushL(s);
sl@0
   597
	s->ConstructL();
sl@0
   598
	CleanupStack::Pop();
sl@0
   599
	return s;
sl@0
   600
	}
sl@0
   601
	
sl@0
   602
/**
sl@0
   603
 *
sl@0
   604
 * ConstructL
sl@0
   605
 * @result void
sl@0
   606
 *
sl@0
   607
 */
sl@0
   608
void CFsmAudioOutputStreamClient::ConstructL()
sl@0
   609
	{
sl@0
   610
	iMmfAudioOutputStream = CMdaAudioOutputStream::NewL(*this, iPriority, iPref);
sl@0
   611
	}
sl@0
   612
	
sl@0
   613
CFsmAudioOutputStreamClient::~CFsmAudioOutputStreamClient()
sl@0
   614
	{
sl@0
   615
	delete iMmfAudioOutputStream;
sl@0
   616
	}
sl@0
   617
	
sl@0
   618
void CFsmAudioOutputStreamClient::MaoscOpenComplete(TInt aError)
sl@0
   619
	{
sl@0
   620
	iEvent = EAudioOuputStreamOpenComplete;
sl@0
   621
	iError = aError;
sl@0
   622
	iParent->Fsm(iClientNumber, iEvent, iError);
sl@0
   623
	}
sl@0
   624
sl@0
   625
void CFsmAudioOutputStreamClient::MaoscPlayComplete(TInt aError)
sl@0
   626
	{
sl@0
   627
	iEvent = EAudioOutputStreamPlayComplete;
sl@0
   628
	iError = aError;
sl@0
   629
	iParent->Fsm(iClientNumber, iEvent, iError);
sl@0
   630
	}
sl@0
   631
sl@0
   632
void CFsmAudioOutputStreamClient::MaoscBufferCopied(TInt aError, const TDesC8& /*aBuffer*/)
sl@0
   633
	{
sl@0
   634
	iEvent = EAudioOutputStreamBufferCopied;
sl@0
   635
	iError = aError;
sl@0
   636
	iParent->Fsm(iClientNumber, iEvent, iError);
sl@0
   637
	}
sl@0
   638
sl@0
   639
void CFsmAudioOutputStreamClient::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData)
sl@0
   640
	{
sl@0
   641
	if (aNotificationEventId == KMMFEventCategoryAudioResourceAvailable)
sl@0
   642
		{
sl@0
   643
		iEvent = EAudioOutputStreamResourceAvailable;
sl@0
   644
		iError = KErrNone;
sl@0
   645
		//Convert TDesc8 to TInt64
sl@0
   646
		TMMFTimeIntervalMicroSecondsPckg timeIntvbuf;
sl@0
   647
		timeIntvbuf.Copy(aNotificationData);
sl@0
   648
		iResumedPosition = timeIntvbuf();
sl@0
   649
		
sl@0
   650
		iParent->Fsm(iClientNumber, iEvent, iError);
sl@0
   651
		}	
sl@0
   652
	}
sl@0
   653
	
sl@0
   654
void CFsmAudioOutputStreamClient::TestOpen()
sl@0
   655
	{
sl@0
   656
	iMmfAudioOutputStream->Open(NULL);
sl@0
   657
	}
sl@0
   658
	
sl@0
   659
TInt CFsmAudioOutputStreamClient::TestRegisterAsClient()
sl@0
   660
	{
sl@0
   661
	return iMmfAudioOutputStream->RegisterAudioResourceNotification(*this, KMMFEventCategoryAudioResourceAvailable);
sl@0
   662
	}
sl@0
   663
sl@0
   664
TInt CFsmAudioOutputStreamClient::TestWrite(const TDesC8 &aData)
sl@0
   665
	{
sl@0
   666
	TRAPD(err,iMmfAudioOutputStream->WriteL(aData));
sl@0
   667
	return err;
sl@0
   668
	}
sl@0
   669
sl@0
   670
const TTimeIntervalMicroSeconds&  CFsmAudioOutputStreamClient::GetCurrentPosition()
sl@0
   671
	{
sl@0
   672
	return iMmfAudioOutputStream->Position();
sl@0
   673
	}
sl@0
   674
	
sl@0
   675
TTimeIntervalMicroSeconds& CFsmAudioOutputStreamClient::GetResumedPosition()
sl@0
   676
	{
sl@0
   677
	return iResumedPosition;
sl@0
   678
	}
sl@0
   679
sl@0
   680
TInt  CFsmAudioOutputStreamClient::BytesPlayed()
sl@0
   681
	{
sl@0
   682
	return iMmfAudioOutputStream->GetBytes();
sl@0
   683
	}	
sl@0
   684
//
sl@0
   685
//POSITIVE TESTS//
sl@0
   686
//
sl@0
   687
sl@0
   688
//
sl@0
   689
//CTestMmfAclntARN8021
sl@0
   690
//
sl@0
   691
sl@0
   692
/**
sl@0
   693
 * Constructor
sl@0
   694
 */
sl@0
   695
CTestMmfAclntARN8021::CTestMmfAclntARN8021(const TDesC& aTestName)
sl@0
   696
	: CTestStepAudioOutputStreamARN(aTestName)
sl@0
   697
	{}
sl@0
   698
sl@0
   699
/**
sl@0
   700
 * NewL
sl@0
   701
 */
sl@0
   702
CTestMmfAclntARN8021* CTestMmfAclntARN8021::NewL(const TDesC& aTestName)
sl@0
   703
	{
sl@0
   704
	CTestMmfAclntARN8021* self = new (ELeave) CTestMmfAclntARN8021(aTestName);
sl@0
   705
	return self;
sl@0
   706
	}
sl@0
   707
sl@0
   708
/**
sl@0
   709
 * DoTestL
sl@0
   710
 */
sl@0
   711
TVerdict CTestMmfAclntARN8021::DoTestL()
sl@0
   712
	{
sl@0
   713
	return( PerformTestL() );
sl@0
   714
	}
sl@0
   715
sl@0
   716
/**
sl@0
   717
 * FsmL
sl@0
   718
 */
sl@0
   719
void CTestMmfAclntARN8021::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
   720
	{
sl@0
   721
	if (FsmCheck(aEventCode, aError))
sl@0
   722
		{
sl@0
   723
		TInt err = KErrNone;
sl@0
   724
		switch (iState)
sl@0
   725
			{
sl@0
   726
			case 0:
sl@0
   727
				// Open iTestAudioOutputStream1
sl@0
   728
				iTestAudioOutputStream1->Open(NULL);				
sl@0
   729
				INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
   730
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   731
				StateChange(EMaoscOpenComplete1);
sl@0
   732
				break;
sl@0
   733
			case 1:
sl@0
   734
				// Register iTestAudioOutputStream1 for Notification
sl@0
   735
				err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
sl@0
   736
				INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
sl@0
   737
				if( err != KErrNone )
sl@0
   738
					{
sl@0
   739
					ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   740
					iTestStepResult = EFail;
sl@0
   741
					CActiveScheduler::Stop();
sl@0
   742
					User::Leave(err);
sl@0
   743
					break;
sl@0
   744
					}
sl@0
   745
				// Open iTestAudioOutputStream2
sl@0
   746
				iTestAudioOutputStream2->Open(NULL);
sl@0
   747
				INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
sl@0
   748
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   749
				StateChange(EMaoscOpenComplete2);
sl@0
   750
				break;
sl@0
   751
			case 2:
sl@0
   752
				// iFile2->Read()
sl@0
   753
				err = iFile2.Read(iBuf2);
sl@0
   754
				if (err != KErrNone)
sl@0
   755
					{
sl@0
   756
					INFO_PRINTF2(_L("Error reading file %d"), err);
sl@0
   757
					User::Leave(err);
sl@0
   758
					}
sl@0
   759
				// iTestAudioOutputStream2->WriteL()
sl@0
   760
				iTestAudioOutputStream2->WriteL(iBuf2);
sl@0
   761
				INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
sl@0
   762
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   763
				StateChange(EMaoscBufferCopied2);
sl@0
   764
				break;
sl@0
   765
			case 3:
sl@0
   766
				// Wait for PlayComplete event for iTestAudioOutputStream2
sl@0
   767
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   768
				StateChange(EMaoscPlayComplete2, KErrUnderflow);
sl@0
   769
				break;
sl@0
   770
			case 4:
sl@0
   771
				// Timer to check if Notification Event Occurs.
sl@0
   772
				iCallBackTimer->After(2000000);
sl@0
   773
				iTestStepResult = EPass;
sl@0
   774
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
   775
				StateChange(EMarncResourceAvailableOS1);
sl@0
   776
				break;
sl@0
   777
			case 5:
sl@0
   778
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
   779
				INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
sl@0
   780
				iTestStepResult = EFail;
sl@0
   781
				CActiveScheduler::Stop();
sl@0
   782
				break;
sl@0
   783
			}
sl@0
   784
		}
sl@0
   785
	}
sl@0
   786
sl@0
   787
/**
sl@0
   788
 * PerformTestL
sl@0
   789
 */
sl@0
   790
TVerdict CTestMmfAclntARN8021::PerformTestL()
sl@0
   791
	{
sl@0
   792
	INFO_PRINTF1(_L("Register for notification, but make no request to play audio"));
sl@0
   793
	iTestStepResult = EFail;
sl@0
   794
	
sl@0
   795
	// Initialise the state variables
sl@0
   796
	StateInit();
sl@0
   797
	
sl@0
   798
	// Begin the process
sl@0
   799
	FsmL(EIdleOutputStream);
sl@0
   800
	
sl@0
   801
	// Start the scheduler - Done only once !
sl@0
   802
	CActiveScheduler::Start();
sl@0
   803
	
sl@0
   804
	return iTestStepResult;
sl@0
   805
	}
sl@0
   806
sl@0
   807
//
sl@0
   808
//CTestMmfAclntARN8022
sl@0
   809
//
sl@0
   810
sl@0
   811
/**
sl@0
   812
 * Constructor
sl@0
   813
 */
sl@0
   814
CTestMmfAclntARN8022::CTestMmfAclntARN8022(const TDesC& aTestName)
sl@0
   815
	: CTestStepAudioOutputStreamARN2(aTestName)
sl@0
   816
	{}
sl@0
   817
sl@0
   818
/**
sl@0
   819
 * NewL
sl@0
   820
 */
sl@0
   821
CTestMmfAclntARN8022* CTestMmfAclntARN8022::NewL(const TDesC& aTestName)
sl@0
   822
	{
sl@0
   823
	CTestMmfAclntARN8022* self = new (ELeave) CTestMmfAclntARN8022(aTestName);
sl@0
   824
	return self;
sl@0
   825
	}
sl@0
   826
sl@0
   827
/**
sl@0
   828
 * DoTestL
sl@0
   829
 */
sl@0
   830
TVerdict CTestMmfAclntARN8022::DoTestL()
sl@0
   831
	{
sl@0
   832
	return( PerformTestL() );
sl@0
   833
	}
sl@0
   834
sl@0
   835
/**
sl@0
   836
 * FsmL
sl@0
   837
 */
sl@0
   838
void CTestMmfAclntARN8022::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError)
sl@0
   839
	{
sl@0
   840
	if (FsmCheck(aClientNumber, aEventCode, aError))
sl@0
   841
		{
sl@0
   842
		iTestStepResult = (this->*(iStateHandlers[iState]))();
sl@0
   843
 		if(iTestStepResult != EPass)
sl@0
   844
 			{
sl@0
   845
 			StopTest();
sl@0
   846
 			}
sl@0
   847
		}
sl@0
   848
	}
sl@0
   849
sl@0
   850
sl@0
   851
void CTestMmfAclntARN8022::StartTestL()
sl@0
   852
	{
sl@0
   853
	iClientList[1]->TestOpen();
sl@0
   854
	INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
   855
	//Wait for EAudioOuputStreamOpenComplete event
sl@0
   856
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
sl@0
   857
	StateChange(EStateOpenComplete1);
sl@0
   858
	}
sl@0
   859
sl@0
   860
void CTestMmfAclntARN8022::InitTest()
sl@0
   861
	{
sl@0
   862
	iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8022::HandleStateOpenComplete1;
sl@0
   863
	iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8022::HandleStateOpenComplete2;
sl@0
   864
	iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8022::HandleStateStreaming2;
sl@0
   865
	iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8022::HandleStateStreamingComplete1ErrInUse;
sl@0
   866
	iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8022::HandleStateResourceAvailableOS1;
sl@0
   867
	iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8022::HandleStateStreamingComplete2ErrUnderflow;
sl@0
   868
	}
sl@0
   869
sl@0
   870
TVerdict CTestMmfAclntARN8022::HandleStateOpenComplete1()
sl@0
   871
	{
sl@0
   872
	// Register Client1 for Notification
sl@0
   873
	TInt err = KErrNone;
sl@0
   874
	err = iClientList[1]->TestRegisterAsClient();
sl@0
   875
	INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
sl@0
   876
	if(err != KErrNone)
sl@0
   877
		{
sl@0
   878
		ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
   879
		User::Leave(err);
sl@0
   880
		}
sl@0
   881
	iClientList[2]->TestOpen();
sl@0
   882
	//Wait for EAudioOuputStreamOpenComplete event
sl@0
   883
	SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
sl@0
   884
	StateChange(EStateOpenComplete2);
sl@0
   885
	return EPass;
sl@0
   886
	}
sl@0
   887
sl@0
   888
TVerdict CTestMmfAclntARN8022::HandleStateOpenComplete2()
sl@0
   889
	{
sl@0
   890
	INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
sl@0
   891
	TInt err = iFileHandle[2].Read(iBuf[2]);
sl@0
   892
	if (err != KErrNone)
sl@0
   893
		{
sl@0
   894
		INFO_PRINTF2(_L("Error reading file %d"), err);
sl@0
   895
		User::Leave(err);
sl@0
   896
		}
sl@0
   897
	INFO_PRINTF1(_L("Pre iTestAudioOutputStream2->WriteL()"));
sl@0
   898
	err = iClientList[2]->TestWrite(iBuf[2]);
sl@0
   899
	if( err != KErrNone)
sl@0
   900
		{
sl@0
   901
		INFO_PRINTF2(_L("iTestAudioOutputStream2->WriteL failed %d"),err);
sl@0
   902
		User::Leave(err);
sl@0
   903
		}
sl@0
   904
	INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
sl@0
   905
	SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
sl@0
   906
	StateChange(EStateStreaming2);
sl@0
   907
	return EPass;
sl@0
   908
	}
sl@0
   909
	
sl@0
   910
TVerdict CTestMmfAclntARN8022::HandleStateStreaming2()
sl@0
   911
	{
sl@0
   912
	TInt err = KErrNone;
sl@0
   913
	err = iFileHandle[1].Read(iBuf[1]); //-synchronous
sl@0
   914
	if (err != KErrNone)
sl@0
   915
		{
sl@0
   916
		INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
sl@0
   917
		return EInconclusive;
sl@0
   918
		}
sl@0
   919
	INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
sl@0
   920
	err = iClientList[1]->TestWrite(iBuf[1]); //-Should get Play Error.
sl@0
   921
	if( err != KErrNone)
sl@0
   922
		{
sl@0
   923
		INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
sl@0
   924
		return EInconclusive;
sl@0
   925
		}
sl@0
   926
	// Set ExpectedEvent & ExpectedError and change the State
sl@0
   927
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse);
sl@0
   928
	StateChange(EStateStreamingComplete1ErrInUse);
sl@0
   929
	return EPass;
sl@0
   930
	}
sl@0
   931
sl@0
   932
TVerdict CTestMmfAclntARN8022::HandleStateStreamingComplete1ErrInUse()
sl@0
   933
	{
sl@0
   934
	RegisterClientEventToMonitor(1, CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable, KErrNone, EStateResourceAvailableOS1);
sl@0
   935
	RegisterClientEventToMonitor(2, CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrUnderflow, EStateStreamingComplete2ErrUnderflow);
sl@0
   936
	StateChange(EStateMonitoringEvents);
sl@0
   937
	return EPass;
sl@0
   938
	}
sl@0
   939
sl@0
   940
TVerdict CTestMmfAclntARN8022::HandleStateResourceAvailableOS1()
sl@0
   941
	{
sl@0
   942
	INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
sl@0
   943
	if(IsMonitoringFinished())
sl@0
   944
		{
sl@0
   945
		iTestStepResult = EPass;
sl@0
   946
		StopTest();
sl@0
   947
		}
sl@0
   948
	else
sl@0
   949
		{
sl@0
   950
		StateChange(EStateMonitoringEvents);
sl@0
   951
		}
sl@0
   952
	return EPass;
sl@0
   953
	}
sl@0
   954
	
sl@0
   955
TVerdict CTestMmfAclntARN8022::HandleStateStreamingComplete2ErrUnderflow()
sl@0
   956
	{
sl@0
   957
	INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete"));
sl@0
   958
	if(IsMonitoringFinished())
sl@0
   959
		{
sl@0
   960
		iTestStepResult = EPass;
sl@0
   961
		StopTest();
sl@0
   962
		}
sl@0
   963
	else
sl@0
   964
		{
sl@0
   965
		StateChange(EStateMonitoringEvents);
sl@0
   966
		}
sl@0
   967
	return EPass;	
sl@0
   968
	}
sl@0
   969
	
sl@0
   970
/**
sl@0
   971
 * PerformTestL
sl@0
   972
 */
sl@0
   973
TVerdict CTestMmfAclntARN8022::PerformTestL()
sl@0
   974
	{
sl@0
   975
	INFO_PRINTF1(_L("Register (b4 play, after Open) and Receive Notification of a Resource Available Event."));
sl@0
   976
	INFO_PRINTF1(_L("(when audio resource is currently unavailable and then available)"));
sl@0
   977
	iTestStepResult = EFail;
sl@0
   978
	
sl@0
   979
	InitTest();
sl@0
   980
	StartTestL();
sl@0
   981
	
sl@0
   982
	// Start the scheduler - Done only once !
sl@0
   983
	CActiveScheduler::Start();
sl@0
   984
	
sl@0
   985
	return iTestStepResult;
sl@0
   986
	}
sl@0
   987
sl@0
   988
//
sl@0
   989
//CTestMmfAclntARN8023
sl@0
   990
//
sl@0
   991
sl@0
   992
/**
sl@0
   993
 * Constructor
sl@0
   994
 */
sl@0
   995
CTestMmfAclntARN8023::CTestMmfAclntARN8023(const TDesC& aTestName)
sl@0
   996
	: CTestStepAudioOutputStreamARN2(aTestName)
sl@0
   997
	{}
sl@0
   998
sl@0
   999
/**
sl@0
  1000
 * NewL
sl@0
  1001
 */
sl@0
  1002
CTestMmfAclntARN8023* CTestMmfAclntARN8023::NewL(const TDesC& aTestName)
sl@0
  1003
	{
sl@0
  1004
	CTestMmfAclntARN8023* self = new (ELeave) CTestMmfAclntARN8023(aTestName);
sl@0
  1005
	return self;
sl@0
  1006
	}
sl@0
  1007
sl@0
  1008
/**
sl@0
  1009
 * DoTestL
sl@0
  1010
 */
sl@0
  1011
TVerdict CTestMmfAclntARN8023::DoTestL()
sl@0
  1012
	{
sl@0
  1013
	return( PerformTestL() );
sl@0
  1014
	}
sl@0
  1015
	
sl@0
  1016
sl@0
  1017
/**
sl@0
  1018
 * FsmL
sl@0
  1019
 */
sl@0
  1020
void CTestMmfAclntARN8023::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError)
sl@0
  1021
	{
sl@0
  1022
	if(FsmCheck(aClientNumber, aEventCode, aError))
sl@0
  1023
		{
sl@0
  1024
		iTestStepResult = (this->*(iStateHandlers[iState]))();
sl@0
  1025
		if(iTestStepResult != EPass)
sl@0
  1026
			{
sl@0
  1027
			StopTest();
sl@0
  1028
			}
sl@0
  1029
		}
sl@0
  1030
	}
sl@0
  1031
sl@0
  1032
void CTestMmfAclntARN8023::InitTest()
sl@0
  1033
	{
sl@0
  1034
	iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8023::HandleStateOpenComplete1;
sl@0
  1035
	iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8023::HandleStateOpenComplete2;
sl@0
  1036
	iStateHandlers[EStateStreaming1] = &CTestMmfAclntARN8023::HandleStateStreaming1;
sl@0
  1037
	iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8023::HandleStateStreaming2;
sl@0
  1038
	iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8023::HandleStateStreamingComplete1ErrInUse;
sl@0
  1039
	iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8023::HandleStateResourceAvailableOS1;
sl@0
  1040
	iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8023::HandleStateStreamingComplete2ErrUnderflow;
sl@0
  1041
	}
sl@0
  1042
sl@0
  1043
void CTestMmfAclntARN8023::StartTestL()
sl@0
  1044
	{
sl@0
  1045
	//Open Client1
sl@0
  1046
	iClientList[1]->TestOpen();
sl@0
  1047
	INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  1048
	//Wait for EAudioOuputStreamOpenComplete event
sl@0
  1049
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
sl@0
  1050
	StateChange(EStateOpenComplete1);
sl@0
  1051
	}
sl@0
  1052
sl@0
  1053
TVerdict CTestMmfAclntARN8023::HandleStateOpenComplete1()
sl@0
  1054
	{
sl@0
  1055
	TInt err = KErrNone;
sl@0
  1056
	err = iFileHandle[1].Read(iBuf[1]);
sl@0
  1057
	if(err != KErrNone)
sl@0
  1058
		{
sl@0
  1059
		INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
sl@0
  1060
		User::Leave(err);
sl@0
  1061
		}
sl@0
  1062
	err = iClientList[1]->TestWrite(iBuf[1]);
sl@0
  1063
	if( err != KErrNone)
sl@0
  1064
		{
sl@0
  1065
		INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
sl@0
  1066
		User::Leave(err);
sl@0
  1067
		}
sl@0
  1068
	INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
sl@0
  1069
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
sl@0
  1070
	StateChange(EStateStreaming1);
sl@0
  1071
	return EPass;
sl@0
  1072
	}
sl@0
  1073
sl@0
  1074
TVerdict CTestMmfAclntARN8023::HandleStateStreaming1()
sl@0
  1075
	{
sl@0
  1076
	TInt err = KErrNone;
sl@0
  1077
	err = iClientList[1]->TestRegisterAsClient();
sl@0
  1078
	if(err != KErrNone)
sl@0
  1079
		{
sl@0
  1080
		ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1081
		return EInconclusive;
sl@0
  1082
		}
sl@0
  1083
	
sl@0
  1084
	iClientList[2]->TestOpen();
sl@0
  1085
	//Wait for EAudioOuputStreamOpenComplete event
sl@0
  1086
	SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
sl@0
  1087
	StateChange(EStateOpenComplete2);
sl@0
  1088
	return EPass;
sl@0
  1089
	}
sl@0
  1090
sl@0
  1091
TVerdict CTestMmfAclntARN8023::HandleStateOpenComplete2()
sl@0
  1092
	{
sl@0
  1093
	TInt err = iFileHandle[2].Read(iBuf[2]);
sl@0
  1094
	if(err != KErrNone)
sl@0
  1095
		{
sl@0
  1096
		INFO_PRINTF2(_L("Error reading iFile2 %d"), err);
sl@0
  1097
		return EInconclusive;
sl@0
  1098
		}
sl@0
  1099
	err = iClientList[2]->TestWrite(iBuf[2]);
sl@0
  1100
	if( err != KErrNone)
sl@0
  1101
		{
sl@0
  1102
		INFO_PRINTF2(_L("iTestAudioOutputStream2->WriteL failed %d"),err);
sl@0
  1103
		return EInconclusive;
sl@0
  1104
		}
sl@0
  1105
	INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
sl@0
  1106
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse);
sl@0
  1107
	StateChange(EStateStreamingComplete1ErrInUse);
sl@0
  1108
	return EPass;
sl@0
  1109
	}
sl@0
  1110
sl@0
  1111
TVerdict CTestMmfAclntARN8023::HandleStateStreamingComplete1ErrInUse()
sl@0
  1112
	{
sl@0
  1113
	SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
sl@0
  1114
	StateChange(EStateStreaming2);
sl@0
  1115
	return EPass;
sl@0
  1116
	}
sl@0
  1117
sl@0
  1118
TVerdict CTestMmfAclntARN8023::HandleStateStreaming2()
sl@0
  1119
	{
sl@0
  1120
	RegisterClientEventToMonitor(1,CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable,KErrNone,EStateResourceAvailableOS1);
sl@0
  1121
	RegisterClientEventToMonitor(2,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete,KErrUnderflow,EStateStreamingComplete2ErrUnderflow);
sl@0
  1122
	StateChange(EStateMonitoringEvents);
sl@0
  1123
	return EPass;
sl@0
  1124
	}
sl@0
  1125
sl@0
  1126
TVerdict CTestMmfAclntARN8023::HandleStateResourceAvailableOS1()
sl@0
  1127
	{
sl@0
  1128
	INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
sl@0
  1129
	if(IsMonitoringFinished())
sl@0
  1130
		{
sl@0
  1131
		iTestStepResult = EPass;
sl@0
  1132
		StopTest();
sl@0
  1133
		}
sl@0
  1134
	else
sl@0
  1135
		{
sl@0
  1136
		StateChange(EStateMonitoringEvents);
sl@0
  1137
		}
sl@0
  1138
	return EPass;
sl@0
  1139
	}
sl@0
  1140
sl@0
  1141
TVerdict CTestMmfAclntARN8023::HandleStateStreamingComplete2ErrUnderflow()
sl@0
  1142
	{
sl@0
  1143
	INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete"));
sl@0
  1144
	if(IsMonitoringFinished())
sl@0
  1145
		{
sl@0
  1146
		iTestStepResult = EPass;
sl@0
  1147
		StopTest();
sl@0
  1148
		}
sl@0
  1149
	else
sl@0
  1150
		{
sl@0
  1151
		StateChange(EStateMonitoringEvents); //Didn't finish monitoring
sl@0
  1152
		}
sl@0
  1153
	return EPass;
sl@0
  1154
	}
sl@0
  1155
	
sl@0
  1156
/**
sl@0
  1157
 * PerformTestL
sl@0
  1158
 */
sl@0
  1159
TVerdict CTestMmfAclntARN8023::PerformTestL()
sl@0
  1160
	{
sl@0
  1161
	INFO_PRINTF1(_L("Register (at the time of Play) and Receive Notification of a Resource Available Event."));
sl@0
  1162
	INFO_PRINTF1(_L("(when audio resource is currently available and subsequently unavailable, and then available)"));
sl@0
  1163
	iTestStepResult = EFail;
sl@0
  1164
		
sl@0
  1165
	InitTest();
sl@0
  1166
	
sl@0
  1167
	StartTestL();
sl@0
  1168
sl@0
  1169
	// Start the scheduler - Done only once !
sl@0
  1170
	CActiveScheduler::Start();
sl@0
  1171
	
sl@0
  1172
	return iTestStepResult;
sl@0
  1173
	}
sl@0
  1174
sl@0
  1175
//
sl@0
  1176
//CTestMmfAclntARN8024
sl@0
  1177
//
sl@0
  1178
sl@0
  1179
/**
sl@0
  1180
 * Constructor
sl@0
  1181
 */
sl@0
  1182
CTestMmfAclntARN8024::CTestMmfAclntARN8024(const TDesC& aTestName)
sl@0
  1183
	: CTestStepAudioOutputStreamARN(aTestName)
sl@0
  1184
	{}
sl@0
  1185
sl@0
  1186
/**
sl@0
  1187
 * NewL
sl@0
  1188
 */
sl@0
  1189
CTestMmfAclntARN8024* CTestMmfAclntARN8024::NewL(const TDesC& aTestName)
sl@0
  1190
	{
sl@0
  1191
	CTestMmfAclntARN8024* self = new (ELeave) CTestMmfAclntARN8024(aTestName);
sl@0
  1192
	return self;
sl@0
  1193
	}
sl@0
  1194
sl@0
  1195
/**
sl@0
  1196
 * DoTestL
sl@0
  1197
 */
sl@0
  1198
TVerdict CTestMmfAclntARN8024::DoTestL()
sl@0
  1199
	{
sl@0
  1200
	return( PerformTestL() );
sl@0
  1201
	}
sl@0
  1202
sl@0
  1203
/**
sl@0
  1204
 * FsmL
sl@0
  1205
 */
sl@0
  1206
void CTestMmfAclntARN8024::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
  1207
	{
sl@0
  1208
	if (FsmCheck(aEventCode, aError))
sl@0
  1209
		{
sl@0
  1210
		TInt err = KErrNone;
sl@0
  1211
		switch (iState)
sl@0
  1212
			{
sl@0
  1213
			case 0:
sl@0
  1214
				// Open iTestAudioOutputStream1
sl@0
  1215
				iTestAudioOutputStream1->Open(NULL);
sl@0
  1216
				INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  1217
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1218
				StateChange(EMaoscOpenComplete1);
sl@0
  1219
				break;
sl@0
  1220
			case 1:
sl@0
  1221
				// iFile1->Read()
sl@0
  1222
				err = iFile1.Read(iBuf1); //-synchronous
sl@0
  1223
				if (err != KErrNone)
sl@0
  1224
					{
sl@0
  1225
					INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
sl@0
  1226
					User::Leave(err);
sl@0
  1227
					}
sl@0
  1228
				// iTestAudioOutputStream1->WriteL()
sl@0
  1229
				INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
sl@0
  1230
				iTestAudioOutputStream1->WriteL(iBuf1); //-Should get Play Error.
sl@0
  1231
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1232
				StateChange(EMaoscBufferCopied1);
sl@0
  1233
				break;
sl@0
  1234
			case 2:
sl@0
  1235
				// Open iTestAudioOutputStream2
sl@0
  1236
				iTestAudioOutputStream2->Open(NULL);
sl@0
  1237
				INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
sl@0
  1238
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1239
				StateChange(EMaoscOpenComplete2);
sl@0
  1240
				break;
sl@0
  1241
			case 3:
sl@0
  1242
				// iFile2->Read()
sl@0
  1243
				err = iFile2.Read(iBuf2);
sl@0
  1244
				if (err != KErrNone)
sl@0
  1245
					{
sl@0
  1246
					INFO_PRINTF2(_L("Error reading file %d"), err);
sl@0
  1247
					User::Leave(err);
sl@0
  1248
					}
sl@0
  1249
				// iTestAudioOutputStream2->WriteL()
sl@0
  1250
				iTestAudioOutputStream2->WriteL(iBuf2);
sl@0
  1251
				INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
sl@0
  1252
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1253
				StateChange(EMaoscPlayComplete1, KErrInUse);
sl@0
  1254
				break;
sl@0
  1255
			case 4:
sl@0
  1256
				// Wait for BufferCopied event for iTestAudioOutputStream2
sl@0
  1257
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1258
				StateChange(EMaoscBufferCopied2);
sl@0
  1259
				break;
sl@0
  1260
			case 5:
sl@0
  1261
				// Cancellation of notification request for iTestAudioOutputStream1
sl@0
  1262
				err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
sl@0
  1263
				INFO_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification : Return Code = %d "), err);
sl@0
  1264
				if( err != KErrNone )
sl@0
  1265
					{
sl@0
  1266
					ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1267
					iTestStepResult = EFail;					
sl@0
  1268
					CActiveScheduler::Stop();
sl@0
  1269
					User::Leave(err);
sl@0
  1270
					break;
sl@0
  1271
					}
sl@0
  1272
				// Wait for PlayComplete event for iTestAudioOutputStream2
sl@0
  1273
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1274
				StateChange(EMaoscPlayComplete2, KErrUnderflow);
sl@0
  1275
				break;
sl@0
  1276
			case 6:
sl@0
  1277
				// Timer to check if Notification Event Occurs.
sl@0
  1278
				iCallBackTimer->After(2000000);
sl@0
  1279
				iTestStepResult = EPass;
sl@0
  1280
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1281
				StateChange(EMarncResourceAvailableOS1);
sl@0
  1282
				break;
sl@0
  1283
			case 7:
sl@0
  1284
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
  1285
				INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
sl@0
  1286
				iTestStepResult = EFail;
sl@0
  1287
				CActiveScheduler::Stop();
sl@0
  1288
				break;
sl@0
  1289
			}
sl@0
  1290
		}
sl@0
  1291
	}
sl@0
  1292
sl@0
  1293
/**
sl@0
  1294
 * PerformTestL
sl@0
  1295
 */
sl@0
  1296
TVerdict CTestMmfAclntARN8024::PerformTestL()
sl@0
  1297
	{
sl@0
  1298
	INFO_PRINTF1(_L("Registration (b4 File Open) and Cancellation of  the notification request"));
sl@0
  1299
	iTestStepResult = EFail;
sl@0
  1300
	
sl@0
  1301
	// Initialise the state variables
sl@0
  1302
	StateInit();
sl@0
  1303
	
sl@0
  1304
	// Register iTestAudioOutputStream1 for Notification
sl@0
  1305
	TInt err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1306
	INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
sl@0
  1307
	if( err != KErrNone )
sl@0
  1308
		{
sl@0
  1309
		ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1310
		return EFail;
sl@0
  1311
		}
sl@0
  1312
	
sl@0
  1313
	// Begin the process
sl@0
  1314
	FsmL(EIdleOutputStream);
sl@0
  1315
	
sl@0
  1316
	// Start the scheduler - Done only once !
sl@0
  1317
	CActiveScheduler::Start();
sl@0
  1318
	
sl@0
  1319
	return iTestStepResult;
sl@0
  1320
	}
sl@0
  1321
sl@0
  1322
//
sl@0
  1323
//CTestMmfAclntARN8025
sl@0
  1324
//
sl@0
  1325
sl@0
  1326
/**
sl@0
  1327
 * Constructor
sl@0
  1328
 */
sl@0
  1329
CTestMmfAclntARN8025::CTestMmfAclntARN8025(const TDesC& aTestName)
sl@0
  1330
	: CTestStepAudioOutputStreamARN2(aTestName)
sl@0
  1331
	{}
sl@0
  1332
sl@0
  1333
/**
sl@0
  1334
 * NewL
sl@0
  1335
 */
sl@0
  1336
CTestMmfAclntARN8025* CTestMmfAclntARN8025::NewL(const TDesC& aTestName)
sl@0
  1337
	{
sl@0
  1338
	CTestMmfAclntARN8025* self = new (ELeave) CTestMmfAclntARN8025(aTestName);
sl@0
  1339
	return self;
sl@0
  1340
	}
sl@0
  1341
sl@0
  1342
/**
sl@0
  1343
 * DoTestL
sl@0
  1344
 */
sl@0
  1345
TVerdict CTestMmfAclntARN8025::DoTestL()
sl@0
  1346
	{
sl@0
  1347
	return( PerformTestL() );
sl@0
  1348
	}
sl@0
  1349
	
sl@0
  1350
sl@0
  1351
void CTestMmfAclntARN8025::InitTest()
sl@0
  1352
	{
sl@0
  1353
	iStateHandlers[EStateOpenComplete1] = &CTestMmfAclntARN8025::HandleStateOpenComplete1;
sl@0
  1354
	iStateHandlers[EStateOpenComplete2] = &CTestMmfAclntARN8025::HandleStateOpenComplete2;
sl@0
  1355
	iStateHandlers[EStateStreaming1] = &CTestMmfAclntARN8025::HandleStateStreaming1;
sl@0
  1356
	iStateHandlers[EStateStreaming2] = &CTestMmfAclntARN8025::HandleStateStreaming2;
sl@0
  1357
	iStateHandlers[EStateStreamingComplete1ErrInUse] = &CTestMmfAclntARN8025::HandleStateStreamingComplete1ErrInUse;
sl@0
  1358
	iStateHandlers[EStateResourceAvailableOS1] = &CTestMmfAclntARN8025::HandleStateResourceAvailableOS1;
sl@0
  1359
	iStateHandlers[EStateStreamingComplete2ErrUnderflow] = &CTestMmfAclntARN8025::HandleStateStreamingComplete2ErrUnderflow;
sl@0
  1360
	}
sl@0
  1361
	
sl@0
  1362
/**
sl@0
  1363
 * FsmL
sl@0
  1364
 */
sl@0
  1365
void CTestMmfAclntARN8025::Fsm(TInt aClientNumber, TInt aEventCode, TInt aError)
sl@0
  1366
	{
sl@0
  1367
	if(FsmCheck(aClientNumber, aEventCode, aError))
sl@0
  1368
		{
sl@0
  1369
		iTestStepResult = (this->*(iStateHandlers[iState]))();
sl@0
  1370
		if(iTestStepResult != EPass)
sl@0
  1371
			{
sl@0
  1372
			StopTest();
sl@0
  1373
			}
sl@0
  1374
		}	
sl@0
  1375
	}
sl@0
  1376
sl@0
  1377
void CTestMmfAclntARN8025::StartTestL()
sl@0
  1378
	{
sl@0
  1379
	//Open Client1
sl@0
  1380
	iClientList[1]->TestOpen();
sl@0
  1381
	INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  1382
	//Wait for EAudioOuputStreamOpenComplete event
sl@0
  1383
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
sl@0
  1384
	StateChange(EStateOpenComplete1);
sl@0
  1385
	}
sl@0
  1386
sl@0
  1387
TVerdict CTestMmfAclntARN8025::HandleStateOpenComplete1()
sl@0
  1388
	{
sl@0
  1389
	TInt err = KErrNone;
sl@0
  1390
	err = iFileHandle[1].Read(iBuf[1]);
sl@0
  1391
	if(err != KErrNone)
sl@0
  1392
		{
sl@0
  1393
		INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
sl@0
  1394
		User::Leave(err);
sl@0
  1395
		}
sl@0
  1396
	err = iClientList[1]->TestWrite(iBuf[1]);
sl@0
  1397
	if( err != KErrNone)
sl@0
  1398
		{
sl@0
  1399
		INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
sl@0
  1400
		User::Leave(err);
sl@0
  1401
		}
sl@0
  1402
	INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
sl@0
  1403
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
sl@0
  1404
	StateChange(EStateStreaming1);
sl@0
  1405
	return EPass;
sl@0
  1406
	}
sl@0
  1407
sl@0
  1408
TVerdict CTestMmfAclntARN8025::HandleStateStreaming1()
sl@0
  1409
	{
sl@0
  1410
	TInt err = KErrNone;
sl@0
  1411
	err = iClientList[1]->TestRegisterAsClient();
sl@0
  1412
	if(err != KErrNone)
sl@0
  1413
		{
sl@0
  1414
		ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1415
		return EInconclusive;
sl@0
  1416
		}
sl@0
  1417
	
sl@0
  1418
	iClientList[2]->TestOpen();
sl@0
  1419
	INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
sl@0
  1420
	//Wait for EAudioOuputStreamOpenComplete event
sl@0
  1421
	SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOuputStreamOpenComplete,KErrNone);
sl@0
  1422
	StateChange(EStateOpenComplete2);
sl@0
  1423
	return EPass;
sl@0
  1424
	}
sl@0
  1425
sl@0
  1426
TVerdict CTestMmfAclntARN8025::HandleStateOpenComplete2()
sl@0
  1427
	{
sl@0
  1428
	TInt err = iFileHandle[2].Read(iBuf[2]);
sl@0
  1429
	if(err != KErrNone)
sl@0
  1430
		{
sl@0
  1431
		INFO_PRINTF2(_L("Error reading iFile2 %d"), err);
sl@0
  1432
		return EInconclusive;
sl@0
  1433
		}
sl@0
  1434
	err = iClientList[2]->TestWrite(iBuf[2]);
sl@0
  1435
	if( err != KErrNone)
sl@0
  1436
		{
sl@0
  1437
		INFO_PRINTF2(_L("iTestAudioOutputStream1->WriteL failed %d"),err);
sl@0
  1438
		return EInconclusive;
sl@0
  1439
		}
sl@0
  1440
	INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
sl@0
  1441
	SetExpectedEvent(1,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete, KErrInUse);
sl@0
  1442
	StateChange(EStateStreamingComplete1ErrInUse);
sl@0
  1443
	return EPass;
sl@0
  1444
	}
sl@0
  1445
sl@0
  1446
TVerdict CTestMmfAclntARN8025::HandleStateStreamingComplete1ErrInUse()
sl@0
  1447
	{
sl@0
  1448
	iPositionStop = (static_cast<TInt64>(iClientList[1]->BytesPlayed())* KMicroSecsInOneSec)/(KSampleRate*KBytesPerSample);
sl@0
  1449
	SetExpectedEvent(2,CFsmAudioOutputStreamClient::EAudioOutputStreamBufferCopied,KErrNone);
sl@0
  1450
	StateChange(EStateStreaming2);
sl@0
  1451
	return EPass;
sl@0
  1452
	}
sl@0
  1453
sl@0
  1454
TVerdict CTestMmfAclntARN8025::HandleStateStreaming2()
sl@0
  1455
	{
sl@0
  1456
	RegisterClientEventToMonitor(1,CFsmAudioOutputStreamClient::EAudioOutputStreamResourceAvailable,KErrNone,EStateResourceAvailableOS1);
sl@0
  1457
	RegisterClientEventToMonitor(2,CFsmAudioOutputStreamClient::EAudioOutputStreamPlayComplete,KErrUnderflow,EStateStreamingComplete2ErrUnderflow);
sl@0
  1458
	StateChange(EStateMonitoringEvents);
sl@0
  1459
	return EPass;
sl@0
  1460
	}
sl@0
  1461
sl@0
  1462
TVerdict CTestMmfAclntARN8025::HandleStateResourceAvailableOS1()
sl@0
  1463
	{
sl@0
  1464
	INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
sl@0
  1465
	
sl@0
  1466
	if(IsMonitoringFinished())
sl@0
  1467
		{
sl@0
  1468
		iTestStepResult = EPass;
sl@0
  1469
		StopTest();
sl@0
  1470
		}
sl@0
  1471
	else
sl@0
  1472
		{
sl@0
  1473
		StateChange(EStateMonitoringEvents);
sl@0
  1474
		}
sl@0
  1475
	TTimeIntervalMicroSeconds positionResume = iClientList[1]->GetResumedPosition();
sl@0
  1476
	iPositionResume = ((positionResume.Int64()) * KMicroSecsInOneSec / KSampleRate8000Hz);
sl@0
  1477
	if(iPositionResume == iPositionStop)
sl@0
  1478
		{
sl@0
  1479
		INFO_PRINTF3(_L("iTestAudioOutputStream1->Audio Resource Position Matches, Expected=%d, Actual=%d"), I64LOW(iPositionStop.Int64()), I64LOW(iPositionResume.Int64()));
sl@0
  1480
		iTestStepResult = EPass;
sl@0
  1481
		}
sl@0
  1482
	else
sl@0
  1483
		{
sl@0
  1484
		ERR_PRINTF3(_L("iTestAudioOutputStream1->Audio Resource Position does NOT Match, Expected=%d, Actual=%d"), I64LOW(iPositionStop.Int64()), I64LOW(iPositionResume.Int64()));
sl@0
  1485
		iTestStepResult=EFail;
sl@0
  1486
		}
sl@0
  1487
	return iTestStepResult;
sl@0
  1488
	}
sl@0
  1489
sl@0
  1490
TVerdict CTestMmfAclntARN8025::HandleStateStreamingComplete2ErrUnderflow()
sl@0
  1491
	{
sl@0
  1492
	INFO_PRINTF1(_L("iTestAudioOutputStream2->PlayComplete"));
sl@0
  1493
	if(IsMonitoringFinished())
sl@0
  1494
		{
sl@0
  1495
		iTestStepResult = EPass;
sl@0
  1496
		StopTest();
sl@0
  1497
		}
sl@0
  1498
	else
sl@0
  1499
		{
sl@0
  1500
		StateChange(EStateMonitoringEvents); //Didn't finish monitoring
sl@0
  1501
		}
sl@0
  1502
	return EPass;
sl@0
  1503
	}
sl@0
  1504
sl@0
  1505
/**
sl@0
  1506
 * PerformTestL
sl@0
  1507
 */
sl@0
  1508
TVerdict CTestMmfAclntARN8025::PerformTestL()
sl@0
  1509
	{
sl@0
  1510
	INFO_PRINTF1( _L("Get the actual position from where the paused audio can be resumed."));
sl@0
  1511
	iTestStepResult = EFail;
sl@0
  1512
	
sl@0
  1513
	InitTest();
sl@0
  1514
	
sl@0
  1515
	StartTestL();
sl@0
  1516
	
sl@0
  1517
	// Start the scheduler - Done only once !
sl@0
  1518
	CActiveScheduler::Start();
sl@0
  1519
	
sl@0
  1520
	return iTestStepResult;
sl@0
  1521
	}
sl@0
  1522
sl@0
  1523
//
sl@0
  1524
//CTestMmfAclntARN8026
sl@0
  1525
//
sl@0
  1526
sl@0
  1527
/**
sl@0
  1528
 * Constructor
sl@0
  1529
 */
sl@0
  1530
CTestMmfAclntARN8026::CTestMmfAclntARN8026(const TDesC& aTestName)
sl@0
  1531
	: CTestStepAudioOutputStreamARN(aTestName)
sl@0
  1532
	{}
sl@0
  1533
sl@0
  1534
/**
sl@0
  1535
 * NewL
sl@0
  1536
 */
sl@0
  1537
CTestMmfAclntARN8026* CTestMmfAclntARN8026::NewL(const TDesC& aTestName)
sl@0
  1538
	{
sl@0
  1539
	CTestMmfAclntARN8026* self = new (ELeave) CTestMmfAclntARN8026(aTestName);
sl@0
  1540
	return self;
sl@0
  1541
	}
sl@0
  1542
sl@0
  1543
/**
sl@0
  1544
 * DoTestL
sl@0
  1545
 */
sl@0
  1546
TVerdict CTestMmfAclntARN8026::DoTestL()
sl@0
  1547
	{
sl@0
  1548
	return( PerformTestL() );
sl@0
  1549
	}
sl@0
  1550
sl@0
  1551
/**
sl@0
  1552
 * FsmCheck
sl@0
  1553
 */
sl@0
  1554
TBool CTestMmfAclntARN8026::FsmCheck(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
  1555
	{
sl@0
  1556
	TBool retFsmCheck = EFalse;
sl@0
  1557
	if (iExpectedEvent != aEventCode)
sl@0
  1558
		{
sl@0
  1559
		if ((aEventCode == EMaoscPlayComplete2))
sl@0
  1560
	        {
sl@0
  1561
	        retFsmCheck = ETrue;
sl@0
  1562
	        if (iEventOccured == EMarncResourceAvailableOS1)
sl@0
  1563
	            {
sl@0
  1564
	            return retFsmCheck;
sl@0
  1565
	            }
sl@0
  1566
            else
sl@0
  1567
                {
sl@0
  1568
                iEventOccured = EMaoscPlayComplete2;
sl@0
  1569
                }
sl@0
  1570
	        }
sl@0
  1571
        else if (aEventCode == EMarncResourceAvailableOS1)
sl@0
  1572
            {
sl@0
  1573
            retFsmCheck = ETrue;
sl@0
  1574
            if (iEventOccured == EMaoscPlayComplete2)
sl@0
  1575
                {
sl@0
  1576
                return retFsmCheck;
sl@0
  1577
                }
sl@0
  1578
            else
sl@0
  1579
                {
sl@0
  1580
                iEventOccured = EMarncResourceAvailableOS1;
sl@0
  1581
                }
sl@0
  1582
            }
sl@0
  1583
        else
sl@0
  1584
            {
sl@0
  1585
       		ERR_PRINTF3(_L("ExpectedEvent : %d, ActualEvent : %d"), iExpectedEvent, aEventCode);
sl@0
  1586
    		iTestStepResult = EFail;
sl@0
  1587
    		CActiveScheduler::Stop();
sl@0
  1588
            }
sl@0
  1589
		}
sl@0
  1590
	else if (iExpectedError != aError)
sl@0
  1591
		{
sl@0
  1592
		ERR_PRINTF3(_L("ExpectedError : %d, ActualError : %d"), iExpectedError, aError);
sl@0
  1593
		iTestStepResult = EFail;
sl@0
  1594
		CActiveScheduler::Stop();
sl@0
  1595
		}
sl@0
  1596
	else
sl@0
  1597
		{
sl@0
  1598
		retFsmCheck = ETrue;
sl@0
  1599
		}
sl@0
  1600
	return retFsmCheck;	
sl@0
  1601
	}
sl@0
  1602
sl@0
  1603
/**
sl@0
  1604
 * FsmL
sl@0
  1605
 */
sl@0
  1606
void CTestMmfAclntARN8026::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
  1607
	{
sl@0
  1608
	if (FsmCheck(aEventCode, aError))
sl@0
  1609
		{
sl@0
  1610
		TInt err = KErrNone;
sl@0
  1611
		switch (iState)
sl@0
  1612
			{
sl@0
  1613
			case 0:
sl@0
  1614
				// Open iTestAudioOutputStream1
sl@0
  1615
				iTestAudioOutputStream1->Open(NULL);
sl@0
  1616
				INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  1617
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1618
				StateChange(EMaoscOpenComplete1);
sl@0
  1619
				break;
sl@0
  1620
			case 1:
sl@0
  1621
				// iFile1->Read()
sl@0
  1622
				err = iFile1.Read(iBuf1); //-synchronous
sl@0
  1623
				if (err != KErrNone)
sl@0
  1624
					{
sl@0
  1625
					INFO_PRINTF2(_L("Error reading iFile1 %d"), err);
sl@0
  1626
					User::Leave(err);
sl@0
  1627
					}
sl@0
  1628
				// iTestAudioOutputStream1->WriteL()
sl@0
  1629
				INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
sl@0
  1630
				iTestAudioOutputStream1->WriteL(iBuf1); //-Should get Play Error.
sl@0
  1631
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1632
				StateChange(EMaoscBufferCopied1);
sl@0
  1633
				break;
sl@0
  1634
			case 2:
sl@0
  1635
				// Register iTestAudioOutputStream1 for Notification
sl@0
  1636
				err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1637
				INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
sl@0
  1638
				if( err != KErrNone )
sl@0
  1639
					{
sl@0
  1640
					ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1641
					iTestStepResult = EFail;					
sl@0
  1642
					CActiveScheduler::Stop();
sl@0
  1643
					User::Leave(err);
sl@0
  1644
					break;
sl@0
  1645
					}
sl@0
  1646
				// Register iTestAudioOutputStream3 for Notification
sl@0
  1647
				err = iTestAudioOutputStream3->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport3, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1648
				INFO_PRINTF1(_L("iTestAudioOutputStream3->RegisterAudioResourceNotification()"));
sl@0
  1649
				if( err != KErrNone )
sl@0
  1650
					{
sl@0
  1651
					ERR_PRINTF2(_L("iTestAudioOutputStream3->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1652
					iTestStepResult = EFail;					
sl@0
  1653
					CActiveScheduler::Stop();
sl@0
  1654
					User::Leave(err);
sl@0
  1655
					break;
sl@0
  1656
					}
sl@0
  1657
				// Open iTestAudioOutputStream3
sl@0
  1658
				iTestAudioOutputStream3->Open(NULL);
sl@0
  1659
				INFO_PRINTF1(_L("iTestAudioOutputStream3->Open()"));
sl@0
  1660
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1661
				StateChange(EMaoscOpenComplete3);
sl@0
  1662
				break;
sl@0
  1663
			case 3:
sl@0
  1664
				// Open iTestAudioOutputStream2
sl@0
  1665
				iTestAudioOutputStream2->Open(NULL);
sl@0
  1666
				INFO_PRINTF1(_L("iTestAudioOutputStream2->Open()"));
sl@0
  1667
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1668
				StateChange(EMaoscOpenComplete2);
sl@0
  1669
				break;
sl@0
  1670
			case 4:
sl@0
  1671
				// iFile2->Read()
sl@0
  1672
				err = iFile2.Read(iBuf2);
sl@0
  1673
				if (err != KErrNone)
sl@0
  1674
					{
sl@0
  1675
					INFO_PRINTF2(_L("Error reading file %d"), err);
sl@0
  1676
					User::Leave(err);
sl@0
  1677
					}
sl@0
  1678
				// iTestAudioOutputStream2->WriteL()
sl@0
  1679
				iTestAudioOutputStream2->WriteL(iBuf2);
sl@0
  1680
				INFO_PRINTF1(_L("iTestAudioOutputStream2->WriteL()"));
sl@0
  1681
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1682
				StateChange(EMaoscPlayComplete1, KErrInUse);
sl@0
  1683
				break;
sl@0
  1684
			case 5:
sl@0
  1685
				// Wait for BufferCopied event for iTestAudioOutputStream2
sl@0
  1686
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1687
				StateChange(EMaoscBufferCopied2);
sl@0
  1688
				break;
sl@0
  1689
			case 6:
sl@0
  1690
				// iFile3->Read()
sl@0
  1691
				err = iFile3.Read(iBuf3); //-synchronous
sl@0
  1692
				if (err != KErrNone)
sl@0
  1693
					{
sl@0
  1694
					INFO_PRINTF2(_L("Error reading iFile2 %d"), err);
sl@0
  1695
					User::Leave(err);
sl@0
  1696
					}
sl@0
  1697
				// iTestAudioOutputStream3->WriteL()
sl@0
  1698
				INFO_PRINTF1(_L("iTestAudioOutputStream3->WriteL()"));
sl@0
  1699
				iTestAudioOutputStream3->WriteL(iBuf3);
sl@0
  1700
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1701
				StateChange(EMaoscBufferCopied3, KErrInUse);
sl@0
  1702
				break;
sl@0
  1703
			case 7:
sl@0
  1704
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1705
				StateChange(EMaoscPlayComplete3, KErrInUse);
sl@0
  1706
				break;
sl@0
  1707
			case 8:
sl@0
  1708
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1709
				StateChange(EMaoscPlayComplete2, KErrUnderflow);
sl@0
  1710
				break;
sl@0
  1711
			case 9:
sl@0
  1712
				// Timer to check if Notification Event Occurs.
sl@0
  1713
				iCallBackTimer->After(2000000);
sl@0
  1714
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1715
				StateChange(EMarncResourceAvailableOS1);
sl@0
  1716
				break;
sl@0
  1717
			case 10:
sl@0
  1718
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
  1719
				INFO_PRINTF1(_L("iTestAudioOutputStream1->NotificationReceived"));
sl@0
  1720
				err = iTestAudioOutputStream1->WillResumePlay();
sl@0
  1721
				INFO_PRINTF1(_L("iTestAudioOutputStream1->WillResumePlay()"));
sl@0
  1722
				if( err != KErrNone )
sl@0
  1723
					{
sl@0
  1724
					ERR_PRINTF2(_L("iTestAudioOutputStream1->WillResumePlay() - Failed with Error : %d"), err);
sl@0
  1725
					iTestStepResult = EFail;					
sl@0
  1726
					CActiveScheduler::Stop();
sl@0
  1727
					break;
sl@0
  1728
					}
sl@0
  1729
				// Set the resume position.. or may be not, since its an offset.
sl@0
  1730
				// iTestAudioOutputStream1->SetPosition(iPosition);
sl@0
  1731
				// iTestAudioOutputStream1->WriteL()
sl@0
  1732
				iTestAudioOutputStream1->WriteL(iBuf1);
sl@0
  1733
				INFO_PRINTF1(_L("iTestAudioOutputStream1->WriteL()"));
sl@0
  1734
				StateChange(EMaoscBufferCopied1);
sl@0
  1735
				break;
sl@0
  1736
			case 11:
sl@0
  1737
				// Wait for PlayComplete event for iTestAudioOutputStream1
sl@0
  1738
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1739
				StateChange(EMaoscPlayComplete1, KErrUnderflow);
sl@0
  1740
				break;
sl@0
  1741
			case 12:
sl@0
  1742
				// Timer to check if Notification Event Occurs.
sl@0
  1743
				iCallBackTimer->After(2000000);
sl@0
  1744
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1745
				StateChange(EMarncResourceAvailableOS3);
sl@0
  1746
				break;
sl@0
  1747
			case 13:
sl@0
  1748
				iCallBackTimer->Cancel(); // in case something else stopped the AS
sl@0
  1749
				INFO_PRINTF1(_L("iTestAudioOutputStream3->NotificationReceived"));
sl@0
  1750
				iTestStepResult = EPass;
sl@0
  1751
				CActiveScheduler::Stop();
sl@0
  1752
				break;
sl@0
  1753
			}
sl@0
  1754
		}
sl@0
  1755
	}
sl@0
  1756
sl@0
  1757
/**
sl@0
  1758
 * PerformTestL
sl@0
  1759
 */
sl@0
  1760
TVerdict CTestMmfAclntARN8026::PerformTestL()
sl@0
  1761
	{
sl@0
  1762
	INFO_PRINTF1( _L("Call WillResumePlay()"));
sl@0
  1763
	iTestStepResult = EFail;
sl@0
  1764
	
sl@0
  1765
	// Initialise the state variables
sl@0
  1766
	StateInit();
sl@0
  1767
	
sl@0
  1768
	// Begin the process
sl@0
  1769
	FsmL(EIdleOutputStream);
sl@0
  1770
	
sl@0
  1771
	// Start the scheduler - Done only once !
sl@0
  1772
	CActiveScheduler::Start();
sl@0
  1773
	
sl@0
  1774
	return iTestStepResult;
sl@0
  1775
	}
sl@0
  1776
sl@0
  1777
sl@0
  1778
//
sl@0
  1779
//NEGATIVE TESTS//
sl@0
  1780
//
sl@0
  1781
sl@0
  1782
//
sl@0
  1783
//CTestMmfAclntARN1321
sl@0
  1784
//
sl@0
  1785
sl@0
  1786
/**
sl@0
  1787
 * Constructor
sl@0
  1788
 */
sl@0
  1789
CTestMmfAclntARN1321::CTestMmfAclntARN1321(const TDesC& aTestName)
sl@0
  1790
	: CTestStepAudioOutputStreamARN(aTestName)
sl@0
  1791
	{}
sl@0
  1792
sl@0
  1793
/**
sl@0
  1794
 * NewL
sl@0
  1795
 */
sl@0
  1796
CTestMmfAclntARN1321* CTestMmfAclntARN1321::NewL(const TDesC& aTestName)
sl@0
  1797
	{
sl@0
  1798
	CTestMmfAclntARN1321* self = new (ELeave) CTestMmfAclntARN1321(aTestName);
sl@0
  1799
	return self;
sl@0
  1800
	}
sl@0
  1801
sl@0
  1802
/**
sl@0
  1803
 * DoTestL
sl@0
  1804
 */
sl@0
  1805
TVerdict CTestMmfAclntARN1321::DoTestL()
sl@0
  1806
	{
sl@0
  1807
	return( PerformTestL() );
sl@0
  1808
	}
sl@0
  1809
sl@0
  1810
/**
sl@0
  1811
 * FsmL
sl@0
  1812
 */
sl@0
  1813
void CTestMmfAclntARN1321::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
  1814
	{
sl@0
  1815
	if (FsmCheck(aEventCode, aError))
sl@0
  1816
		{
sl@0
  1817
		TInt err = KErrNone;
sl@0
  1818
		switch (iState)
sl@0
  1819
			{
sl@0
  1820
			case 0:
sl@0
  1821
				// Open iTestAudioOutputStream1
sl@0
  1822
				iTestAudioOutputStream1->Open(NULL);				
sl@0
  1823
				INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  1824
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1825
				StateChange(EMaoscOpenComplete1);
sl@0
  1826
				break;
sl@0
  1827
			case 1:
sl@0
  1828
				// Register iTestAudioOutputStream1 for Notification
sl@0
  1829
				err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryPlaybackComplete);
sl@0
  1830
				INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryPlaybackComplete)"));
sl@0
  1831
				if( err == KErrNotSupported )
sl@0
  1832
					{
sl@0
  1833
					INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Returned KErrNotSupported ") );
sl@0
  1834
					iTestStepResult = EPass;
sl@0
  1835
					}
sl@0
  1836
				else
sl@0
  1837
					{
sl@0
  1838
					ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1839
					iTestStepResult = EFail;
sl@0
  1840
					}
sl@0
  1841
				CActiveScheduler::Stop();
sl@0
  1842
				break;
sl@0
  1843
			}
sl@0
  1844
		}
sl@0
  1845
	}
sl@0
  1846
sl@0
  1847
/**
sl@0
  1848
 * PerformTestL
sl@0
  1849
 */
sl@0
  1850
TVerdict CTestMmfAclntARN1321::PerformTestL()
sl@0
  1851
	{
sl@0
  1852
	INFO_PRINTF1( _L("Register for notification with an unsupported event type."));
sl@0
  1853
	iTestStepResult = EFail;
sl@0
  1854
	
sl@0
  1855
	// Initialise the state variables
sl@0
  1856
	StateInit();
sl@0
  1857
	
sl@0
  1858
	// Begin the process
sl@0
  1859
	FsmL(EIdleOutputStream);
sl@0
  1860
	
sl@0
  1861
	// Start the scheduler - Done only once !
sl@0
  1862
	CActiveScheduler::Start();
sl@0
  1863
	
sl@0
  1864
	return iTestStepResult;
sl@0
  1865
	}
sl@0
  1866
sl@0
  1867
//
sl@0
  1868
//CTestMmfAclntARN1322
sl@0
  1869
//
sl@0
  1870
sl@0
  1871
/**
sl@0
  1872
 * Constructor
sl@0
  1873
 */
sl@0
  1874
CTestMmfAclntARN1322::CTestMmfAclntARN1322(const TDesC& aTestName)
sl@0
  1875
	: CTestStepAudioOutputStreamARN(aTestName)
sl@0
  1876
	{}
sl@0
  1877
sl@0
  1878
/**
sl@0
  1879
 * NewL
sl@0
  1880
 */
sl@0
  1881
CTestMmfAclntARN1322* CTestMmfAclntARN1322::NewL(const TDesC& aTestName)
sl@0
  1882
	{
sl@0
  1883
	CTestMmfAclntARN1322* self = new (ELeave) CTestMmfAclntARN1322(aTestName);
sl@0
  1884
	return self;
sl@0
  1885
	}
sl@0
  1886
sl@0
  1887
/**
sl@0
  1888
 * DoTestL
sl@0
  1889
 */
sl@0
  1890
TVerdict CTestMmfAclntARN1322::DoTestL()
sl@0
  1891
	{
sl@0
  1892
	return( PerformTestL() );
sl@0
  1893
	}
sl@0
  1894
sl@0
  1895
/**
sl@0
  1896
 * FsmL
sl@0
  1897
 */
sl@0
  1898
void CTestMmfAclntARN1322::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
  1899
	{
sl@0
  1900
	if (FsmCheck(aEventCode, aError))
sl@0
  1901
		{
sl@0
  1902
		TInt err = KErrNone;
sl@0
  1903
		switch (iState)
sl@0
  1904
			{
sl@0
  1905
			case 0:
sl@0
  1906
				// Open iTestAudioOutputStream1
sl@0
  1907
				iTestAudioOutputStream1->Open(NULL);				
sl@0
  1908
				INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  1909
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  1910
				StateChange(EMaoscOpenComplete1);
sl@0
  1911
				break;
sl@0
  1912
			case 1:
sl@0
  1913
				// Register iTestAudioOutputStream1 for Notification
sl@0
  1914
				err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
sl@0
  1915
				INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()"));
sl@0
  1916
				if( err != KErrNone )
sl@0
  1917
					{
sl@0
  1918
					ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1919
					iTestStepResult = EFail;					
sl@0
  1920
					CActiveScheduler::Stop();
sl@0
  1921
					User::Leave(err);
sl@0
  1922
					break;
sl@0
  1923
					}
sl@0
  1924
				// Cancellation of notification request for iTestAudioOutputStream1
sl@0
  1925
				err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryPlaybackComplete);
sl@0
  1926
				INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryPlaybackComplete)"));
sl@0
  1927
				if( err == KErrNotSupported )
sl@0
  1928
					{
sl@0
  1929
					INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Returned KErrNotSupported ") );
sl@0
  1930
					iTestStepResult = EPass;
sl@0
  1931
					}
sl@0
  1932
				else
sl@0
  1933
					{
sl@0
  1934
					ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  1935
					iTestStepResult = EFail;
sl@0
  1936
					}
sl@0
  1937
				CActiveScheduler::Stop();
sl@0
  1938
				break;
sl@0
  1939
			}
sl@0
  1940
		}
sl@0
  1941
	}
sl@0
  1942
sl@0
  1943
/**
sl@0
  1944
 * PerformTestL
sl@0
  1945
 */
sl@0
  1946
TVerdict CTestMmfAclntARN1322::PerformTestL()
sl@0
  1947
	{
sl@0
  1948
	INFO_PRINTF1( _L("Cancel the request for notification with an unsupported event type."));
sl@0
  1949
	iTestStepResult = EFail;
sl@0
  1950
	
sl@0
  1951
	// Initialise the state variables
sl@0
  1952
	StateInit();
sl@0
  1953
	
sl@0
  1954
	// Begin the process
sl@0
  1955
	FsmL(EIdleOutputStream);
sl@0
  1956
	
sl@0
  1957
	// Start the scheduler - Done only once !
sl@0
  1958
	CActiveScheduler::Start();
sl@0
  1959
	
sl@0
  1960
	return iTestStepResult;
sl@0
  1961
	}
sl@0
  1962
sl@0
  1963
//
sl@0
  1964
//CTestMmfAclntARN1323
sl@0
  1965
//
sl@0
  1966
sl@0
  1967
/**
sl@0
  1968
 * Constructor
sl@0
  1969
 */
sl@0
  1970
CTestMmfAclntARN1323::CTestMmfAclntARN1323(const TDesC& aTestName)
sl@0
  1971
	: CTestStepAudioOutputStreamARN(aTestName)
sl@0
  1972
	{}
sl@0
  1973
sl@0
  1974
/**
sl@0
  1975
 * NewL
sl@0
  1976
 */
sl@0
  1977
CTestMmfAclntARN1323* CTestMmfAclntARN1323::NewL(const TDesC& aTestName)
sl@0
  1978
	{
sl@0
  1979
	CTestMmfAclntARN1323* self = new (ELeave) CTestMmfAclntARN1323(aTestName);
sl@0
  1980
	return self;
sl@0
  1981
	}
sl@0
  1982
sl@0
  1983
/**
sl@0
  1984
 * DoTestL
sl@0
  1985
 */
sl@0
  1986
TVerdict CTestMmfAclntARN1323::DoTestL()
sl@0
  1987
	{
sl@0
  1988
	return( PerformTestL() );
sl@0
  1989
	}
sl@0
  1990
sl@0
  1991
/**
sl@0
  1992
 * FsmL
sl@0
  1993
 */
sl@0
  1994
void CTestMmfAclntARN1323::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
  1995
	{
sl@0
  1996
	if (FsmCheck(aEventCode, aError))
sl@0
  1997
		{
sl@0
  1998
		TInt err = KErrNone;
sl@0
  1999
		switch (iState)
sl@0
  2000
			{
sl@0
  2001
			case 0:
sl@0
  2002
				// Open iTestAudioOutputStream1
sl@0
  2003
				iTestAudioOutputStream1->Open(NULL);				
sl@0
  2004
				INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  2005
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  2006
				StateChange(EMaoscOpenComplete1);
sl@0
  2007
				break;
sl@0
  2008
			case 1:
sl@0
  2009
				// Cancellation of notification request for iTestAudioOutputStream1
sl@0
  2010
				err = iTestAudioOutputStream1->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
sl@0
  2011
				INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification()"));
sl@0
  2012
				if( err == KErrCancel )
sl@0
  2013
					{
sl@0
  2014
					INFO_PRINTF1(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Returned KErrCancel ") );
sl@0
  2015
					iTestStepResult = EPass;
sl@0
  2016
					}
sl@0
  2017
				else
sl@0
  2018
					{
sl@0
  2019
					ERR_PRINTF2(_L("iTestAudioOutputStream1->CancelRegisterAudioResourceNotification - Failed with Error : %d"), err);
sl@0
  2020
					iTestStepResult = EFail;
sl@0
  2021
					}
sl@0
  2022
				CActiveScheduler::Stop();
sl@0
  2023
				break;
sl@0
  2024
			}
sl@0
  2025
		}
sl@0
  2026
	}
sl@0
  2027
sl@0
  2028
/**
sl@0
  2029
 * PerformTestL
sl@0
  2030
 */
sl@0
  2031
TVerdict CTestMmfAclntARN1323::PerformTestL()
sl@0
  2032
	{
sl@0
  2033
	INFO_PRINTF1(_L("Cancel when no resource Notification is requested."));
sl@0
  2034
	iTestStepResult = EFail;
sl@0
  2035
	
sl@0
  2036
	// Initialise the state variables
sl@0
  2037
	StateInit();
sl@0
  2038
	
sl@0
  2039
	// Begin the process
sl@0
  2040
	FsmL(EIdleOutputStream);
sl@0
  2041
	
sl@0
  2042
	// Start the scheduler - Done only once !
sl@0
  2043
	CActiveScheduler::Start();
sl@0
  2044
	
sl@0
  2045
	return iTestStepResult;
sl@0
  2046
	}
sl@0
  2047
sl@0
  2048
//
sl@0
  2049
//CTestMmfAclntARN1324
sl@0
  2050
//
sl@0
  2051
sl@0
  2052
/**
sl@0
  2053
 * Constructor
sl@0
  2054
 */
sl@0
  2055
CTestMmfAclntARN1324::CTestMmfAclntARN1324(const TDesC& aTestName)
sl@0
  2056
	: CTestStepAudioOutputStreamARN(aTestName)
sl@0
  2057
	{}
sl@0
  2058
sl@0
  2059
/**
sl@0
  2060
 * NewL
sl@0
  2061
 */
sl@0
  2062
CTestMmfAclntARN1324* CTestMmfAclntARN1324::NewL(const TDesC& aTestName)
sl@0
  2063
	{
sl@0
  2064
	CTestMmfAclntARN1324* self = new (ELeave) CTestMmfAclntARN1324(aTestName);
sl@0
  2065
	return self;
sl@0
  2066
	}
sl@0
  2067
sl@0
  2068
/**
sl@0
  2069
 * DoTestL
sl@0
  2070
 */
sl@0
  2071
TVerdict CTestMmfAclntARN1324::DoTestL()
sl@0
  2072
	{
sl@0
  2073
	return( PerformTestL() );
sl@0
  2074
	}
sl@0
  2075
sl@0
  2076
/**
sl@0
  2077
 * FsmL
sl@0
  2078
 */
sl@0
  2079
void CTestMmfAclntARN1324::FsmL(TMmfAudioOutputStreamEvents aEventCode, TInt aError)
sl@0
  2080
	{
sl@0
  2081
	if (FsmCheck(aEventCode, aError))
sl@0
  2082
		{
sl@0
  2083
		TInt err = KErrNone;
sl@0
  2084
		switch (iState)
sl@0
  2085
			{
sl@0
  2086
			case 0:
sl@0
  2087
				// Open iTestAudioOutputStream1
sl@0
  2088
				iTestAudioOutputStream1->Open(NULL);				
sl@0
  2089
				INFO_PRINTF1(_L("iTestAudioOutputStream1->Open()"));
sl@0
  2090
				// Set ExpectedEvent & ExpectedError and change the State
sl@0
  2091
				StateChange(EMaoscOpenComplete1);
sl@0
  2092
				break;
sl@0
  2093
			case 1:
sl@0
  2094
				// Register iTestAudioOutputStream1 for Notification
sl@0
  2095
				err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
sl@0
  2096
				INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()#1"));
sl@0
  2097
				if( err != KErrNone )
sl@0
  2098
					{
sl@0
  2099
					ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#1 - Failed with Error : %d"), err);
sl@0
  2100
					iTestStepResult = EFail;					
sl@0
  2101
					CActiveScheduler::Stop();
sl@0
  2102
					User::Leave(err);
sl@0
  2103
					break;
sl@0
  2104
					}
sl@0
  2105
				// Register iTestAudioOutputStream1 for Notification (again)
sl@0
  2106
				err = iTestAudioOutputStream1->RegisterAudioResourceNotification(*iMdaAudioOutputStreamCallbackSupport1, KMMFEventCategoryAudioResourceAvailable);
sl@0
  2107
				INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification()#2"));
sl@0
  2108
				if( err == KErrAlreadyExists )
sl@0
  2109
					{
sl@0
  2110
					INFO_PRINTF1(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#2 - Returned KErrAlreadyExists ") );
sl@0
  2111
					iTestStepResult = EPass;
sl@0
  2112
					}
sl@0
  2113
				else
sl@0
  2114
					{
sl@0
  2115
					ERR_PRINTF2(_L("iTestAudioOutputStream1->RegisterAudioResourceNotification#2 - Failed with Error : %d"), err);
sl@0
  2116
					iTestStepResult = EFail;
sl@0
  2117
					}
sl@0
  2118
				CActiveScheduler::Stop();
sl@0
  2119
				break;
sl@0
  2120
			}
sl@0
  2121
		}
sl@0
  2122
	}
sl@0
  2123
sl@0
  2124
/**
sl@0
  2125
 * PerformTestL
sl@0
  2126
 */
sl@0
  2127
TVerdict CTestMmfAclntARN1324::PerformTestL()
sl@0
  2128
	{
sl@0
  2129
	INFO_PRINTF1(_L("Multiple Registration for notification for the same event type."));
sl@0
  2130
	iTestStepResult = EFail;
sl@0
  2131
	
sl@0
  2132
	// Initialise the state variables
sl@0
  2133
	StateInit();
sl@0
  2134
	
sl@0
  2135
	// Begin the process
sl@0
  2136
	FsmL(EIdleOutputStream);
sl@0
  2137
	
sl@0
  2138
	// Start the scheduler - Done only once !
sl@0
  2139
	CActiveScheduler::Start();
sl@0
  2140
	
sl@0
  2141
	return iTestStepResult;
sl@0
  2142
	}