os/mm/devsound/a3fintegrationtest/src/tsi_a3f_devsound_tone.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2007-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
// Implementation of Integraton test step classes for A3F DevSound Tone test cases.
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#include "tsi_a3f_devsound_tone.h"
sl@0
    19
sl@0
    20
/*
sl@0
    21
 *
sl@0
    22
 * RTestStepA3FDevSoundToneBase - Test step constructor
sl@0
    23
 *
sl@0
    24
 */
sl@0
    25
RTestStepA3FDevSoundToneBase::RTestStepA3FDevSoundToneBase(const TDesC& aTestName, const TDesC& aSectName)
sl@0
    26
:RAsyncTestStep(),
sl@0
    27
 iMMFDevSound(NULL),
sl@0
    28
 iSectName(aSectName),
sl@0
    29
 iTimer(NULL),
sl@0
    30
 iCallBack(NULL, NULL),
sl@0
    31
 iState(EStateToneStart)
sl@0
    32
	{
sl@0
    33
	// From RTestStep
sl@0
    34
	iTestStepName = aTestName; // store the name of the test case
sl@0
    35
sl@0
    36
	}
sl@0
    37
sl@0
    38
/*
sl@0
    39
 *
sl@0
    40
 * RTestStepA3FDevSoundToneBase - Test step constructor
sl@0
    41
 *
sl@0
    42
 */
sl@0
    43
RTestStepA3FDevSoundToneBase::RTestStepA3FDevSoundToneBase(const TDesC& aTestName)
sl@0
    44
:RAsyncTestStep(),
sl@0
    45
 iMMFDevSound(NULL),
sl@0
    46
 iSectName(KNullDesC),
sl@0
    47
 iTimer(NULL),
sl@0
    48
 iCallBack(NULL, NULL),
sl@0
    49
 iState(EStateToneStart)
sl@0
    50
	{
sl@0
    51
	// From RTestStep
sl@0
    52
	iTestStepName = aTestName; // store the name of the test case
sl@0
    53
sl@0
    54
	}
sl@0
    55
sl@0
    56
/*
sl@0
    57
 *
sl@0
    58
 * KickoffTestL
sl@0
    59
 * - Starts the test
sl@0
    60
 *
sl@0
    61
 */
sl@0
    62
void RTestStepA3FDevSoundToneBase::KickoffTestL()
sl@0
    63
	{
sl@0
    64
	// Create instance of CMMFDevSound
sl@0
    65
	INFO_PRINTF1(_L("--- Creating DevSound object..."));
sl@0
    66
	iMMFDevSound = CMMFDevSound::NewL();
sl@0
    67
sl@0
    68
	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
sl@0
    69
	
sl@0
    70
	DoKickoffTestL();
sl@0
    71
sl@0
    72
	Fsm(EEventToneStart,KErrNone); // call to start the DevSound finite state machine for tone playing
sl@0
    73
sl@0
    74
	}
sl@0
    75
sl@0
    76
/*
sl@0
    77
 *
sl@0
    78
 * CloseTest
sl@0
    79
 *
sl@0
    80
 */
sl@0
    81
void RTestStepA3FDevSoundToneBase::CloseTest()
sl@0
    82
	{
sl@0
    83
	if (iMMFDevSound)
sl@0
    84
		{
sl@0
    85
		INFO_PRINTF1(_L("--- Deleting DevSound object..."));
sl@0
    86
		delete iMMFDevSound;
sl@0
    87
		iMMFDevSound = NULL;
sl@0
    88
		}
sl@0
    89
	
sl@0
    90
	if (iTimer)
sl@0
    91
		{
sl@0
    92
		delete iTimer;
sl@0
    93
		iTimer = NULL;
sl@0
    94
		}
sl@0
    95
		
sl@0
    96
	}
sl@0
    97
sl@0
    98
/*
sl@0
    99
 *
sl@0
   100
 * InitializeComplete
sl@0
   101
 *
sl@0
   102
 */
sl@0
   103
void RTestStepA3FDevSoundToneBase::InitializeComplete(TInt aError)
sl@0
   104
	{
sl@0
   105
	Fsm(EEventInitCompleteTone,aError);
sl@0
   106
sl@0
   107
	}
sl@0
   108
sl@0
   109
/*
sl@0
   110
 *
sl@0
   111
 * ToneFinished
sl@0
   112
 *
sl@0
   113
 */
sl@0
   114
void RTestStepA3FDevSoundToneBase::ToneFinished(TInt aError)
sl@0
   115
	{
sl@0
   116
	if ((aError == KErrUnderflow))
sl@0
   117
		{
sl@0
   118
		INFO_PRINTF2(_L("DevSound called ToneFinished with error = %d as expected"), aError);
sl@0
   119
		StopTest(aError,EPass);
sl@0
   120
		}
sl@0
   121
	else
sl@0
   122
		{
sl@0
   123
		INFO_PRINTF2(_L("DevSound called ToneFinished with error = %d that was NOT expected"), aError);
sl@0
   124
		StopTest(aError);
sl@0
   125
		}
sl@0
   126
sl@0
   127
	}
sl@0
   128
sl@0
   129
/*
sl@0
   130
 *
sl@0
   131
 * BufferToBeFilled
sl@0
   132
 *
sl@0
   133
 */
sl@0
   134
void RTestStepA3FDevSoundToneBase::BufferToBeFilled(CMMFBuffer* /*aBuffer*/)
sl@0
   135
	{
sl@0
   136
	__ASSERT_ALWAYS(0,Panic(_L("RTestStepA3FDevSoundToneBase"),EInvalidCallbackCall));
sl@0
   137
sl@0
   138
	}
sl@0
   139
sl@0
   140
/*
sl@0
   141
 *
sl@0
   142
 * PlayError
sl@0
   143
 *
sl@0
   144
 */
sl@0
   145
void RTestStepA3FDevSoundToneBase::PlayError(TInt /*aError*/)
sl@0
   146
	{
sl@0
   147
	__ASSERT_ALWAYS(0,Panic(_L("RTestStepA3FDevSoundToneBase"),EInvalidCallbackCall));
sl@0
   148
sl@0
   149
	}
sl@0
   150
sl@0
   151
/*
sl@0
   152
 *
sl@0
   153
 * RecordError
sl@0
   154
 *
sl@0
   155
 */
sl@0
   156
sl@0
   157
void RTestStepA3FDevSoundToneBase::RecordError(TInt /*aError*/)
sl@0
   158
	{
sl@0
   159
	__ASSERT_ALWAYS(0,Panic(_L("RTestStepA3FDevSoundToneBase"),EInvalidCallbackCall));
sl@0
   160
sl@0
   161
	}
sl@0
   162
/*
sl@0
   163
 *
sl@0
   164
 * BufferToBeEmptied
sl@0
   165
 *
sl@0
   166
 */
sl@0
   167
sl@0
   168
void RTestStepA3FDevSoundToneBase::BufferToBeEmptied(CMMFBuffer* /*aBuffer*/)
sl@0
   169
	{
sl@0
   170
	__ASSERT_ALWAYS(0,Panic(_L("RTestStepA3FDevSoundToneBase"),EInvalidCallbackCall));
sl@0
   171
sl@0
   172
	}
sl@0
   173
sl@0
   174
/*
sl@0
   175
 *
sl@0
   176
 * ConvertError
sl@0
   177
 *
sl@0
   178
 */
sl@0
   179
