phoneengine/audiohandling/src/cpeaudiodata.cpp
changeset 27 2f8f8080a020
parent 21 92ab7f8d0eab
child 51 f39ed5e045e0
--- a/phoneengine/audiohandling/src/cpeaudiodata.cpp	Fri Apr 16 14:58:25 2010 +0300
+++ b/phoneengine/audiohandling/src/cpeaudiodata.cpp	Mon May 03 12:31:11 2010 +0300
@@ -1,21 +1,20 @@
 /*
-* Copyright (c) 2002-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 module contains the implementation of AudioData class 
-*                member functions
-*
-*/
-
+ * Copyright (c) 2002-2010 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 module contains the implementation of AudioData class
+ *              member functions
+ *
+ */
 
 // INCLUDE FILES
 #include "cpeaudiodata.h"
@@ -27,16 +26,20 @@
 #include <talogger.h>
 #include <telmicmutestatuspskeys.h>
 #include <PSVariables.h>
-
+#include <tms.h>
+#include <tmseffectobsrvr.h>
+#include <tmsglobalvoleffect.h>
 #include "pepanic.pan"
 #include "cpeaudiodtmftoneplayer.h"
 #include "cpeaudioroutingmonitor.h"
 #include "cpecallaudioroutinghandler.h"
-#include "cpeaudiofactory.h"    
+#include "cpeaudiofactory.h"
+#include "cpeaudioeffect.h"
+
 #include <telinternalpskeys.h>
+
 // CONSTANTS
 //Mute Value for volume
-const TInt KPEDefaultVolume = 4;
 const TInt KPEMaxVolume = 10;
 
 // ================= MEMBER FUNCTIONS =======================
@@ -47,12 +50,10 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CPEAudioData::CPEAudioData( 
-        MPEPhoneModelInternal& aPhoneModel
-        ) : iPhoneModel( aPhoneModel )
+CPEAudioData::CPEAudioData(MPEPhoneModelInternal& aPhoneModel) :
+    iPhoneModel(aPhoneModel)
     {
     iRouteInitialized = EFalse;
-    iAudioOutputChanged = EFalse; 
     }
 
 // -----------------------------------------------------------------------------
@@ -60,66 +61,47 @@
 // Symbian 2nd phase constructor can leave
 // -----------------------------------------------------------------------------
 //
-void CPEAudioData::ConstructL( CPEAudioFactory& aAudioFactory )
+void CPEAudioData::ConstructL(CPEAudioFactory& aAudioFactory)
     {
     TEFLOGSTRING( KTAOBJECT, "AUD CPEAudioData::ConstructL start" );
-    iAudioRoutingMonitor = CPEAudioRoutingMonitor::NewL( *this );
-    iAudioRouting = aAudioFactory.CreateTelephonyAudioRoutingL(*iAudioRoutingMonitor);
-    iAudioRoutingHandler = CPECallAudioRoutingHandler::NewL( *this );
- 
-    //Gets audio volumes from repository
-    InitializeAudioVolumes();
-    
-    RProperty::TType type( RProperty::EInt );
-    TSecurityPolicy readPolicy( ECapability_None );
-    TSecurityPolicy writePolicy( ECapabilityWriteDeviceData );
-        
-    RProperty::Define( KPSUidTelMicrophoneMuteStatus, 
-        KTelMicrophoneMuteState,
-        type,
-        readPolicy,
-        writePolicy );
-                
-    TEFLOGSTRING( KTAINT, "AUD CPEAudioData::ConstructL  complete" );               
+    iAudioRoutingMonitor = CPEAudioRoutingMonitor::NewL(*this);
+    iAudioRouting = aAudioFactory.CreateTelephonyAudioRoutingL(
+            *iAudioRoutingMonitor);
+    iAudioRoutingHandler = CPECallAudioRoutingHandler::NewL(*this);
+    iAudioEffect = CPEAudioEffect::NewL(*this);
+
+    InitializeAudioVolume();
+
+    TEFLOGSTRING( KTAINT, "AUD CPEAudioData::ConstructL  complete" );
     }
 
 // Destructor
 EXPORT_C CPEAudioData::~CPEAudioData()
     {
     TEFLOGSTRING( KTAOBJECT, "AUD CPEAudioData::~CPEAudioData" );
- 
+
     delete iAudioRouting;
     delete iAudioRoutingMonitor;
     delete iAudioRoutingHandler;
-    
+
     iPEavailableOutputs.Close();
 
+    delete iAudioEffect;
     }
 
 // -----------------------------------------------------------------------------
-// CPEAudioData::InitializeAudioVolumes
-// Gets audio volume values from reporitory
+// CPEAudioData::InitializeAudioVolume
+// Gets audio volume value
 // -----------------------------------------------------------------------------
-//   
-void CPEAudioData::InitializeAudioVolumes()
+//
+void CPEAudioData::InitializeAudioVolume()
     {
-// Connect to CPEGsmExternalDataHandler missing from TEPhoneEngineTestUtils wrapper !!!
-    TInt volume;
-   
-    iPhoneModel.DataStoreExt()->Get( 
-        EPEIncallLoudspeakerVolumeSetting, volume ); 
-    iLoudspeakerVolume = volume;
-    TEFLOGSTRING2( KTAINT, 
-        "AUD CPEAudioData::CPEAudioData, DataStoreExt()->Get, iLoudspeakerVolume = %d",
-         iLoudspeakerVolume );
-         
-    iPhoneModel.DataStoreExt()->Get( 
-        EPEIncallEarVolumeSetting, volume ); 
-    iHeadSetVolume = volume;
-    TEFLOGSTRING2( KTAINT, 
-        "AUD CPEAudioData::CPEAudioData, DataStoreExt()->Get, iLoudspeakerVolume = %d",
-         iHeadSetVolume );
+    TInt volume = iAudioEffect->Volume();
+    iPhoneModel.DataStore()->SetAudioVolume(volume);
 
+    TEFLOGSTRING2( KTAINT,
+            "AUD CPEAudioData::InitializeAudioVolumes, volume = %d",
+            volume );
     }
 
 // -----------------------------------------------------------------------------
