diff -r 40a3f856b14d -r 41a7f70b3818 phoneengine/audiohandling/src/cpeaudiodata.cpp --- a/phoneengine/audiohandling/src/cpeaudiodata.cpp Thu Aug 19 09:54:27 2010 +0300 +++ b/phoneengine/audiohandling/src/cpeaudiodata.cpp Tue Aug 31 15:14:29 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,21 @@ #include #include #include - +#include +#include +#include +#include #include "pepanic.pan" #include "cpeaudiodtmftoneplayer.h" #include "cpeaudioroutingmonitor.h" #include "cpecallaudioroutinghandler.h" -#include "cpeaudiofactory.h" +#include "cpeaudiofactory.h" +#include "cpeaudioeffect.h" + #include + // CONSTANTS //Mute Value for volume -const TInt KPEDefaultVolume = 4; const TInt KPEMaxVolume = 10; // ================= MEMBER FUNCTIONS ======================= @@ -47,12 +51,10 @@ // might leave. // ----------------------------------------------------------------------------- // -CPEAudioData::CPEAudioData( - MPEPhoneModelInternal& aPhoneModel - ) : iPhoneModel( aPhoneModel ) +CPEAudioData::CPEAudioData(MPEPhoneModelInternal& aPhoneModel) : + iPhoneModel(aPhoneModel) { iRouteInitialized = EFalse; - iAudioOutputChanged = EFalse; } // ----------------------------------------------------------------------------- @@ -60,66 +62,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 +111,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 +126,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 +137,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 +151,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 ) - { - // 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 + TEFLOGSTRING2( KTAREQIN, + "AUD CPEAudioData::SendMessage: aMessage = %d", aMessage ); + + if (aMessage == MEngineMonitor::EPEMessageAudioVolumeChanged) { - iPhoneModel.SendMessage( aMessage ); - } + // update volume + TInt volume = iPhoneModel.DataStore()->AudioVolume(); + TEFLOGSTRING2( KTAINT, + "AUD CPEAudioData::SendMessage: volume = %d", + volume ); + } + + iPhoneModel.SendMessage(aMessage); } // ----------------------------------------------------------------------------- @@ -231,75 +174,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 +205,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 +231,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 +262,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 +285,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 ) + { + // audio routing cannot changed + TEFLOGSTRING2( KTAERROR, + "AUD CPEAudioData::SetTAROutput: audio path already (%d)" + , aOutput ); + return; + } 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 ); - return; - } - iAudioRouting->SetShowNote( aShowNote ); - TRAPD( err, iAudioRouting->SetOutputL( aOutput ) ); - - if( err ) - { - TEFLOGSTRING2( KTAERROR, - "AUD CPEAudioData::SetTAROutput:Leave.1 (%d)", err ); - switch ( aOutput ) - { - case CTelephonyAudioRouting::ELoudspeaker: - 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 ); - } - break; - default: - // None - break; - } + TRAPD( err, iAudioRouting->SetOutputL( aOutput ) ); + + if( err ) + { + TEFLOGSTRING2( KTAERROR, + "AUD CPEAudioData::SetTAROutput:Leave.1 (%d)", err ); + switch ( aOutput ) + { + case CTelephonyAudioRouting::ELoudspeaker: + 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 ); + } + break; + default: + // None + break; + } } -#endif +#endif } // ----------------------------------------------------------------------------- @@ -519,8 +386,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 +399,103 @@ // Return list of available outputs // ----------------------------------------------------------------------------- // -TArray CPEAudioData::GetAvailableOutputs( - CTelephonyAudioRouting& aTelephonyAudioRouting ) +TArray CPEAudioData::GetAvailableOutputs( + CTelephonyAudioRouting& aTelephonyAudioRouting) { - TEFLOGSTRING( KTAREQOUT, - "AUD CPEAudioData::GetAvailableOutputs > CTelephonyAudioRouting::AvailableOutputs()" ); - TArray availableOutputs = - aTelephonyAudioRouting.AvailableOutputs(); - + TEFLOGSTRING( KTAREQOUT, + "AUD CPEAudioData::GetAvailableOutputs > CTelephonyAudioRouting::AvailableOutputs()" ); + TArray 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(); + TInt err = iPEavailableOutputs.Append(ConvertToPE(availableOutputs[j])); + TEFLOGSTRING4( KTAINT, + "AUD CPEAudioData::GetAvailableOutputs, index: %d, available: %d, err: %d", + j, + availableOutputs[j], + err ); + if(err != KErrNone) + { + // Do nothing. Here for just to suppress the compile warning. + } + } + + 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 +504,7 @@ { return iAudioRouting->PreviousOutput(); } - + // ----------------------------------------------------------------------------- // CPEAudioData::Output // ----------------------------------------------------------------------------- @@ -665,62 +513,74 @@ { 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; } + else + { + TInt value; + const TInt err = RProperty::Get( KPSUidTelCarMode, KTelCarMode, value ); + if ( !err && value == EPSCarModeOn ) + { + 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 +589,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 +623,9 @@ newOutput = EPETTY; break; default: - break; + break; } - + return newOutput; } @@ -792,13 +633,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 +662,7 @@ newOutput = CTelephonyAudioRouting::ETTY; break; default: - break; + break; } return newOutput; } @@ -828,9 +671,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).GetType(effecttype); + + if (effecttype == TMS_EFFECT_GLOBAL_VOL && + event.type == TMS_EVENT_EFFECT_VOL_CHANGED) + { + TMSVolumeEventChangeData* vd; + vd = static_cast(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