devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputMessageHandler/src/RestrictedAudioOutputMessageHandler.cpp
changeset 0 b8ed18f6c07b
child 2 5c1df44f2eed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/restrictedaudiooutput/RestrictedAudioOutputMessageHandler/src/RestrictedAudioOutputMessageHandler.cpp	Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2007 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:   This is the implementation of the CRestrictedAudioOutputMessageHandler class.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "RestrictedAudioOutput.h"
+#include    "RestrictedAudioOutputMessageHandler.h"
+#include    "RestrictedAudioOutputMessageTypes.h"
+                
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CRestrictedAudioOutputMessageHandler::CRestrictedAudioOutputMessageHandler(CRestrictedAudioOutput* aAudioOutput)
+	 :	CMMFObject(KUidRestrictedAudioOutput)
+    {
+    iAudioOutput = aAudioOutput;
+    }
+
+// Two-phased constructor.
+EXPORT_C CRestrictedAudioOutputMessageHandler* CRestrictedAudioOutputMessageHandler::NewL(TAny* aCustomInterface)
+    {
+    CRestrictedAudioOutput* audioOutput = (CRestrictedAudioOutput*)aCustomInterface;
+    CRestrictedAudioOutputMessageHandler* self = new (ELeave) CRestrictedAudioOutputMessageHandler(audioOutput);
+
+	self->ConstructL();
+    return self;
+    }
+    
+// -----------------------------------------------------------------------------
+// CRestrictedAudioOutputMessageHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CRestrictedAudioOutputMessageHandler::ConstructL()
+	{
+	}
+
+    
+// Destructor
+CRestrictedAudioOutputMessageHandler::~CRestrictedAudioOutputMessageHandler()
+	{
+	delete iAudioOutput;
+	}
+
+
+// ---------------------------------------------------------
+// CRestrictedAudioOutputMessageHandler::AudioOutputL
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TUid CRestrictedAudioOutputMessageHandler::Uid()
+	{
+	return KUidRestrictedAudioOutput;
+	}
+
+// ---------------------------------------------------------
+// CRestrictedAudioOutputMessageHandler::SetAudioOutputL
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CRestrictedAudioOutputMessageHandler::HandleRequest(TMMFMessage& aMessage)
+	{
+	ASSERT(aMessage.Destination().InterfaceId() == KUidRestrictedAudioOutput);
+	TRAPD(error,DoHandleRequestL(aMessage));
+	if(error)
+		{
+		aMessage.Complete(error);
+		}
+	}
+
+// ---------------------------------------------------------
+// CRestrictedAudioOutputMessageHandler::DoHandleRequestL
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CRestrictedAudioOutputMessageHandler::DoHandleRequestL(TMMFMessage& aMessage)
+	{
+
+	switch(aMessage.Function())
+		{
+		case ERaofCommit:
+			{
+			DoCommitL(aMessage);
+			break;
+			}			
+		default:
+			{
+			aMessage.Complete(KErrNotSupported);
+			}
+		}
+	}
+	
+	
+// ---------------------------------------------------------
+// CRestrictedAudioOutputMessageHandler::DoCommitL
+// ?implementation_description
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CRestrictedAudioOutputMessageHandler::DoCommitL(TMMFMessage& aMessage)
+	{
+#ifdef _DEBUG 	
+	RDebug::Print(_L("CRestrictedAudioOutputMessageHandler::DoCommitL"));
+#endif
+	
+	TPckgBuf<TInt> countPckg;
+	aMessage.ReadData1FromClient(countPckg);
+	TInt count = countPckg();
+	
+#ifdef _DEBUG 	
+	RDebug::Print(_L("CRestrictedAudioOutputMessageHandler::DoCommitL Count: %d"),count);
+#endif
+		
+	CArrayFixFlat<CRestrictedAudioOutput::TAllowedOutputPreference>* outputArray =
+		new(ELeave) CArrayFixFlat<CRestrictedAudioOutput::TAllowedOutputPreference>(4);
+	CleanupStack::PushL(outputArray);
+	outputArray->ResizeL(count);
+	
+	TInt length = count * outputArray->Length();
+	TPtr8 arrayPtr((TUint8*)&(*outputArray)[0],length, length);
+	aMessage.ReadData2FromClient(arrayPtr);
+	
+	CRestrictedAudioOutput::TAllowedOutputPreference pref;	
+	
+	TInt err = iAudioOutput->Reset();
+	
+	for (TInt i = 0; i < count; i++)
+	{
+		pref = (outputArray->Array())[i];
+#ifdef _DEBUG 
+		RDebug::Print(_L("DoCommitL Calling Append for: %d"),pref);
+#endif		
+		TInt err = iAudioOutput->AppendAllowedOutput(pref);
+	}
+	
+#ifdef _DEBUG 		
+	RDebug::Print(_L("CRestrictedAudioOutputMessageHandler::DoCommitL Calling Commit..."));
+#endif
+
+	iAudioOutput->Commit();	
+	CleanupStack::PopAndDestroy();	//outputArray
+		
+	aMessage.Complete(KErrNone);
+	}
+		
+
+// End of File