cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CAudioInputData.cpp
author Oscar Gonzalez <oscar.1.gonzalez@nokia.com>
Thu, 06 May 2010 15:10:38 +0100
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
permissions -rw-r--r--
opencode

/*
* 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:
*
*/

#include "T_CAudioInputData.h"


/*@{*/
// Output options Id's
const TUid INPUT_DEFAULTMIC						= TUid::Uid(0x00);
const TUid INPUT_OUTPUTTOSPEAKER				= TUid::Uid(0x01);
const TUid INPUT_FMRADIO 						= TUid::Uid(0x02);
const TUid INPUT_VOICECALL 						= TUid::Uid(0x03);
const TUid INPUT_LINEIN  						= TUid::Uid(0x04);
/*@}*/


/*@{*/
//Section name literals 
_LIT(KDevSoundKey, 								"DevSoundInstanceName");
_LIT(KAudioInputPar, 							"AudioInput");
/*@}*/

/*@{*/
//Command literals 
_LIT(KCmdNewL, 									"NewL");
_LIT(KCmdDestructor, 							"~");
_LIT(KCmdAudioInput,							"AudioInput");
_LIT(KCmdSetAudioInput, 						"SetAudioInput");
/*@}*/



/*@{*/
// Output options literal
_LIT(KInput_DefaultMic, 						"Input_DefaultMic");
_LIT(KInput_OutputtoSpeaker,					"Input_OutputtoSpeaker");
_LIT(KInput_FMRadio,	 						"Input_FMRadio");
_LIT(KInput_VoiceCall,	 						"Input_VoiceCall");
_LIT(KInput_LineIn,	 							"Input_LineIn");
/*@}*/


const CDataWrapperBase::TEnumEntryTable CT_CAudioInputData::iEnumInputOptions[] = 
	{ 
	{ KInput_DefaultMic,		INPUT_DEFAULTMIC.iUid },	
	{ KInput_OutputtoSpeaker,	INPUT_OUTPUTTOSPEAKER.iUid },
	{ KInput_FMRadio,			INPUT_FMRADIO.iUid },	
	{ KInput_VoiceCall,			INPUT_VOICECALL.iUid },
	{ KInput_LineIn,			INPUT_LINEIN.iUid }
	};


/**
 * Two phase constructor
 *
 * @leave	system wide error
 */
CT_CAudioInputData* CT_CAudioInputData::NewL()
	{
	CT_CAudioInputData* ret = new (ELeave) CT_CAudioInputData();
	return ret;
	}

/**
 * Private constructor. First phase construction
 */
CT_CAudioInputData::CT_CAudioInputData()
	:
	iAudioInput(NULL)
	{
	}

/**
 * Return a pointer to the object that the data wraps
 *
 * @return	pointer to the object that the data wraps
 */
TAny* CT_CAudioInputData::GetObject()
	{
	return iAudioInput;
	}
/**
 * Helper method for DoCmdDestructor
 */
void CT_CAudioInputData::DestroyData()
	{
	if (iAudioInput)
		{ 
		delete iAudioInput;
		iAudioInput = NULL;
		}		
	}

/**
 * Process a command read from the Ini file
 * @param aCommand 			- The command to process
 * @param aSection			- The section get from the *.ini file of the project T_Wlan
 * @param aAsyncErrorIndex	- Command index dor async calls to returns errors to
 * @return TBool			- ETrue if the command is process
 * @leave					- system wide error
 */
TBool CT_CAudioInputData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
	{
	TBool ret = ETrue;	
	if (aCommand == KCmdNewL)
		{
		DoCmdNewL(aSection);
		}
	else if (aCommand == KCmdDestructor)
		{
		DoCmdDestructor();
		}
	else if (aCommand == KCmdAudioInput)
		{
		DoCmdAudioInput();
		}
	else if (aCommand == KCmdSetAudioInput)
		{
		DoCmdSetAudioInputL(aSection);
		}
	else
		{
		ERR_PRINTF1(_L("Unknown command."));
		ret=EFalse;
		}
	return ret;
	}

/**
 * Create an instance of CAudioInput object
 * @param aSection - Section to read param from the ini file
 * @return none 
 */
void CT_CAudioInputData::DoCmdNewL(const TTEFSectionName& aSection)  
	{
	DestroyData();
	INFO_PRINTF1(_L("*START*CT_CAudioInputData::DoCmdNewL()"));
	TPtrC devSoundObject;
    if( !GetStringFromConfig(aSection, KDevSoundKey, devSoundObject) )
    	{
    	ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDevSoundKey);
    	SetBlockResult(EFail);
    	}
    else
    	{
	    CMMFDevSound* DevSoundObject = static_cast<CMMFDevSound*>(GetDataObjectL(devSoundObject));
	    iAudioInput = (CAudioInput*)DevSoundObject->CustomInterface(KUidAudioInput);	
	    INFO_PRINTF1(_L("*END*CT_CAudioInputData::DoCmdNewL()"));
    	}
	}

/**
 * Destroy an instance of CAudioInput object
 * @param none
 * @param none
 */
void CT_CAudioInputData::DoCmdDestructor()
	{
	INFO_PRINTF1(_L("*START*CT_CAudioInputData::DoCmdDestructor()"));
	DestroyData();
	INFO_PRINTF1(_L("*END*CT_CAudioInputData::DoCmdDestructor()"));
	}

/**
 * Get an array of Audio Input
 * @param none
 * @return none
 */
void CT_CAudioInputData::DoCmdAudioInput()
	{
	INFO_PRINTF1(_L("*START*CT_CAudioInputData::DoCmdAudioInput()"));
	CAudioInput::TAudioInputArray inputArray = iAudioInput->AudioInput();
	INFO_PRINTF1(_L("*END*CT_CAudioInputData::DoCmdAudioInput()"));
	}

/**
 * Set the audio input
 * @param aSection  - Section to read param from the ini file
 * @return none		
 */
void CT_CAudioInputData::DoCmdSetAudioInputL(const TTEFSectionName& aSection)
	{
	
	INFO_PRINTF1(_L("*START*CT_CAudioInputData::DoCmdSetAudioInputL()"));
    TInt parAudioInput;    
	if(!GetEnumFromConfig(aSection, KAudioInputPar, iEnumInputOptions, parAudioInput))
		{
		ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KAudioInputPar);
    	SetBlockResult(EFail);    		
		}
	else
		{
		CArrayFixFlat<CAudioInput::TAudioInputPreference>* inputarray = new (ELeave) CArrayFixFlat<CAudioInput::TAudioInputPreference>(4);             
		CleanupStack::PushL(inputarray);
		inputarray->AppendL((CAudioInput::TAudioInputPreference)parAudioInput);    
		TRAPD( error, iAudioInput->SetAudioInputL( inputarray->Array() ) );
		if( error != KErrNone )
			{
			ERR_PRINTF2(_L("Setting audio input failed with error %d"), error);
	        SetError(error);
	        }
		else
			{
			CleanupStack::PopAndDestroy(&inputarray);
			INFO_PRINTF1(_L("*END*CT_CAudioInputData::DoCmdSetAudioInputL()"));
			}
		}
	}