@@ -128,19 +110,14 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CPEAudioData::GetAudioMuteSync(
-        TBool& aAudioMute ) const 
+EXPORT_C void CPEAudioData::GetAudioMuteSync(TBool& aAudioMute) const
     {
-    TEFLOGSTRING( KTAINT, "AUD CPEAudioData::GetAudioMuteSync" );     
-    if ( IsMuted() ) 
-        {
-        //mute is on
-        aAudioMute = ETrue;
-        }
-    else
-        {
-        aAudioMute = EFalse;
-        }
+    aAudioMute = iAudioEffect->MuteState();
+    TEFLOGSTRING2(
+            KTAREQIN,
+            "AUD CPEAudioData::GetAudioMuteSync: value = %d",
+            aAudioMute);
+
     }
 
 // -----------------------------------------------------------------------------
@@ -148,25 +125,10 @@
 // Creates synchronous request to get audio volume.
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CPEAudioData::GetAudioVolumeSync(
-        TInt& aAudioVolume ) const
+EXPORT_C void CPEAudioData::GetAudioVolumeSync(TInt& aAudioVolume) const
     {
     TEFLOGSTRING( KTAINT, "AUD CPEAudioData::GetAudioVolumeSync" );
-
-    if ( iPhoneModel.DataStore()->AudioOutput() == EPELoudspeaker )
-        {
-        iPhoneModel.DataStoreExt()->Get( 
-            EPEIncallLoudspeakerVolumeSetting, aAudioVolume );
-        TEFLOGSTRING( KTAINT, 
-            "AUD CPEAudioData::GetAudioVolumeSync: EPEIncallLoudspeakerVolumeSetting");
-        }
-    else 
-        {
-        iPhoneModel.DataStoreExt()->Get( 
-            EPEIncallEarVolumeSetting, aAudioVolume );
-        TEFLOGSTRING( KTAINT, 
-            "AUD CPEAudioData::GetAudioVolumeSync: EPEIncallEarVolumeSetting");            
-        }
+    aAudioVolume = iAudioEffect->Volume();
     }
 
 // -----------------------------------------------------------------------------
@@ -174,14 +136,13 @@
 // Saves errorcode to member variable and sends error notification to PhoneEngine.
 // -----------------------------------------------------------------------------
 //
-void CPEAudioData::SendErrorMessage( 
-        const TInt aErrorCode )
+void CPEAudioData::SendErrorMessage(const TInt aErrorCode)
     {
-    iPhoneModel.DataStore()->SetErrorCode( aErrorCode );
-    TEFLOGSTRING( 
-        KTAREQOUT, 
-        "AUD CPEAudioData::SendErrorMessage: iPhoneModel.SendMessage( MEngineMonitor::EPEMessageAudioHandlingError )" );
-    iPhoneModel.SendMessage( MEngineMonitor::EPEMessageAudioHandlingError );
+    iPhoneModel.DataStore()->SetErrorCode(aErrorCode);
+    TEFLOGSTRING(
+            KTAREQOUT,
+            "AUD CPEAudioData::SendErrorMessage: iPhoneModel.SendMessage( MEngineMonitor::EPEMessageAudioHandlingError )" );
+    iPhoneModel.SendMessage(MEngineMonitor::EPEMessageAudioHandlingError);
     }
 
 // -----------------------------------------------------------------------------
@@ -189,41 +150,22 @@
 // Forwards message to PhoneEngine.
 // -----------------------------------------------------------------------------
 //
-void CPEAudioData::SendMessage( 
-        const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage )
+void CPEAudioData::SendMessage(
+        const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage)
     {
-    TEFLOGSTRING2( KTAREQIN, 
-        "AUD CPEAudioData::SendMessage: aMessage = %d", aMessage );
-   
-   if ( aMessage == MEngineMonitor::EPEMessageAudioVolumeChanged )
-       {
+    TEFLOGSTRING2( KTAREQIN,
+            "AUD CPEAudioData::SendMessage: aMessage = %d", aMessage );
+
+    if (aMessage == MEngineMonitor::EPEMessageAudioVolumeChanged)
+        {
         // update volume
-        if ( iPhoneModel.DataStore()->AudioOutput() == EPELoudspeaker )
-            {
-            iLoudspeakerVolume = iPhoneModel.DataStore()->AudioVolume();
-            TEFLOGSTRING2( KTAINT, 
-                "AUD CPEAudioData::SendMessage: iLoudspeakerVolume = %d", 
-                iLoudspeakerVolume );
-            }
-        else 
-            {
-            iHeadSetVolume = iPhoneModel.DataStore()->AudioVolume();
-            TEFLOGSTRING2( KTAINT, 
-                "AUD CPEAudioData::SendMessage: iHeadSetVolume = %d", 
-                iHeadSetVolume );
-            }   
-            
-        if ( !iAudioOutputChanged )
-            {
-            // EPEMessageAudioVolumeChanged message must not be sent 
-            // while audio output change is being processed
-            iPhoneModel.SendMessage( aMessage );    
-            }
-       }
-    else 
-        {
-        iPhoneModel.SendMessage( aMessage );    
-        }        
+        TInt volume = iPhoneModel.DataStore()->AudioVolume();
+        TEFLOGSTRING2( KTAINT,
+                "AUD CPEAudioData::SendMessage: volume = %d",
+                volume );
+        }
+
+    iPhoneModel.SendMessage(aMessage);
     }
 
 // -----------------------------------------------------------------------------
