cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CTelephonyAudioRoutingData.cpp
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cellularsrvapitest/telephonydevsoundhaitest/devsound/src/T_CTelephonyAudioRoutingData.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,530 @@
+/*
+* 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_CTelephonyAudioRoutingData.h"
+
+const TUid EEarPiece		 				= TUid::Uid(0x02);
+const TUid EHeadSet			 				= TUid::Uid(0x04);
+/*@{*/
+//Command literals 
+_LIT(KCmdNewL, 								"NewL");
+_LIT(KCmdDestructor, 							"~");
+_LIT(KCmdAvailableOutputs, 					"AvailableOutputs");
+_LIT(KCmdOutput, 								"Output");
+_LIT(KCmdPreviousOutput, 						"PreviousOutput");
+_LIT(KCmdSetShowNote, 							"SetShowNote");
+_LIT(KCmdGetShowNote,							"GetShowNote");
+_LIT(KCmdSetOutputL, 							"SetOutputL");
+/*@}*/
+
+/*@{*/
+//INI Section name literals 
+_LIT(KMode, 								"Mode");
+/*@}*/
+
+/*@{*/
+//Enumeration Literals 
+_LIT(KENotActive, 							"ENotActive");
+_LIT(KENone, 								"ENone");
+_LIT(KEHandset, 							"EHandSet");
+_LIT(KELoudSpeaker, 						"ELoudSpeaker");
+_LIT(KEWiredAudioAccessory, 				"EWiredAudioAccessory");
+_LIT(KEBTAudioAccessory, 					"EBTAudioAccessory");
+_LIT(KETTY, 								"ETTY");
+_LIT(KEEarPiece,							"EEarPiece");
+_LIT(KEHeadSet,								"EHeadSet");
+/*@}*/
+
+const CDataWrapperBase::TEnumEntryTable CT_CTelephonyAudioRoutingData::iEnumOutput[] = 
+	{ 
+	{ KENotActive,	CTelephonyAudioRouting::ENotActive},
+	{ KENone, CTelephonyAudioRouting::ENone},
+	{ KEHandset, CTelephonyAudioRouting::EHandset},
+	{ KEEarPiece, EEarPiece.iUid},
+	{ KELoudSpeaker, CTelephonyAudioRouting::ELoudspeaker},
+	{ KEWiredAudioAccessory, CTelephonyAudioRouting::EWiredAudioAccessory},
+	{ KEHeadSet,	EHeadSet.iUid},
+	{ KEBTAudioAccessory, CTelephonyAudioRouting::EBTAudioAccessory},
+	{ KETTY, CTelephonyAudioRouting::ETTY}
+	};
+
+/**
+ * Public destructor
+ */
+CT_CTelephonyAudioRoutingData::~CT_CTelephonyAudioRoutingData()
+	{
+	DestroyData();
+	}
+
+/**
+ * Two phase constructor
+ * @leave	system wide error
+ */
+
+CT_CTelephonyAudioRoutingData* CT_CTelephonyAudioRoutingData::NewL()
+	{
+	CT_CTelephonyAudioRoutingData* ret = new (ELeave) CT_CTelephonyAudioRoutingData();
+	return ret;
+	}
+
+/**
+ * Private constructor. First phase construction
+ */
+
+CT_CTelephonyAudioRoutingData::CT_CTelephonyAudioRoutingData()
+	:
+	iTelephonyAudioRouting (NULL)
+	{
+	}
+
+
+void CT_CTelephonyAudioRoutingData::DestroyData()
+{
+if(iTelephonyAudioRouting)
+	{
+	delete iTelephonyAudioRouting;
+	iTelephonyAudioRouting = NULL;
+	}
+}
+
+
+/**
+ * Return a pointer to the object that the data wraps
+ * @return	pointer to the object that the data wraps
+ */
+TAny* CT_CTelephonyAudioRoutingData::GetObject()
+	{
+	return iTelephonyAudioRouting;
+	}
+
+
+/**
+ * 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_CTelephonyAudioRoutingData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt /*aAsyncErrorIndex*/)
+	{
+	TBool ret = ETrue;
+	
+	if (aCommand == KCmdNewL)
+		{
+		DoCmdNewL();
+		}
+	else if (aCommand == KCmdDestructor)
+		{
+		DoCmdDestructor();
+		}
+	else if (aCommand == KCmdAvailableOutputs)
+		{
+		DoCmdAvailableOutputs();
+		}
+	else if (aCommand == KCmdOutput)
+		{
+		DoCmdOutput();
+		}
+	else if (aCommand == KCmdPreviousOutput)
+		{
+		DoCmdPreviousOutput();
+		}
+	else if (aCommand == KCmdSetShowNote)
+		{
+		DoCmdSetShowNote(aSection);
+		}
+	else if (aCommand == KCmdGetShowNote)
+		{
+		DoCmdGetShowNote();
+		}
+	else if (aCommand == KCmdSetOutputL)
+		{
+		DoCmdSetOutputL(aSection);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Unknown command"));
+		ret=EFalse;
+		}
+	
+	return ret;	
+	}
+
+/**
+ * Signals that available audio outputs have changed. 
+ * @param CTelephonyAudioRouting& aTelephonyAudioRouting reference.
+ * @return void
+ */
+void CT_CTelephonyAudioRoutingData::AvailableOutputsChanged( CTelephonyAudioRouting& /*aTelephonyAudioRouting*/)
+	{
+	INFO_PRINTF1(_L("CT_CTelephonyAudioRoutingData::AvailableOutputsChanged"));
+	}
+
+/**
+ * Signals that current output has changed. 
+ * @param CTelephonyAudioRouting& aTelephonyAudioRouting reference.
+ * @return void
+ */
+void CT_CTelephonyAudioRoutingData::OutputChanged( CTelephonyAudioRouting& /*aTelephonyAudioRouting*/)
+	{
+	INFO_PRINTF1(_L("CT_CTelephonyAudioRoutingData::OutputChanged"));
+	}
+
+/**
+ * Signals that CTelephonyAudioRouting::SetOutputL request issued by this
+ * application (on CTelephonyAudioRouting instance) was serviced by the
+ * Adaptation.
+ * Only when the observer receives this callback, the application should consider
+ * CTelephonyAudioRouting::SetOutputL message to be completed.
+ *
+ * @param CTelephonyAudioRouting& aTelephonyAudioRouting reference.
+ * @param aError KErrNone if output requested by application is set, else
+ *        system-wide error code.
+ * @return void
+ */
+void CT_CTelephonyAudioRoutingData::SetOutputComplete( CTelephonyAudioRouting& /*aTelephonyAudioRouting*/, TInt aError)
+	{
+	DecOutstanding();
+	if(aError != KErrNone)
+		{
+		ERR_PRINTF2(_L("Could not set output complete: %d"), aError);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("CT_CTelephonyAudioRoutingData::SetOutputComplete"));
+		}
+	}
+
+/**
+ * Create an instance of CTelephonyAudioRouting
+ * @param 
+ * @return
+ */
+void CT_CTelephonyAudioRoutingData::DoCmdNewL()
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdNewL"));
+	DestroyData();
+	TRAPD(error,iTelephonyAudioRouting = CTelephonyAudioRouting::NewL(*this));
+	if(error!=KErrNone)
+		{
+		ERR_PRINTF2(_L("> Could not create CTelephonyAudioRouting: %d"), error);
+		SetError(error);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("CTelephonyAudioRouting created successfully."));
+		INFO_PRINTF1(_L("*END*CT_CTelephonyAudioRoutingData::DoCmdNewL"));
+		}	
+	}
+
+/**
+ * Delete the instance of CTelephonyAudioRouting
+ * @param
+ * @return
+ */
+void CT_CTelephonyAudioRoutingData::DoCmdDestructor()
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdDestructor"));
+	DestroyData();
+	INFO_PRINTF1(_L("*END*CTelephonyAudioRouting destroyed successfully."));
+	}
+
+
+/**
+* Shows the array of currently available outputs.
+* The array contains list of following outputs depending on whether the
+* output is available or not at the time of query:
+*  - EHandset
+*  - ELoudspeaker
+*  - EWiredAudioAccessory,
+*  - EWiredAccessory,
+*  - EBTAudioAccessory
+*  - ETTY
+* Audio can be routed to any of the available outputs in the list.
+* @param 
+* @return 
+*/
+
+void CT_CTelephonyAudioRoutingData::DoCmdAvailableOutputs()
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdAvailableOutputs"));	
+	TInt availableOutput;
+	const TArray<CTelephonyAudioRouting::TAudioOutput>& availableOutputsArray(iTelephonyAudioRouting->AvailableOutputs());
+	
+	if (availableOutputsArray.Count()==0)
+		{
+		INFO_PRINTF1(_L("None available output"));
+		}
+	else
+		{
+		TBuf<80> msg;
+		for (TInt i=0;i<availableOutputsArray.Count();i++)
+			{
+			availableOutput = availableOutputsArray[i];
+			switch (availableOutput)
+				{
+				case CTelephonyAudioRouting::ENotActive:
+					msg.Append(_L("not active"));
+				break;
+				case CTelephonyAudioRouting::ENone:
+					msg.Append(_L("none"));
+				break;
+				case CTelephonyAudioRouting::EHandset:
+					msg.Append(_L("handset"));
+				break;
+				case CTelephonyAudioRouting::ELoudspeaker:
+					msg.Append(_L("loudspeaker"));
+				break;
+				case CTelephonyAudioRouting::EWiredAudioAccessory:
+					msg.Append(_L("wired acc"));
+				break;
+				case CTelephonyAudioRouting::EBTAudioAccessory:
+					msg.Append(_L("BT audio acc"));
+				break;
+				case CTelephonyAudioRouting::ETTY:
+					msg.Append(_L("ETTY"));
+				break;
+				default:
+					msg.AppendFormat(_L("0x%x"), availableOutput);
+				}
+			if(i+1<availableOutputsArray.Count())
+				{
+				msg.Append(_L(","));
+				}
+			}
+			INFO_PRINTF2(_L("Available Outputs: %S"), &msg);
+		}
+	INFO_PRINTF1(_L("*END*CT_CTelephonyAudioRoutingData::DoCmdAvailableOutputs"));
+	}
+
+
+/**
+ * Shows the current output configured by the client application to play
+ * telephony audio.
+ * @param none.
+ * @return void.
+ */
+
+void CT_CTelephonyAudioRoutingData::DoCmdOutput()
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdOutput"));
+	iOutput = iTelephonyAudioRouting->Output();
+    INFO_PRINTF2(_L("Output: 0x%x"),iOutput);
+    switch(iOutput)
+        {
+        case CTelephonyAudioRouting::ENotActive :
+        	INFO_PRINTF1(_L("Not active"));
+        break;
+        case CTelephonyAudioRouting::ENone :
+        	INFO_PRINTF1(_L("None"));
+        break;
+        case CTelephonyAudioRouting::EHandset :
+        	INFO_PRINTF1(_L("Handset"));
+        break;
+        case CTelephonyAudioRouting::ELoudspeaker :
+        	INFO_PRINTF1(_L("Loudspeaker"));
+        break;
+        case CTelephonyAudioRouting::EWiredAudioAccessory :
+        	INFO_PRINTF1(_L("Wired acc"));
+        break;
+        case CTelephonyAudioRouting::EBTAudioAccessory :
+        	INFO_PRINTF1(_L("BT audio acc"));
+        break;
+        case CTelephonyAudioRouting::ETTY :
+        	INFO_PRINTF1(_L("ETTY"));
+        break;
+        default:
+        	INFO_PRINTF2(_L("0x%x"), iOutput);
+        }
+    INFO_PRINTF1(_L("*END*CT_CTelephonyAudioRoutingData::DoCmdOutput"));
+	}
+
+
+/**
+ * Show the second last output that was successfully configured to
+ * play telephony audio.
+ * @param none.
+ * @return void
+ */
+
+void CT_CTelephonyAudioRoutingData::DoCmdPreviousOutput()
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdPreviousOutput"));	
+    CTelephonyAudioRouting::TAudioOutput previousOutput;
+	previousOutput = iTelephonyAudioRouting->PreviousOutput();
+	INFO_PRINTF2(_L("Previous audio output: 0x%x"), previousOutput);
+    switch (previousOutput)
+        {
+        case CTelephonyAudioRouting::ENotActive:
+        	INFO_PRINTF1(_L("Not active"));
+        break;
+        case CTelephonyAudioRouting::ENone:
+        	INFO_PRINTF1(_L("None"));
+        break;
+        case CTelephonyAudioRouting::EHandset:
+        	INFO_PRINTF1(_L("Handset"));
+        break;
+        case CTelephonyAudioRouting::ELoudspeaker:
+        	INFO_PRINTF1(_L("Loudspeaker"));
+        break;
+        case CTelephonyAudioRouting::EWiredAudioAccessory:
+        	INFO_PRINTF1(_L("Wired acc"));
+        break;
+        case CTelephonyAudioRouting::EBTAudioAccessory:
+        	INFO_PRINTF1(_L("BT audio acc"));
+        break;
+        case CTelephonyAudioRouting::ETTY:
+        	INFO_PRINTF1(_L("ETTY"));
+        break;
+        default:
+        	INFO_PRINTF2(_L("0x%x"), previousOutput);
+        }
+    INFO_PRINTF1(_L("*END*CT_CTelephonyAudioRoutingData::DoCmdPreviousOutput"));	
+	}
+
+
+/*
+ * Sends the Show Note mode to server along with the next SetOutputL()
+ * request.
+ * After SetOutputL() request from the Application is succesfully
+ * processed by the server and application receives SetOutputComplete()
+ * callback with KErrNone, it can query Show Note mode sent to server by
+ * calling GetShowNote().
+ * Other observers wanting to query Show Note mode can call GetShowNote()
+ * after receiving OutputChanged() callback.
+ *
+ * @param aSection the Section to read from the ini file.
+ * @return 
+ */
+
+void CT_CTelephonyAudioRoutingData::DoCmdSetShowNote(const TTEFSectionName& aSection)
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdSetShowNote"));
+	TBool mode;
+	if(!GetBoolFromConfig(aSection, KMode, mode))
+		{
+		ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KMode);
+    	SetBlockResult(EFail);
+		}
+	else
+		{
+		TInt error = iTelephonyAudioRouting->SetShowNote(mode);
+	    if (error != KErrNone)
+	        {
+	    	ERR_PRINTF2(_L("Could not set show note. Error: %d"), error);
+	    	SetError(error);
+	        }
+	    else
+	    	{
+	    	INFO_PRINTF2(_L("Mode set to: %d"), mode);
+			INFO_PRINTF1(_L("*END*CT_CTelephonyAudioRoutingData::DoCmdSetShowNote"));
+	    	}		
+		}    
+	}
+
+
+/**
+ * Shows the  Show Note mode for the last succesfully completed
+ * SetOutputL() request.
+ * @param 
+ * @return 
+ */
+
+
+void CT_CTelephonyAudioRoutingData::DoCmdGetShowNote()
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdGetShowNote"));
+	TBool mode;
+	TInt error = iTelephonyAudioRouting->GetShowNote(mode);
+    if(error != KErrNone) 
+        {
+    	ERR_PRINTF2(_L("Could not get show note. Error: %d"), error);
+    	SetError(error);
+        }
+    else
+    	{
+    	INFO_PRINTF2(_L("Mode: %d"), mode);
+        INFO_PRINTF1(_L("*END*CT_CTelephonyAudioRoutingData::DoCmdGetShowNote"));
+    	}    
+	}
+
+/**
+ * Sends an asynchronous request to Adaptation to set the output
+ * where telephony audio will be routed. This request is completed only
+ * when the application receives
+ * MTelephonyAudioRoutingObserver::SetOutputComplete callback.
+ * @param aSection - The section to read from the ini file
+ * @return none.
+ */
+
+void CT_CTelephonyAudioRoutingData::DoCmdSetOutputL(const TTEFSectionName& aSection)
+	{
+	INFO_PRINTF1(_L("*START*CT_CTelephonyAudioRoutingData::DoCmdSetOutputL"));
+	TInt output;
+	if (!GetEnumFromConfig(aSection, KCmdOutput, iEnumOutput, output))
+		{
+		ERR_PRINTF2(_L("Error in getting parameter %S from INI file"), &KCmdOutput);
+    	SetBlockResult(EFail);
+    	}
+	else
+		{
+		if(iOutput!=output)
+			{
+			TRAPD(error, iTelephonyAudioRouting->SetOutputL((CTelephonyAudioRouting::TAudioOutput)output));
+		    IncOutstanding();
+		    if (error != KErrNone)
+		    	{
+		    	ERR_PRINTF2(_L("Could not set output. Error: %d"), error);
+		    	SetError(error);
+		        }
+		    else
+		    	{
+		    	INFO_PRINTF1(_L("Output set to: "));
+			    switch (output)
+				    {
+				    case CTelephonyAudioRouting::ENotActive:
+				    	INFO_PRINTF1(_L("Not active"));
+				    break;
+				    case CTelephonyAudioRouting::ENone:
+				    	INFO_PRINTF1(_L("None"));
+				    break;
+				    case CTelephonyAudioRouting::EHandset:
+				    	INFO_PRINTF1(_L("Handset"));
+				    break;
+				    case CTelephonyAudioRouting::ELoudspeaker:
+				    	INFO_PRINTF1(_L("Loudspeaker"));
+				    break;
+				    case CTelephonyAudioRouting::EWiredAudioAccessory:
+				    	INFO_PRINTF1(_L("Wired acc"));
+				    break;
+				    case CTelephonyAudioRouting::EBTAudioAccessory:
+				    	INFO_PRINTF1(_L("BT audio acc"));
+				    break;
+				    case CTelephonyAudioRouting::ETTY:
+				    	INFO_PRINTF1(_L("ETTY"));
+			        break;
+				    default:
+				    	INFO_PRINTF2(_L("%d"), output);
+				    }
+		    	}
+	    	}
+		}
+	INFO_PRINTF1(_L("*END*CT_CTelephonyAudioRoutingData::DoCmdSetOutputL"));
+	}