devsound/a3fcharacterisationtest/src/char_a3f_devsound_playtest.cpp
changeset 24 2672ba96448e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsound/a3fcharacterisationtest/src/char_a3f_devsound_playtest.cpp	Fri Jun 11 15:13:33 2010 +0300
@@ -0,0 +1,6539 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+// User includes
+#include "char_a3f_devsound_playtest.h"
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0001
+ */
+RA3FDevSoundPlaySetConfigTest::RA3FDevSoundPlaySetConfigTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iSampleRate(0),
+	iChannels(0)
+	{
+	}
+
+RA3FDevSoundPlaySetConfigTest* RA3FDevSoundPlaySetConfigTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetConfigTest* self = new (ELeave) RA3FDevSoundPlaySetConfigTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetConfigTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KSampleRate, iSampleRate))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KSampleRate);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KChannel, iChannels))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KChannel);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlaySetConfigTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetConfigLTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFCapabilities capabilitiesSet;
+				TBuf<KMaxSampleRateStringLength> stringSampleRateSet;
+				TBuf<KMaxChannelsStringLength> stringChannelsSet;
+				SampleRateFromTIntToTMMFSampleRate (iSampleRate, iESampleRate);
+				capabilitiesSet.iRate = iESampleRate;
+				capabilitiesSet.iChannels = iChannels;
+				SampleRateFromTUintToString (capabilitiesSet.iRate,	stringSampleRateSet);
+				ChannelsFromTUintToString (capabilitiesSet.iChannels, stringChannelsSet);
+				INFO_PRINTF3(_L("Settings for Sample rate an channel mode : %S %S"), &stringSampleRateSet, &stringChannelsSet);
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SetConfigL"));
+				TRAPD(err, iMMFDevSound->SetConfigL(capabilitiesSet));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::SetConfigL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				TMMFCapabilities capabilitiesGet;
+				TBuf<KMaxSampleRateStringLength> stringSampleRateGet;
+				TBuf<KMaxChannelsStringLength> stringChannelsGet;
+				capabilitiesGet=iMMFDevSound->Config ();
+				SampleRateFromTUintToString (capabilitiesGet.iRate, stringSampleRateGet);
+				ChannelsFromTUintToString (capabilitiesGet.iChannels, stringChannelsGet);
+				if (capabilitiesGet.iRate != capabilitiesSet.iRate || capabilitiesGet.iChannels != capabilitiesSet.iChannels)
+					{
+					ERR_PRINTF3(_L("Retrieved sample rate and channel : %S %S"), &stringSampleRateGet, &stringChannelsGet);
+					ERR_PRINTF3(_L("Expected %S %S"), &stringSampleRateSet, &stringChannelsSet);
+					StopTest(aError, EFail);
+					break;
+					}
+				INFO_PRINTF1(_L("========== Test Case Successfully Completed =========="));
+				StopTest();
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error : %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0002
+ */
+RA3FDevSoundPlaySetVolumeWhilePlayingTest::RA3FDevSoundPlaySetVolumeWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iVolume(0),
+	iFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlaySetVolumeWhilePlayingTest* RA3FDevSoundPlaySetVolumeWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetVolumeWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlaySetVolumeWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetVolumeWhilePlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest (KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy (filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	if (!GetIntFromConfig(iTestStepName, KVolume, iVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KVolume);
+		StopTest (KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlaySetVolumeWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumePlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error: %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with: %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize ())
+					{
+					iBuffer->SetLastBuffer (ETrue);
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData ();
+				}
+
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SetVolume"));
+				iMMFDevSound->SetVolume(iVolume);
+				TInt volumeGet;
+				volumeGet=iMMFDevSound->Volume();
+				if (volumeGet == iVolume)
+					{
+					INFO_PRINTF2(_L("CMMFDevSound::SetVolume during playback succeeded with %d"), volumeGet);
+					}
+				else
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::SetVolume during playback failed with %d"), volumeGet);
+					ERR_PRINTF2(_L("Expected value = %d"), iVolume);
+					StopTest(aError, EFail);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlaySetVolumeWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm (EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0003
+ */
+RA3FDevSoundPlaySetVolumeTest::RA3FDevSoundPlaySetVolumeTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iVolume(0)
+	{
+	}
+
+RA3FDevSoundPlaySetVolumeTest* RA3FDevSoundPlaySetVolumeTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetVolumeTest* self = new (ELeave) RA3FDevSoundPlaySetVolumeTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetVolumeTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KVolume, iVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KVolume);
+		StopTest(KErrNotFound);
+		return;
+		}
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlaySetVolumeTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumeTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SetVolume"));
+				iMMFDevSound->SetVolume(iVolume);
+				TInt volumeGet;
+				volumeGet = iMMFDevSound->Volume();
+				if (volumeGet == iVolume)
+					{
+					INFO_PRINTF2(_L("CMMFDevSound::SetVolume succeeded with %d"), volumeGet);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::SetVolume failed with %d"), volumeGet);
+					ERR_PRINTF2(_L("Expected value = %d"), iVolume);
+					StopTest(aError, EFail);
+					}
+				}
+		else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0004
+ */
+RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest::RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iVolume(0)
+	{
+	}
+
+RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest* RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest* self = new (ELeave) RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	if (!GetIntFromConfig(iTestStepName, KVolume, iVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KVolume);
+		StopTest(KErrNotFound);
+		return;
+		}
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if ( err != KErrNone)
+					{
+					StopTest (err);
+					break;
+					}
+				StartTimer (KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest (aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer (ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Pause"));
+				iMMFDevSound->Pause();
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SetVolume"));
+				iMMFDevSound->SetVolume(iVolume);
+				TInt volumeGet;
+				volumeGet=iMMFDevSound->Volume ();
+				if (volumeGet == iVolume)
+					{
+					INFO_PRINTF2(_L("CMMFDevSound::SetVolume succeeded with %d"), volumeGet);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::SetVolume failed with %d"), volumeGet);
+					ERR_PRINTF2(_L("Expected volume: %d"), iVolume);
+					StopTest(aError, EFail);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlaySetVolumeWhilePausedPlayingTest::DoTimerCallback()
+	{
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm (EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0005
+ */
+RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest::RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), 
+	iReinitialized(EFalse), iVolume(0)
+	{
+	}
+
+RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest* RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest	* self = new (ELeave) RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KVolume, iVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KVolume);
+		StopTest (KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumeInitializeToPlayAudioThenTonesTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SetVolume"));
+				iMMFDevSound->SetVolume(iVolume);
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				if (!iReinitialized)
+					{
+					iReinitialized = ETrue;
+					INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+					TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
+					if (err != KErrNone)
+						{
+						StopTest(err);
+						break;
+						}
+					INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+					iDevSoundState = EStateInitializing;
+					}
+				else
+					{
+					TInt volumeGet;
+					volumeGet=iMMFDevSound->Volume();
+					if (volumeGet == iVolume)
+						{
+						INFO_PRINTF2(_L("CMMFDevSound::SetVolume is kept after reinitialise Devsound. Volume = %d "), volumeGet);
+						StopTest();
+						}
+					else
+						{
+						ERR_PRINTF2(_L("CMMFDevSound::SetVolume was not kept. Volume = %d"), volumeGet);
+						ERR_PRINTF2(_L("Expected value = %d"),iVolume);
+						StopTest(aError, EFail);
+						}
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+					{
+					ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+					StopTest (aError);
+					}
+				else
+					{
+					ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+					StopTest (aError, EFail);
+					}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest (aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0006
+ */
+RA3FDevSoundPlaySetVolumeRampWhilePlayingTest::RA3FDevSoundPlaySetVolumeRampWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iVolumeRamp(0), iPlayInitTwice(EFalse)
+	{
+	}
+
+RA3FDevSoundPlaySetVolumeRampWhilePlayingTest* RA3FDevSoundPlaySetVolumeRampWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetVolumeRampWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlaySetVolumeRampWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetVolumeRampWhilePlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest (KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	if (!GetIntFromConfig(iTestStepName, KVolumeRamp, iVolumeRamp))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KVolumeRamp);
+		StopTest(KErrNotFound);
+		return;
+		}
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL (CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlaySetVolumeRampWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumePlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest (err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest (aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer (ETrue);
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData ();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SetVolumeRamp"));
+				iMMFDevSound->SetVolumeRamp (iVolumeRamp*KMicroSecsInOneSec);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlaySetVolumeRampWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm(EEventTimerComplete, KErrNone);
+	}
+
+void RA3FDevSoundPlaySetVolumeRampWhilePlayingTest::PlayError(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== DevSound PlayError() callback =========="));
+	INFO_PRINTF3(KMsgErrorDevSoundCallback, &KPlayErrorText, aError);
+	if (iBuffer->LastBuffer ()&& aError == KErrUnderflow)
+		{
+		TInt filePosition = 0;
+		TInt err = iFile.Seek (ESeekStart, filePosition);
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("iFile.Seek() returned %d"), err);
+			StopTest(err);
+			}
+		else
+			{
+			if (!iPlayInitTwice)
+				{
+				INFO_PRINTF1(_L("Playback completed normally"));
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("Calling again CMMFDevSound::PlayInitL left with error = %d"), err);
+					StopTest(err);
+					}
+				iPlayInitTwice=ETrue;
+				}
+			else
+				{
+				StopTest(err);
+				}
+			}
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Playback completed with error"));
+		StopTest(aError, EFail);
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0007
+ */
+RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest::RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName)
+	{
+	}
+
+RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest* RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest* self = new (ELeave) RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest::DoKickoffTestL()
+	{
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumeBeyondMaxVolumeTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SetVolume()to set volume values beyond CMMFDevSound::MaxVolume()"));
+				TInt maxVolume = iMMFDevSound->MaxVolume();
+				iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume()+ KExtraVolume);
+				TInt volumeGet = iMMFDevSound->Volume();
+				if (volumeGet == maxVolume)
+					{
+					INFO_PRINTF2(_L("Calling CMMFDevSound::SetVolume to set volume beyond CMMFDevSound::MaxVolume succeeded with %d"), volumeGet);
+					StopTest();
+					break;
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Calling CMMFDevSound::SetVolume to set volume beyond CMMFDevSound::MaxVolume failed with %d"), volumeGet);
+					ERR_PRINTF2(_L("Expected value = %d"), maxVolume);
+					StopTest(aError, EFail);
+					break;
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0008
+ */
+RA3FDevSoundPlaySetVolumeToNegativeTest::RA3FDevSoundPlaySetVolumeToNegativeTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),
+	iVolume(0)
+	{
+	}
+
+RA3FDevSoundPlaySetVolumeToNegativeTest* RA3FDevSoundPlaySetVolumeToNegativeTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetVolumeToNegativeTest* self = new (ELeave) RA3FDevSoundPlaySetVolumeToNegativeTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetVolumeToNegativeTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KVolume, iVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KVolume);
+		StopTest (KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlaySetVolumeToNegativeTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumeToNegativeTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF2(_L("Calling CMMFDevSound::SetVolume to set volume value to a negative: %d"), iVolume);
+				iMMFDevSound->SetVolume (iVolume);
+				if (iMMFDevSound->Volume ()== 0)
+					{
+					INFO_PRINTF2(_L("Calling CMMFDevSound::SetVolume succeeded with %d"), iMMFDevSound->Volume());
+					StopTest();
+					break;
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Calling CMMFDevSound::SetVolume failed with %d"), iMMFDevSound->Volume());
+					ERR_PRINTF2(_L("Expected value = %d"), 0);
+					StopTest (aError, EFail);
+					break;
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest (aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest (aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0009
+ */
+RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest::RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), 
+	iLSpeakerBalance(0), iRSpeakerBalance(0)
+	{
+	}
+
+RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest* RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest* self = new (ELeave) RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest::DoKickoffTestL()
+	{
+	if ( !GetIntFromConfig(iTestStepName, KLSpeakerBalance, iLSpeakerBalance) )
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KLSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if ( !GetIntFromConfig(iTestStepName, KRSpeakerBalance, iRSpeakerBalance) )
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KRSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetPlayBalanceBeyondOneHundredTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF3(_L("Calling CMMFDevSound::SetPlayBalanceL using left = %d right = %d values"), iLSpeakerBalance, iRSpeakerBalance);
+				TRAPD(err, iMMFDevSound->SetPlayBalanceL(iLSpeakerBalance, iRSpeakerBalance));
+				if (err == KErrNone)
+					{
+					TInt getBalanceL, getBalanceR;
+					TRAPD(err, iMMFDevSound->GetPlayBalanceL(getBalanceL, getBalanceR));
+					if (err == KErrNone)
+						{
+						if (getBalanceL == KMaxSpeakerBalanceValue && getBalanceR == KMaxSpeakerBalanceValue)
+							{
+							INFO_PRINTF3(_L("Calling CMMFDevSound::SetPlayBalanceL to set balance values beyond 100 succeeded, left = %d right = %d values"), getBalanceL, getBalanceR);
+							StopTest();
+							}
+						else
+							{
+							ERR_PRINTF3(_L("Calling CMMFDevSound::SetPlayBalanceL to set balance values beyond 100 failed, left = %d right = %d values"), getBalanceL, getBalanceR);
+							ERR_PRINTF3(_L("Expected values left = %d right = %d values"), KMaxSpeakerBalanceValue, KMaxSpeakerBalanceValue);
+							StopTest (err, EFail);
+							}
+						}
+					else
+						{
+						ERR_PRINTF1(_L("Error in getting left and right play balance."));
+						StopTest (err);
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("Error in setting left and right play balance."));
+					StopTest (err);
+					}
+				}
+			else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest (aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0010
+ */
+RA3FDevSoundPlaySetPlayBalanceToNegativeTest::RA3FDevSoundPlaySetPlayBalanceToNegativeTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), 
+	iLSpeakerBalance(0), iRSpeakerBalance(0)
+	{
+	}
+
+RA3FDevSoundPlaySetPlayBalanceToNegativeTest* RA3FDevSoundPlaySetPlayBalanceToNegativeTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetPlayBalanceToNegativeTest* self = new (ELeave) RA3FDevSoundPlaySetPlayBalanceToNegativeTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetPlayBalanceToNegativeTest::DoKickoffTestL()
+	{
+	if ( !GetIntFromConfig(iTestStepName, KLSpeakerBalance, iLSpeakerBalance) )
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KLSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if ( !GetIntFromConfig(iTestStepName, KRSpeakerBalance, iRSpeakerBalance) )
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KRSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlaySetPlayBalanceToNegativeTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetPlayBalanceToNegativeTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF3(_L("Calling CMMFDevSound::SetPlayBalanceL using left = %d right = %d values"), iLSpeakerBalance, iRSpeakerBalance);
+				TRAPD(err, iMMFDevSound->SetPlayBalanceL(iLSpeakerBalance, iRSpeakerBalance));
+				if (err == KErrNone)
+					{
+					TInt getBalanceL, getBalanceR;
+					TRAPD(err, iMMFDevSound->GetPlayBalanceL(getBalanceL, getBalanceR));
+					if (err == KErrNone)
+						{
+						if (getBalanceL == KMinSpeakerBalanceValue && getBalanceR == KMinSpeakerBalanceValue)
+							{
+							INFO_PRINTF3(_L("Calling CMMFDevSound::SetPlayBalanceL to set balance values to negative succeeded, left = %d right = %d values"), getBalanceL, getBalanceR);
+							StopTest();
+							}
+						else
+							{
+							ERR_PRINTF3(_L("Calling CMMFDevSound::SetPlayBalanceL to set balance values to negative failed, left = %d right = %d values"), getBalanceL, getBalanceR);
+							ERR_PRINTF3(_L("Expected values, left = %d right = %d values"), KMinSpeakerBalanceValue, KMinSpeakerBalanceValue);
+							StopTest(err, EFail);
+							}
+						}
+					else
+						{
+						ERR_PRINTF1(_L("Error in getting left and right play balance."));
+						StopTest (err);
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("Error in setting left and right play balance."));
+					StopTest (err);
+					}
+				}
+			else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest (aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest (aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0011
+ */
+RA3FDevSoundPlaySetPrioritySettingsTest::RA3FDevSoundPlaySetPrioritySettingsTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iPriority(0)
+	{
+	}
+
+RA3FDevSoundPlaySetPrioritySettingsTest* RA3FDevSoundPlaySetPrioritySettingsTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySetPrioritySettingsTest* self = new (ELeave) RA3FDevSoundPlaySetPrioritySettingsTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySetPrioritySettingsTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KPriority, iPriority))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KPriority);
+		StopTest(KErrNotFound);
+		return;
+		}
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlaySetPrioritySettingsTest::Fsm(
+		TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetPrioritySettingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFPrioritySettings priority;
+				priority.iPriority = iPriority;
+				INFO_PRINTF2(_L("Setting Priority to %d calling  CMMFDevSound::SetPrioritySettings"), iPriority);
+				iMMFDevSound->SetPrioritySettings(priority);
+				INFO_PRINTF1(_L("========== Test Case Successfully Completed =========="));
+				StopTest();
+				}
+			else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest (aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0012
+ */
+RA3FDevSoundPlayCapabilitiesTest::RA3FDevSoundPlayCapabilitiesTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName)
+	{
+	}
+
+RA3FDevSoundPlayCapabilitiesTest* RA3FDevSoundPlayCapabilitiesTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayCapabilitiesTest* self = new (ELeave) RA3FDevSoundPlayCapabilitiesTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayCapabilitiesTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExCapChannels, iExCapChannels))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExCapChannels);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KExCapRate, iExCapRate))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExCapRate);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlayCapabilitiesTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Capabilities"));
+				TMMFCapabilities capabilitiesGet;
+				capabilitiesGet = iMMFDevSound->Capabilities ();
+
+				INFO_PRINTF3(_L("Rate Sum:0x%x Channels Sum:0x%x"), capabilitiesGet.iRate, capabilitiesGet.iChannels);
+				PrintSupportedCapabilities (capabilitiesGet.iRate, capabilitiesGet.iChannels);
+				if(capabilitiesGet.iRate == iExCapRate && capabilitiesGet.iChannels == iExCapChannels)
+					{
+					INFO_PRINTF3(_L("Capabilities returned match expected capabilities which are Sum:0x%x Channels Sum:0x%x"), capabilitiesGet.iRate, capabilitiesGet.iChannels);
+					StopTest ();
+					}
+				else
+					{
+					ERR_PRINTF1(_L("Capabilities returned do not match the expected capabilities"));
+					ERR_PRINTF3(_L("Expected Rate Sum:0x%x Channels Sum:0x%x"), iExCapRate, iExCapChannels);
+					StopTest (KErrNone, EFail);
+					}
+				}
+			else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest (aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest (aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0013
+ */
+RA3FDevSoundPlayConfigTest::RA3FDevSoundPlayConfigTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),iExCapRate(0),
+	iExCapChannels(0)
+	{
+	}
+
+RA3FDevSoundPlayConfigTest* RA3FDevSoundPlayConfigTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayConfigTest* self = new (ELeave) RA3FDevSoundPlayConfigTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayConfigTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExCapRate, iExCapRate))
+				{
+				ERR_PRINTF2(KMsgErrorGetParameter, &KExCapRate);
+				StopTest(KErrNotFound);
+				return;
+				}
+		if (!GetIntFromConfig(iTestStepName, KExCapChannels, iExCapChannels))
+			{
+			ERR_PRINTF2(KMsgErrorGetParameter, &KExCapChannels);
+			StopTest(KErrNotFound);
+			return;
+			}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlayConfigTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayConfigTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFCapabilities capabilitiesGet;
+				TBuf<KMaxSampleRateStringLength> stringSampleRateGet;
+				TBuf<KMaxChannelsStringLength> stringChannelsGet;
+				TBuf<KMaxSampleRateStringLength> stringSampleRateExpected;
+				TBuf<KMaxChannelsStringLength> stringChannelsExpected;
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Config while playing"));
+				capabilitiesGet=iMMFDevSound->Config ();
+				SampleRateFromTUintToString (capabilitiesGet.iRate, stringSampleRateGet);
+				ChannelsFromTUintToString (capabilitiesGet.iChannels, stringChannelsGet);
+				SampleRateFromTUintToString (capabilitiesGet.iRate, stringSampleRateExpected);
+				ChannelsFromTUintToString (capabilitiesGet.iChannels, stringChannelsExpected);
+				if (stringSampleRateExpected.Compare(stringSampleRateGet) == 0)
+					{
+					INFO_PRINTF2(_L("Sample rate value match default as expected with %S"), &stringSampleRateGet);
+					if (stringChannelsExpected.Compare(stringChannelsGet) == 0)
+						{
+						INFO_PRINTF2(_L("Channel mode value match default as expected with %S"), &stringChannelsGet);
+						StopTest();
+						}
+					else
+						{
+						INFO_PRINTF2(_L("Channel mode value failed with %S"), &stringChannelsGet);
+						ERR_PRINTF2(_L("Expected channel mode %S"), &stringChannelsExpected);
+						StopTest(KErrNone, EFail);
+						}
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Sample rate value failed with %S"), &stringSampleRateGet);
+					ERR_PRINTF2(_L("Expected sample rate %S"), &stringSampleRateExpected);
+					StopTest(KErrNone, EFail);
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0014
+ */
+RA3FDevSoundPlayGetPlayBalanceTest::RA3FDevSoundPlayGetPlayBalanceTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),
+	iExLSpeakerBalance(0),
+	iExRSpeakerBalance(0)
+	{
+	}
+
+RA3FDevSoundPlayGetPlayBalanceTest* RA3FDevSoundPlayGetPlayBalanceTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayGetPlayBalanceTest* self = new (ELeave) RA3FDevSoundPlayGetPlayBalanceTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayGetPlayBalanceTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExLSpeakerBalance, iExLSpeakerBalance))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExLSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KExRSpeakerBalance, iExRSpeakerBalance))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExRSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlayGetPlayBalanceTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayGetPlayBalanceTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest (aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TInt getBalanceL, getBalanceR;
+				INFO_PRINTF1(_L("Calling CMMFDevSound::GetPlayBalance"));
+				TRAPD(err, iMMFDevSound->GetPlayBalanceL(getBalanceL, getBalanceR));
+				if (err == KErrNone)
+					{
+					if(getBalanceL == iExLSpeakerBalance && getBalanceR == iExRSpeakerBalance)
+						{
+						INFO_PRINTF3(_L("Balance values match expected values which are, right = %d, left = %d"), getBalanceL, getBalanceR);
+						StopTest();
+						}
+					else
+						{
+						ERR_PRINTF3(_L("Balance values do not match expected values, left = %d right = %d"), getBalanceL, getBalanceR);
+						ERR_PRINTF3(_L("Expected values, left = %d right = %d"), iExLSpeakerBalance, iExRSpeakerBalance);
+						StopTest(KErrNone, EFail);
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("Error in getting left and right play balance."));
+					StopTest(err);
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0015
+ */
+RA3FDevSoundPlayGetSupportedInputDataTypesLTest::RA3FDevSoundPlayGetSupportedInputDataTypesLTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),
+	iCurrentTypeInTest(0)
+	{
+	}
+
+RA3FDevSoundPlayGetSupportedInputDataTypesLTest* RA3FDevSoundPlayGetSupportedInputDataTypesLTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayGetSupportedInputDataTypesLTest* self = new (ELeave) RA3FDevSoundPlayGetSupportedInputDataTypesLTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayGetSupportedInputDataTypesLTest::DoKickoffTestL()
+	{
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlayGetSupportedInputDataTypesLTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayGetSupportedInputDataTypesLTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				if(iCurrentTypeInTest == 0)
+					{
+					TMMFPrioritySettings prioritySettings;
+					INFO_PRINTF1(_L("Calling CMMFDevSound::GetSupportedInputDataTypes"));
+					TRAPD(err,iMMFDevSound->GetSupportedInputDataTypesL(iSupportedDataTypes, prioritySettings));
+					if (err != KErrNone)
+						{
+						ERR_PRINTF2(_L("CMMFDevSound::GetSupportedInputDataTypes data types falied ! Left with error = %d"), err);
+						StopTest (err);
+						break;
+						}
+					for(TInt x = 0; x < iSupportedDataTypes.Count (); x++)
+						{
+						TFourCC fourCC = iSupportedDataTypes[x];
+						TBuf<KTFourCC> name;
+						for (TInt i=0; i<= KFourCCMaxBitDisplacement; i+=K8Bits)
+							{
+							name.Append ( (TUint8)(fourCC.FourCC() >> i));
+							}
+						INFO_PRINTF3(_L("Supported Input Data types: 0x%x  %S "), fourCC.FourCC(), &name);
+						}
+					}
+				
+				// Complete test when all types have been used of initialization
+				if(iCurrentTypeInTest == iSupportedDataTypes.Count())
+					{
+					INFO_PRINTF1(_L("========== Test Case Successfully Completed =========="));
+					StopTest();
+					}
+				else
+					{
+					TFourCC fourCC = iSupportedDataTypes[iCurrentTypeInTest];
+					TBuf<KTFourCC> name;
+					for (TInt i=0; i<= KFourCCMaxBitDisplacement; i+=K8Bits)
+						{
+						name.Append ( (TUint8)(fourCC.FourCC() >> i));
+						}
+					INFO_PRINTF3(_L("Initializing for Input Data type: 0x%x  %S "), fourCC.FourCC(), &name);
+					TRAPD(err, iMMFDevSound->InitializeL(*this, fourCC, EMMFStatePlaying));
+					if (err != KErrNone)
+						{
+						ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+						StopTest(err);
+						break;
+						}
+					}
+				iCurrentTypeInTest++;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0016
+ */
+RA3FDevSoundPlayMaxVolumeTest::RA3FDevSoundPlayMaxVolumeTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iExVolume(0)
+	{
+	}
+
+RA3FDevSoundPlayMaxVolumeTest* RA3FDevSoundPlayMaxVolumeTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayMaxVolumeTest* self = new (ELeave) RA3FDevSoundPlayMaxVolumeTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayMaxVolumeTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExVolume, iExVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExVolume);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlayMaxVolumeTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayMaxVolumeTest"), EFsmIncorrectErrorPassed));
+			if ( aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TInt maxVolume = iMMFDevSound->MaxVolume();
+				INFO_PRINTF1(_L("Calling CMMFDevSound::MaxVolume"));
+				if(maxVolume == iExVolume)
+					{
+					INFO_PRINTF2(_L("Calling CMMFDevSound::MaxVolume succeeded with the expected value %d"), maxVolume);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Calling CMMFDevSound::MaxVolume failed with value %d"), maxVolume);
+					ERR_PRINTF2(_L("Expected value = %d"), iExVolume);
+					StopTest(KErrNone, EFail);
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0017
+ */
+RA3FDevSoundPlaySamplesPlayedTest::RA3FDevSoundPlaySamplesPlayedTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),
+	iExSamplesPlayed(0)
+	{
+	}
+
+RA3FDevSoundPlaySamplesPlayedTest* RA3FDevSoundPlaySamplesPlayedTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySamplesPlayedTest* self = new (ELeave) RA3FDevSoundPlaySamplesPlayedTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySamplesPlayedTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExSamplesPlayed, iExSamplesPlayed))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExSamplesPlayed);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlaySamplesPlayedTest::Fsm(TMmfDevSoundEvent aDevSoundEvent,TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySamplesPlayedTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SamplesPlayed"));
+				TInt samplesPlayed = iMMFDevSound->SamplesPlayed();
+				INFO_PRINTF2(_L("Samples returned by CMMFDevSound::SamplesPlayed = %d"), samplesPlayed);
+				if(samplesPlayed == iExSamplesPlayed)
+					{
+					INFO_PRINTF3(_L("Samples returned by CMMFDevSound::SamplesPlayed: %d matches the expected samples played: %d"), samplesPlayed, iExSamplesPlayed);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Call to CMMFDevSound::SamplesPlayed do not match the expected value = %d"), samplesPlayed);
+					ERR_PRINTF2(_L("Expected Samples played value = %d"), iExSamplesPlayed);
+					StopTest(KErrNone, EFail);
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0018
+ */
+RA3FDevSoundPlayVolumeTest::RA3FDevSoundPlayVolumeTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),
+	iExVolume(0)
+	{
+	}
+
+RA3FDevSoundPlayVolumeTest* RA3FDevSoundPlayVolumeTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayVolumeTest* self = new (ELeave) RA3FDevSoundPlayVolumeTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayVolumeTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExVolume, iExVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExVolume);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlayVolumeTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayVolumeTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Volume"));
+				TInt volumeGet = iMMFDevSound->Volume();
+				INFO_PRINTF2(_L("Volume returned by CMMFDevSound::Volume() = %d"), volumeGet);
+				if(volumeGet == iExVolume)
+					{
+					INFO_PRINTF3(_L("Volume returned by CMMFDevSound::Volume(): %d  matches the default device volume: %d"), volumeGet, iExVolume);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Default device volume failed with %d"), volumeGet);
+					ERR_PRINTF2(_L("Expected value = % d"), iExVolume);
+					StopTest(aError , EFail);
+					}
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0019
+ */
+RA3FDevSoundPlayCapabilitiesWhilePlayingTest::RA3FDevSoundPlayCapabilitiesWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iExCapChannels(0), iExCapRate(0)
+	{
+	}
+
+RA3FDevSoundPlayCapabilitiesWhilePlayingTest* RA3FDevSoundPlayCapabilitiesWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayCapabilitiesWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayCapabilitiesWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayCapabilitiesWhilePlayingTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExCapChannels, iExCapChannels))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExCapChannels);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KExCapRate, iExCapRate))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExCapRate);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if ( !GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayCapabilitiesWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer (ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				TMMFCapabilities capabilitiesGet;
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Capabilities while playing"));
+				capabilitiesGet = iMMFDevSound->Capabilities ();
+				INFO_PRINTF3(_L("Rate Sum:0x%x Channels Sum:0x%x"), capabilitiesGet.iRate, capabilitiesGet.iChannels);
+				PrintSupportedCapabilities (capabilitiesGet.iRate, capabilitiesGet.iChannels);
+				if(capabilitiesGet.iRate == iExCapRate && capabilitiesGet.iChannels == iExCapChannels)
+					{
+					INFO_PRINTF3(_L("Capabilities returned match expected capabilities which are Sum:0x%x Channels Sum:0x%x"), capabilitiesGet.iRate, capabilitiesGet.iChannels);
+					}
+				else
+					{
+					ERR_PRINTF3(_L("Capabilities returned do not match the expected capabilities. The total capabilities Sum:0x%x Channels Sum:0x%x "), capabilitiesGet.iRate, capabilitiesGet.iChannels);
+					ERR_PRINTF3(_L("Expected Rate Sum:0x%x Channels Sum:0x%x"), iExCapRate, iExCapChannels);
+					StopTest (KErrNone, EFail);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest (aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayCapabilitiesWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm(EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0020
+ */
+RA3FDevSoundPlayConfigWhilePlayingTest::RA3FDevSoundPlayConfigWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC), iExCapRate(0),
+	iExCapChannels(0)
+	{
+	}
+
+RA3FDevSoundPlayConfigWhilePlayingTest* RA3FDevSoundPlayConfigWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayConfigWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayConfigWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayConfigWhilePlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+	
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	if (!GetIntFromConfig(iTestStepName, KExCapRate, iExCapRate))
+			{
+			ERR_PRINTF2(KMsgErrorGetParameter, &KExCapRate);
+			StopTest(KErrNotFound);
+			return;
+			}
+	if (!GetIntFromConfig(iTestStepName, KExCapChannels, iExCapChannels))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExCapChannels);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayConfigWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest (err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData ();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				TMMFCapabilities capabilitiesGet;
+				TBuf<KMaxSampleRateStringLength> stringSampleRateGet;
+				TBuf<KMaxChannelsStringLength> stringChannelsGet;
+				TBuf<KMaxSampleRateStringLength> stringSampleRateExpected;
+				TBuf<KMaxChannelsStringLength> stringChannelsExpected;
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Config while playing"));
+				capabilitiesGet=iMMFDevSound->Config ();
+				SampleRateFromTUintToString (capabilitiesGet.iRate, stringSampleRateGet);
+				ChannelsFromTUintToString (capabilitiesGet.iChannels, stringChannelsGet);
+				SampleRateFromTIntToTMMFSampleRate (iExCapRate, iExSampleRate);
+				SampleRateFromTUintToString (iExSampleRate, stringSampleRateExpected);
+				ChannelsFromTUintToString (iExCapChannels, stringChannelsExpected);
+				if (stringSampleRateExpected.Compare(stringSampleRateGet) == 0)
+					{
+					INFO_PRINTF2(_L("Sample rate value match default as expected with %S"), &stringSampleRateGet);
+					if (stringChannelsExpected.Compare(stringChannelsGet) == 0)
+						{
+						INFO_PRINTF2(_L("Channel mode value match default as expected with %S"), &stringChannelsGet);
+						StopTest();
+						}
+					else
+						{
+						INFO_PRINTF2(_L("Channel mode value failed with %S"), &stringChannelsGet);
+						ERR_PRINTF2(_L("Expected channel mode %S"), &stringChannelsExpected);
+						StopTest(KErrNone, EFail);
+						}
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Sample rate value failed with %S"), &stringSampleRateGet);
+					ERR_PRINTF2(_L("Expected sample rate %S"), &stringSampleRateExpected);
+					StopTest(KErrNone, EFail);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayConfigWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm (EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0021
+ */
+RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest::RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), 
+	iFilename(KNullDesC),
+	iExLSpeakerBalance(0),
+	iExRSpeakerBalance(0)
+	{
+	}
+
+RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest* RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExLSpeakerBalance, iExLSpeakerBalance))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExLSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KExRSpeakerBalance, iExRSpeakerBalance))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExRSpeakerBalance);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy (filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest (err);
+					break;
+					}
+				StartTimer (KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData ();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				TInt getBalanceL, getBalanceR;
+				INFO_PRINTF1(_L("Calling CMMFDevSound::GetPlayBalance while playing"));
+				TRAPD(err, iMMFDevSound->GetPlayBalanceL(getBalanceL, getBalanceR));
+				INFO_PRINTF3(_L("Balance returned by CMMFDevSound::GetPlayBalance left = %d right = %d"), getBalanceL, getBalanceR);
+				if (err == KErrNone)
+					{
+					if(getBalanceL == iExLSpeakerBalance && getBalanceR == iExRSpeakerBalance)
+						{
+						INFO_PRINTF5(_L("Balance returned by CMMFDevSound::GetPlayBalance: left %d right %d matches the default device balance: left %d right %d"), getBalanceL, getBalanceR, iExLSpeakerBalance, iExRSpeakerBalance);
+						}
+					else
+						{
+						ERR_PRINTF3(_L("Balance values do not match expected values, left %d right %d"), getBalanceL, getBalanceR);
+						ERR_PRINTF3(_L("Expected values, left %d right %d"), iExLSpeakerBalance, iExRSpeakerBalance);
+						StopTest(KErrNone, EFail);
+						}
+					}
+				else
+					{
+					ERR_PRINTF1(_L("Error in getting left and right play balance."));
+					StopTest(err);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayGetPlayBalanceWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm(EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0022
+ */
+RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest::RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest* RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest (err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer (ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData ();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				RArray< TFourCC > supportedDataTypes;
+				TMMFPrioritySettings prioritySettings;
+				TRAPD(err,iMMFDevSound->GetSupportedInputDataTypesL(supportedDataTypes, prioritySettings));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("Getting supported data types falied ! Left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				for(TInt x = 0; x < supportedDataTypes.Count (); x++)
+					{
+					TFourCC fourCC = supportedDataTypes[x];
+					TBuf<KTFourCC> name;
+					for (TInt i=0; i<= KFourCCMaxBitDisplacement; i+=K8Bits)
+						{
+						name.Append ( (TUint8)(fourCC.FourCC() >> i));
+						}
+					INFO_PRINTF3(_L("Supported Input Data types: 0x%x  %S "), fourCC.FourCC(), &name);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayGetSupportedInputDataTypesWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm(EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0023
+ */
+RA3FDevSoundPlayMaxVolumeWhilePlayingTest::RA3FDevSoundPlayMaxVolumeWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iExVolume(0)
+	{
+	}
+
+RA3FDevSoundPlayMaxVolumeWhilePlayingTest* RA3FDevSoundPlayMaxVolumeWhilePlayingTest::NewL(	const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayMaxVolumeWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayMaxVolumeWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayMaxVolumeWhilePlayingTest::DoKickoffTestL()
+	{
+	if (!GetIntFromConfig(iTestStepName, KExVolume, iExVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExVolume);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayMaxVolumeWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if ( aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete was NOT received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				TInt maxVolume = iMMFDevSound->MaxVolume();
+				INFO_PRINTF1(_L("Calling CMMFDevSound::MaxVolume"));
+				if(maxVolume == iExVolume)
+					{
+					INFO_PRINTF2(_L("Call to CMMFDevSound::MaxVolume succeeded with %d"), maxVolume);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Call to CMMFDevSound::MaxVolume failed with %d"), maxVolume);
+					ERR_PRINTF2(_L("Expected Max volume value = %d"), iExVolume);
+					StopTest(KErrNone, EFail);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayMaxVolumeWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm (EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0024
+ */
+RA3FDevSoundPlaySamplesPlayedWhilePlayingTest::RA3FDevSoundPlaySamplesPlayedWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iExSamplesPlayed(0)
+	{
+	}
+
+RA3FDevSoundPlaySamplesPlayedWhilePlayingTest* RA3FDevSoundPlaySamplesPlayedWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlaySamplesPlayedWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlaySamplesPlayedWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlaySamplesPlayedWhilePlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlaySamplesPlayedWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read(buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest (err);
+					break;
+					}
+				if (buffer->Data().Length()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SamplesPlayed"));
+				TInt samplesPlayed = iMMFDevSound->SamplesPlayed();
+				INFO_PRINTF2(_L("Samples played so far %d"), samplesPlayed);
+				if(samplesPlayed > 0)
+					{
+					INFO_PRINTF2(_L("Samples returned by CMMFDevSound::SamplesPlayed: %d matches the expected value which is > 0"), samplesPlayed);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Samples played returned an invalid value %d"), samplesPlayed);
+					ERR_PRINTF1(_L("Expected value must be a positive value greater than 0"));
+					StopTest(aError, EFail);
+					
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlaySamplesPlayedWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm(EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0025
+ */
+
+RA3FDevSoundPlayVolumeWhilePlayingTest::RA3FDevSoundPlayVolumeWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC), 
+	iExVolume(0)
+	{
+	}
+
+RA3FDevSoundPlayVolumeWhilePlayingTest* RA3FDevSoundPlayVolumeWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayVolumeWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayVolumeWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayVolumeWhilePlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KExVolume, iExVolume))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KExVolume);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayVolumeWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				StartTimer (KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+					{
+					ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+					StopTest(aError);
+					}
+				else
+					{
+					ERR_PRINTF2(_L("DevSound EEventInitComplete NOT received as expected. Received event: %d"), aDevSoundEvent);
+					StopTest(aError, EFail);
+					}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read(buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Volume"));
+				TInt volumeGet = iMMFDevSound->Volume();
+				if(volumeGet == iExVolume)
+					{
+					INFO_PRINTF2(_L("Default device volume succeeded with = %d"), volumeGet);
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Default device volume failed with = %d"), volumeGet);
+					ERR_PRINTF2(_L("Expected value = % d"), iExVolume);
+					StopTest(aError , EFail);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayVolumeWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm(EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0026
+ */
+RA3FDevSoundPlayTest::RA3FDevSoundPlayTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlayTest* RA3FDevSoundPlayTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayTest* self = new (ELeave) RA3FDevSoundPlayTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if ( !GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest (KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy (filename);
+	TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlayTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayCapabilitiesPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest (err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0027
+ */
+RA3FDevSoundPlayEmptyBufferWhilePlayingTest::RA3FDevSoundPlayEmptyBufferWhilePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlayEmptyBufferWhilePlayingTest* RA3FDevSoundPlayEmptyBufferWhilePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayEmptyBufferWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayEmptyBufferWhilePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayEmptyBufferWhilePlayingTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayEmptyBufferWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayEmptyBufferPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError, EFail);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read(buffer->Data());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize ())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData()"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::EmptyBuffers()"));
+				TInt err = iMMFDevSound->EmptyBuffers();
+				if (err == KErrNone)
+					{
+					INFO_PRINTF2(_L("Call EmptyBuffers() while playing returned error = %d"), err);
+					StopTest();
+					break;
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Call EmptyBuffers() while playing returned  error = %d"), err);
+					ERR_PRINTF2(_L("Expected error = %d"), KErrNone);
+					StopTest(err);
+					break;
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest (aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayEmptyBufferWhilePlayingTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+	Fsm(EEventTimerComplete, KErrNone);
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0028
+ */
+RA3FDevSoundPlayEmptyBufferBeforePlayingTest::RA3FDevSoundPlayEmptyBufferBeforePlayingTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName)
+	{
+	}
+
+RA3FDevSoundPlayEmptyBufferBeforePlayingTest* RA3FDevSoundPlayEmptyBufferBeforePlayingTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayEmptyBufferBeforePlayingTest* self = new (ELeave) RA3FDevSoundPlayEmptyBufferBeforePlayingTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayEmptyBufferBeforePlayingTest::DoKickoffTestL()
+	{
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayEmptyBufferBeforePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayEmptyBufferPlayingTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying))	;
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::EmptyBuffers()"));
+				TInt err = iMMFDevSound->EmptyBuffers ();
+				if (err == KErrNotReady)
+					{
+					INFO_PRINTF2(_L("Calling CMMFDevSound::EmptyBuffers after initialization and before playback returned with the expected error = %d"), err);
+					StopTest();
+					break;
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Calling CMMFDevSound::EmptyBuffers after initialization and before playback returned with error = %d"), err);
+					ERR_PRINTF2(_L("Expected error = %d"), KErrNotReady);
+					StopTest(err, EFail);
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError, EFail);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0029
+ */
+RA3FDevSoundPlayPauseTest::RA3FDevSoundPlayPauseTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iPaused(EFalse), iSamplesPlayedPaused(0)
+	{
+	}
+
+RA3FDevSoundPlayPauseTest* RA3FDevSoundPlayPauseTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayPauseTest* self = new (ELeave) RA3FDevSoundPlayPauseTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayPauseTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayPauseTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPauseTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest (err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::Pause"));
+				iMMFDevSound->Pause();
+				iDevSoundState = EStatePause;
+				INFO_PRINTF1(_L("Calling CMMFDevSound::SamplesPlayed"));
+				iSamplesPlayedPaused = iMMFDevSound->SamplesPlayed();
+				INFO_PRINTF2(_L("The number of samples played is %d"), iSamplesPlayedPaused);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePause:
+			{
+			if (aDevSoundEvent == EEventTimerComplete)
+				{
+				TInt samplesPlayed = iMMFDevSound->SamplesPlayed();
+				INFO_PRINTF2(_L("Samples returned by CMMFDevSound::SamplesPlayed = %d"), samplesPlayed);
+				if(iSamplesPlayedPaused == samplesPlayed)
+					{
+					INFO_PRINTF3(_L("Samples returned by CMMFDevSound::SamplesPlayed: %d matches the expected samples played: %d"), samplesPlayed, iSamplesPlayedPaused);
+					StopTest();
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Call to CMMFDevSound::SamplesPlayed do not match the expected value = %d"), samplesPlayed);
+					ERR_PRINTF2(_L("Expected Samples played value = %d"), iSamplesPlayedPaused);
+					StopTest(KErrNone, EFail);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("EEventTimerComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayPauseTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	if (!iPaused)
+		{
+		INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+		Fsm(EEventTimerComplete, KErrNone);
+		iPaused = ETrue;
+		}
+	else
+		{
+		iTimer->Cancel();
+		INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+		Fsm(EEventTimerComplete, KErrNone);
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0030
+ */
+RA3FDevSoundPlayStopTest::RA3FDevSoundPlayStopTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC), iStopped(EFalse)
+	{
+	}
+
+RA3FDevSoundPlayStopTest* RA3FDevSoundPlayStopTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayStopTest* self = new (ELeave) RA3FDevSoundPlayStopTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayStopTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	}
+
+void RA3FDevSoundPlayStopTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayStopTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				if (!iStopped)
+					{
+					iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume());
+					INFO_PRINTF1(_L("CMMFDevSound::PlayInitL"));
+					TRAPD(err, iMMFDevSound->PlayInitL());
+					if (err != KErrNone)
+						{
+						StopTest(err);
+						break;
+						}
+					StartTimer(KMicroSecsTwoSec);
+					INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+					iDevSoundState = EStatePlaying;
+					}
+				else
+					{
+					INFO_PRINTF1(_L("InitializeComplete returned KErrNone after calling CMMFDevSound::Stop then CMMFDevSound::InitializeL"));
+					StopTest();
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				if (!iStopped)
+					{
+					ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+					StopTest(aError);
+					}
+				else
+					{
+					INFO_PRINTF2(_L("InitializeComplete returned %d after calling CMMFDevSound::Stop then CMMFDevSound::InitializeL"), aError);
+					StopTest(aError);
+					}
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				INFO_PRINTF1(_L("CMMFDevSound::Stop"));
+				iMMFDevSound->Stop();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayStopTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	if (!iStopped)
+		{
+		INFO_PRINTF1(_L("DevSound Event: EEventTimerComplete"));
+		Fsm(EEventTimerComplete, KErrNone);
+		iStopped = ETrue;
+		}
+	else
+		{
+		iTimer->Cancel();
+		INFO_PRINTF1(_L("Initializing again after stop successful. Hence passing the test"));
+		TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+			StopTest(err);
+			}
+		INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+		iDevSoundState = EStateInitializing;
+		}
+	}
+
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0031
+ */
+RA3FDevSoundPlayPreemptionTest::RA3FDevSoundPlayPreemptionTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iOtherFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlayPreemptionTest* RA3FDevSoundPlayPreemptionTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayPreemptionTest* self = new (ELeave) RA3FDevSoundPlayPreemptionTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayPreemptionTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		StopTest(err);
+		return;
+		}
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+	// Get the filename of the second devsound instance
+	TPtrC tempString;
+	if (!GetStringFromConfig(iTestStepName, KOtherFilename, tempString))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KOtherFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	iOtherFilename.Copy (tempString);
+	INFO_PRINTF2(_L("File under test  -> %S"), &iOtherFilename);
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	iDevsoundPlayClient = CA3FDevSoundPlayClient::NewL(*this, iFourCCCode, iFs, iSuite);
+	}
+
+void RA3FDevSoundPlayPreemptionTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPreemptionTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFPrioritySettings priority;
+				priority.iPriority = KMinimumPriority;
+				INFO_PRINTF2(_L("Setting Priority to %d using CMMFDevSound::SetPrioritySettings"), priority.iPriority);
+				iMMFDevSound->SetPrioritySettings (priority);
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				StartTimer(KMicroSecsTwoSec);
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest (err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayPreemptionTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("Starting higher priority devsound client"));
+	iDevsoundPlayClient->SetPriority(KMaximumPriority);
+	INFO_PRINTF1(_L("Initializing to play audio thru second devsound client"));
+	TInt err = iDevsoundPlayClient->PlayInit(iOtherFilename);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Initializating DevSound to play audio thru second devsound client failed with error = %d"), err);
+		StopTest(err);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptionTest::PlayError(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== DevSound PlayError() callback =========="));
+	if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied)
+		{
+		INFO_PRINTF1(_L("========== Preempting 1st DevSound Instance=========="));
+		INFO_PRINTF2(_L("First DevSound client PlayError succeeded with error = %d "), aError);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("First DevSound client PlayError and failed with error = %d "), aError);
+		ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+		StopTest(aError, EFail);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptionTest::ClientInitializeCompleteCallback(TInt aError)                               
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound InitializeComplete() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+		StopTest(aError);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Starting to play audio thru second devsound client"));
+		TInt err = iDevsoundPlayClient->PlayAudio();
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Starting to play audio thru second devsound client failed with error = %d"), err);
+			StopTest(err);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayPreemptionTest::ClientBufferToBeFilledCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound BufferToBeFilled() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second DevSound client called BufferToBeFilled and failed with error = %d"), aError);
+		StopTest(aError);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptionTest::ClientPlayHandleOpenFileErrorInValidEventOrStateCallBack(TMmfDevSoundClientErrorCodes aError)
+	{
+	switch (aError)
+		{
+		case EInvalidClientFSMEvent:
+			ERR_PRINTF1(_L("Second devsound client received an invalid Event..."));
+			break;
+		case EInvalidClientFSMState:
+			ERR_PRINTF1(_L("Second devsound client received an invalid State..."));
+			break;
+		case EReadFileErrorInClient:
+			ERR_PRINTF1(_L("Second devsound client could not read to file..."));
+			break;
+		default:
+			break;
+		}
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayPreemptionTest::ClientPlayErrorCallback(TInt aError, TBool aLastBuffer)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound PlayError() callback =========="));
+
+	if (aError == KErrUnderflow && aLastBuffer)
+		{
+		INFO_PRINTF1(_L("Second DevSound client called PlayError and completed normally"));
+		StopTest();
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Second DevSound PlayError failed with error = %d"), aError);
+		ERR_PRINTF2(_L("Expected error = %d "), KErrUnderflow);
+		StopTest(aError, EFail);
+		}
+	}
+
+/*
+ *========================================================================================================
+ * 3F-DEVSOUND-CHRTZ-PLAY-RAW-0032
+ */
+RA3FDevSoundPlayPreemptedByToneTest::RA3FDevSoundPlayPreemptedByToneTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),iFilename(KNullDesC),
+	iFrequencyTone1(0), iDuration(0)
+	{
+	}
+
+RA3FDevSoundPlayPreemptedByToneTest* RA3FDevSoundPlayPreemptedByToneTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayPreemptedByToneTest* self = new (ELeave) RA3FDevSoundPlayPreemptedByToneTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayPreemptedByToneTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	if (!GetIntFromConfig(iTestStepName, KFrequencyTone1, iFrequencyTone1))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFrequencyTone1);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KDuration, iDuration))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KDuration);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	iDevsoundToneClient = CA3FDevSoundToneClient::NewL(*this);
+	}
+
+void RA3FDevSoundPlayPreemptedByToneTest::Fsm(TMmfDevSoundEvent aDevSoundEvent,	TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPreemptedByToneTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFPrioritySettings priority;
+				priority.iPriority = KMinimumPriority;
+				INFO_PRINTF2(_L("Setting Priority to %d using CMMFDevSound::SetPrioritySettings"), priority.iPriority);
+				iMMFDevSound->SetPrioritySettings (priority);
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest (err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				StartTimer (KMicroSecsTwoSec);
+				}
+			else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByToneTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("Starting higher priority devsound client"));
+	iDevsoundToneClient->SetPriority(KMaximumPriority);
+	INFO_PRINTF1(_L("Initializing to play tones thru second devsound client"));
+	TInt err = iDevsoundToneClient->InitTonePlay(iFrequencyTone1,iDuration*KMicroSecsInOneSec);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Initializating DevSoud to play tones thru second devsound client failed with error = %d"), err);
+		StopTest(err);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByToneTest::PlayError(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== DevSound PlayError() callback =========="));
+	if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied)
+		{
+		INFO_PRINTF1(_L("========== Preempting 1st DevSound Instance=========="));
+		INFO_PRINTF2(_L("First DevSound client PlayError succeeded with error = %d "), aError);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("First DevSound client called PlayError and failed with error = %d "), aError);
+		ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+		StopTest(aError, EFail);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByToneTest::ClientInitializeCompleteCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("==========Second DevSound client called InitializeComplete()=========="));
+	if (aError == KErrNone)
+		{
+		INFO_PRINTF1(_L("Starting to play tone thru second devsound client"));
+		TInt err = iDevsoundToneClient->PlayTone ();
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Second Devsound client called PlayTone and failed with error = %d"), err);
+			StopTest(err);
+			}
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+		StopTest(aError);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByToneTest::ClientToneFinishedCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second  DevSound client called ToneFinished()=========="));
+	if (aError == KErrUnderflow)
+		{
+		INFO_PRINTF2(_L("Second DevSound client called ToneFinished and succeeded with error = %d"), aError);
+		StopTest(aError, EPass);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Second DevSound client called ToneFinished and failed with error = %d"), aError);
+		StopTest(aError);
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0033
+ */
+RA3FDevSoundPlayPreemptedByRecordTest::RA3FDevSoundPlayPreemptedByRecordTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC)
+
+	{
+	}
+
+RA3FDevSoundPlayPreemptedByRecordTest* RA3FDevSoundPlayPreemptedByRecordTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayPreemptedByRecordTest* self = new (ELeave) RA3FDevSoundPlayPreemptedByRecordTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		StopTest(err);
+		return;
+		}
+	// Get the filename of the audio file to record
+	if (!GetStringFromConfig(iTestStepName, KOtherFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KOtherFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+
+	iOtherFilename.Copy(filename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	iDevsoundRecordClient = CA3FDevSoundRecordClient::NewL(*this, iFourCCCode, iFs, iSuite);
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPreemptedByRecordTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFPrioritySettings priority;
+				priority.iPriority = KMinimumPriority;
+				INFO_PRINTF2(_L("Setting Priority to %d using CMMFDevSound::SetPrioritySettings"), priority.iPriority);
+				iMMFDevSound->SetPrioritySettings (priority);
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				StartTimer(KMicroSecsTwoSec);
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	if (!iOtherClientStarted)
+		{
+		INFO_PRINTF1(_L("Initializing higher priority devsound client..."));
+		iDevsoundRecordClient->SetPriority (KMaximumPriority);
+		TInt err = iDevsoundRecordClient->InitializeRecordClient (iOtherFilename);
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Initializating DevSoud to record audio thru second devsound client failed with error = %d"));
+			StopTest(err);
+			}
+		iOtherClientStarted = ETrue;
+		}
+	else
+		{
+		iTimer->Cancel();
+		iDevsoundRecordClient->StopRecord();
+		StopTest();
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::PlayError(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== DevSound PlayError() callback =========="));
+	if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied)
+		{
+		INFO_PRINTF1(_L("========== Preempting 1st DevSound Instance=========="));
+		INFO_PRINTF2(_L("First DevSound client PlayError succeeded with error = %d "), aError);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("First DevSound client called PlayError and failed with error = %d "), aError);
+		ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+		StopTest(aError, EFail);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::ClientInitializeCompleteCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound InitializeComplete() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+		StopTest(aError);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Second DevSound client called InitializeComplete with error = %d"), aError);
+		INFO_PRINTF1(_L("Starting to record audio thru second devsound client"));
+		TInt err = iDevsoundRecordClient->RecordAudio ();
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Starting to record audio thru second devsound client failed with error = %d"), err);
+			StopTest(err);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::ClientBufferToBeEmptiedCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound ClientBufferToBeEmptied() callback =========="));
+	switch (aError)
+		{
+		case KErrGeneral:
+			{
+			INFO_PRINTF1(_L("Second DevSound client called BufferToBeEmptied and received a NULL CMMFBuffer"));
+			StopTest(aError);
+			break;
+			}
+		case KErrUnknown:
+			{
+			INFO_PRINTF1(_L("Second DevSound client called BufferToBeEmptied: Unknown behaviour: Last buffer flag set before calling CMMFDevSound->Pause()"));
+			StopTest(aError);
+			break;
+			}
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::ClientRecordErrorCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound RecordError() callback =========="));
+	if (aError == KErrUnderflow)
+		{
+		INFO_PRINTF2(_L("Second DevSound client called RecordError with error = %d"), aError);
+		StopTest(aError);
+		}
+	}
+
+void RA3FDevSoundPlayPreemptedByRecordTest::ClientRecordHandleOpenFileErrorInValidEventOrStateCallBack(TMmfDevSoundClientErrorCodes aError)
+	{
+	switch (aError)
+		{
+		case EInvalidClientFSMEvent:
+			{
+			ERR_PRINTF1(_L("Second devsound client received an invalid Event..."));
+			StopTest(KErrNone, EFail);
+			break;
+			}
+		case EInvalidClientFSMState:
+			{
+			ERR_PRINTF1(_L("Second devsound client received an invalid State..."));
+			StopTest(KErrNone, EFail);
+			break;
+			}
+		case EWriteFileErrorInClient:
+			{
+			ERR_PRINTF1(_L("Second devsound client could not write to file..."));
+			StopTest(KErrNone, EFail);
+			break;
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0034
+ */
+RA3FDevSoundPlayRejectionTest::RA3FDevSoundPlayRejectionTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iOtherFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlayRejectionTest* RA3FDevSoundPlayRejectionTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayRejectionTest* self = new (ELeave) RA3FDevSoundPlayRejectionTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayRejectionTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		StopTest(err);
+		return;
+		}
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	// Get the filename of the second devsound instance
+	TPtrC tempString;
+	if (!GetStringFromConfig(iTestStepName, KOtherFilename, tempString))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KOtherFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	
+	iOtherFilename.Copy (tempString);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	iDevsoundPlayClient = CA3FDevSoundPlayClient::NewL(*this, iFourCCCode, iFs, iSuite);
+	}
+
+void RA3FDevSoundPlayRejectionTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayRejectionTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFPrioritySettings priority;
+				priority.iPriority = KMaximumPriority;
+				INFO_PRINTF2(_L("Setting Priority to %d using CMMFDevSound::SetPrioritySettings"), priority.iPriority);
+				iMMFDevSound->SetPrioritySettings (priority);
+				iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if ( err != KErrNone)
+					{
+					INFO_PRINTF2(_L("CMMFDevSound::PlayInitL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				StartTimer (KMicroSecsTwoSec);
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest(err);
+					break;
+					}
+				if (buffer->Data().Length()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer (ETrue);
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayRejectionTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("Starting higher priority devsound client"));
+	iDevsoundPlayClient->SetPriority(KMinimumPriority);
+	INFO_PRINTF1(_L("Initializing to play audio thru second devsound client"));
+	TInt err = iDevsoundPlayClient->PlayInit(iOtherFilename);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Initialization to play audio thru second devsound client failed with %d"), err);
+		StopTest(err);
+		}
+	}
+
+void RA3FDevSoundPlayRejectionTest::ClientInitializeCompleteCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound InitializeComplete() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+		StopTest(aError);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Second DevSound client called InitializeComplete with error = %d"), aError);
+		INFO_PRINTF1(_L("Starting to play audio thru second devsound client"));
+		TInt err = iDevsoundPlayClient->PlayAudio ();
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Starting to play audio thru second devsound client failed with error = %d"), err);
+			StopTest(err);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayRejectionTest::ClientPlayHandleOpenFileErrorInValidEventOrStateCallBack(TMmfDevSoundClientErrorCodes aError)
+	{
+	switch (aError)
+		{
+		case EInvalidClientFSMEvent:
+			ERR_PRINTF1(_L("Second devsound client received an invalid Event..."));
+			break;
+		case EInvalidClientFSMState:
+			ERR_PRINTF1(_L("Second devsound client received an invalid State..."));
+			break;
+		case EReadFileErrorInClient:
+			ERR_PRINTF1(_L("Second devsound client could not read to file..."));
+			break;
+		default:
+			break;
+		}
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayRejectionTest::ClientBufferToBeFilledCallback(TInt aError)
+	{
+	INFO_PRINTF2(_L("Second DevSound client should not call BufferToBeFilled in rejection. Error = %d"), aError);
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayRejectionTest::ClientPlayErrorCallback(TInt aError, TBool aLastBuffer)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound PlayError() callback =========="));
+
+	if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied && !aLastBuffer)
+		{
+		INFO_PRINTF1(_L("========== Rejecting 2nd DevSound Instance=========="));
+		INFO_PRINTF2(_L("Second DevSound client PlayError succeeded with error = %d"), aError);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Second DevSound PlayError failed with error = %d"), aError);
+		ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+		StopTest(aError, EFail);
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0035
+ */
+RA3FDevSoundPlayRejectedByToneTest::RA3FDevSoundPlayRejectedByToneTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlayRejectedByToneTest* RA3FDevSoundPlayRejectedByToneTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayRejectedByToneTest* self = new (ELeave) RA3FDevSoundPlayRejectedByToneTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayRejectedByToneTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy (filename);
+
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+	if (!GetIntFromConfig(iTestStepName, KFrequencyTone1, iFrequencyTone1))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFrequencyTone1);
+		StopTest(KErrNotFound);
+		return;
+		}
+	if (!GetIntFromConfig(iTestStepName, KDuration, iDuration))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KDuration);
+		StopTest(KErrNotFound);
+		return;
+		}
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	iDevsoundPlayClient = CA3FDevSoundPlayClient::NewL(*this, iFourCCCode, iFs, iSuite);
+	}
+
+void RA3FDevSoundPlayRejectedByToneTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayRejectedByToneTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, EMMFStateTonePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFPrioritySettings priority;
+				priority.iPriority = KMinimumPriority;
+				INFO_PRINTF2(_L("Setting Priority to %d using CMMFDevSound::SetPrioritySettings"), priority.iPriority);
+				iMMFDevSound->SetPrioritySettings (priority);
+				iMMFDevSound->SetVolume(iMMFDevSound->MaxVolume());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayToneL"));
+				TRAPD(err, iMMFDevSound->PlayToneL(iFrequencyTone1, iDuration*KMicroSecsInOneSec));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::PlayToneL left with error =%d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				iDevSoundState = EStatePlaying;
+				StartTimer(KMicroSecsTwoSec);
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+					{
+					ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+					StopTest(aError);
+					}
+				else
+					{
+					ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+					StopTest(aError, EFail);
+					}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayRejectedByToneTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	iTimer->Cancel();
+	INFO_PRINTF1(_L("Starting higher priority devsound client"));
+	iDevsoundPlayClient->SetPriority(KMinimumPriority);
+	INFO_PRINTF1(_L("Initializing to play audio thru second devsound client"));
+	TInt err = iDevsoundPlayClient->PlayInit(iFilename);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Initialization to play audio thru second devsound client failed with %d"), err);
+		StopTest(err);
+		}
+	}
+
+void RA3FDevSoundPlayRejectedByToneTest::ClientInitializeCompleteCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound InitializeComplete() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+		StopTest (aError);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Second DevSound client called InitializeComplete with error = %d"), aError);
+		INFO_PRINTF1(_L("Starting to play audio thru second devsound client"));
+		TInt err = iDevsoundPlayClient->PlayAudio ();
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Starting to play audio thru second devsound client failed with error = %d"), err);
+			StopTest(err);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayRejectedByToneTest::ClientPlayHandleOpenFileErrorInValidEventOrStateCallBack(TMmfDevSoundClientErrorCodes aError)
+	{
+	switch (aError)
+		{
+		case EInvalidClientFSMEvent:
+			ERR_PRINTF1(_L("Second devsound client received an invalid Event..."));
+			break;
+		case EInvalidClientFSMState:
+			ERR_PRINTF1(_L("Second devsound client received an invalid State..."));
+			break;
+		case EReadFileErrorInClient:
+			ERR_PRINTF1(_L("Second devsound client could not read to file..."));
+			break;
+		default:
+			break;
+		}
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayRejectedByToneTest::ClientBufferToBeFilledCallback(TInt aError)
+	{
+	INFO_PRINTF2(_L("Second DevSound client should not call BufferToBeFilled in rejection. Error = %d"), aError);
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayRejectedByToneTest::ClientPlayErrorCallback(TInt aError,TBool aLastBuffer)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound PlayError() callback =========="));
+	if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied && !aLastBuffer)
+		{
+		INFO_PRINTF1(_L("========== Rejecting 2nd DevSound Instance=========="));
+		INFO_PRINTF2(_L("Second DevSound client PlayError succeeded with error = %d"), aError);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Second DevSound PlayError failed with error = %d"), aError);
+		ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+		StopTest(aError, EFail);
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0036
+ */
+RA3FDevSoundPlayRejectedByRecordTest::RA3FDevSoundPlayRejectedByRecordTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC), 
+	iOtherFilename(KNullDesC), iOtherClientStarted(EFalse)
+	{
+	}
+
+RA3FDevSoundPlayRejectedByRecordTest* RA3FDevSoundPlayRejectedByRecordTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayRejectedByRecordTest* self = new (ELeave) RA3FDevSoundPlayRejectedByRecordTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayRejectedByRecordTest::DoKickoffTestL()
+	{
+	TPtrC filename;
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// Open file for recording using RFile 
+	
+	iFilename.Copy (filename);
+	
+	// Get the filename of the second audio file to play
+	if (!GetStringFromConfig(iTestStepName, KOtherFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KOtherFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	INFO_PRINTF2(_L("Opening file for recording %S"), &iFilename);
+	TInt err = iFile.Replace (iFs, iFilename, EFileWrite);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not create output file. Error = %d"), err);
+		iFs.Close();
+		StopTest(err);
+		return;
+		}
+
+	iOtherFilename.Copy (filename);
+
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest (KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	iDevsoundPlayClient = CA3FDevSoundPlayClient::NewL(*this, iFourCCCode, iFs, iSuite);
+	iAsyncWriteBTFAO = CAsyncWriteBufferToFile::NewL(iFile, iMMFDevSound, *this);
+	}
+
+void RA3FDevSoundPlayRejectedByRecordTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayRejectedByRecordTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				INFO_PRINTF1(_L("iMMFDevSound->InitializeL()"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStateRecording));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("Initialization of DevSound failed with error : %d!"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("CMMFDevSound::RecordInitL"));
+				TRAPD(err, iMMFDevSound->RecordInitL());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("DevSound RecordInitL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				StartTimer(KMicroSecsTwoSec);
+				INFO_PRINTF1(_L("DevSound State: EStateRecording"));
+				iDevSoundState = EStateRecording;
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateRecording:
+			{
+			if (aDevSoundEvent == EEventBTBE)
+				{
+				// Write buffer to file
+				INFO_PRINTF1(_L("Writing data to file"));
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				iAsyncWriteBTFAO->Start(buffer);
+				}
+			else if (aDevSoundEvent == EEventTimerComplete)
+				{
+				iMMFDevSound->Pause();
+				INFO_PRINTF1(_L("DevSound State: EStatePause"));
+				iDevSoundState = EStatePause;
+				INFO_PRINTF1(_L("Recording is Paused, waiting for the last buffer callback"));
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBE not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePause:
+			{
+			if (aDevSoundEvent == EEventBTBE)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				// Continue recording data
+				iAsyncWriteBTFAO->Start (buffer);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBE not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayRejectedByRecordTest::DoTimerCallback()
+	{
+	INFO_PRINTF1(_L("TimerEvent called"));
+	if (!iOtherClientStarted)
+		{
+		INFO_PRINTF1(_L("Starting higher priority devsound client"));
+		iDevsoundPlayClient->SetPriority(KMinimumPriority);
+		INFO_PRINTF1(_L("Initializing to play audio thru second devsound client"));
+		TInt err = iDevsoundPlayClient->PlayInit(iFilename);
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Initialization to play audio thru second devsound client failed with %d"), err);
+			StopTest(err);
+			}
+		iOtherClientStarted = ETrue;
+		}
+	else
+		{
+		iTimer->Cancel();
+		Fsm(EEventTimerComplete, KErrNone);
+		}
+	}
+
+void RA3FDevSoundPlayRejectedByRecordTest::ClientInitializeCompleteCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound InitializeComplete() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+		StopTest(aError);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Second DevSound client called InitializeComplete and with error = %d"), aError);
+		INFO_PRINTF1(_L("Starting to play audio thru second devsound client"));
+		TInt err = iDevsoundPlayClient->PlayAudio();
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Starting to play audio thru second devsound client failed with error = %d"), err);
+			StopTest(err);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayRejectedByRecordTest::ClientPlayHandleOpenFileErrorInValidEventOrStateCallBack(TMmfDevSoundClientErrorCodes aError)
+	{
+	switch (aError)
+		{
+		case EInvalidClientFSMEvent:
+			ERR_PRINTF1(_L("Second devsound client received an invalid Event..."));
+			break;
+		case EInvalidClientFSMState:
+			ERR_PRINTF1(_L("Second devsound client received an invalid State..."));
+			break;
+		case EReadFileErrorInClient:
+			ERR_PRINTF1(_L("Second devsound client could not read to file..."));
+			break;
+		default:
+			break;
+		}
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayRejectedByRecordTest::ClientBufferToBeFilledCallback(TInt aError)
+	{
+	INFO_PRINTF2(_L("Second DevSound client should not call BufferToBeFilled in rejection. Error = %d"), aError);
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayRejectedByRecordTest::ClientPlayErrorCallback(TInt aError, TBool aLastBuffer)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound PlayError() callback =========="));
+
+	if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied && !aLastBuffer)
+		{
+		INFO_PRINTF1(_L("========== Rejecting 2nd DevSound Instance=========="));
+		INFO_PRINTF2(_L("Second DevSound client PlayError succeeded with error = %d"), aError);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Second DevSound PlayError failed with error = %d"), aError);
+		ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+		StopTest(aError, EFail);
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0037
+ */
+RA3FDevSoundPlayDataBeforePlayInitTest::RA3FDevSoundPlayDataBeforePlayInitTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName)
+	{
+	}
+
+RA3FDevSoundPlayDataBeforePlayInitTest* RA3FDevSoundPlayDataBeforePlayInitTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayDataBeforePlayInitTest* self = new (ELeave) RA3FDevSoundPlayDataBeforePlayInitTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayDataBeforePlayInitTest::DoKickoffTestL()
+	{
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	}
+
+void RA3FDevSoundPlayDataBeforePlayInitTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPlayDatabeforePlayInitLTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData out of sequence"));
+				iMMFDevSound->PlayData();
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0038
+ */
+RA3FDevSoundPlayInitTwiceTest::RA3FDevSoundPlayInitTwiceTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName),iFirstPlayInitErr(KErrGeneral),
+	iErr(KErrGeneral)
+	{
+	}
+
+RA3FDevSoundPlayInitTwiceTest* RA3FDevSoundPlayInitTwiceTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayInitTwiceTest* self = new (ELeave) RA3FDevSoundPlayInitTwiceTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayInitTwiceTest::DoKickoffTestL()
+	{
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC (fourccCode);
+	}
+
+void RA3FDevSoundPlayInitTwiceTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPlayInitLTwiceTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAP(iFirstPlayInitErr, iMMFDevSound->PlayInitL());
+				if (iFirstPlayInitErr != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::PlayInitL left with error = %d"), iFirstPlayInitErr);
+					StopTest(iFirstPlayInitErr);
+					break;
+					}
+				INFO_PRINTF1(_L("CMMFDevSound::PlayInitL twice (more than once)"));
+				TRAP(iErr, iMMFDevSound->PlayInitL());
+				if (iErr == KErrNotReady)
+					{
+					INFO_PRINTF2(_L("CMMFDevSound::PlayInitL left with the expected error = %d"), iErr);
+					break;
+					}
+				else
+					{
+					ERR_PRINTF2(_L("Second CMMFDevSound::PlayInitL did NOT leave with the expected error = %d"), iErr);
+					ERR_PRINTF2(_L("Expected error = %d"), KErrNotReady);
+					StopTest(iErr, EFail);
+					break;
+					}
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(aError, EFail);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayInitTwiceTest::BufferToBeFilled(CMMFBuffer* /*aBuffer*/)
+	{
+	INFO_PRINTF1(_L("========== DevSound BufferToBeFilled() callback =========="));
+	if (iErr == KErrNotReady && iFirstPlayInitErr == KErrNone)
+		{
+		INFO_PRINTF1(_L("BufferToBeFilled is called because the leave generated due to second CMMFDevSound::PlayInitL is ignored"));
+		StopTest();
+		}
+	}
+
+/*
+ *========================================================================================================
+ * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0039
+ */
+RA3FDevSoundPlayARNTest::RA3FDevSoundPlayARNTest(const TDesC& aTestName) :
+	RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC),
+	iOtherFilename(KNullDesC)
+	{
+	}
+
+RA3FDevSoundPlayARNTest* RA3FDevSoundPlayARNTest::NewL(const TDesC& aTestName)
+	{
+	RA3FDevSoundPlayARNTest* self = new (ELeave) RA3FDevSoundPlayARNTest(aTestName);
+	return self;
+	}
+
+void RA3FDevSoundPlayARNTest::DoKickoffTestL()
+	{
+	iRepeat = EFalse;
+	TPtrC filename;
+	// Get the filename of the audio file to play
+	if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	// open using RFile for playback
+	iFilename.Copy(filename);
+	TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+		StopTest(err);
+		return;
+		}
+	INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+	// Get the filename of the second devsound instance
+	TPtrC tempString;
+	if (!GetStringFromConfig(iTestStepName, KOtherFilename, tempString))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KOtherFilename);
+		StopTest(KErrNotFound);
+		return;
+		}
+	iOtherFilename.Copy (tempString);
+	INFO_PRINTF2(_L("File under test  -> %S"), &iOtherFilename);
+	TPtrC fourccCode;
+	if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+		{
+		ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+		StopTest(KErrNotFound);
+		return;
+		}
+	EncodingFromStringToTFourCC(fourccCode);
+	iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	iDevsoundPlayClient = CA3FDevSoundPlayClient::NewL(*this, iFourCCCode, iFs, iSuite);
+	}
+
+void RA3FDevSoundPlayARNTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	{
+	switch (iDevSoundState)
+		{
+		case EStateCreated:
+			{
+			__ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPreemptionTest"), EFsmIncorrectErrorPassed));
+			if (aDevSoundEvent == EEventInitialize)
+				{
+				INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+				TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+				iDevSoundState = EStateInitializing;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateInitializing:
+			{
+			if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+				{
+				TMMFPrioritySettings priority;
+				priority.iPriority = KMinimumPriority;
+				INFO_PRINTF2(_L("Setting Priority to %d using CMMFDevSound::SetPrioritySettings"), priority.iPriority);
+				iMMFDevSound->SetPrioritySettings (priority);
+				iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+				TRAPD(err, iMMFDevSound->PlayInitL());
+				if (err != KErrNone)
+					{
+					StopTest(err);
+					break;
+					}
+				INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+				INFO_PRINTF1(_L("Registering first client"));
+				iMMFDevSound->RegisterAsClient(KMMFEventCategoryAudioResourceAvailable);
+				iDevSoundState = EStatePlaying;
+				StartTimer(KMicroSecsTwoSec);
+				}
+			else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+				{
+				ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+				StopTest(aError);
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStatePlaying:
+			{
+			if (aDevSoundEvent == EEventBTBF)
+				{
+				CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+				TInt err = iFile.Read (buffer->Data ());
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+					StopTest (err);
+					break;
+					}
+				if (buffer->Data().Length ()!= buffer->RequestSize())
+					{
+					iBuffer->SetLastBuffer(ETrue);
+					}
+				INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				iMMFDevSound->PlayData();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		case EStateResumePlaying:
+			{
+//			if (aDevSoundEvent == KMMFEventCategoryAudioResourceAvailable)
+			if (aDevSoundEvent == EResourceAvailable)
+				{
+				INFO_PRINTF1(_L("First Client Received Notification as expected"));
+				//INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+				//iMMFDevSound->PlayData ();
+				StopTest();
+				}
+			else
+				{
+				ERR_PRINTF2(_L("DevSound KMMFEventCategoryAudioResourceAvailable not received as expected. Received event: %d"), aDevSoundEvent);
+				StopTest(aError, EFail);
+				}
+			break;
+			}
+		default:
+			{
+			ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+			StopTest(KErrGeneral);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayARNTest::DoTimerCallback()
+	{
+	if(!iRepeat)
+		{
+		INFO_PRINTF1(_L("TimerEvent called"));
+		//iTimer->Cancel();
+		INFO_PRINTF1(_L("Starting higher priority devsound client"));
+		iDevsoundPlayClient->SetPriority(KMaximumPriority);
+		INFO_PRINTF1(_L("Initializing to play audio thru second devsound client"));
+		TInt err = iDevsoundPlayClient->PlayInit(iOtherFilename);
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Initializating DevSound to play audio thru second devsound client failed with error = %d"), err);
+			StopTest(err);
+			}
+		iRepeat = ETrue;
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Deleting second devsound client"));
+		iDevsoundPlayClient->DeleteClient();
+		iDevSoundState = EStateResumePlaying;
+		}
+	}
+
+void RA3FDevSoundPlayARNTest::PlayError(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== DevSound PlayError() callback =========="));
+	if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied)
+		{
+		INFO_PRINTF1(_L("========== Preempting 1st DevSound Instance=========="));
+		INFO_PRINTF2(_L("First DevSound client PlayError succeeded with error = %d "), aError);
+		}
+	else
+		{
+		ERR_PRINTF2(_L("First DevSound client PlayError and failed with error = %d "), aError);
+		ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+		StopTest(aError, EFail);
+		}
+	}
+
+void RA3FDevSoundPlayARNTest::ClientInitializeCompleteCallback(TInt aError)                               
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound InitializeComplete() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+		StopTest(aError);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Starting to play audio thru second devsound client"));
+		TInt err = iDevsoundPlayClient->PlayAudio();
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Starting to play audio thru second devsound client failed with error = %d"), err);
+			StopTest(err);
+			}
+		}
+	}
+
+void RA3FDevSoundPlayARNTest::ClientBufferToBeFilledCallback(TInt aError)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound BufferToBeFilled() callback =========="));
+	if (aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Second DevSound client called BufferToBeFilled and failed with error = %d"), aError);
+		StopTest(aError);
+		}
+	}
+
+void RA3FDevSoundPlayARNTest::ClientPlayHandleOpenFileErrorInValidEventOrStateCallBack(TMmfDevSoundClientErrorCodes aError)
+	{
+	switch (aError)
+		{
+		case EInvalidClientFSMEvent:
+			ERR_PRINTF1(_L("Second devsound client received an invalid Event..."));
+			break;
+		case EInvalidClientFSMState:
+			ERR_PRINTF1(_L("Second devsound client received an invalid State..."));
+			break;
+		case EReadFileErrorInClient:
+			ERR_PRINTF1(_L("Second devsound client could not read to file..."));
+			break;
+		default:
+			break;
+		}
+	StopTest(aError, EFail);
+	}
+
+void RA3FDevSoundPlayARNTest::ClientPlayErrorCallback(TInt aError, TBool aLastBuffer)
+	{
+	INFO_PRINTF1(_L("========== Second Client DevSound PlayError() callback =========="));
+
+	if (aError == KErrUnderflow && aLastBuffer)
+		{
+		INFO_PRINTF1(_L("Second DevSound client called PlayError and completed normally"));
+		iDevSoundState = EStateResumePlaying;
+		//StopTest();
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Second DevSound PlayError failed with error = %d"), aError);
+		ERR_PRINTF2(_L("Expected error = %d "), KErrUnderflow);
+		StopTest(aError, EFail);
+		}
+	}	
+
+	/*
+	 *========================================================================================================
+	 * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0040
+	 */                                      
+	RA3FDevSoundImmediatePauseAfterCreation::RA3FDevSoundImmediatePauseAfterCreation(const TDesC& aTestName) :
+	    RA3FDevSoundTestBase(aTestName), iFilename(KNullDesC)
+	    {
+	    }
+
+	RA3FDevSoundImmediatePauseAfterCreation* RA3FDevSoundImmediatePauseAfterCreation::NewL(const TDesC& aTestName)
+	    {
+	    RA3FDevSoundImmediatePauseAfterCreation* self = new (ELeave) RA3FDevSoundImmediatePauseAfterCreation(aTestName);
+	    return self;
+	    }
+
+	void RA3FDevSoundImmediatePauseAfterCreation::DoKickoffTestL()
+	    {
+	    iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	    }
+
+	void RA3FDevSoundImmediatePauseAfterCreation::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	    {
+	    switch (iDevSoundState)
+	        {
+	        case EStateCreated:
+	            {
+	            __ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundImmediatePauseAfterCreation"), EFsmIncorrectErrorPassed));
+	            if (aDevSoundEvent == EEventInitialize)
+	                {
+	                INFO_PRINTF1(_L("Calling CMMFDevSound::Pause"));
+	                
+	                iMMFDevSound->Pause();
+	                StartTimer(KMicroSecsInOneSec);
+	        
+	                iDevSoundState = EStatePause;
+	                }
+	            else
+	                {
+	                ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+	                StopTest(aError, EFail);
+	                }
+	            break;
+	            }
+	        
+	        default:
+	            {
+	            ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+	            StopTest(aError, EFail);
+	            }
+	        }
+	    }
+
+	void RA3FDevSoundImmediatePauseAfterCreation::DoTimerCallback()
+	    {
+	    INFO_PRINTF1(_L("TimerEvent called"));
+	    iTimer->Cancel();
+	    INFO_PRINTF1(_L("Pause did not panic DevSound"));
+	    StopTest(KErrNone);
+	    }
+
+	
+	/*
+	 *========================================================================================================
+	 * MM-A3F-DEVSOUND-CHRTZ-PLAY-RAW-0041
+	 */
+	RA3FDevSoundPlayEmptyBuffersWhilePlayingTest::RA3FDevSoundPlayEmptyBuffersWhilePlayingTest(const TDesC& aTestName) :
+	    RA3FDevSoundTestBase(aTestName), iVolume(0),
+	    iFilename(KNullDesC)
+	    {
+	    }
+
+	RA3FDevSoundPlayEmptyBuffersWhilePlayingTest* RA3FDevSoundPlayEmptyBuffersWhilePlayingTest::NewL(const TDesC& aTestName)
+	    {
+	    RA3FDevSoundPlayEmptyBuffersWhilePlayingTest* self = new (ELeave) RA3FDevSoundPlayEmptyBuffersWhilePlayingTest(aTestName);
+	    return self;
+	    }
+
+	void RA3FDevSoundPlayEmptyBuffersWhilePlayingTest::DoKickoffTestL()
+	    {
+	    TPtrC filename;
+	    // Get the filename of the audio file to play
+	    if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+	        StopTest (KErrNotFound);
+	        return;
+	        }
+	    // open using RFile for playback
+	    iFilename.Copy (filename);
+	    TInt err = iFile.Open (iFs, iFilename, EFileRead);
+	    if (err != KErrNone)
+	        {
+	        ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+	        iFs.Close();
+	        StopTest(err);
+	        return;
+	        }
+
+	    INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	    if (!GetIntFromConfig(iTestStepName, KVolume, iVolume))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KVolume);
+	        StopTest (KErrNotFound);
+	        return;
+	        }
+	    TPtrC fourccCode;
+	    if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+	        StopTest(KErrNotFound);
+	        return;
+	        }
+	    EncodingFromStringToTFourCC(fourccCode);
+	    }
+
+	void RA3FDevSoundPlayEmptyBuffersWhilePlayingTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	    {
+	    switch (iDevSoundState)
+	        {
+	        case EStateCreated:
+	            {
+	            __ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlaySetVolumePlayingTest"), EFsmIncorrectErrorPassed));
+	            if (aDevSoundEvent == EEventInitialize)
+	                {
+	                INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+	                TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+	                if (err != KErrNone)
+	                    {
+	                    ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error: %d"), err);
+	                    StopTest(err);
+	                    break;
+	                    }
+	                INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+	                iDevSoundState = EStateInitializing;
+	                }
+	            else
+	                {
+	                ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+	                StopTest(aError, EFail);
+	                }
+	            break;
+	            }
+	        case EStateInitializing:
+	            {
+	            if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+	                {
+	                INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+	                TRAPD(err, iMMFDevSound->PlayInitL());
+	                if (err != KErrNone)
+	                    {
+	                    StopTest(err);
+	                    break;
+	                    }
+	                iDevSoundState = EStatePlaying;
+	                }
+	            else if (aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+	                {
+	                ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+	                StopTest(aError);
+	                }
+	            else
+	                {
+	                ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+	                StopTest(aError, EFail);
+	                }
+	            break;
+	            }
+	        case EStatePlaying:
+	            {
+	            if (aDevSoundEvent == EEventBTBF)
+	                {
+	                
+	                if(iBtbfCount == 3)
+	                    {
+	                    INFO_PRINTF2(_L("BTBF count = %d, Calling CMMFDevSound::EmptyBuffers"),iBtbfCount);
+	                    iMMFDevSound->EmptyBuffers();
+	                    }
+	                
+	                else
+	                    {
+                        CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+                        TInt err = iFile.Read (buffer->Data ());
+                        if (err != KErrNone)
+                            {
+                            ERR_PRINTF2(_L("ERROR : iFile.Read() failed with: %d"), err);
+                            StopTest(err);
+                            break;
+                            }
+                        if (buffer->Data().Length ()!= buffer->RequestSize ())
+                            {
+                            iBuffer->SetLastBuffer (ETrue);
+                            }
+                        INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+                        iMMFDevSound->PlayData ();
+	                    }
+	                
+	                ++iBtbfCount;
+	                }
+	            else
+	                {
+	                ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+	                StopTest(aError, EFail);
+	                }
+	            break;
+	            }
+	        default:
+	            {
+	            ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+	            StopTest(aError, EFail);
+	            }
+	        }
+	    }
+
+	/*
+	 *========================================================================================================
+	 * 3F-DEVSOUND-CHRTZ-PLAY-RAW-0042
+	 */
+	RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest(const TDesC& aTestName) :
+	    RA3FDevSoundTestBase(aTestName),iFilename(KNullDesC),
+	    iExVolume(0), iFrequencyTone1(0), iDuration(0),  
+	    iSetVolume(EFalse), iResume(EFalse)
+	    {
+	    }
+
+	RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest* RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::NewL(const TDesC& aTestName)
+	    {
+	    RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest* self = new (ELeave) RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest(aTestName);
+	    return self;
+	    }
+
+	void RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::DoKickoffTestL()
+	    {
+	    TPtrC filename;
+	    // Get the filename of the audio file to play
+	    if (!GetStringFromConfig(iTestStepName, KFilename, filename))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KFilename);
+	        StopTest(KErrNotFound);
+	        return;
+	        }
+	    // open using RFile for playback
+	    iFilename.Copy(filename);
+	    TInt err = iFile.Open(iFs, iFilename, EFileRead);
+	    if (err != KErrNone)
+	        {
+	        ERR_PRINTF2(_L("Could not open input file. Error = %d"), err);
+	        StopTest(err);
+	        return;
+	        }
+
+	    INFO_PRINTF2(_L("File under test  -> %S"), &iFilename);
+
+	    if (!GetIntFromConfig(iTestStepName, KFrequencyTone1, iFrequencyTone1))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KFrequencyTone1);
+	        StopTest(KErrNotFound);
+	        return;
+	        }
+	    if (!GetIntFromConfig(iTestStepName, KDuration, iDuration))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KDuration);
+	        StopTest(KErrNotFound);
+	        return;
+	        }
+	    TPtrC fourccCode;
+	    if (!GetStringFromConfig(iTestStepName, KFourccCode, fourccCode))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KFourccCode);
+	        StopTest(KErrNotFound);
+	        return;
+	        }
+	    
+	    if (!GetIntFromConfig(iTestStepName, KExVolume, iExVolume))
+	        {
+	        ERR_PRINTF2(KMsgErrorGetParameter, &KExVolume);
+	        StopTest(KErrNotFound);
+	        return;
+	        }
+	    
+	    EncodingFromStringToTFourCC(fourccCode);
+	    iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+	    iDevsoundToneClient = CA3FDevSoundToneClient::NewL(*this);
+	    }
+
+	void RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::Fsm(TMmfDevSoundEvent aDevSoundEvent, TInt aError)
+	    {
+	    switch (iDevSoundState)
+	        {
+	        case EStateCreated:
+	            {
+	            __ASSERT_ALWAYS((aError == KErrNone), Panic(_L("RA3FDevSoundPlayPreemptedByToneTest"), EFsmIncorrectErrorPassed));
+	            if (aDevSoundEvent == EEventInitialize)
+	                {
+	                INFO_PRINTF1(_L("Calling CMMFDevSound::InitializeL"));
+	                TRAPD(err, iMMFDevSound->InitializeL(*this, iFourCCCode, EMMFStatePlaying));
+	                if (err != KErrNone)
+	                    {
+	                    ERR_PRINTF2(_L("CMMFDevSound::InitializeL left with error = %d"), err);
+	                    StopTest(err);
+	                    break;
+	                    }
+	                INFO_PRINTF1(_L("DevSound State: EStateInitializing"));
+	                iDevSoundState = EStateInitializing;
+	                }
+	            else
+	                {
+	                ERR_PRINTF2(_L("DevSound EEventInitialize not received as expected. Received event: %d"), aDevSoundEvent);
+	                StopTest(aError, EFail);
+	                }
+	            break;
+	            }
+	        case EStateInitializing:
+	            {
+	            if (aDevSoundEvent == EEventInitComplete && aError == KErrNone)
+	                {
+	                TMMFPrioritySettings priority;
+	                priority.iPriority = KMinimumPriority;
+	                INFO_PRINTF2(_L("Setting Priority to %d using CMMFDevSound::SetPrioritySettings"), priority.iPriority);
+	                iMMFDevSound->SetPrioritySettings (priority);
+	                iMMFDevSound->SetVolume (iMMFDevSound->MaxVolume ());
+	                INFO_PRINTF1(_L("Calling CMMFDevSound::PlayInitL"));
+	                TRAPD(err, iMMFDevSound->PlayInitL());
+	                if (err != KErrNone)
+	                    {
+	                    StopTest (err);
+	                    break;
+	                    }
+	                INFO_PRINTF1(_L("DevSound State: EStatePlaying"));
+	                iDevSoundState = EStatePlaying;
+	                StartTimer (KMicroSecsTwoSec);
+	                }
+	            else if ( aDevSoundEvent == EEventInitComplete && aError != KErrNone)
+	                {
+	                ERR_PRINTF2(_L("DevSound called CMMFDevSound::InitializeComplete with error: %d"), aError);
+	                StopTest(aError);
+	                }
+	            else
+	                {
+	                ERR_PRINTF2(_L("DevSound EEventInitComplete not received as expected. Received event: %d"), aDevSoundEvent);
+	                StopTest(aError, EFail);
+	                }
+	            break;
+	            }
+	        case EStatePlaying:
+	            {
+	            if (aDevSoundEvent == EEventBTBF)
+	                {
+                    if(iResume)
+                        {
+                        INFO_PRINTF1(_L("First Client resumed after pre-emption as expected"));
+                        StopTest();
+                        break;
+                        }
+                    
+                    if(!iSetVolume)
+                        {
+                        iMMFDevSound->SetVolume (iExVolume);
+                        iSetVolume = ETrue;
+                        }
+                    
+	                CMMFDataBuffer* buffer = static_cast <CMMFDataBuffer*> (iBuffer);
+	                TInt err = iFile.Read (buffer->Data());
+	                if (err != KErrNone)
+	                    {
+	                    ERR_PRINTF2(_L("ERROR : iFile.Read() failed with %d"), err);
+	                    StopTest(err);
+	                    break;
+	                    }
+	                if (buffer->Data().Length ()!= buffer->RequestSize())
+	                    {
+	                    iBuffer->SetLastBuffer(ETrue);
+	                    }
+	                INFO_PRINTF1(_L("Calling CMMFDevSound::PlayData"));
+	                iMMFDevSound->PlayData();
+	                }
+	            else
+	                {
+	                ERR_PRINTF2(_L("DevSound EEventBTBF not received as expected. Received event: %d"), aDevSoundEvent);
+	                StopTest(aError, EFail);
+	                }
+	            break;
+	            }
+	        default:
+	            {
+	            ERR_PRINTF2(_L("Invalid DevSound state received: %d"), iDevSoundState);
+	            StopTest(aError, EFail);
+	            }
+	        }
+	    }
+
+	void RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::DoTimerCallback()
+	    {
+	    INFO_PRINTF1(_L("TimerEvent called"));
+	    iTimer->Cancel();
+	    INFO_PRINTF1(_L("Starting higher priority devsound client"));
+	    iDevsoundToneClient->SetPriority(KMaximumPriority);
+	    INFO_PRINTF1(_L("Initializing to play tones thru second devsound client"));
+	    TInt err = iDevsoundToneClient->InitTonePlay(iFrequencyTone1,iDuration*KMicroSecsInOneSec);
+	    if (err != KErrNone)
+	        {
+	        ERR_PRINTF2(_L("Initializating DevSoud to play tones thru second devsound client failed with error = %d"), err);
+	        StopTest(err);
+	        }
+	    }
+
+	void RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::PlayError(TInt aError)
+	    {
+	    INFO_PRINTF1(_L("========== DevSound PlayError() callback =========="));
+	    if (aError == KErrInUse || aError == KErrDied || aError == KErrAccessDenied)
+	        {
+	        INFO_PRINTF1(_L("========== Preempting 1st DevSound Instance=========="));
+	        INFO_PRINTF2(_L("First DevSound client PlayError succeeded with error = %d "), aError);
+	        }
+	    else
+	        {
+	        ERR_PRINTF2(_L("First DevSound client called PlayError and failed with error = %d "), aError);
+	        ERR_PRINTF4(_L("Expected posibilities %d %d %d "), KErrInUse, KErrDied, KErrAccessDenied);
+	        StopTest(aError, EFail);
+	        }
+	    }
+
+	void RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::ClientInitializeCompleteCallback(TInt aError)
+	    {
+	    INFO_PRINTF1(_L("==========Second DevSound client called InitializeComplete()=========="));
+	    if (aError == KErrNone)
+	        {
+	        INFO_PRINTF1(_L("Starting to play tone thru second devsound client"));
+	        TInt err = iDevsoundToneClient->PlayTone ();
+	        if (err != KErrNone)
+	            {
+	            ERR_PRINTF2(_L("Second Devsound client called PlayTone and failed with error = %d"), err);
+	            StopTest(err);
+	            }
+	        }
+	    else
+	        {
+	        ERR_PRINTF2(_L("Second Devsound InitializeComplete received an error = %d"), aError);
+	        StopTest(aError);
+	        }
+	    }
+
+	void RA3FDevSoundPlayPreemptedByToneAfterSetVolumeTest::ClientToneFinishedCallback(TInt aError)
+	    {
+	    INFO_PRINTF1(_L("========== Second  DevSound client called ToneFinished()=========="));
+	    if (aError == KErrUnderflow)
+	        {
+	        INFO_PRINTF2(_L("Second DevSound client called ToneFinished and succeeded with error = %d"), aError);
+            iDevSoundState = EStatePlaying;
+            iResume = ETrue;
+            TRAPD(err, iMMFDevSound->PlayInitL());
+            if(err != KErrNone)
+                {
+                ERR_PRINTF2(_L("Call PlayInitL failed after Second DevSound client called ToneFinished with error = %d"), err);
+                StopTest(aError);
+                }
+	        }
+	    else
+	        {
+	        ERR_PRINTF2(_L("Second DevSound client called ToneFinished and failed with error = %d"), aError);
+	        StopTest(aError);
+	        }
+	    }
+