@@ -231,75 +173,30 @@
 // Forwards message to PhoneEngine. Output mode is saved.
 // -----------------------------------------------------------------------------
 //
-void CPEAudioData::SendMessage( 
+void CPEAudioData::SendMessage(
         const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage,
-        const CTelephonyAudioRouting::TAudioOutput aOutput )
+        const CTelephonyAudioRouting::TAudioOutput aOutput)
     {
-    TEFLOGSTRING3( 
-         KTAREQIN, 
-        "AUD CPEAudioData::SendMessage: aMessage = %d, aOutput = %d", 
-        aMessage, aOutput );
-        
+    TEFLOGSTRING3(
+            KTAREQIN,
+            "AUD CPEAudioData::SendMessage: aMessage = %d, aOutput = %d",
+            aMessage, aOutput );
+
     // BT long key press requires manual re-route to handset or loudspeaker
-    if ( aOutput == CTelephonyAudioRouting::ENone &&
-         iAudioRouting->PreviousOutput() == CTelephonyAudioRouting::EBTAudioAccessory )
+    if (aOutput == CTelephonyAudioRouting::ENone
+            && iAudioRouting->PreviousOutput()
+                    == CTelephonyAudioRouting::EBTAudioAccessory)
         {
-        SetRoutePreference( ETrue );
+        SetRoutePreference(ETrue);
         }
     else
         {
-        // store the old audio path volume
-        if ( iPhoneModel.DataStore()->AudioOutput() == EPELoudspeaker )
-            {
-            iLoudspeakerVolume = iPhoneModel.DataStore()->AudioVolume();
-            TEFLOGSTRING2( KTAINT, 
-                "AUD CPEAudioData::SendMessage: iLoudspeakerVolume = %d", 
-                iLoudspeakerVolume );
-            }
-        else 
-            {
-            iHeadSetVolume = iPhoneModel.DataStore()->AudioVolume();
-            TEFLOGSTRING2( KTAINT, 
-                "AUD CPEAudioData::SendMessage: iHeadSetVolume = %d", 
-                iHeadSetVolume );
-            }
-        
         // update the audio values in engineinfo
         TBool status;
-        iAudioRouting->GetShowNote( status );
-        iPhoneModel.DataStore()->SetAudioOutput( ConvertToPE( aOutput ), ConvertToPE( PreviousOutput() ), status );
-
-        // Set audio output change flag 
-        iAudioOutputChanged = ( MEngineMonitor::EPEMessageAudioOutputChanged == aMessage );
-          
-        // restore the stored volume for the new path
-        if ( aOutput == CTelephonyAudioRouting::ELoudspeaker )
-            {
-            // restore the stored volume for the new path
-            SetAudioVolumeSync( iLoudspeakerVolume );
-            iPhoneModel.DataStore()->SetAudioVolume( iLoudspeakerVolume );   
-            TEFLOGSTRING2( KTAINT, 
-                "AUD CPEAudioData::SendMessage: DataStoreExt()->Set, iLoudspeakerVolume = %d", 
-                iLoudspeakerVolume );
-            iPhoneModel.DataStoreExt()->Set( EPEIncallLoudspeakerVolumeSetting,
-                iLoudspeakerVolume );
-            }
-        else 
-            {
-            // restore the stored volume for the new path
-            SetAudioVolumeSync( iHeadSetVolume );
-            iPhoneModel.DataStore()->SetAudioVolume( iHeadSetVolume );   
-            TEFLOGSTRING2( KTAINT, 
-                "AUD CPEAudioData::SendMessage: DataStoreExt()->Set, iHeadSetVolume  = %d", 
-                iHeadSetVolume );
-            iPhoneModel.DataStoreExt()->Set( EPEIncallEarVolumeSetting,
-                iHeadSetVolume );
-            }
-        
-        // Reset audio output change flag 
-        iAudioOutputChanged = EFalse;                                                
-                     
-        iPhoneModel.SendMessage( aMessage );
+        iAudioRouting->GetShowNote(status);
+        iPhoneModel.DataStore()->SetAudioOutput(ConvertToPE(aOutput),
+                ConvertToPE(PreviousOutput()), status);
+        iPhoneModel.SendMessage(aMessage);
         }
     }
 
@@ -307,24 +204,24 @@
 // CPEAudioData::SendMessage
 // Forwards message to PhoneEngine.
 // -----------------------------------------------------------------------------
-//   
-void CPEAudioData::SendMessage( 
-        const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage, 
-        CTelephonyAudioRouting& aTelephonyAudioRouting )
+//
+void CPEAudioData::SendMessage(
+        const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage,
+        CTelephonyAudioRouting& aTelephonyAudioRouting)
     {
-    TEFLOGSTRING2( 
-         KTAREQIN, 
-        "AUD CPEAudioData::SendMessage: aMessage = %d, available outputs changed ", aMessage );
-    iPhoneModel.DataStore()->SetAvailableAudioOutputs( 
-        GetAvailableOutputs( aTelephonyAudioRouting ) );
-    
-    if ( iRouteInitialized &&
-         aMessage == MEngineMonitor::EPEMessageAvailableAudioOutputsChanged )
+    TEFLOGSTRING2(
+            KTAREQIN,
+            "AUD CPEAudioData::SendMessage: aMessage = %d, available outputs changed ", aMessage );
+    iPhoneModel.DataStore()->SetAvailableAudioOutputs(GetAvailableOutputs(
+            aTelephonyAudioRouting));
+
+    if (iRouteInitialized && aMessage
+            == MEngineMonitor::EPEMessageAvailableAudioOutputsChanged)
         {
         iAudioRoutingHandler->HandleAudioRoutingAvailableChanged();
         }
- 
-    iPhoneModel.SendMessage( aMessage );
+
+    iPhoneModel.SendMessage(aMessage);
     }
 
 // -----------------------------------------------------------------------------
