--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/audiohandling/src/cpeaudiodata.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,836 @@
+/*
+* 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
+*
+*/
+
+
+// INCLUDE FILES
+#include "cpeaudiodata.h"
+
+#include <AudioPreference.h>
+#include <mpephonemodelinternal.h>
+#include <mpedatastore.h>
+#include <mpeexternaldatahandler.h>
+#include <talogger.h>
+#include <telmicmutestatuspskeys.h>
+#include <PSVariables.h>
+
+#include "pepanic.pan"
+#include "cpeaudiodtmftoneplayer.h"
+#include "cpeaudioroutingmonitor.h"
+#include "cpecallaudioroutinghandler.h"
+#include "cpeaudiofactory.h"
+#include <telinternalpskeys.h>
+// CONSTANTS
+//Mute Value for volume
+const TInt KPEDefaultVolume = 4;
+const TInt KPEMaxVolume = 10;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::CPEAudioData
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPEAudioData::CPEAudioData(
+ MPEPhoneModelInternal& aPhoneModel
+ ) : iPhoneModel( aPhoneModel )
+ {
+ iRouteInitialized = EFalse;
+ iAudioOutputChanged = EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::ConstructL
+// Symbian 2nd phase constructor can leave
+// -----------------------------------------------------------------------------
+//
+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" );
+ }
+
+// Destructor
+EXPORT_C CPEAudioData::~CPEAudioData()
+ {
+ TEFLOGSTRING( KTAOBJECT, "AUD CPEAudioData::~CPEAudioData" );
+
+ delete iAudioRouting;
+ delete iAudioRoutingMonitor;
+ delete iAudioRoutingHandler;
+
+ iPEavailableOutputs.Close();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::InitializeAudioVolumes
+// Gets audio volume values from reporitory
+// -----------------------------------------------------------------------------
+//
+void CPEAudioData::InitializeAudioVolumes()
+ {
+// 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 );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::GetAudioMuteSync
+// Creates synchronous request to get Audio Mute value.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEAudioData::GetAudioMuteSync(
+ TBool& aAudioMute ) const
+ {
+ TEFLOGSTRING( KTAINT, "AUD CPEAudioData::GetAudioMuteSync" );
+ if ( IsMuted() )
+ {
+ //mute is on
+ aAudioMute = ETrue;
+ }
+ else
+ {
+ aAudioMute = EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::GetAudioVolumeSync
+// Creates synchronous request to get audio volume.
+// -----------------------------------------------------------------------------
+//
+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");
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SendErrorMessage
+// Saves errorcode to member variable and sends error notification to PhoneEngine.
+// -----------------------------------------------------------------------------
+//
+void CPEAudioData::SendErrorMessage(
+ const TInt aErrorCode )
+ {
+ iPhoneModel.DataStore()->SetErrorCode( aErrorCode );
+ TEFLOGSTRING(
+ KTAREQOUT,
+ "AUD CPEAudioData::SendErrorMessage: iPhoneModel.SendMessage( MEngineMonitor::EPEMessageAudioHandlingError )" );
+ iPhoneModel.SendMessage( MEngineMonitor::EPEMessageAudioHandlingError );
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SendMessage
+// Forwards message to PhoneEngine.
+// -----------------------------------------------------------------------------
+//
+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
+ {
+ iPhoneModel.SendMessage( aMessage );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SendMessage
+// Forwards message to PhoneEngine. Output mode is saved.
+// -----------------------------------------------------------------------------
+//
+void CPEAudioData::SendMessage(
+ const MEngineMonitor::TPEMessagesFromPhoneEngine aMessage,
+ const CTelephonyAudioRouting::TAudioOutput 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 )
+ {
+ 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 );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SendMessage
+// Forwards message to PhoneEngine.
+// -----------------------------------------------------------------------------
+//
+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 )
+ {
+ iAudioRoutingHandler->HandleAudioRoutingAvailableChanged();
+ }
+
+ iPhoneModel.SendMessage( aMessage );
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SetAudioMuteSync
+// Creates synchronous request to set audio mute.
+// EPEMessageAudioMuteChanged message is sent when gain is changed
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEAudioData::SetAudioMuteSync(
+ const TBool aAudioMute ) // Mute value to be set
+ {
+ TEFLOGSTRING( KTAINT, "AUD CPEAudioData::SetAudioMuteSync" );
+
+ 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 );
+ }
+ else
+ {
+ iPhoneModel.DataStore()->SetAudioMute( aAudioMute );
+ SendMessage( MEngineMonitor::EPEMessageAudioMuteChanged );
+ TInt err = RProperty::Set(
+ KPSUidTelMicrophoneMuteStatus,
+ KTelMicrophoneMuteState,
+ EPSTelMicMuteOff );
+ TEFLOGSTRING2(
+ KTAREQOUT,
+ "AUD CPEAudioData::SetAudioMuteSync: EPSTelephonyMicMuteOff, error = %d",
+ err );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SetAudioVolumeSync
+// Creates synchronous request to set audio volume.
+// -----------------------------------------------------------------------------
+//
+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,
+ "AUD CPEAudioData::SetAudioVolumeSync, aAudioVolume = %d",
+ aAudioVolume );
+
+ if ( iPhoneModel.DataStore()->AudioOutput() == EPELoudspeaker )
+ {
+ iPhoneModel.DataStoreExt()->Set(
+ EPEIncallLoudspeakerVolumeSetting,
+ 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 );
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SetAudioOutput
+// Makes request to Telephony Audio Routing to set audio output path
+// -----------------------------------------------------------------------------
+//
+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 );
+
+ if ( iRouteInitialized && iPhoneModel.DataStore()->AudioOutputAvailable( aOutput ) )
+ {
+ SetTAROutput( ConvertToTAR( aOutput), aShowNote );
+ }
+ else
+ {
+ if ( aOutput == EPEHandset )
+ {
+ iAudioRoutingHandler->SetAnswerToHandset( ETrue );
+ }
+ else
+ {
+ TEFLOGSTRING2( KTAERROR,
+ "AUD CPEAudioData::SetAudioOutput: Requested audio path not available (%d)"
+ , aOutput );
+ error = KErrArgument;
+ }
+ }
+
+ return error;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SetTAROutput
+// -----------------------------------------------------------------------------
+//
+void CPEAudioData::SetTAROutput(
+ CTelephonyAudioRouting::TAudioOutput aOutput,
+ TBool aShowNote )
+ {
+ 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 );
+ 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
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::StartUp
+// Gets initial values and inializes TAR
+// StartUpL methods.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEAudioData::StartUp()
+ {
+ 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 );
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::GetAvailableOutputs
+// Gets Available Outputs from Audio routing framework
+// Return list of available outputs
+// -----------------------------------------------------------------------------
+//
+TArray<TPEAudioOutput> CPEAudioData::GetAvailableOutputs(
+ CTelephonyAudioRouting& aTelephonyAudioRouting )
+ {
+ TEFLOGSTRING( KTAREQOUT,
+ "AUD CPEAudioData::GetAvailableOutputs > CTelephonyAudioRouting::AvailableOutputs()" );
+ TArray<CTelephonyAudioRouting::TAudioOutput> availableOutputs =
+ aTelephonyAudioRouting.AvailableOutputs();
+
+ iPEavailableOutputs.Reset();
+
+ 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();
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SetDefaultVolume
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEAudioData::SetDefaultVolume()
+ {
+ 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 );
+ }
+
+ 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;
+ }
+
+// -----------------------------------------------------------------------------
+// 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
+// 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 );
+
+ // Always new route init
+ ret = iAudioRoutingHandler->HandleAudioRoutingCallInit( EFalse );
+ iRouteInitialized = ETrue;
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::HandleCallEnding()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CPEAudioData::HandleCallEnding()
+ {
+ TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::HandleCallEnding()" );
+
+ if ( iRouteInitialized )
+ {
+ iRouteInitialized = 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 )
+ {
+ return iAudioRoutingHandler->HandleAudioRoutePreferenceChanged();
+ }
+ return KErrNotReady;
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::PreviousOutput
+// -----------------------------------------------------------------------------
+//
+CTelephonyAudioRouting::TAudioOutput CPEAudioData::PreviousOutput()
+ {
+ return iAudioRouting->PreviousOutput();
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::Output
+// -----------------------------------------------------------------------------
+//
+CTelephonyAudioRouting::TAudioOutput CPEAudioData::Output()
+ {
+ return iAudioRouting->Output();
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::SetRoutePreference
+// -----------------------------------------------------------------------------
+//
+void CPEAudioData::SetRoutePreference( TBool aShowNote )
+ {
+ TEFLOGSTRING( KTAMESINT, "AUD CPEAudioData::SetRoutePreference()" );
+ CTelephonyAudioRouting::TAudioOutput output = CTelephonyAudioRouting::EHandset;
+
+ const TInt outputPreference = iPhoneModel.DataStore()->AudioOutputPreference();
+ if ( outputPreference == EPSAudioPublic )
+ {
+ output = CTelephonyAudioRouting::ELoudspeaker;
+ }
+ TInt error;
+ 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 )
+ {
+ output = CTelephonyAudioRouting::ELoudspeaker;
+ }
+ TEFLOGSTRING2( KTAMESINT, "AUD CPEAudioData::RoutePreference() output %d", output );
+ return output;
+ }
+// -----------------------------------------------------------------------------
+// CPEAudioData::IsWiredAvailable
+// -----------------------------------------------------------------------------
+//
+TBool CPEAudioData::IsWiredAvailable()
+ {
+ return iPhoneModel.DataStore()->AudioOutputAvailable(
+ EPEWiredAudioAccessory );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::IsBTAvailable
+// -----------------------------------------------------------------------------
+//
+TBool CPEAudioData::IsBTAvailable()
+ {
+ return iPhoneModel.DataStore()->AudioOutputAvailable(
+ EPEBTAudioAccessory );
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::IsTTYAvailable
+// -----------------------------------------------------------------------------
+//
+TBool CPEAudioData::IsTTYAvailable()
+ {
+ 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 )
+ {
+ TEFLOGSTRING2( KTAMESINT, "AUD CPEAudioData::ConvertToPE, aOutput %d", aOutput );
+ TPEAudioOutput newOutput( EPENotActive );
+
+ switch( aOutput )
+ {
+ case CTelephonyAudioRouting::ENotActive:
+ newOutput = EPENotActive;
+ break;
+ case CTelephonyAudioRouting::EHandset:
+ newOutput = EPEHandset;
+ break;
+ case CTelephonyAudioRouting::ELoudspeaker:
+ newOutput = EPELoudspeaker;
+ break;
+ case CTelephonyAudioRouting::EWiredAudioAccessory:
+ newOutput = EPEWiredAudioAccessory;
+ break;
+ case CTelephonyAudioRouting::EBTAudioAccessory:
+ newOutput = EPEBTAudioAccessory;
+ break;
+ case CTelephonyAudioRouting::ETTY:
+ newOutput = EPETTY;
+ break;
+ default:
+ break;
+ }
+
+ return newOutput;
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::ConvertToTAR
+// -----------------------------------------------------------------------------
+//
+CTelephonyAudioRouting::TAudioOutput CPEAudioData::ConvertToTAR( TPEAudioOutput aOutput )
+ {
+ TEFLOGSTRING2( KTAMESINT, "AUD CPEAudioData::ConvertToTAR, aOutput %d", aOutput );
+
+ CTelephonyAudioRouting::TAudioOutput newOutput ( CTelephonyAudioRouting::ENotActive );
+
+ switch( aOutput )
+ {
+ case EPENotActive:
+ newOutput = CTelephonyAudioRouting::ENotActive;
+ break;
+ case EPEHandset:
+ newOutput = CTelephonyAudioRouting::EHandset;
+ break;
+ case EPELoudspeaker:
+ newOutput = CTelephonyAudioRouting::ELoudspeaker;
+ break;
+ case EPEWiredAudioAccessory:
+ newOutput = CTelephonyAudioRouting::EWiredAudioAccessory;
+ break;
+ case EPEBTAudioAccessory:
+ newOutput = CTelephonyAudioRouting::EBTAudioAccessory;
+ break;
+ case EPETTY:
+ newOutput = CTelephonyAudioRouting::ETTY;
+ break;
+ default:
+ break;
+ }
+ return newOutput;
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioData::DoHandleVolumeChange
+// -----------------------------------------------------------------------------
+//
+void CPEAudioData::DoHandleVolumeChange( TInt /*aVolume*/ )
+ {
+
+ }
+
+// End of File