void RTestStepA3FDevSoundToneBase::ConvertError(TInt /*aError*/)
sl@0
   180
	{
sl@0
   181
	__ASSERT_ALWAYS(0,Panic(_L("RTestStepA3FDevSoundToneBase"),EInvalidCallbackCall));
sl@0
   182
sl@0
   183
	}
sl@0
   184
sl@0
   185
/*
sl@0
   186
 *
sl@0
   187
 * DeviceMessage
sl@0
   188
 *
sl@0
   189
 */
sl@0
   190
void RTestStepA3FDevSoundToneBase::DeviceMessage(TUid /*aMessageType*/, const TDesC8& /*aMsg*/)
sl@0
   191
	{
sl@0
   192
	__ASSERT_ALWAYS(0,Panic(_L("RTestStepA3FDevSoundToneBase"),EInvalidCallbackCall));
sl@0
   193
sl@0
   194
	}
sl@0
   195
	
sl@0
   196
/*
sl@0
   197
 *
sl@0
   198
 * TimerCallback
sl@0
   199
 *
sl@0
   200
 */
sl@0
   201
TInt RTestStepA3FDevSoundToneBase::TimerCallback(TAny* aPtr)
sl@0
   202
	{
sl@0
   203
	static_cast<RTestStepA3FDevSoundToneBase*>(aPtr)->DoTimerCallback();
sl@0
   204
	return KErrNone;
sl@0
   205
sl@0
   206
	}
sl@0
   207
sl@0
   208
/*
sl@0
   209
 *
sl@0
   210
 * DoTimerCallback
sl@0
   211
 *
sl@0
   212
 */
sl@0
   213
void RTestStepA3FDevSoundToneBase::DoTimerCallback()
sl@0
   214
	{
sl@0
   215
	// The derived classes may provide the implementation if needed
sl@0
   216
	}
sl@0
   217
sl@0
   218
/*
sl@0
   219
 *
sl@0
   220
 * ConvertDesToTMMFSampleRate
sl@0
   221
 *
sl@0
   222
 */
sl@0
   223
TUint RTestStepA3FDevSoundToneBase::ConvertDesToTMMFSampleRate(const TDesC& aSampleRateString)
sl@0
   224
	{
sl@0
   225
	TUint rate = 0;
sl@0
   226
sl@0
   227
	STR_SWITCH(aSampleRateString)
sl@0
   228
sl@0
   229
	STR_CASE(_L("EMMFSampleRate8000Hz"))
sl@0
   230
		{
sl@0
   231
		rate = EMMFSampleRate8000Hz;
sl@0
   232
		break;
sl@0
   233
		}
sl@0
   234
	STR_CASE(_L("EMMFSampleRate11025Hz"))
sl@0
   235
		{
sl@0
   236
		rate = EMMFSampleRate11025Hz;
sl@0
   237
		break;
sl@0
   238
		}
sl@0
   239
	STR_CASE(_L("EMMFSampleRate12000Hz"))
sl@0
   240
		{
sl@0
   241
		rate = EMMFSampleRate12000Hz;
sl@0
   242
		break;
sl@0
   243
		}
sl@0
   244
	STR_CASE(_L("EMMFSampleRate16000Hz"))
sl@0
   245
		{
sl@0
   246
		rate = EMMFSampleRate16000Hz;
sl@0
   247
		break;
sl@0
   248
		}
sl@0
   249
	STR_CASE(_L("EMMFSampleRate22050Hz"))
sl@0
   250
		{
sl@0
   251
		rate = EMMFSampleRate22050Hz;
sl@0
   252
		break;
sl@0
   253
		}
sl@0
   254
	STR_CASE(_L("EMMFSampleRate24000Hz"))
sl@0
   255
		{
sl@0
   256
		rate = EMMFSampleRate24000Hz;
sl@0
   257
		break;
sl@0
   258
		}
sl@0
   259
	STR_CASE(_L("EMMFSampleRate32000Hz"))
sl@0
   260
		{
sl@0
   261
		rate = EMMFSampleRate32000Hz;
sl@0
   262
		break;
sl@0
   263
		}
sl@0
   264
	STR_CASE(_L("EMMFSampleRate44100Hz"))
sl@0
   265
		{
sl@0
   266
		rate = EMMFSampleRate44100Hz;
sl@0
   267
		break;
sl@0
   268
		}
sl@0
   269
	STR_CASE(_L("EMMFSampleRate48000Hz"))
sl@0
   270
		{
sl@0
   271
		rate = EMMFSampleRate48000Hz;
sl@0
   272
		break;
sl@0
   273
		}
sl@0
   274
	STR_CASE(_L("EMMFSampleRate64000Hz"))
sl@0
   275
		{
sl@0
   276
		rate = EMMFSampleRate64000Hz;
sl@0
   277
		break;
sl@0
   278
		}
sl@0
   279
	STR_CASE(_L("EMMFSampleRate88200Hz"))
sl@0
   280
		{
sl@0
   281
		rate = EMMFSampleRate88200Hz;
sl@0
   282
		break;
sl@0
   283
		}
sl@0
   284
	STR_CASE(_L("EMMFSampleRate96000Hz"))
sl@0
   285
		{
sl@0
   286
		rate = EMMFSampleRate96000Hz;
sl@0
   287
		break;
sl@0
   288
		}
sl@0
   289
	STR_CASE(_L("InvalidRate"))
sl@0
   290
		{
sl@0
   291
		rate = 0x90000000;
sl@0
   292
		break;
sl@0
   293
		}
sl@0
   294
sl@0
   295
	DEFAULT_CASE()
sl@0
   296
		{
sl@0
   297
		ERR_PRINTF1(_L("Attempt to convert invalid sample rate"));
sl@0
   298
		StopTest(KErrGeneral);
sl@0
   299
		}
sl@0
   300
sl@0
   301
	STR_SWITCH_END()
sl@0
   302
sl@0
   303
	INFO_PRINTF2(_L("Sample Rate = %S"), &aSampleRateString);
sl@0
   304
	return rate;
sl@0
   305
sl@0
   306
	}
sl@0
   307
sl@0
   308
//
sl@0
   309
// RStepA3FDevSoundDTMFTonePlay
sl@0
   310
//
sl@0
   311
sl@0
   312
/*
sl@0
   313
 *
sl@0
   314
 * RStepA3FDevSoundDTMFTonePlay - Test step constructor
sl@0
   315
 *
sl@0
   316
 */
sl@0
   317
RStepA3FDevSoundDTMFTonePlay::RStepA3FDevSoundDTMFTonePlay(const TDesC& aTestName)
sl@0
   318
:RTestStepA3FDevSoundToneBase(aTestName)
sl@0
   319
	{
sl@0
   320
	}
sl@0
   321
sl@0
   322
/*
sl@0
   323
 *
sl@0
   324
 * NewL
sl@0
   325
 *
sl@0
   326
 */
sl@0
   327
RStepA3FDevSoundDTMFTonePlay* RStepA3FDevSoundDTMFTonePlay::NewL(const TDesC& aTestName)
sl@0
   328
	{
sl@0
   329
	RStepA3FDevSoundDTMFTonePlay* self = new (ELeave) RStepA3FDevSoundDTMFTonePlay(aTestName);
sl@0
   330
	return self;
sl@0
   331
sl@0
   332
	}
sl@0
   333
sl@0
   334
/*
sl@0
   335
 *
sl@0
   336
 * DoKickoffTestL
sl@0
   337
 *
sl@0
   338
 */
sl@0
   339
void RStepA3FDevSoundDTMFTonePlay::DoKickoffTestL()
sl@0
   340
	{
sl@0
   341
	}