@@ -333,37 +230,29 @@
 // EPEMessageAudioMuteChanged message is sent when gain is changed
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CPEAudioData::SetAudioMuteSync( 
-        const TBool aAudioMute ) // Mute value to be set
+EXPORT_C void CPEAudioData::SetAudioMuteSync(const TBool aAudioMute) // Mute value to be set
     {
     TEFLOGSTRING( KTAINT, "AUD CPEAudioData::SetAudioMuteSync" );
-    
-    if ( aAudioMute )
+
+    if (aAudioMute)
         {
-        iPhoneModel.DataStore()->SetAudioMute( aAudioMute );
-        SendMessage( MEngineMonitor::EPEMessageAudioMuteChanged );
-        // Inform VoIP/PE Videocallmanager mute state. Error code not handled.
-        TInt err = RProperty::Set( 
-            KPSUidTelMicrophoneMuteStatus, 
-            KTelMicrophoneMuteState,
-            EPSTelMicMuteOn );
-            TEFLOGSTRING2( 
-                KTAREQOUT, 
-                "AUD CPEAudioData::SetAudioMuteSync: EPSTelephonyMicMuteOn , error = %d", 
-                err );            
+        iPhoneModel.DataStore()->SetAudioMute(aAudioMute);
+        SendMessage(MEngineMonitor::EPEMessageAudioMuteChanged);
+        TInt err = iAudioEffect->SetMuteState(ETrue);
+        TEFLOGSTRING2(
+                KTAREQOUT,
+                "AUD CPEAudioData::SetAudioMuteSync: error = %d",
+                err );
         }
     else
         {
-        iPhoneModel.DataStore()->SetAudioMute( aAudioMute );
-        SendMessage( MEngineMonitor::EPEMessageAudioMuteChanged );
-        TInt err = RProperty::Set( 
-            KPSUidTelMicrophoneMuteStatus, 
-            KTelMicrophoneMuteState,
-            EPSTelMicMuteOff );
-        TEFLOGSTRING2( 
-            KTAREQOUT, 
-            "AUD CPEAudioData::SetAudioMuteSync: EPSTelephonyMicMuteOff, error = %d", 
-            err );                
+        iPhoneModel.DataStore()->SetAudioMute(aAudioMute);
+        SendMessage(MEngineMonitor::EPEMessageAudioMuteChanged);
+        TInt err = iAudioEffect->SetMuteState(EFalse);
+        TEFLOGSTRING2(
+                KTAREQOUT,
+                "AUD CPEAudioData::SetAudioMuteSync: error = %d",
+                err );
         }
     }
 
