cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CRestrictedAudioOutputData.cpp
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CRestrictedAudioOutputData.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,417 @@
+/*
+* 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_CRestrictedAudioOutputData.h"
+
+/*@{*/
+//Command literals 
+_LIT(KCmdNewL, 									"NewL");
+_LIT(KCmdDestructor, 								"~");
+_LIT(KCmdAppendAllowedOutput, 						"AppendAllowedOutput");
+_LIT(KCmdRemoveAllowedOutput, 						"RemoveAllowedOutput");
+_LIT(KCmdGetAllowedOutput, 						"GetAllowedOutput");
+_LIT(KCmdGetAllowedOutputCount, 					"GetAllowedOutputCount");
+_LIT(KCmdReset, 									"Reset");
+_LIT(KCmdCommit, 									"Commit");
+/*@}*/
+
+/*@{*/
+//INI Section name literals 
+_LIT(KOutput, 									"Output");
+_LIT(KIndex, 									"Index");
+_LIT(KDevSoundInstanceName, 					"DevSoundInstanceName");
+/*@}*/
+
+/*@{*/
+//Enumeration Literals 
+_LIT(KEAllowAllAudio, 							"EAllowAllAudio");
+_LIT(KEAllowAudioAnalog, 						"EAllowAudioAnalog");
+_LIT(KEAllowAudioFMTransmitter, 				"EAllowAudioFMTransmitter");
+_LIT(KEAllowAudioBtHFPHSP, 						"EAllowAudioBtHFPHSP");
+_LIT(KEAllowAudioBtA2DP, 						"EAllowAudioBtA2DP");
+_LIT(KEAllowAudioUplink, 						"EAllowAudioUplink");
+_LIT(KEAllowAudioUsb, 							"EAllowAudioUsb");
+_LIT(KEAllowAudioRecording, 					"EAllowAudioRecording");
+_LIT(KEAllowVisualization, 						"EAllowVisualization");
+/*@}*/
+
+const CDataWrapperBase::TEnumEntryTable CT_CRestrictedAudioOutputData::iEnumAllowedOutputPreference[]=
+	{
+	{ KEAllowAllAudio, CRestrictedAudioOutput::EAllowAllAudio},
+	{ KEAllowAudioAnalog, CRestrictedAudioOutput::EAllowAudioAnalog},
+	{ KEAllowAudioFMTransmitter, CRestrictedAudioOutput::EAllowAudioFMTransmitter},
+	{ KEAllowAudioBtHFPHSP, CRestrictedAudioOutput::EAllowAudioBtHFPHSP},
+	{ KEAllowAudioBtA2DP, CRestrictedAudioOutput::EAllowAudioBtA2DP},
+	{ KEAllowAudioUplink, CRestrictedAudioOutput::EAllowAudioUplink},
+	{ KEAllowAudioUsb, CRestrictedAudioOutput::EAllowAudioUsb},
+	{ KEAllowAudioRecording, CRestrictedAudioOutput::EAllowAudioRecording},
+	{ KEAllowVisualization, CRestrictedAudioOutput::EAllowVisualization}
+	};
+
+/**
+ * Public destructor
+ */
+CT_CRestrictedAudioOutputData::~CT_CRestrictedAudioOutputData()
+	{
+	DestroyData();
+	}
+
+/**
+ * Two phase constructor
+ *
+ * @leave	system wide error
+ */
+CT_CRestrictedAudioOutputData* CT_CRestrictedAudioOutputData::NewL()
+	{
+	CT_CRestrictedAudioOutputData* ret = new (ELeave) CT_CRestrictedAudioOutputData();
+	return ret;
+	}
+
+/**
+ * Return a pointer to the object that the data wraps
+ *
+ * @return	pointer to the object that the data wraps
+ */
+TAny* CT_CRestrictedAudioOutputData::GetObject()
+	{
+	return iRestrictedAudioOutput;
+	}
+
+/**
+ * Helper destructor
+ */
+void CT_CRestrictedAudioOutputData::DestroyData()
+	{		
+	if (iRestrictedAudioOutput)
+		{
+		delete iRestrictedAudioOutput;
+		iRestrictedAudioOutput = 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_CRestrictedAudioOutputData::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 == KCmdAppendAllowedOutput)
+		{
+		DoCmdAppendAllowedOutput(aSection);
+		}
+	else if (aCommand == KCmdRemoveAllowedOutput)
+		{
+		DoCmdRemoveAllowedOutput(aSection);
+		}
+	else if (aCommand == KCmdGetAllowedOutput)
+		{
+		DoCmdGetAllowedOutput(aSection);
+		}
+	else if (aCommand == KCmdGetAllowedOutputCount)
+		{
+		DoCmdGetAllowedOutputCount();
+		}
+	else if (aCommand == KCmdReset)
+		{
+		DoCmdReset();
+		}
+	else if (aCommand == KCmdCommit)
+		{
+		DoCmdCommit();
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Unknown command"));
+		ret=EFalse;
+		}
+
+	return ret;
+	}
+
+/**
+ * Create a new instance of CRestrictedAudioOutput
+ * @param aSection - Section to read from the ini file
+ * @return void
+ */
+void CT_CRestrictedAudioOutputData::DoCmdNewL(const TTEFSectionName& aSection)
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdNewL()"));
+	DestroyData();
+	TPtrC devSoundInstanceName;
+	if (!GetStringFromConfig(aSection, KDevSoundInstanceName, devSoundInstanceName))
+		{
+		ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KDevSoundInstanceName);
+    	SetBlockResult(EFail);
+		}
+	else
+		{
+		CMMFDevSound* mMFDevSound = static_cast<CMMFDevSound*>(GetDataObjectL(devSoundInstanceName));		
+		TInt error;
+		if ( !iRestrictedAudioOutput )
+	        {
+	    	if ( mMFDevSound )
+	    		{
+	    		CleanupStack::PushL(mMFDevSound);
+	            iRestrictedAudioOutput = (CRestrictedAudioOutput*)mMFDevSound->CustomInterface(KUidRestrictedAudioOutput);
+	    	    if ( iRestrictedAudioOutput == NULL )
+	    	        {
+	    			ERR_PRINTF1(_L("Failed to create RestrictedAudioOutput"));
+	    			error = KErrNotFound;
+	    			SetError(error);
+	    	        }
+	    	    else
+	    	    	{
+	    	    	INFO_PRINTF1(_L("RestrictedAudioOutput created"));
+		    		CleanupStack::Pop(mMFDevSound);
+	    	    	}	    		
+	    	    }
+	    	else 
+	    	    {
+				ERR_PRINTF1(_L("DevSound not ready"));
+				error = KErrNotReady;
+				SetError(error);
+	    	    }    	
+	        }
+		INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdNewL()"));
+		}	
+	}
+
+/**
+ * Delete an instance of CRestrictedAudioOutput
+ * @param
+ * @return void
+ */
+void CT_CRestrictedAudioOutputData::DoCmdDestructor()
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdDestructor()"));
+	DestroyData();
+	INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdDestructor()"));
+	}
+
+/**
+ * Appends an allowed output to the existing list.
+ * @param aSection - The section to read from the ini file
+ * @return void
+ */
+void CT_CRestrictedAudioOutputData::DoCmdAppendAllowedOutput(const TTEFSectionName& aSection)
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdAppendAllowedOutput()"));	
+	TInt output;
+	if ( !GetEnumFromConfig(aSection, KOutput, iEnumAllowedOutputPreference, output) )
+		{
+		ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KOutput);
+    	SetBlockResult(EFail);
+		}
+	else
+		{
+		TInt error;
+		error = iRestrictedAudioOutput->AppendAllowedOutput((CRestrictedAudioOutput::TAllowedOutputPreference) output);
+		
+		if ( (error!=KErrNone) && (error!=KErrAlreadyExists) )
+			{
+			ERR_PRINTF2(_L("Error in appending allowed output. Error: %d"), error);
+			SetError(error);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Allowed output 0x%x appended"), (CRestrictedAudioOutput::TAllowedOutputPreference) output);
+			INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdAppendAllowedOutput()"));
+			}		
+		}
+	}
+
+/**
+ * Removes an allowed output from the existing list.
+ * @param aSection - The section to read from the ini file
+ * @return void
+ */
+void CT_CRestrictedAudioOutputData::DoCmdRemoveAllowedOutput(const TTEFSectionName& aSection)
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdRemoveAllowedOutput()"));
+    TInt output;
+	if(!GetEnumFromConfig(aSection, KOutput, iEnumAllowedOutputPreference, output))
+		{
+		ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KOutput);
+    	SetBlockResult(EFail);
+		}
+	else
+		{
+		TInt error;
+		error = iRestrictedAudioOutput->RemoveAllowedOutput((CRestrictedAudioOutput::TAllowedOutputPreference) output);
+		if (error != KErrNone)
+			{
+			ERR_PRINTF2(_L("Error in removing allowed output. Error: %d"), error);
+			SetError(error);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Allowed output 0x%x removed"), (CRestrictedAudioOutput::TAllowedOutputPreference) output);
+			INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdRemoveAllowedOutput()"));
+			}	
+		}
+	}
+
+/**
+ * Gets a reference to an allowed output located at a specified position
+ * within the list.
+ * @param aSection - The section to read from the ini file
+ * @return void
+ */
+void CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutput(const TTEFSectionName& aSection)
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutput()"));
+	TInt index;
+	if ( !GetIntFromConfig(aSection, KIndex, index) )
+		{
+		ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KIndex);
+    	SetBlockResult(EFail);
+		}
+	else
+		{
+		TInt error;
+	    CRestrictedAudioOutput::TAllowedOutputPreference allowedOutput;
+		error = iRestrictedAudioOutput->GetAllowedOutput(index, allowedOutput);
+		if ( error != KErrNone ) 
+			{
+			ERR_PRINTF2(_L("Error in getting allowed output. Error: %d"), error);
+			SetError(error);
+			}
+		else
+			{
+			switch (allowedOutput)	
+				{
+				case CRestrictedAudioOutput::EAllowAllAudio:
+					INFO_PRINTF1(_L("AllowAllAudio"));
+				break;
+				case CRestrictedAudioOutput::EAllowAudioAnalog:
+					INFO_PRINTF1(_L("AllowAudioAnalog"));
+				break;
+				case CRestrictedAudioOutput::EAllowAudioFMTransmitter:
+					INFO_PRINTF1(_L("AllowAudioFMTransmitter"));
+				break;
+				case CRestrictedAudioOutput::EAllowAudioBtHFPHSP:
+					INFO_PRINTF1(_L("AllowAudioBtHFPHSP"));
+				break;
+				case CRestrictedAudioOutput::EAllowAudioBtA2DP:
+					INFO_PRINTF1(_L("AllowAudioBtA2DP"));
+				break;
+				case CRestrictedAudioOutput::EAllowAudioUplink:
+					INFO_PRINTF1(_L("AllowAudioUplink"));
+				break;
+				case CRestrictedAudioOutput::EAllowAudioUsb:
+					INFO_PRINTF1(_L("AllowAudioUsb"));
+				break;
+				case CRestrictedAudioOutput::EAllowAudioRecording:
+					INFO_PRINTF1(_L("AllowAudioRecording"));
+				break;
+				case CRestrictedAudioOutput::EAllowVisualization:
+					INFO_PRINTF1(_L("AllowVisualization"));
+				break;
+				default:
+					INFO_PRINTF2(_L("Unknown output 0x%x"), allowedOutput);
+				}
+			INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutput()"));
+			}		
+		}	
+	}
+	
+
+/**
+ * Gets the number of allowed objects in the array. *
+ * @param 
+ * @return void
+ */
+void CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutputCount()
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutputCount()"));
+	TInt error, size;
+	error = iRestrictedAudioOutput->GetAllowedOutputCount(size);
+	if(error != KErrNone)
+		{
+		ERR_PRINTF2(_L("Error in getting allowed output count. Error: %d"), error);
+		SetError(error);
+		}
+	else
+		{
+		INFO_PRINTF2(_L("Allowed output count: %d"), size);	
+		INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdGetAllowedOutputCount()"));
+		}	
+	}
+
+/**
+ * Empties the list, so that it is ready to be reused.
+ *
+ * @param
+ * @return void
+ */
+void CT_CRestrictedAudioOutputData::DoCmdReset()
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdReset()"));
+	TInt error;
+    error = iRestrictedAudioOutput->Reset();
+    if (error!=KErrNone)
+        {
+		ERR_PRINTF2(_L("Error in reset. Error: %d"), error);
+		SetError(error);
+        }
+    else
+    	{
+    	INFO_PRINTF1(_L("Reset successfully"));
+        INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdReset()"));
+    	}    
+	}
+
+
+/**
+ * Applies settings cached locally and commits.
+ *
+ * This function can only be called when the DevSound instance is in Idle OR
+ * Stopped state.
+ * @param
+ * @return
+ */
+
+void CT_CRestrictedAudioOutputData::DoCmdCommit()
+	{
+	INFO_PRINTF1(_L("*START*CT_CRestrictedAudioOutputData::DoCmdCommit()"));
+    TInt error;
+    error = iRestrictedAudioOutput->Commit();
+    if (error != KErrNone)
+        {
+		ERR_PRINTF2(_L("Error in Commit. Error: %d"), error);
+		SetError(error);
+        }
+    else
+    	{
+    	INFO_PRINTF1(_L("Commit successfully"));
+    	INFO_PRINTF1(_L("*END*CT_CRestrictedAudioOutputData::DoCmdCommit()"));
+    	}
+	}