devsoundextensions/effects/EnvReverb/EnvironmentalReverbProxy/Src/EnvironmentalReverbProxy.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devsoundextensions/effects/EnvReverb/EnvironmentalReverbProxy/Src/EnvironmentalReverbProxy.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2004 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: Implementation of the Environmental Reverb proxy class
+*
+*/
+
+
+
+
+// INCLUDE FILES
+
+#ifdef _DEBUG
+#include <e32svr.h>
+#endif
+
+#include "EnvironmentalReverbProxy.h"
+#include "EnvironmentalReverbEventObserver.h"
+#include "RoomLevelProxy.h"
+#include <CustomInterfaceUtility.h>
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::CEnvironmentalReverbProxy
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CEnvironmentalReverbProxy::CEnvironmentalReverbProxy(
+ TMMFMessageDestinationPckg aMessageHandler,
+ MCustomCommand& aCustomCommand,
+ CCustomInterfaceUtility* aCustomInterfaceUtility )
+ : iCustomCommand(&aCustomCommand),
+ iMessageHandler(aMessageHandler),
+ iCustomInterfaceUtility(aCustomInterfaceUtility)
+
+ {
+ }
+
+// Destructor
+CEnvironmentalReverbProxy::~CEnvironmentalReverbProxy()
+ {
+ // Remove the custom interface message handler before we destroy the proxy.
+
+ TInt numOfRoomLevel = iCRoomLevelProxyList.Count();
+ if (numOfRoomLevel > 0)
+ {
+ for (TInt i = 0; i < numOfRoomLevel; ++i)
+ {
+ iCRoomLevelProxyList[i]->DettachReverb(*this);
+ }
+ };
+ iCRoomLevelProxyList.Close();
+ if(iCustomInterfaceUtility)
+ iCustomInterfaceUtility->RemoveCustomInterface(iMessageHandler);
+ delete iEnvironmentalReverbEventObserver;
+ delete iCustomInterfaceUtility;
+ }
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::NewL
+// Static function for creating an instance of the Environmental Reverb object.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CEnvironmentalReverbProxy* CEnvironmentalReverbProxy::NewL(
+ TMMFMessageDestinationPckg aMessageHandler,
+ MCustomCommand& aCustomCommand,
+ CCustomInterfaceUtility* aCustomInterfaceUtility )
+ {
+ CEnvironmentalReverbProxy* self = new (ELeave) CEnvironmentalReverbProxy(aMessageHandler, aCustomCommand, aCustomInterfaceUtility);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CEnvironmentalReverbProxy::ConstructL()
+ {
+#ifdef _DEBUG
+ RDebug::Print(_L("CEnvironmentalReverbProxy::ConstructL"));
+#endif
+ iEnvironmentalReverbEventObserver = CEnvironmentalReverbEventObserver::NewL(iMessageHandler, *iCustomCommand, *this);
+ StartObserver();
+ // sends a message to fetch initial data.
+ TEfEnvReverbDataPckg dataPckgFrom;
+ iCustomCommand->CustomCommandSync(iMessageHandler, (TInt)EErfInitialize, KNullDesC8, KNullDesC8, dataPckgFrom);
+ SetEffectData(dataPckgFrom);
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::GetUniqueId
+// return a TInt 32 integer
+// -----------------------------------------------------------------------------
+//
+TUint32 CEnvironmentalReverbProxy::GetUniqueId() const
+ {
+ return iReverbData.iEnvironmentalReverbId;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::AttachRoomLevel
+// Add the reference of aProxy to array
+// -----------------------------------------------------------------------------
+//
+TInt CEnvironmentalReverbProxy::RoomLevelAttached(CRoomLevelProxy& aProxy)
+ {
+
+ TInt error = iCRoomLevelProxyList.Find(&aProxy);
+ if (error == KErrNotFound)
+ {
+ error = iCRoomLevelProxyList.Append(&aProxy);
+ }
+
+
+ return error;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbImpl::DetachRoomLevel
+// Remove the reference of aProxy from array
+// -----------------------------------------------------------------------------
+//
+TInt CEnvironmentalReverbProxy::RoomLevelDetached(CRoomLevelProxy& aProxy)
+ {
+ TInt found = iCRoomLevelProxyList.Find(&aProxy);
+ if (found != KErrNotFound)
+ {
+ iCRoomLevelProxyList.Remove(found);
+ found = KErrNone;
+ }
+ return found;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::ApplyL
+// Apply the Environmental Reverb settings.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CEnvironmentalReverbProxy::ApplyL()
+ {
+#ifdef _DEBUG
+ RDebug::Print(_L("CEnvironmentalReverbProxy::Apply"));
+#endif
+
+ if ( !iHaveUpdateRights )
+ {
+ User::Leave(KErrAccessDenied);
+ }
+
+ iReverbData.iEnabled = iEnabled;
+ iReverbData.iEnforced = iEnforced;
+ iReverbData.iHaveUpdateRights = iHaveUpdateRights;
+ iCustomCommand->CustomCommandSync(iMessageHandler, (TInt)EErfApply, DoEffectData(), KNullDesC8);
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::StartObserver
+// Starts the event observer. The event observer monitors asynchronous events
+// from the message handler.
+// -----------------------------------------------------------------------------
+//
+void CEnvironmentalReverbProxy::StartObserver()
+ {
+#ifdef _DEBUG
+ RDebug::Print(_L("CEnvironmentalReverbProxy::StartObserver"));
+#endif
+
+ iEnvironmentalReverbEventObserver->Start();
+ }
+
+// -----------------------------------------------------------------------------
+// CEnvironmentalReverbProxy::EnvironmentalReverbEvent
+// Checks which data member has changed and notify the observers.
+// -----------------------------------------------------------------------------
+//
+void CEnvironmentalReverbProxy::EnvironmentalReverbEvent(
+ const TDesC8& aBuffer )
+ {
+#ifdef _DEBUG
+ RDebug::Print(_L("CEnvironmentalReverbProxy::EnvironmentalReverbEvent"));
+#endif
+
+ TEfEnvReverbDataPckg dataPckgFrom;
+ dataPckgFrom.Copy(aBuffer);
+ TEfEnvironmentalReverb newReverbData = dataPckgFrom();
+
+ TUint8 event = 0;
+
+ if ( newReverbData.iEnabled != iReverbData.iEnabled )
+ {
+ iReverbData.iEnabled = newReverbData.iEnabled;
+ iEnabled = newReverbData.iEnabled;
+ if ( iReverbData.iEnabled )
+ {
+ event = MAudioEffectObserver::KEnabled;
+ }
+ else
+ {
+ event = MAudioEffectObserver::KDisabled;
+ }
+ }
+ else if ( newReverbData.iEnforced != iReverbData.iEnforced )
+ {
+ iReverbData.iEnforced = newReverbData.iEnforced;
+ iEnforced = newReverbData.iEnforced;
+ if ( iReverbData.iEnforced )
+ {
+ event = MAudioEffectObserver::KEnforced;
+ }
+ else
+ {
+ event = MAudioEffectObserver::KNotEnforced;
+ }
+ }
+ else if ( newReverbData.iHaveUpdateRights != iReverbData.iHaveUpdateRights )
+ {
+ iReverbData.iHaveUpdateRights = newReverbData.iHaveUpdateRights;
+ iHaveUpdateRights = newReverbData.iHaveUpdateRights;
+ if ( iReverbData.iHaveUpdateRights )
+ {
+ event = MAudioEffectObserver::KGainedUpdateRights;
+ }
+ else
+ {
+ event = MAudioEffectObserver::KLostUpdateRights;
+ }
+ }
+ else if ( newReverbData.iDecayTime != iReverbData.iDecayTime )
+ {
+ iReverbData.iDecayTime = newReverbData.iDecayTime;
+ event = MEnvironmentalReverbObserver::KDecayTimeChanged;
+ }
+ else if ( newReverbData.iDecayHFRatio != iReverbData.iDecayHFRatio )
+ {
+ iReverbData.iDecayHFRatio = newReverbData.iDecayHFRatio;
+ event = MEnvironmentalReverbObserver::KDecayHFRatioChanged;
+ }
+ else if ( newReverbData.iDensity != iReverbData.iDensity )
+ {
+ iReverbData.iDensity = newReverbData.iDensity;
+ event = MEnvironmentalReverbObserver::KDensityChanged;
+ }
+ else if ( newReverbData.iDiffusion != iReverbData.iDiffusion )
+ {
+ iReverbData.iDiffusion = newReverbData.iDiffusion;
+ event = MEnvironmentalReverbObserver::KDiffusionChanged;
+ }
+ else if ( newReverbData.iReflectionsDelay != iReverbData.iReflectionsDelay )
+ {
+ iReverbData.iReflectionsDelay = newReverbData.iReflectionsDelay;
+ event = MEnvironmentalReverbObserver::KReflectionsDelayChanged;
+ }
+ else if ( newReverbData.iReflectionsLevel != iReverbData.iReflectionsLevel )
+ {
+ iReverbData.iReflectionsLevel = newReverbData.iReflectionsLevel;
+ event = MEnvironmentalReverbObserver::KReflectionsLevelChanged;
+ }
+ else if ( newReverbData.iReverbDelay != iReverbData.iReverbDelay )
+ {
+ iReverbData.iReverbDelay = newReverbData.iReverbDelay;
+ event = MEnvironmentalReverbObserver::KReverbDelayChanged;
+ }
+ else if ( newReverbData.iReverbLevel != iReverbData.iReverbLevel )
+ {
+ iReverbData.iReverbLevel = newReverbData.iReverbLevel;
+ event = MEnvironmentalReverbObserver::KReverbLevelChanged;
+ }
+ else if ( newReverbData.iRoomLevel != iReverbData.iRoomLevel )
+ {
+ iReverbData.iRoomLevel = newReverbData.iRoomLevel;
+ event = MEnvironmentalReverbObserver::KRoomLevelChanged;
+ }
+ else if ( newReverbData.iRoomHFLevel != iReverbData.iRoomHFLevel )
+ {
+ iReverbData.iRoomHFLevel = newReverbData.iRoomHFLevel;
+ event = MEnvironmentalReverbObserver::KRoomHFLevelChanged;
+ }
+ else if ( newReverbData.iEnvironmentalReverbId != iReverbData.iEnvironmentalReverbId )
+ {
+ iReverbData.iEnvironmentalReverbId = newReverbData.iEnvironmentalReverbId;
+// event = MEnvironmentalReverbObserver::KRoomHFLevelChanged;
+ }
+
+
+
+ if (!event)
+ return;
+
+ for ( TInt i = 0; i < iObservers.Count(); i++ )
+ {
+ iObservers[i]->EffectChanged(this, event);
+ }
+ }
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// End of File
+
+