@@ -372,43 +261,22 @@
 // Creates synchronous request to set audio volume.
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CPEAudioData::SetAudioVolumeSync( 
-        const TInt aAudioVolume ) // Volume to be set
+EXPORT_C void CPEAudioData::SetAudioVolumeSync(const TInt aAudioVolume) // Volume to be set
     {
-    TEFLOGSTRING2( 
-        KTAREQIN, 
-        "AUD CPEAudioData::SetAudioVolumeSync, aAudioVolume = %d", 
-        aAudioVolume );
- 
-    if ( aAudioVolume <= KPEMaxVolume ) 
-        {
-        TEFLOGSTRING2( KTAINT, 
+    TEFLOGSTRING2(
+            KTAREQIN,
             "AUD CPEAudioData::SetAudioVolumeSync, aAudioVolume = %d",
             aAudioVolume );
-        
-        if ( iPhoneModel.DataStore()->AudioOutput() == EPELoudspeaker )
-            {
-            iPhoneModel.DataStoreExt()->Set( 
-                EPEIncallLoudspeakerVolumeSetting, 
+
+    if (aAudioVolume <= KPEMaxVolume)
+        {
+        TEFLOGSTRING2( KTAINT,
+                "AUD CPEAudioData::SetAudioVolumeSync, aAudioVolume = %d",
                 aAudioVolume );
-            TEFLOGSTRING( KTAINT, 
-                "AUD CPEAudioData::SetAudioVolumeSync: EPEIncallLoudspeakerVolumeSetting");
-            }
-        else 
-            {
-            iPhoneModel.DataStoreExt()->Set( 
-                EPEIncallEarVolumeSetting, 
-                aAudioVolume );
-            TEFLOGSTRING( KTAINT, 
-                "AUD CPEAudioData::SetAudioVolumeSync: EPEIncallEarVolumeSetting");
-            }
-        }            
- 
-    iPhoneModel.DataStore()->SetAudioVolume( aAudioVolume );
 
-    DoHandleVolumeChange( aAudioVolume );
-
-    SendMessage( MEngineMonitor::EPEMessageAudioVolumeChanged );
+        iAudioEffect->SetVolume(aAudioVolume);
+        }
+    DoHandleVolumeChange(aAudioVolume, ETrue);
     }
 
 // -----------------------------------------------------------------------------
@@ -416,97 +284,95 @@
 // Makes request to Telephony Audio Routing to set audio output path
 // -----------------------------------------------------------------------------
 //
-EXPORT_C TInt CPEAudioData::SetAudioOutput( 
-        const TPEAudioOutput aOutput,
-        TBool aShowNote )
+EXPORT_C TInt CPEAudioData::SetAudioOutput(const TPEAudioOutput aOutput,
+        TBool aShowNote)
     {
-    TEFLOGSTRING2( 
-        KTAREQIN, 
-        "AUD CPEAudioData::SetAudioOutput: aOutput = %d", 
-        aOutput );
-        
-    TInt error( KErrNone );
-    
-    TEFLOGSTRING2( KTAERROR, 
-        "AUD CPEAudioData::SetAudioOutput: iRouteInitialized (%d)"
-        , iRouteInitialized );
+    TEFLOGSTRING2(
+            KTAREQIN,
+            "AUD CPEAudioData::SetAudioOutput: aOutput = %d",
+            aOutput );
+
+    TInt error(KErrNone);
 
-    if ( iRouteInitialized  && iPhoneModel.DataStore()->AudioOutputAvailable( aOutput ) )
+    TEFLOGSTRING2( KTAERROR,
+            "AUD CPEAudioData::SetAudioOutput: iRouteInitialized (%d)"
+            , iRouteInitialized );
+
+    if (iRouteInitialized && iPhoneModel.DataStore()->AudioOutputAvailable(
+            aOutput))
         {
-        SetTAROutput( ConvertToTAR( aOutput), aShowNote  );
+        SetTAROutput(ConvertToTAR(aOutput), aShowNote);
         }
     else
         {
-        if ( aOutput == EPEHandset )
+        if (aOutput == EPEHandset)
             {
-            iAudioRoutingHandler->SetAnswerToHandset( ETrue );
+            iAudioRoutingHandler->SetAnswerToHandset(ETrue);
             }
         else
             {
             TEFLOGSTRING2( KTAERROR,
-                 "AUD CPEAudioData::SetAudioOutput: Requested audio path not available (%d)"
-                 , aOutput );
-            error = KErrArgument;            
+                    "AUD CPEAudioData::SetAudioOutput: Requested audio path not available (%d)"
+                    , aOutput );
+            error = KErrArgument;
             }
         }
- 
+
     return error;
     }
 
-
 // -----------------------------------------------------------------------------
 // CPEAudioData::SetTAROutput
 // -----------------------------------------------------------------------------
 //
-void CPEAudioData::SetTAROutput( 
-    CTelephonyAudioRouting::TAudioOutput aOutput,
-    TBool aShowNote ) 
+void CPEAudioData::SetTAROutput(CTelephonyAudioRouting::TAudioOutput aOutput,
+        TBool aShowNote)
     {
-    TEFLOGSTRING2( 
-        KTAREQIN, 
-        "AUD CPEAudioData::SetTAROutput: aOutput = %d", 
-        aOutput );
+    TEFLOGSTRING2(
+            KTAREQIN,
+            "AUD CPEAudioData::SetTAROutput: aOutput = %d",
+            aOutput );
 
 #if defined(__WINSCW__ ) && !defined(UNIT_TESTING)
-    iAudioRouting->SetShowNote( aShowNote );
-    SendMessage( MEngineMonitor::EPEMessageAudioOutputChanged, aOutput);
-#else       
-    CTelephonyAudioRouting::TAudioOutput output = iAudioRouting->Output();      
-     
-    if ( output == aOutput ) 
+    iAudioRouting->SetShowNote(aShowNote);
+    SendMessage(MEngineMonitor::EPEMessageAudioOutputChanged, aOutput);
+#else
+    CTelephonyAudioRouting::TAudioOutput output = iAudioRouting->Output();
+
+    if ( output == aOutput )
         {
         // audio routing cannot changed
-        TEFLOGSTRING2( KTAERROR, 
-            "AUD CPEAudioData::SetTAROutput: audio path already (%d)"
-            , aOutput );
+        TEFLOGSTRING2( KTAERROR,
+                "AUD CPEAudioData::SetTAROutput: audio path already (%d)"
+                , aOutput );
         return;
         }
-    iAudioRouting->SetShowNote( aShowNote );            
+    iAudioRouting->SetShowNote( aShowNote );
     TRAPD( err, iAudioRouting->SetOutputL( aOutput ) );
-    
+
     if( err )
         {
-        TEFLOGSTRING2( KTAERROR, 
-            "AUD CPEAudioData::SetTAROutput:Leave.1 (%d)", err );
+        TEFLOGSTRING2( KTAERROR,
+                "AUD CPEAudioData::SetTAROutput:Leave.1 (%d)", err );
         switch ( aOutput )
             {
             case CTelephonyAudioRouting::ELoudspeaker:
-            case CTelephonyAudioRouting::EWiredAudioAccessory:              
+            case CTelephonyAudioRouting::EWiredAudioAccessory:
             case CTelephonyAudioRouting::EBTAudioAccessory:
                 // if leave try handset
                 TRAPD( err2, iAudioRouting->SetOutputL( CTelephonyAudioRouting::EHandset ) );
                 if( err2 )
                     {
-                    TEFLOGSTRING2( KTAERROR, 
-                        "AUD CPEAudioData::SetTAROutput:Leave.2 (%d)", err );
-                    }               
+                    TEFLOGSTRING2( KTAERROR,
+                            "AUD CPEAudioData::SetTAROutput:Leave.2 (%d)", err );
+                    }
                 break;
             default:
                 // None
-                break;     
+                break;
             }
         }
-#endif        
+#endif
     }
 
 // -----------------------------------------------------------------------------
