haitest/bspsvs/suite/bsp/sound/src/t_currentsoundformatdata.cpp
changeset 0 cec860690d41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/haitest/bspsvs/suite/bsp/sound/src/t_currentsoundformatdata.cpp	Tue Feb 02 01:39:10 2010 +0200
@@ -0,0 +1,496 @@
+/*
+* Copyright (c) 2005-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:
+*
+*/
+
+/**
+@test
+@internalComponent
+
+This contains CT_CurrentSoundFormatData
+*/
+
+//	User includes
+#include "t_currentsoundformatdata.h"
+#include "sound_util.h"
+
+/*@{*/
+///	Commands
+_LIT(KCmdNew,						"new");
+_LIT(KCmdDestructor,				"~");
+_LIT(KCmd_iRate_get,				"irate_get");
+_LIT(KCmd_iRate_set,				"irate_set");
+_LIT(KCmd_iEncoding_get,			"iencoding_get");
+_LIT(KCmd_iEncoding_set,			"iencoding_set");
+_LIT(KCmd_iChannels_get,			"ichannels_get");
+_LIT(KCmd_iChannels_set,			"ichannels_set");
+_LIT(KCmd_iBufferSize_get,			"ibuffer_size_get");
+_LIT(KCmd_iBufferSize_set,			"ibuffer_size_set");
+
+/*@{*/
+///	Parameters
+
+_LIT(KRate,							"rate");
+_LIT(KRateExpected,					"rate_expected");
+_LIT(KEncoding,						"encoding");
+_LIT(KEncodingExpected,				"encoding_expected");
+_LIT(KChannels,						"channels");
+_LIT(KChannelsExpected,				"channels_expected");
+_LIT(KBufferSize,					"buffer_size");
+_LIT(KBufferSizeExpected,			"buffer_size_expected");
+// possible parameter for new to indicate loading settings from 
+// SoundFormatsSupported object
+_LIT(KNewFromSoundFormatsSupported,	"new_from_sound_formats_supported");
+// for SoundFormatsSupported object
+_LIT(KSoundFormatsSupportedObject,	"SoundFormatsSupportedObject");
+// Enums declared in INI file
+
+///	Logging
+_LIT(KLogNew,						"New object created successfully");
+_LIT(KLogNewError,					"Error in creating object error code=%d");
+/*@}*/
+
+/**
+ * Two phase constructor
+ */
+CT_CurrentSoundFormatData* CT_CurrentSoundFormatData::NewL()
+	{
+	CT_CurrentSoundFormatData*	ret=new (ELeave) CT_CurrentSoundFormatData();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+/**
+* Constructor. First phase construction
+*/
+CT_CurrentSoundFormatData::CT_CurrentSoundFormatData()
+:	CDataWrapperBase()
+,	iCurrentFormat(NULL)
+	{
+	}
+
+/**
+ * Second phase construction
+ */
+void CT_CurrentSoundFormatData::ConstructL()
+	{	
+	}
+
+/**
+* Destructor
+*/
+CT_CurrentSoundFormatData::~CT_CurrentSoundFormatData()
+	{
+	DoCleanup();
+	}
+
+/**
+ * Helper method for doing cleanup operation
+ */
+void CT_CurrentSoundFormatData::DoCleanup()
+	{
+	delete iCurrentFormat;
+	iCurrentFormat=NULL;	
+	}
+
+/**
+ * Return a pointer to the object that the data wraps
+ *
+ * @return pointer to the object that the data wraps
+ */
+TAny* CT_CurrentSoundFormatData::GetObject()
+
+	{
+	return iCurrentFormat;
+	}
+
+/**
+ * Set the wrapped data object with new value
+ */
+void CT_CurrentSoundFormatData::SetObjectL(TAny* aAny)
+
+	{
+	DoCleanup();
+	iCurrentFormat=static_cast<RMdaDevSound::TCurrentSoundFormat*>(aAny);
+	}
+
+/**
+ * Clear the wrapped data object pointer w/o de-initialization
+ */
+void CT_CurrentSoundFormatData::DisownObjectL()
+
+	{
+	iCurrentFormat=NULL;
+	}
+
+/**
+ * Return static cleanup function
+ */
+inline TCleanupOperation CT_CurrentSoundFormatData::CleanupOperation()
+
+	{
+	return CleanupOperation;
+	}
+
+/**
+ * Static cleanup function
+ */
+void CT_CurrentSoundFormatData::CleanupOperation( TAny* aAny )
+	{
+	RMdaDevSound::TCurrentSoundFormat* format = static_cast<RMdaDevSound::TCurrentSoundFormat*> ( aAny );
+	delete format;
+	}
+
+/**
+* Process a command read from the ini file
+*
+* @param aDataWrapper	test step requiring command to be processed
+* @param aCommand	the command to process
+* @param aSection		the entry in the ini file requiring the command to be processed
+*
+* @return ETrue if the command is processed
+*/
+TBool CT_CurrentSoundFormatData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	ret=ETrue;
+	if ( aCommand==KCmdNew )
+		{
+		DoCmdNewL(aSection);
+		}
+	else if ( aCommand==KCmdDestructor )
+		{
+		DoCmdDestructor();
+		}
+	else if ( aCommand==KCmd_iRate_get )
+		{
+		DoCmd_iRate_get(aSection);
+		}
+	else if ( aCommand==KCmd_iEncoding_get )
+		{
+		DoCmd_iEncoding_getL(aSection);
+		}
+	else if ( aCommand==KCmd_iChannels_get )
+		{
+		DoCmd_iChannels_get(aSection);
+		}
+	else if ( aCommand==KCmd_iBufferSize_get )
+		{
+		DoCmd_iBufferSize_get(aSection);
+		}
+	else if ( aCommand==KCmd_iRate_set )
+		{
+		DoCmd_iRate_set(aSection);
+		}
+	else if ( aCommand==KCmd_iEncoding_set )
+		{
+		DoCmd_iEncoding_set(aSection);
+		}
+	else if ( aCommand==KCmd_iChannels_set )
+		{
+		DoCmd_iChannels_set(aSection);
+		}
+	else if ( aCommand==KCmd_iBufferSize_set )
+		{
+		DoCmd_iBufferSize_set(aSection);
+		}
+	else
+		{
+		ret=CDataWrapperBase::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
+		}
+
+	return ret;
+	}
+
+/**
+ * Function for creating new instance of RMdaDevSound::TCurrentSoundFormat
+ * 
+ * @param aSection 			section name where can be indicated to create new
+ * 							from SoundFormatsSupported object values
+ * 							KNewFromSoundFormatsSupported - create from 
+ * 							SoundFormatsSupported object
+ *
+ * @return					void
+ *
+ * @leave					System wide error
+ */
+void CT_CurrentSoundFormatData::DoCmdNewL(const TDesC& aSection)
+	{
+	DoCleanup();
+	
+	TRAPD(err, iCurrentFormat = new (ELeave) RMdaDevSound::TCurrentSoundFormat());	
+	if ( err!=KErrNone )
+		{
+		ERR_PRINTF2(KLogNewError, err);
+		SetError(err);
+		}
+	else
+		{
+		INFO_PRINTF1(KLogNew);
+		TBool new_object;
+		if (GET_OPTIONAL_BOOL_PARAMETER(KNewFromSoundFormatsSupported(), aSection, new_object))
+			{
+			DoInitiateSupportedFormatsL(aSection);
+			}
+		}
+	}
+
+/**
+ * Function to perform cleanup opertation
+ */
+void CT_CurrentSoundFormatData::DoCmdDestructor()
+	{
+	DoCleanup();
+	}
+
+/**
+ * Get function for iRate
+ * 
+ * @param aSection 			section name where expected value can be read
+ *							KRateExpected - expected rate
+ * 		
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iRate_get(const TDesC& aSection)
+	{	
+	TInt	expected;
+	if (GET_OPTIONAL_INT_PARAMETER(KRateExpected(), aSection, expected))
+		{
+		if(iCurrentFormat->iRate != expected)
+			{
+			ERR_PRINTF3(_L("Expected result != iRate, expected=%d, iRate=%d"), expected, iCurrentFormat->iRate);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("iRate == expected result!"));
+			}
+		}
+	else
+		{
+		INFO_PRINTF2(_L("iRate=%d"), iCurrentFormat->iRate);
+		}
+	}
+	
+
+/**
+ * Set function for iRate
+ * 
+ * @param aSection 			section name where value to set can be read
+ * 							KRate - rate to set
+ *
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iRate_set(const TDesC& aSection)
+	{	
+	GET_MANDATORY_INT_PARAMETER(KRate(), aSection, iCurrentFormat->iRate);
+	}
+
+/**
+ * Get function for iEncoding
+ * 
+ * @param aSection 			section name where expected value can be read
+ * 							KEncodingExpected - expected encoding
+ *
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iEncoding_getL(const TDesC& aSection)
+	{	
+	TUint expEncoding;
+	if(GetOrFromConfig(aSection, KEncodingExpected(), TSoundUtil::iEnumTableSoundEncoding, expEncoding ))
+		{
+		TUint encodings = iCurrentFormat->iEncoding;
+		if(expEncoding != encodings)
+			{
+			ERR_PRINTF3(_L("iEncoding != expected result! iEncodings=0x%x, expected result=0x%x"), encodings, expEncoding);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			INFO_PRINTF3(_L("iEncoding == expected result!, iEncodings=0x%x, expected=0x%x"), encodings, expEncoding);
+			}			
+		}
+	else
+		{
+		INFO_PRINTF2(_L("iEncoding=0x%x"), iCurrentFormat->iEncoding);
+		}
+	}
+
+/**
+ * Set function for iEncoding
+ * 
+ * @param aSection 			section name where value to set can be read
+ * 							KEncoding - encoding to set
+ *
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iEncoding_set(const TDesC& aSection)
+	{	
+	TUint encoding;
+	if(GetOrFromConfig(aSection, KEncoding(), TSoundUtil::iEnumTableSoundEncoding, encoding ))
+		{
+		iCurrentFormat->iEncoding = (RMdaDevSound::TMdaSoundEncoding)encoding;
+		INFO_PRINTF2(_L("iEncoding=0x%x"), iCurrentFormat->iEncoding);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Could not get encoding from TMdaSoundEncoding in INI file"));
+		SetBlockResult(EFail);
+		}
+	}
+
+/**
+ * Get function for iChannels
+ * 
+ * @param aSection 			section name where expected value can be read
+ * 							KChannelsExpected - channels expected
+ *
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iChannels_get(const TDesC& aSection)
+	{
+	TInt	expected;
+	if (GET_OPTIONAL_INT_PARAMETER(KChannelsExpected(), aSection, expected))
+		{
+		if(iCurrentFormat->iChannels != expected)
+			{
+			ERR_PRINTF3(_L("Expected result != iChannels, expected=%d, iChannels=%d"), expected, iCurrentFormat->iChannels);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("iChannels == expected result!"));
+			}
+		}
+	else
+		{
+		INFO_PRINTF2(_L("iChannels=%d"), iCurrentFormat->iChannels);
+		}
+	}
+
+/**
+ * Set function for iChannels
+ * 
+ * @param aSection 			section name where value to set can be read
+ * 							KChannels - channels to set
+ *
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iChannels_set(const TDesC& aSection)
+	{
+	GET_MANDATORY_INT_PARAMETER(KChannels(), aSection, iCurrentFormat->iChannels);
+	}
+
+/**
+ * Get function for iBufferSize
+ * 
+ * @param aSection 			section name where expected value can be read
+ * 							KBufferSizeExpected - buffer size expected
+ *
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iBufferSize_get(const TDesC& aSection)
+	{
+	TInt	expected;
+	if (GET_OPTIONAL_INT_PARAMETER(KBufferSizeExpected(), aSection, expected))
+		{
+		if(iCurrentFormat->iBufferSize != expected)
+			{
+			ERR_PRINTF3(_L("Expected result != iBufferSize, expected=%d, iBufferSize=%d"), expected, iCurrentFormat->iBufferSize);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			INFO_PRINTF1(_L("iBufferSize == expected result!"));
+			}
+		}
+	else
+		{
+		INFO_PRINTF2(_L("iBufferSize=%d"), iCurrentFormat->iBufferSize);
+		}
+	}
+
+/**
+ * Set function for iBufferSize
+ * 
+ * @param aSection 			section name where value to set can be read
+ * 							KBufferSize - buffer size to set
+ *
+ * @return					void
+ *
+ * @leave					no
+ */
+void CT_CurrentSoundFormatData::DoCmd_iBufferSize_set(const TDesC& aSection)
+	{
+	GET_MANDATORY_INT_PARAMETER(KBufferSize(), aSection, iCurrentFormat->iBufferSize);
+	}
+
+/**
+ * Function to set current sound format with first valid values from 
+ * TSoundFormatsSupported object. Function will set iBufferSize, iChannels,
+ * iRate and iEncoding variable
+ * 
+ * @param aSection 			section name which contains SoundFormatsSupported object
+ *							KSoundFormatsSupportedObject - SoundFormatsSupported object
+ * 							name 
+ * 
+ * @return					void
+ *
+ * @leave					System wide error
+ */
+void CT_CurrentSoundFormatData::DoInitiateSupportedFormatsL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calling DoInitiateSupportedFormats(), Setting iCurrentFormat variables from TSoundFormatsSupported"));
+	TPtrC		objectName;	
+	if (GET_MANDATORY_STRING_PARAMETER(KSoundFormatsSupportedObject, aSection, objectName))
+		{		
+		RMdaDevSound::TSoundFormatsSupported* soundFormat =
+			static_cast<RMdaDevSound::TSoundFormatsSupported*>(GetDataObjectL(objectName));	
+		iCurrentFormat->iBufferSize = soundFormat->iMinBufferSize;
+		iCurrentFormat->iChannels = soundFormat->iChannels;
+		iCurrentFormat->iRate = soundFormat->iMinRate;
+		if (soundFormat->iEncodings & RMdaDevSound::EMdaSoundEncoding8BitPCM) 
+			{
+			iCurrentFormat->iEncoding = RMdaDevSound::EMdaSoundEncoding8BitPCM;
+			}
+		else if(soundFormat->iEncodings & RMdaDevSound::EMdaSoundEncoding16BitPCM)
+			{
+			iCurrentFormat->iEncoding = RMdaDevSound::EMdaSoundEncoding16BitPCM;
+			}
+		else if(soundFormat->iEncodings & RMdaDevSound::EMdaSoundEncoding8BitALaw)
+			{
+			iCurrentFormat->iEncoding = RMdaDevSound::EMdaSoundEncoding8BitALaw;
+			}
+		else if(soundFormat->iEncodings & RMdaDevSound::EMdaSoundEncoding8BitMuLaw)
+			{
+			iCurrentFormat->iEncoding = RMdaDevSound::EMdaSoundEncoding8BitMuLaw;
+			}
+		}	
+	}