sl@0
   342
sl@0
   343
/*
sl@0
   344
 *
sl@0
   345
 * Fsm
sl@0
   346
 * - Executes DTMF tone playing events of DevSound in sequence
sl@0
   347
 *
sl@0
   348
 */
sl@0
   349
void RStepA3FDevSoundDTMFTonePlay::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
   350
	{
sl@0
   351
	switch (iState)
sl@0
   352
		{
sl@0
   353
		case EStateToneStart:
sl@0
   354
			{
sl@0
   355
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundDTMFTonePlay"),EFsmIncorrectErrorPassed));
sl@0
   356
			if (aDevSoundEvent == EEventToneStart)
sl@0
   357
				{
sl@0
   358
				// Initializing DevSound object for tone play
sl@0
   359
				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
sl@0
   360
				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
   361
				if (err != KErrNone)
sl@0
   362
					{
sl@0
   363
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
sl@0
   364
					StopTest(err);
sl@0
   365
					break;
sl@0
   366
					}
sl@0
   367
				INFO_PRINTF1(_L("State: EStateToneInitializing"));
sl@0
   368
				iState = EStateToneInitializing;
sl@0
   369
				}
sl@0
   370
			else
sl@0
   371
				{
sl@0
   372
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   373
				StopTest(aError, EFail);
sl@0
   374
				}
sl@0
   375
sl@0
   376
			break;
sl@0
   377
sl@0
   378
			}
sl@0
   379
sl@0
   380
		case EStateToneInitializing:
sl@0
   381
			{
sl@0
   382
			if (aDevSoundEvent == EEventInitCompleteTone && aError == KErrNone)
sl@0
   383
				{
sl@0
   384
				TPtrC dtmfString = (_L("0123456789,abcdef,*#"));
sl@0
   385
				TTimeIntervalMicroSeconds32 on(KMicroSecsInOneSec), off(KMicroSecsInOneSec), pause(0);
sl@0
   386
				// Define the duration of tone on, tone off and tone pause to be used during the DTMF tone playback operation
sl@0
   387
				INFO_PRINTF1(_L("Calling CMMFDevSound::SetDTMFLengths"));
sl@0
   388
				iMMFDevSound->SetDTMFLengths(on,off,pause);
sl@0
   389
				// Initialize the audio device and start playing the DTMF string
sl@0
   390
				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayDTMFStringL"));
sl@0
   391
				TRAPD(err, iMMFDevSound->PlayDTMFStringL(dtmfString));
sl@0
   392
				if (err != KErrNone)
sl@0
   393
					{
sl@0
   394
					ERR_PRINTF2(_L("CMMFDevSound::PlayDTMFStringL left with error = %d"), err);
sl@0
   395
					StopTest(err);
sl@0
   396
					break;
sl@0
   397
					}
sl@0
   398
				INFO_PRINTF1(_L("State: EStateTonePlaying"));
sl@0
   399
				iState = EStateTonePlaying;
sl@0
   400
sl@0
   401
				}
sl@0
   402
			else if (aDevSoundEvent == EEventInitCompleteTone && aError != KErrNone)
sl@0
   403
				{
sl@0
   404
				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error = %d"), aError);
sl@0
   405
				StopTest(aError);
sl@0
   406
				}
sl@0
   407
			else
sl@0
   408
				{
sl@0
   409
				ERR_PRINTF2(_L("DevSound EEventInitCompleteTone not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   410
				StopTest(aError, EFail);
sl@0
   411
				}
sl@0
   412
sl@0
   413
			break;
sl@0
   414
sl@0
   415
			}
sl@0
   416
sl@0
   417
		default:
sl@0
   418
			{
sl@0
   419
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
   420
			StopTest(KErrGeneral);
sl@0
   421
			}
sl@0
   422
		}
sl@0
   423
sl@0
   424
	}
sl@0
   425
sl@0
   426
//
sl@0
   427
// RStepA3FDevSoundNormalAndDualTonePlay
sl@0
   428
//
sl@0
   429
sl@0
   430
/*
sl@0
   431
 *
sl@0
   432
 * RStepA3FDevSoundNormalAndDualTonePlay - Test step constructor
sl@0
   433
 *
sl@0
   434
 */
sl@0
   435
RStepA3FDevSoundNormalAndDualTonePlay::RStepA3FDevSoundNormalAndDualTonePlay(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   436
:RTestStepA3FDevSoundToneBase(aTestName, aSectName),
sl@0
   437
 iRepeat(0),
sl@0
   438
 iDualTone(EFalse)
sl@0
   439
	{
sl@0
   440
	}
sl@0
   441
sl@0
   442
/*
sl@0
   443
 *
sl@0
   444
 * NewL
sl@0
   445
 *
sl@0
   446
 */
sl@0
   447
RStepA3FDevSoundNormalAndDualTonePlay* RStepA3FDevSoundNormalAndDualTonePlay::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   448
	{
sl@0
   449
	RStepA3FDevSoundNormalAndDualTonePlay* self = new (ELeave) RStepA3FDevSoundNormalAndDualTonePlay(aTestName, aSectName);
sl@0
   450
	return self;
sl@0
   451
sl@0
   452
	}
sl@0
   453
sl@0
   454
/*
sl@0
   455
 *
sl@0
   456
 * DoKickoffTestL
sl@0
   457
 *
sl@0
   458
 */
sl@0
   459
void RStepA3FDevSoundNormalAndDualTonePlay::DoKickoffTestL()
sl@0
   460
	{
sl@0
   461
	//Getting the number of times the audio is to be repeated during the tone playback operation
sl@0
   462
	if (GetIntFromConfig(iSectName,_L("Repeat"),iRepeat))
sl@0
   463
		{
sl@0
   464
		INFO_PRINTF2(_L("Repeat count taken from config file: %d"),iRepeat);
sl@0
   465
		}
sl@0
   466
	else
sl@0
   467
		{
sl@0
   468
		INFO_PRINTF2(_L("Default repeat count used: %d"), iRepeat);
sl@0
   469
		}
sl@0
   470
sl@0
   471
	// Getting the boolean flag value indicating whether dual tone playback should occur instead of the normal tone playback
sl@0
   472
	if (GetBoolFromConfig(iSectName,_L("DualTone"),iDualTone))
sl@0
   473
		{
sl@0
   474
		INFO_PRINTF2(_L("Boolean value indicating whether to use dual tone playback taken from config file: %d"),iDualTone);
sl@0
   475
		}
sl@0
   476
	else
sl@0
   477
		{
sl@0
   478
		INFO_PRINTF2(_L("Default boolean value indicating whether to use dual tone playback used: %d"), iDualTone);
sl@0
   479
		}
sl@0
   480
sl@0
   481
	}
sl@0
   482
sl@0
   483
/*
sl@0
   484
 *
sl@0
   485
 * Fsm
sl@0
   486
 * - Executes either the normal or dual tone playing events of DevSound in sequence
sl@0
   487
 *
sl@0
   488
 */
sl@0
   489
void RStepA3FDevSoundNormalAndDualTonePlay::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
   490
	{
sl@0
   491
	switch (iState)
sl@0
   492
		{
sl@0
   493
		case EStateToneStart:
sl@0
   494
			{
sl@0
   495
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundNormalAndDualTonePlay"),EFsmIncorrectErrorPassed));
sl@0
   496
			if (aDevSoundEvent == EEventToneStart)
sl@0
   497
				{
sl@0
   498
				// Initializing DevSound object for tone play
sl@0
   499
				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
sl@0
   500
				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
   501
				if (err != KErrNone)
sl@0
   502
					{
sl@0
   503
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
sl@0
   504
					StopTest(err);
sl@0
   505
					break;
sl@0
   506
					}
sl@0
   507
				INFO_PRINTF1(_L("State: EStateToneInitializing"));
sl@0
   508
				iState = EStateToneInitializing;
sl@0
   509
				}
sl@0
   510
			else
sl@0
   511
				{
sl@0
   512
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   513
				StopTest(aError, EFail);
sl@0
   514
				}
sl@0
   515
sl@0
   516
			break;
sl@0
   517
sl@0
   518
			}
sl@0
   519
sl@0
   520
		case EStateToneInitializing:
sl@0
   521
			{
sl@0
   522
			if (aDevSoundEvent == EEventInitCompleteTone && aError == KErrNone)
sl@0
   523
				{
sl@0
   524
				TTimeIntervalMicroSeconds repeatTrailingSilence(KMicroSecsInOneSec), duration(KMicroSecsInOneSec);
sl@0
   525
				// Define the number of times the audio is to be repeated during the tone playback operation
sl@0
   526
				INFO_PRINTF1(_L("Calling CMMFDevSound::SetToneRepeats"));
sl@0
   527
				iMMFDevSound->SetToneRepeats(iRepeat, repeatTrailingSilence);
sl@0
   528
				if (iDualTone)
sl@0
   529
					{
sl@0
   530
					// Initialize audio device and start playing a dual tone
sl@0
   531
					INFO_PRINTF1(_L("Calling CMMFDevSound::PlayDualToneL"));
sl@0
   532
					TRAPD(err, iMMFDevSound->PlayDualToneL(KFrequency1, KFrequency2, duration));
sl@0
   533
					if (err != KErrNone)
sl@0
   534
						{
sl@0
   535
						ERR_PRINTF2(_L("CMMFDevSound::PlayDualToneL left with error = %d"), err);
sl@0
   536
						StopTest(err);
sl@0
   537
						break;
sl@0
   538
						}
sl@0
   539
					}
sl@0
   540
				else
sl@0
   541
					{
sl@0
   542
					// Initialize the audio device and start playing a tone
sl@0
   543
					INFO_PRINTF1(_L("Calling CMMFDevSound::PlayToneL"));
sl@0
   544
					TRAPD(err, iMMFDevSound->PlayToneL(KFrequency1, duration));
sl@0
   545
					if (err != KErrNone)
sl@0
   546
						{
sl@0
   547
						ERR_PRINTF2(_L("CMMFDevSound::PlayToneL left with error = %d"), err);
sl@0
   548
						StopTest(err);
sl@0
   549
						break;
sl@0
   550
						}
sl@0
   551
					}
sl@0
   552
				INFO_PRINTF1(_L("State: EStateTonePlaying"));
sl@0
   553
				iState = EStateTonePlaying;
sl@0
   554
sl@0
   555
				}
sl@0
   556
			else if (aDevSoundEvent == EEventInitCompleteTone && aError != KErrNone)
sl@0
   557
				{
sl@0
   558
				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error = %d"), aError);
sl@0
   559
				StopTest(aError);
sl@0
   560
				}
sl@0
   561
			else
sl@0
   562
				{
sl@0
   563
				ERR_PRINTF2(_L("DevSound EEventInitCompleteTone not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   564
				StopTest(aError, EFail);
sl@0
   565
				}
sl@0
   566
sl@0
   567
			break;
sl@0
   568
sl@0
   569
			}
sl@0
   570
sl@0
   571
		default:
sl@0
   572
			{
sl@0
   573
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
   574
			StopTest(KErrGeneral);
sl@0
   575
			}
sl@0
   576
		}
sl@0
   577
sl@0
   578
	}
sl@0
   579
sl@0
   580
//
sl@0
   581
// RStepA3FDevSoundInitializeWhileTonePlaying
sl@0
   582
//
sl@0
   583
sl@0
   584
/*
sl@0
   585
 *
sl@0
   586
 * RStepA3FDevSoundInitializeWhileTonePlaying - Test step constructor
sl@0
   587
 *
sl@0
   588
 */
sl@0
   589
RStepA3FDevSoundInitializeWhileTonePlaying::RStepA3FDevSoundInitializeWhileTonePlaying(const TDesC& aTestName)
sl@0
   590
:RTestStepA3FDevSoundToneBase(aTestName)
sl@0
   591
	{
sl@0
   592
	}
sl@0
   593
sl@0
   594
/*
sl@0
   595
 *
sl@0
   596
 * NewL
sl@0
   597
 *
sl@0
   598
 */
sl@0
   599
RStepA3FDevSoundInitializeWhileTonePlaying* RStepA3FDevSoundInitializeWhileTonePlaying::NewL(const TDesC& aTestName)
sl@0
   600
	{
sl@0
   601
	RStepA3FDevSoundInitializeWhileTonePlaying* self = new (ELeave) RStepA3FDevSoundInitializeWhileTonePlaying(aTestName);
sl@0
   602
	return self;
sl@0
   603
sl@0
   604
	}
sl@0
   605
sl@0
   606
/*
sl@0
   607
 *
sl@0
   608
 * DoKickoffTestL
sl@0
   609
 *
sl@0
   610
 */
sl@0
   611
void RStepA3FDevSoundInitializeWhileTonePlaying::DoKickoffTestL()
sl@0
   612
	{
sl@0
   613
	}
sl@0
   614
sl@0
   615
/*
sl@0
   616
 *
sl@0
   617
 * Fsm
sl@0
   618
 *
sl@0
   619
 */
sl@0
   620
void RStepA3FDevSoundInitializeWhileTonePlaying::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
   621
	{
sl@0
   622
	switch (iState)
sl@0
   623
		{
sl@0
   624
		case EStateToneStart:
sl@0
   625
			{
sl@0
   626
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundInitializeWhileTonePlaying"),EFsmIncorrectErrorPassed));
sl@0
   627
			if (aDevSoundEvent == EEventToneStart)
sl@0
   628
				{
sl@0
   629
				// Initializing DevSound object for tone play
sl@0
   630
				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
sl@0
   631
				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
   632
				if (err != KErrNone)
sl@0
   633
					{
sl@0
   634
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
sl@0
   635
					StopTest(err);
sl@0
   636
					break;
sl@0
   637
					}
sl@0
   638
				INFO_PRINTF1(_L("State: EStateToneInitializing"));
sl@0
   639
				iState = EStateToneInitializing;
sl@0
   640
				}
sl@0
   641
			else
sl@0
   642
				{
sl@0
   643
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   644
				StopTest(aError, EFail);
sl@0
   645
				}
sl@0
   646
sl@0
   647
			break;
sl@0
   648
sl@0
   649
			}
sl@0
   650
sl@0
   651
		case EStateToneInitializing:
sl@0
   652
			{
sl@0
   653
			if (aDevSoundEvent == EEventInitCompleteTone && aError == KErrNone)
sl@0
   654
				{
sl@0
   655
				TTimeIntervalMicroSeconds duration(KMicroSecsInTenSecs);
sl@0
   656
				// Initialize the audio device and start playing a tone
sl@0
   657
				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayToneL"));
sl@0
   658
				TRAPD(err, iMMFDevSound->PlayToneL(KFrequency1, duration));
sl@0
   659
				if (err != KErrNone)
sl@0
   660
					{
sl@0
   661
					ERR_PRINTF2(_L("CMMFDevSound::PlayToneL left with error = %d"), err);
sl@0
   662
					StopTest(err);
sl@0
   663
					break;
sl@0
   664
					}
sl@0
   665
				INFO_PRINTF1(_L("State: EStateTonePlaying"));
sl@0
   666
				iState = EStateTonePlaying;
sl@0
   667
sl@0
   668
				// Calling CMMFDevSound::InitializeL again while tone playing!
sl@0
   669
				INFO_PRINTF1(_L("CMMFDevSound::InitializeL called again while tone playing!"));
sl@0
   670
				TRAP(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
   671
				if (err == KErrNotReady)
sl@0
   672
					{
sl@0
   673
					INFO_PRINTF2(_L("CMMFDevSound::InitializeL left as expected with error = %d"), err);
sl@0
   674
					StopTest(err,EPass);
sl@0
   675
					}
sl@0
   676
				else
sl@0
   677
					{
sl@0
   678
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL did NOT leave with KErrNotReady as expected. Error = %d"), err);
sl@0
   679
					StopTest(KErrUnknown);
sl@0
   680
					}
sl@0
   681
				}
sl@0
   682
			else if (aDevSoundEvent == EEventInitCompleteTone && aError != KErrNone)
sl@0
   683
				{
sl@0
   684
				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error = %d"), aError);
sl@0
   685
				StopTest(aError);
sl@0
   686
				}
sl@0
   687
			else
sl@0
   688
				{
sl@0
   689
				ERR_PRINTF2(_L("DevSound EEventInitCompleteTone not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   690
				StopTest(aError, EFail);
sl@0
   691
				}
sl@0
   692
sl@0
   693
			break;
sl@0
   694
sl@0
   695
			}
sl@0
   696
sl@0
   697
		default:
sl@0
   698
			{
sl@0
   699
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
   700
			StopTest(KErrGeneral);
sl@0
   701
			}
sl@0
   702
		}
sl@0
   703
sl@0
   704
	}
sl@0
   705
sl@0
   706
//
sl@0
   707
// RStepA3FDevSoundNotSupportedPlayFixedSeq
sl@0
   708
//
sl@0
   709
sl@0
   710
/*
sl@0
   711
 *
sl@0
   712
 * RStepA3FDevSoundNotSupportedPlayFixedSeq - Test step constructor
sl@0
   713
 *
sl@0
   714
 */
sl@0
   715
RStepA3FDevSoundNotSupportedPlayFixedSeq::RStepA3FDevSoundNotSupportedPlayFixedSeq(const TDesC& aTestName)
sl@0
   716
:RTestStepA3FDevSoundToneBase(aTestName)
sl@0
   717
	{
sl@0
   718
	}
sl@0
   719
sl@0
   720
/*
sl@0
   721
 *
sl@0
   722
 * NewL
sl@0
   723
 *
sl@0
   724
 */
sl@0
   725
RStepA3FDevSoundNotSupportedPlayFixedSeq* RStepA3FDevSoundNotSupportedPlayFixedSeq::NewL(const TDesC& aTestName)
sl@0
   726
	{
sl@0
   727
	RStepA3FDevSoundNotSupportedPlayFixedSeq* self = new (ELeave) RStepA3FDevSoundNotSupportedPlayFixedSeq(aTestName);
sl@0
   728
	return self;
sl@0
   729
sl@0
   730
	}
sl@0
   731
sl@0
   732
/*
sl@0
   733
 *
sl@0
   734
 * DoKickoffTestL
sl@0
   735
 *
sl@0
   736
 */
sl@0
   737
void RStepA3FDevSoundNotSupportedPlayFixedSeq::DoKickoffTestL()
sl@0
   738
	{
sl@0
   739
	}
sl@0
   740
sl@0
   741
/*
sl@0
   742
 *
sl@0
   743
 * Fsm
sl@0
   744
 *
sl@0
   745
 */
sl@0
   746
void RStepA3FDevSoundNotSupportedPlayFixedSeq::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
   747
	{
sl@0
   748
	switch (iState)
sl@0
   749
		{
sl@0
   750
		case EStateToneStart:
sl@0
   751
			{
sl@0
   752
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundNotSupportedPlayFixedSeq"),EFsmIncorrectErrorPassed));
sl@0
   753
			if (aDevSoundEvent == EEventToneStart)
sl@0
   754
				{
sl@0
   755
				// Initializing DevSound object for tone play
sl@0
   756
				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
sl@0
   757
				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
   758
				if (err != KErrNone)
sl@0
   759
					{
sl@0
   760
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
sl@0
   761
					StopTest(err);
sl@0
   762
					break;
sl@0
   763
					}
sl@0
   764
				INFO_PRINTF1(_L("State: EStateToneInitializing"));
sl@0
   765
				iState = EStateToneInitializing;
sl@0
   766
				}
sl@0
   767
			else
sl@0
   768
				{
sl@0
   769
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   770
				StopTest(aError, EFail);
sl@0
   771
				}
sl@0
   772
sl@0
   773
			break;
sl@0
   774
sl@0
   775
			}
sl@0
   776
sl@0
   777
		case EStateToneInitializing:
sl@0
   778
			{
sl@0
   779
			if (aDevSoundEvent == EEventInitCompleteTone && aError == KErrNone)
sl@0
   780
				{
sl@0
   781
				TInt seqCount = iMMFDevSound->FixedSequenceCount();
sl@0
   782
				if (seqCount != 0)
sl@0
   783
					{
sl@0
   784
					ERR_PRINTF2(_L("CMMFDevSound::FixedSequenceCount() did not return 0 as always expected. It returned %d instead!"), seqCount);
sl@0
   785
					}
sl@0
   786
				else
sl@0
   787
					{
sl@0
   788
					INFO_PRINTF1(_L("CMMFDevSound::FixedSequenceCount() call returned 0 as always expected"));
sl@0
   789
					}
sl@0
   790
				// Initialize the audio device and start playing the specified pre-defined tone sequence.
sl@0
   791
				INFO_PRINTF1(_L("Calling the not supported CMMFDevSound::PlayFixedSequenceL"));
sl@0
   792
				TRAPD(err, iMMFDevSound->PlayFixedSequenceL(0));
sl@0
   793
				if (err == KErrNotSupported)
sl@0
   794
					{
sl@0
   795
					INFO_PRINTF2(_L("CMMFDevSound::PlayFixedSequenceL left as expected with error = %d"), err);
sl@0
   796
					StopTest(err,EPass);
sl@0
   797
					}
sl@0
   798
				else
sl@0
   799
					{
sl@0
   800
					ERR_PRINTF2(_L("CMMFDevSound::PlayFixedSequenceL did NOT leave with KErrNotSupported as expected. Error = %d"), err);
sl@0
   801
					StopTest(KErrUnknown);
sl@0
   802
					}
sl@0
   803
				}
sl@0
   804
			else if (aDevSoundEvent == EEventInitCompleteTone && aError != KErrNone)
sl@0
   805
				{
sl@0
   806
				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error = %d"), aError);
sl@0
   807
				StopTest(aError);
sl@0
   808
				}
sl@0
   809
			else
sl@0
   810
				{
sl@0
   811
				ERR_PRINTF2(_L("DevSound EEventInitCompleteTone not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   812
				StopTest(aError, EFail);
sl@0
   813
				}
sl@0
   814
sl@0
   815
			break;
sl@0
   816
sl@0
   817
			}
sl@0
   818
sl@0
   819
		default:
sl@0
   820
			{
sl@0
   821
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
   822
			StopTest(KErrGeneral);
sl@0
   823
			}
sl@0
   824
		}
sl@0
   825
sl@0
   826
	}
sl@0
   827
sl@0
   828
//
sl@0
   829
// RStepA3FDevSoundInvalidInitializeForTone
sl@0
   830
//
sl@0
   831
sl@0
   832
/*
sl@0
   833
 *
sl@0
   834
 * RStepA3FDevSoundInvalidInitializeForTone - Test step constructor
sl@0
   835
 *
sl@0
   836
 */
sl@0
   837
RStepA3FDevSoundInvalidInitializeForTone::RStepA3FDevSoundInvalidInitializeForTone(const TDesC& aTestName)
sl@0
   838
:RTestStepA3FDevSoundToneBase(aTestName)
sl@0
   839
	{
sl@0
   840
	}
sl@0
   841
sl@0
   842
/*
sl@0
   843
 *
sl@0
   844
 * NewL
sl@0
   845
 *
sl@0
   846
 */
sl@0
   847
RStepA3FDevSoundInvalidInitializeForTone* RStepA3FDevSoundInvalidInitializeForTone::NewL(const TDesC& aTestName)
sl@0
   848
	{
sl@0
   849
	RStepA3FDevSoundInvalidInitializeForTone* self = new (ELeave) RStepA3FDevSoundInvalidInitializeForTone(aTestName);
sl@0
   850
	return self;
sl@0
   851
sl@0
   852
	}
sl@0
   853
sl@0
   854
/*
sl@0
   855
 *
sl@0
   856
 * DoKickoffTestL
sl@0
   857
 *
sl@0
   858
 */
sl@0
   859
void RStepA3FDevSoundInvalidInitializeForTone::DoKickoffTestL()
sl@0
   860
	{
sl@0
   861
	}
sl@0
   862
sl@0
   863
/*
sl@0
   864
 *
sl@0
   865
 * Fsm
sl@0
   866
 *
sl@0
   867
 */
sl@0
   868
void RStepA3FDevSoundInvalidInitializeForTone::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
   869
	{
sl@0
   870
	switch (iState)
sl@0
   871
		{
sl@0
   872
		case EStateToneStart:
sl@0
   873
			{
sl@0
   874
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundInvalidInitializeForTone"),EFsmIncorrectErrorPassed));
sl@0
   875
			if (aDevSoundEvent == EEventToneStart)
sl@0
   876
				{
sl@0
   877
				TFourCC fourCCCodeMP3(KMMFFourCCCodeMP3);
sl@0
   878
				// Initializing DevSound object for tone play using invalid version of CMMFDevSound::InitializeL
sl@0
   879
				INFO_PRINTF1(_L("Calling invalid version of CMMFDevSound::InitializeL for tone play..."));
sl@0
   880
				TRAPD(err, iMMFDevSound->InitializeL(*this, fourCCCodeMP3, EMMFStateTonePlaying));
sl@0
   881
				if (err == KErrNotSupported)
sl@0
   882
					{
sl@0
   883
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left as expected with error = %d"), err);
sl@0
   884
					StopTest(err,EPass);
sl@0
   885
					}
sl@0
   886
				else
sl@0
   887
					{
sl@0
   888
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL did NOT leave with KErrNotSupported as expected. Error = %d"), err);
sl@0
   889
					StopTest(KErrUnknown);
sl@0
   890
					}
sl@0
   891
				}
sl@0
   892
			else
sl@0
   893
				{
sl@0
   894
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
   895
				StopTest(aError, EFail);
sl@0
   896
				}
sl@0
   897
sl@0
   898
			break;
sl@0
   899
sl@0
   900
			}
sl@0
   901
sl@0
   902
		default:
sl@0
   903
			{
sl@0
   904
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
   905
			StopTest(KErrGeneral);
sl@0
   906
			}
sl@0
   907
		}
sl@0
   908
sl@0
   909
	}
sl@0
   910
sl@0
   911
//
sl@0
   912
// RStepA3FDevSoundCancelInitializeTone
sl@0
   913
//
sl@0
   914
sl@0
   915
/*
sl@0
   916
 *
sl@0
   917
 * RStepA3FDevSoundCancelInitializeTone - Test step constructor
sl@0
   918
 *
sl@0
   919
 */
sl@0
   920
RStepA3FDevSoundCancelInitializeTone::RStepA3FDevSoundCancelInitializeTone(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   921
:RTestStepA3FDevSoundToneBase(aTestName, aSectName)
sl@0
   922
	{
sl@0
   923
	}
sl@0
   924
sl@0
   925
/*
sl@0
   926
 *
sl@0
   927
 * NewL
sl@0
   928
 *
sl@0
   929
 */
sl@0
   930
RStepA3FDevSoundCancelInitializeTone* RStepA3FDevSoundCancelInitializeTone::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
   931
	{
sl@0
   932
	RStepA3FDevSoundCancelInitializeTone* self = new (ELeave) RStepA3FDevSoundCancelInitializeTone(aTestName, aSectName);
sl@0
   933
	return self;
sl@0
   934
sl@0
   935
	}
sl@0
   936
sl@0
   937
/*
sl@0
   938
 *
sl@0
   939
 * DoKickoffTestL
sl@0
   940
 *
sl@0
   941
 */
sl@0
   942
void RStepA3FDevSoundCancelInitializeTone::DoKickoffTestL()
sl@0
   943
	{
sl@0
   944
	}
sl@0
   945
	
sl@0
   946
/*
sl@0
   947
 *
sl@0
   948
 * InitializeComplete
sl@0
   949
 *
sl@0
   950
 */
sl@0
   951
void RStepA3FDevSoundCancelInitializeTone::InitializeComplete(TInt aError)
sl@0
   952
	{
sl@0
   953
	INFO_PRINTF1(_L("InitializeComplete callback was received. This is not the expected behaviour"));
sl@0
   954
	INFO_PRINTF1(_L("InitializeL was not cancelled"));
sl@0
   955
	StopTest(aError, EFail);
sl@0
   956
	}
sl@0
   957
sl@0
   958
/*
sl@0
   959
 *
sl@0
   960
 * DoTimerCallback
sl@0
   961
 *
sl@0
   962
 */
sl@0
   963
void RStepA3FDevSoundCancelInitializeTone::DoTimerCallback()
sl@0
   964
	{
sl@0
   965
	iTimer->Cancel(); // only really wanted a one-shot
sl@0
   966
	INFO_PRINTF1(_L("InitializeComplete callback was not received. This is the expected behaviour"));
sl@0
   967
	INFO_PRINTF1(_L("Use SetConfigL to verify that DevSound has not been initialised"));
sl@0
   968
	TMMFCapabilities capabilities;
sl@0
   969
sl@0
   970
	if(!GetStringFromConfig(iSectName, _L("SampleRate"), iSampleRate))
sl@0
   971
		{
sl@0
   972
		TPtrC keyName(_L("SampleRate"));
sl@0
   973
		ERR_PRINTF3(_L("Error in getting sample rate from config file in %S section via the %S key field."), &iSectName, &keyName);
sl@0
   974
		StopTest(KErrPathNotFound);
sl@0
   975
		return;
sl@0
   976
		}
sl@0
   977
sl@0
   978
	capabilities.iRate = ConvertDesToTMMFSampleRate(iSampleRate);
sl@0
   979
	TRAPD(errConfig, iMMFDevSound->SetConfigL(capabilities));	
sl@0
   980
	if(errConfig == KErrNotReady)
sl@0
   981
		{
sl@0
   982
		INFO_PRINTF2(_L("SetConfigL returned with %d as expected"), errConfig);
sl@0
   983
		INFO_PRINTF1(_L("InitializeL was cancelled successfully"));
sl@0
   984
		StopTest(KErrNone);
sl@0
   985
		}
sl@0
   986
	else if (errConfig == KErrNone)
sl@0
   987
		{
sl@0
   988
		INFO_PRINTF2(_L("SetConfigL returned with KErrNone %d"), errConfig);
sl@0
   989
		INFO_PRINTF1(_L("InitializeL was not cancelled successfully"));
sl@0
   990
		StopTest(errConfig, EFail);
sl@0
   991
		}
sl@0
   992
	else
sl@0
   993
		{
sl@0
   994
		INFO_PRINTF2(_L("SetConfigL returned with unexpected error %d"), errConfig);
sl@0
   995
		StopTest(errConfig, EFail);
sl@0
   996
		}
sl@0
   997
	}
sl@0
   998
	
sl@0
   999
/*
sl@0
  1000
 *
sl@0
  1001
 * Fsm
sl@0
  1002
 *	- Executes Toneing events of DevSound in sequence
sl@0
  1003
 *
sl@0
  1004
 */
sl@0
  1005
void RStepA3FDevSoundCancelInitializeTone::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
  1006
	{
sl@0
  1007
	switch (iState)
sl@0
  1008
		{
sl@0
  1009
		case EStateToneStart:
sl@0
  1010
			{
sl@0
  1011
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundCancelInitializeTone"),EFsmIncorrectErrorPassed));
sl@0
  1012
			if (aDevSoundEvent == EEventToneStart)
sl@0
  1013
				{
sl@0
  1014
				// Initializing DevSound object for TonePlaying mode
sl@0
  1015
				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
sl@0
  1016
				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
  1017
				if (err != KErrNone)
sl@0
  1018
					{
sl@0
  1019
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
sl@0
  1020
					StopTest(err);
sl@0
  1021
					break;
sl@0
  1022
					}
sl@0
  1023
				else
sl@0
  1024
					{
sl@0
  1025
					INFO_PRINTF1(_L("State: EStateToneInitializing"));
sl@0
  1026
					iState = EStateToneInitializing;					
sl@0
  1027
					INFO_PRINTF1(_L("Calling CMMFDevSound::CancelInitialize()"));
sl@0
  1028
					iMMFDevSound->CancelInitialize();
sl@0
  1029
					INFO_PRINTF1(_L("Start timer to wait for InitializeComplete"));
sl@0
  1030
					TCallBack callback (TimerCallback, this);
sl@0
  1031
					iTimer->Start(KMicroSecsInTenSecs, 0, callback);
sl@0
  1032
					}
sl@0
  1033
				}
sl@0
  1034
			else
sl@0
  1035
				{
sl@0
  1036
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
  1037
				StopTest(aError, EFail);
sl@0
  1038
				}
sl@0
  1039
			break;
sl@0
  1040
			}
sl@0
  1041
		default:
sl@0
  1042
			{
sl@0
  1043
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
  1044
			StopTest(KErrGeneral);
sl@0
  1045
			}
sl@0
  1046
		}
sl@0
  1047
sl@0
  1048
	}
sl@0
  1049
sl@0
  1050
//
sl@0
  1051
// RStepA3FDevSoundEmptyBuffersInitializedForTone
sl@0
  1052
//
sl@0
  1053
sl@0
  1054
/*
sl@0
  1055
 *
sl@0
  1056
 * RStepA3FDevSoundInitializeWhileTonePlaying - Test step constructor
sl@0
  1057
 *
sl@0
  1058
 */
sl@0
  1059
RStepA3FDevSoundEmptyBuffersInitializedForTone::RStepA3FDevSoundEmptyBuffersInitializedForTone(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1060
:RTestStepA3FDevSoundToneBase(aTestName, aSectName)
sl@0
  1061
	{
sl@0
  1062
	}
sl@0
  1063
sl@0
  1064
/*
sl@0
  1065
 *
sl@0
  1066
 * NewL
sl@0
  1067
 *
sl@0
  1068
 */
sl@0
  1069
RStepA3FDevSoundEmptyBuffersInitializedForTone* RStepA3FDevSoundEmptyBuffersInitializedForTone::NewL(const TDesC& aTestName, const TDesC& aSectName)
sl@0
  1070
	{
sl@0
  1071
	RStepA3FDevSoundEmptyBuffersInitializedForTone* self = new (ELeave) RStepA3FDevSoundEmptyBuffersInitializedForTone(aTestName, aSectName);
sl@0
  1072
	return self;
sl@0
  1073
sl@0
  1074
	}
sl@0
  1075
sl@0
  1076
/*
sl@0
  1077
 *
sl@0
  1078
 * DoKickoffTestL
sl@0
  1079
 *
sl@0
  1080
 */
sl@0
  1081
void RStepA3FDevSoundEmptyBuffersInitializedForTone::DoKickoffTestL()
sl@0
  1082
	{
sl@0
  1083
	}
sl@0
  1084
	
sl@0
  1085
/*
sl@0
  1086
 *
sl@0
  1087
 * Fsm
sl@0
  1088
 *
sl@0
  1089
 */
sl@0
  1090
void RStepA3FDevSoundEmptyBuffersInitializedForTone::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
  1091
	{
sl@0
  1092
	switch (iState)
sl@0
  1093
		{
sl@0
  1094
		case EStateToneStart:
sl@0
  1095
			{
sl@0
  1096
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundInitializeWhileTonePlaying"),EFsmIncorrectErrorPassed));
sl@0
  1097
			if (aDevSoundEvent == EEventToneStart)
sl@0
  1098
				{
sl@0
  1099
				// Initializing DevSound object for tone play
sl@0
  1100
				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
sl@0
  1101
				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
  1102
				if (err != KErrNone)
sl@0
  1103
					{
sl@0
  1104
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
sl@0
  1105
					StopTest(err);
sl@0
  1106
					break;
sl@0
  1107
					}
sl@0
  1108
				INFO_PRINTF1(_L("State: EStateToneInitializing"));
sl@0
  1109
				iState = EStateToneInitializing;
sl@0
  1110
				}
sl@0
  1111
			else
sl@0
  1112
				{
sl@0
  1113
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
  1114
				StopTest(aError, EFail);
sl@0
  1115
				}
sl@0
  1116
sl@0
  1117
			break;
sl@0
  1118
sl@0
  1119
			}
sl@0
  1120
sl@0
  1121
		case EStateToneInitializing:
sl@0
  1122
			{
sl@0
  1123
			if (aDevSoundEvent == EEventInitCompleteTone && aError == KErrNone)
sl@0
  1124
				{
sl@0
  1125
				// Calling EmptyBuffers
sl@0
  1126
				INFO_PRINTF1(_L("Calling CMMFDevSound::EmptyBuffers()"));
sl@0
  1127
				TInt err;
sl@0
  1128
				err = iMMFDevSound->EmptyBuffers();
sl@0
  1129
				if (err == KErrNotSupported)
sl@0
  1130
					{
sl@0
  1131
					ERR_PRINTF2(_L("CMMFDevSound::EmptyBuffers() returned expected error = %d"), err);
sl@0
  1132
					StopTest();
sl@0
  1133
					}
sl@0
  1134
				else
sl@0
  1135
					{
sl@0
  1136
					ERR_PRINTF2(_L("CMMFDevSound::EmptyBuffers() did not return KErrNotSupported as expected. Returned with unexpected error = %d"), err);
sl@0
  1137
					StopTest(err);
sl@0
  1138
					}
sl@0
  1139
				}
sl@0
  1140
			else if (aDevSoundEvent == EEventInitCompleteTone && aError != KErrNone)
sl@0
  1141
				{
sl@0
  1142
				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error = %d"), aError);
sl@0
  1143
				StopTest(aError);
sl@0
  1144
				}
sl@0
  1145
			else
sl@0
  1146
				{
sl@0
  1147
				ERR_PRINTF2(_L("DevSound EEventInitCompleteTone not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
  1148
				StopTest(aError, EFail);
sl@0
  1149
				}
sl@0
  1150
sl@0
  1151
			break;
sl@0
  1152
sl@0
  1153
			}
sl@0
  1154
sl@0
  1155
		default:
sl@0
  1156
			{
sl@0
  1157
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
  1158
			StopTest(KErrGeneral);
sl@0
  1159
			}
sl@0
  1160
		}
sl@0
  1161
	}
sl@0
  1162
sl@0
  1163
//
sl@0
  1164
// RStepA3FDevSoundEmptyBuffersWhileTonePlaying
sl@0
  1165
//
sl@0
  1166
sl@0
  1167
/*
sl@0
  1168
 *
sl@0
  1169
 * RStepA3FDevSoundEmptyBuffersWhileTonePlaying - Test step constructor
sl@0
  1170
 *
sl@0
  1171
 */
sl@0
  1172
RStepA3FDevSoundEmptyBuffersWhileTonePlaying::RStepA3FDevSoundEmptyBuffersWhileTonePlaying(const TDesC& aTestName)
sl@0
  1173
:RTestStepA3FDevSoundToneBase(aTestName)
sl@0
  1174
	{
sl@0
  1175
	}
sl@0
  1176
sl@0
  1177
/*
sl@0
  1178
 *
sl@0
  1179
 * NewL
sl@0
  1180
 *
sl@0
  1181
 */
sl@0
  1182
RStepA3FDevSoundEmptyBuffersWhileTonePlaying* RStepA3FDevSoundEmptyBuffersWhileTonePlaying::NewL(const TDesC& aTestName)
sl@0
  1183
	{
sl@0
  1184
	RStepA3FDevSoundEmptyBuffersWhileTonePlaying* self = new (ELeave) RStepA3FDevSoundEmptyBuffersWhileTonePlaying(aTestName);
sl@0
  1185
	return self;
sl@0
  1186
sl@0
  1187
	}
sl@0
  1188
sl@0
  1189
/*
sl@0
  1190
 *
sl@0
  1191
 * DoKickoffTestL
sl@0
  1192
 *
sl@0
  1193
 */
sl@0
  1194
void RStepA3FDevSoundEmptyBuffersWhileTonePlaying::DoKickoffTestL()
sl@0
  1195
	{
sl@0
  1196
	}
sl@0
  1197
sl@0
  1198
/*
sl@0
  1199
 *
sl@0
  1200
 * Fsm
sl@0
  1201
 *
sl@0
  1202
 */
sl@0
  1203
void RStepA3FDevSoundEmptyBuffersWhileTonePlaying::Fsm(TDevSoundToneEvents aDevSoundEvent, TInt aError)
sl@0
  1204
	{
sl@0
  1205
	switch (iState)
sl@0
  1206
		{
sl@0
  1207
		case EStateToneStart:
sl@0
  1208
			{
sl@0
  1209
			__ASSERT_ALWAYS((aError == KErrNone),Panic(_L("RStepA3FDevSoundEmptyBuffersWhileTonePlaying"),EFsmIncorrectErrorPassed));
sl@0
  1210
			if (aDevSoundEvent == EEventToneStart)
sl@0
  1211
				{
sl@0
  1212
				// Initializing DevSound object for tone play
sl@0
  1213
				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
sl@0
  1214
				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
sl@0
  1215
				if (err != KErrNone)
sl@0
  1216
					{
sl@0
  1217
					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
sl@0
  1218
					StopTest(err);
sl@0
  1219
					break;
sl@0
  1220
					}
sl@0
  1221
				INFO_PRINTF1(_L("State: EStateToneInitializing"));
sl@0
  1222
				iState = EStateToneInitializing;
sl@0
  1223
				}
sl@0
  1224
			else
sl@0
  1225
				{
sl@0
  1226
				ERR_PRINTF2(_L("DevSound EEventToneStart not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
  1227
				StopTest(aError, EFail);
sl@0
  1228
				}
sl@0
  1229
sl@0
  1230
			break;
sl@0
  1231
sl@0
  1232
			}
sl@0
  1233
sl@0
  1234
		case EStateToneInitializing:
sl@0
  1235
			{
sl@0
  1236
			if (aDevSoundEvent == EEventInitCompleteTone && aError == KErrNone)
sl@0
  1237
				{
sl@0
  1238
				TTimeIntervalMicroSeconds duration(KMicroSecsInTenSecs);
sl@0
  1239
				// Initialize the audio device and start playing a tone
sl@0
  1240
				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayToneL"));
sl@0
  1241
				TRAPD(err, iMMFDevSound->PlayToneL(KFrequency1, duration));
sl@0
  1242
				if (err != KErrNone)
sl@0
  1243
					{
sl@0
  1244
					ERR_PRINTF2(_L("CMMFDevSound::PlayToneL left with error = %d"), err);
sl@0
  1245
					StopTest(err);
sl@0
  1246
					break;
sl@0
  1247
					}
sl@0
  1248
				INFO_PRINTF1(_L("State: EStateTonePlaying"));
sl@0
  1249
				iState = EStateTonePlaying;
sl@0
  1250
sl@0
  1251
				// Calling CMMFDevSound::EmptyBuffers while tone playing
sl@0
  1252
				INFO_PRINTF1(_L("CMMFDevSound::EmptyBuffers called while tone playing"));
sl@0
  1253
				err = iMMFDevSound->EmptyBuffers();
sl@0
  1254
				if (err == KErrNotSupported)
sl@0
  1255
					{
sl@0
  1256
					INFO_PRINTF2(_L("CMMFDevSound::EmptyBuffers left as expected with error = %d"), err);
sl@0
  1257
					StopTest(err,EPass);
sl@0
  1258
					}
sl@0
  1259
				else
sl@0
  1260
					{
sl@0
  1261
					ERR_PRINTF2(_L("CMMFDevSound::EmptyBuffers did NOT leave with KErrNotSupported as expected. Error = %d"), err);
sl@0
  1262
					StopTest(KErrUnknown);
sl@0
  1263
					}
sl@0
  1264
				}
sl@0
  1265
			else if (aDevSoundEvent == EEventInitCompleteTone && aError != KErrNone)
sl@0
  1266
				{
sl@0
  1267
				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error = %d"), aError);
sl@0
  1268
				StopTest(aError);
sl@0
  1269
				}
sl@0
  1270
			else
sl@0
  1271
				{
sl@0
  1272
				ERR_PRINTF2(_L("DevSound EEventInitCompleteTone not received as expected. Received event: %d"), aDevSoundEvent);
sl@0
  1273
				StopTest(aError, EFail);
sl@0
  1274
				}
sl@0
  1275
sl@0
  1276
			break;
sl@0
  1277
sl@0
  1278
			}
sl@0
  1279
sl@0
  1280
		default:
sl@0
  1281
			{
sl@0
  1282
			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iState);
sl@0
  1283
			StopTest(KErrGeneral);
sl@0
  1284
			}
sl@0
  1285
		}
sl@0
  1286
sl@0
  1287
	}