@@ -519,8 +385,11 @@
     {
     TEFLOGSTRING( KTAREQIN, "AUD CPEAudioData::StartUp" );
     // get available audio output paths and current audio output
-    iPhoneModel.DataStore()->SetAvailableAudioOutputs( GetAvailableOutputs( *iAudioRouting ) );
-    iPhoneModel.DataStore()->SetAudioOutput( ConvertToPE( iAudioRouting->Output() ), ConvertToPE( iAudioRouting->PreviousOutput() ), EFalse );    
+    iPhoneModel.DataStore()->SetAvailableAudioOutputs(GetAvailableOutputs(
+            *iAudioRouting));
+    iPhoneModel.DataStore()->SetAudioOutput(ConvertToPE(
+            iAudioRouting->Output()), ConvertToPE(
+            iAudioRouting->PreviousOutput()), EFalse);
     }
 
 // -----------------------------------------------------------------------------
@@ -529,125 +398,98 @@
 // Return list of available outputs
 // -----------------------------------------------------------------------------
 //
-TArray<TPEAudioOutput> CPEAudioData::GetAvailableOutputs( 
-        CTelephonyAudioRouting& aTelephonyAudioRouting )
+TArray<TPEAudioOutput> CPEAudioData::GetAvailableOutputs(
+        CTelephonyAudioRouting& aTelephonyAudioRouting)
     {
-    TEFLOGSTRING( KTAREQOUT, 
-        "AUD CPEAudioData::GetAvailableOutputs > CTelephonyAudioRouting::AvailableOutputs()" );
-    TArray<CTelephonyAudioRouting::TAudioOutput> availableOutputs = 
-        aTelephonyAudioRouting.AvailableOutputs();
-    
+    TEFLOGSTRING( KTAREQOUT,
+            "AUD CPEAudioData::GetAvailableOutputs > CTelephonyAudioRouting::AvailableOutputs()" );
+    TArray<CTelephonyAudioRouting::TAudioOutput> availableOutputs =
+            aTelephonyAudioRouting.AvailableOutputs();
+
     iPEavailableOutputs.Reset();
 
-    for ( TInt j = 0; j < availableOutputs.Count(); j++ )
+    for (TInt j = 0; j < availableOutputs.Count(); j++)
         {
-        iPEavailableOutputs.Append( ConvertToPE( availableOutputs[j] ) );
-        TEFLOGSTRING3( KTAINT, 
-            "AUD CPEAudioData::GetAvailableOutputs, index: %d, available: %d", 
-            j, 
-            availableOutputs[j] );
-        }     
- 
-    return iPEavailableOutputs.Array();  
+        iPEavailableOutputs.Append(ConvertToPE(availableOutputs[j]));
+        TEFLOGSTRING3( KTAINT,
+                "AUD CPEAudioData::GetAvailableOutputs, index: %d, available: %d",
+                j,
+                availableOutputs[j] );
+        }
+
+    return iPEavailableOutputs.Array();
     }
- 
+
 // -----------------------------------------------------------------------------
-// CPEAudioData::SetDefaultVolume
+// CPEAudioData::HandleCallStarting
 // -----------------------------------------------------------------------------
 //
-EXPORT_C void CPEAudioData::SetDefaultVolume()
+EXPORT_C TInt CPEAudioData::HandleCallStarting(TBool aVideoCall)
     {
-    TEFLOGSTRING( KTAREQIN, "AUD CPEAudioData::SetDefaultVolume" );
-    if ( !iLoudspeakerVolume )
-        {
-        TEFLOGSTRING( KTAREQIN, "AUD CPEAudioData->SetDefaultLoudspeakerVolume" );
-        iLoudspeakerVolume = KPEDefaultVolume;
-        iPhoneModel.DataStore()->SetAudioVolume( iLoudspeakerVolume );
-        iPhoneModel.DataStoreExt()->Set( EPEIncallLoudspeakerVolumeSetting,
-                iLoudspeakerVolume );
-        }
-    if ( !iHeadSetVolume )
-        {
-        TEFLOGSTRING( KTAREQIN, "AUD CPEAudioData->SetDefaultHeadSetVolume" );
-        iHeadSetVolume = KPEDefaultVolume;
-        iPhoneModel.DataStore()->SetAudioVolume( iHeadSetVolume );
-        iPhoneModel.DataStoreExt()->Set( EPEIncallEarVolumeSetting, 
-                iHeadSetVolume );            
+    TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::HandleCallStarting()" );
+    TInt ret(KErrNone);
+
+    if (!iRouteInitialized) // if route not already initialized
+        { // Not new route init for multi calls
+        iRouteInitialized = ETrue;
+        ret = iAudioRoutingHandler->HandleAudioRoutingCallInit(aVideoCall);
         }
 
-    DoHandleVolumeChange( KPEDefaultVolume );
-    }    
-  
-// -----------------------------------------------------------------------------
-// CPEAudioData::HandleCallStarting  
-// -----------------------------------------------------------------------------
-//    
-EXPORT_C TInt CPEAudioData::HandleCallStarting( TBool aVideoCall )
-    {
-    TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::HandleCallStarting()" );
-    TInt ret( KErrNone );
-    
-    if ( !iRouteInitialized )  // if route not already initialized
-        {                      // Not new route init for multi calls
-        iRouteInitialized = ETrue;
-        ret  = iAudioRoutingHandler->HandleAudioRoutingCallInit( aVideoCall );
-        }
-    
-    return ret;        
+    return ret;
     }
 
 // -----------------------------------------------------------------------------
 // CPEAudioData::HandleEnergencyCallStarting
 // Can be called, if new call is created before previous call is idle state
-// One used situation is that emergency call is dialed during the video call or 
+// One used situation is that emergency call is dialed during the video call or
 // voice call. Audio routing have to initialized when emergency is dialing state
 // even previous call(voice or video) haven't got idle yet.
 // -----------------------------------------------------------------------------
-//    
+//
 EXPORT_C TInt CPEAudioData::HandleEnergencyCallStarting()
     {
     TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::HandleCallSwitching()" );
-    TInt ret( KErrNone );
-    
+    TInt ret(KErrNone);
+
     // Always new route init
-    ret = iAudioRoutingHandler->HandleAudioRoutingCallInit( EFalse );
+    ret = iAudioRoutingHandler->HandleAudioRoutingCallInit(EFalse);
     iRouteInitialized = ETrue;
-  
-    return ret;        
+
+    return ret;
     }
 
 // -----------------------------------------------------------------------------
 // CPEAudioData::HandleCallEnding()
 // -----------------------------------------------------------------------------
-//    
+//
 EXPORT_C void CPEAudioData::HandleCallEnding()
     {
     TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::HandleCallEnding()" );
-    
-    if ( iRouteInitialized )
+
+    if (iRouteInitialized)
         {
         iRouteInitialized = EFalse;
-        TEFLOGSTRING( KTAMESINT, 
-            "AUD CPEAudioData::HandleCallEnding() > CTelephonyAudioRouting::ENotActive" );
-        SetTAROutput( CTelephonyAudioRouting::ENotActive, EFalse  );        
+        TEFLOGSTRING( KTAMESINT,
+                "AUD CPEAudioData::HandleCallEnding() > CTelephonyAudioRouting::ENotActive" );
+        SetTAROutput(CTelephonyAudioRouting::ENotActive, EFalse);
         }
     }
-     
+
 // -----------------------------------------------------------------------------
 // CPEAudioData::CallAudioRoutePreferenceChanged()
-//  
+//
 // -----------------------------------------------------------------------------
-//    
+//
 EXPORT_C TInt CPEAudioData::CallAudioRoutePreferenceChanged()
     {
     TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::CallAudioRoutePreferenceChanged()" );
-    if ( iRouteInitialized )
+    if (iRouteInitialized)
         {
-        return iAudioRoutingHandler->HandleAudioRoutePreferenceChanged();         
+        return iAudioRoutingHandler->HandleAudioRoutePreferenceChanged();
         }
     return KErrNotReady;
-    }    
-        
+    }
+
 // -----------------------------------------------------------------------------
 // CPEAudioData::PreviousOutput
 // -----------------------------------------------------------------------------
@@ -656,7 +498,7 @@
     {
     return iAudioRouting->PreviousOutput();
     }
-        
+
 // -----------------------------------------------------------------------------
 // CPEAudioData::Output
 // -----------------------------------------------------------------------------
@@ -665,62 +507,64 @@
     {
     return iAudioRouting->Output();
     }
- 
+
 // -----------------------------------------------------------------------------
 // CPEAudioData::SetRoutePreference
 // -----------------------------------------------------------------------------
-//    
-void CPEAudioData::SetRoutePreference( TBool aShowNote )
+//
+void CPEAudioData::SetRoutePreference(TBool aShowNote)
     {
     TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::SetRoutePreference()" );
-    CTelephonyAudioRouting::TAudioOutput output = CTelephonyAudioRouting::EHandset;
-     
-    const TInt outputPreference = iPhoneModel.DataStore()->AudioOutputPreference();
-    if ( outputPreference == EPSAudioPublic )
+    CTelephonyAudioRouting::TAudioOutput output =
+            CTelephonyAudioRouting::EHandset;
+
+    const TInt outputPreference =
+            iPhoneModel.DataStore()->AudioOutputPreference();
+    if (outputPreference == EPSAudioPublic)
         {
         output = CTelephonyAudioRouting::ELoudspeaker;
         }
     TInt error;
-    iAudioRouting->SetShowNote( aShowNote );
+    iAudioRouting->SetShowNote(aShowNote);
     TRAP( error, iAudioRouting->SetOutputL( output ) );
     TEFLOGSTRING2( KTAMESINT, "AUD CPEAudioData::SetRoutePreference() err %d", error );
-    }    
-    
+    }
+
 // -----------------------------------------------------------------------------
 // CPEAudioData::RoutePreference
 // -----------------------------------------------------------------------------
-//    
+//
 CTelephonyAudioRouting::TAudioOutput CPEAudioData::RoutePreference()
     {
-    CTelephonyAudioRouting::TAudioOutput output = CTelephonyAudioRouting::EHandset;
-     
-    const TInt outputPreference = iPhoneModel.DataStore()->AudioOutputPreference();
-    if ( outputPreference == EPSAudioPublic )
+    CTelephonyAudioRouting::TAudioOutput output =
+            CTelephonyAudioRouting::EHandset;
+
+    const TInt outputPreference =
+            iPhoneModel.DataStore()->AudioOutputPreference();
+    if (outputPreference == EPSAudioPublic)
         {
         output = CTelephonyAudioRouting::ELoudspeaker;
         }
     TEFLOGSTRING2( KTAMESINT, "AUD CPEAudioData::RoutePreference() output %d", output );
     return output;
-    }    
+    }
 // -----------------------------------------------------------------------------
 // CPEAudioData::IsWiredAvailable
 // -----------------------------------------------------------------------------
 //
 TBool CPEAudioData::IsWiredAvailable()
     {
-    return iPhoneModel.DataStore()->AudioOutputAvailable( 
-         EPEWiredAudioAccessory );
+    return iPhoneModel.DataStore()->AudioOutputAvailable(
+            EPEWiredAudioAccessory);
     }
 
-    
 // -----------------------------------------------------------------------------
 // CPEAudioData::IsBTAvailable
 // -----------------------------------------------------------------------------
 //
 TBool CPEAudioData::IsBTAvailable()
     {
-    return iPhoneModel.DataStore()->AudioOutputAvailable( 
-         EPEBTAudioAccessory );
+    return iPhoneModel.DataStore()->AudioOutputAvailable(EPEBTAudioAccessory);
     }
 
 // -----------------------------------------------------------------------------
@@ -729,39 +573,20 @@
 //
 TBool CPEAudioData::IsTTYAvailable()
     {
-    return iPhoneModel.DataStore()->AudioOutputAvailable( 
-         EPETTY );
+    return iPhoneModel.DataStore()->AudioOutputAvailable(EPETTY);
     }
- // -----------------------------------------------------------------------------
-// CPEAudioData::IsMuted
-// -----------------------------------------------------------------------------
-//
-TBool CPEAudioData::IsMuted() const
-    {
-    TInt value;
-    TInt err = RProperty::Get( 
-        KPSUidTelMicrophoneMuteStatus, 
-        KTelMicrophoneMuteState,
-        value );
- 
-    TEFLOGSTRING3( 
-         KTAREQIN, 
-        "AUD CPEAudioData::IsMuted: value = %d, error = %d", 
-        value, err );        
-    return ( value == EPSTelMicMuteOn ) ? ETrue : EFalse;
-    }   
-   
 
 // -----------------------------------------------------------------------------
 // CPEAudioData::ConvertToPE
 // -----------------------------------------------------------------------------
 //
-TPEAudioOutput CPEAudioData::ConvertToPE( CTelephonyAudioRouting::TAudioOutput aOutput )
+TPEAudioOutput CPEAudioData::ConvertToPE(
+        CTelephonyAudioRouting::TAudioOutput aOutput)
     {
     TEFLOGSTRING2( KTAMESINT, "AUD CPEAudioData::ConvertToPE, aOutput %d", aOutput );
-    TPEAudioOutput newOutput( EPENotActive );
-    
-    switch( aOutput )
+    TPEAudioOutput newOutput(EPENotActive);
+
+    switch (aOutput)
         {
         case CTelephonyAudioRouting::ENotActive:
             newOutput = EPENotActive;
@@ -782,9 +607,9 @@
             newOutput = EPETTY;
             break;
         default:
-            break;    
+            break;
         }
-    
+
     return newOutput;
     }
 
@@ -792,13 +617,15 @@
 // CPEAudioData::ConvertToTAR
 // -----------------------------------------------------------------------------
 //
-CTelephonyAudioRouting::TAudioOutput CPEAudioData::ConvertToTAR( TPEAudioOutput aOutput )
+CTelephonyAudioRouting::TAudioOutput CPEAudioData::ConvertToTAR(
+        TPEAudioOutput aOutput)
     {
     TEFLOGSTRING2( KTAMESINT, "AUD CPEAudioData::ConvertToTAR, aOutput %d", aOutput );
-    
-    CTelephonyAudioRouting::TAudioOutput newOutput ( CTelephonyAudioRouting::ENotActive );
-    
-    switch( aOutput )
+
+    CTelephonyAudioRouting::TAudioOutput newOutput(
+            CTelephonyAudioRouting::ENotActive);
+
+    switch (aOutput)
         {
         case EPENotActive:
             newOutput = CTelephonyAudioRouting::ENotActive;
@@ -819,7 +646,7 @@
             newOutput = CTelephonyAudioRouting::ETTY;
             break;
         default:
-            break;    
+            break;
         }
     return newOutput;
     }
@@ -828,9 +655,43 @@
 // CPEAudioData::DoHandleVolumeChange
 // -----------------------------------------------------------------------------
 //
-void CPEAudioData::DoHandleVolumeChange( TInt /*aVolume*/ )
+void CPEAudioData::DoHandleVolumeChange(TInt aVolume, TBool aSendMsg)
     {
-    
+    iPhoneModel.DataStore()->SetAudioVolume(aVolume);
+
+    if (aSendMsg)
+        {
+        SendMessage(MEngineMonitor::EPEMessageAudioVolumeChanged);
+        }
     }
 
-// End of File 
+// -----------------------------------------------------------------------------
+// CPEAudioData::EffectsEvent
+// -----------------------------------------------------------------------------
+//
+void CPEAudioData::EffectsEvent(const TMSEffect& tmseffect,
+        TMSSignalEvent event)
+    {
+    TMSEffectType effecttype;
+    const_cast<TMSEffect&>(tmseffect).GetType(effecttype);
+
+    if (effecttype == TMS_EFFECT_GLOBAL_VOL &&
+            event.type == TMS_EVENT_EFFECT_VOL_CHANGED)
+        {
+        TMSVolumeEventChangeData* vd;
+        vd = static_cast<TMSVolumeEventChangeData*>(event.event_data);
+
+        // If volume change event has been triggered by routing change, we
+        // do not want to send EPEMessageAudioVolumeChanged message.
+        if (!vd->output_changed)
+            {
+            DoHandleVolumeChange(iAudioEffect->Volume(), ETrue);
+            }
+        else
+            {
+            DoHandleVolumeChange(iAudioEffect->Volume(), EFalse);
+            }
+        }
+    }
+
+// End of File