--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneengine/audiohandling/src/cpecallaudioroutinghandler.cpp Mon Jan 18 20:18:27 2010 +0200
@@ -0,0 +1,298 @@
+/*
+* Copyright (c) 2006-2008 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 CPECallAudioRoutingHandler class
+* member functions
+*
+*/
+
+
+// INCLUDES
+#include <talogger.h>
+#include "cpecallaudioroutinghandler.h"
+#include "cpeaudiodata.h"
+
+// EXTERNAL DATA STRUCTURES
+// None.
+
+// EXTERNAL FUNCTION PROTOTYPES
+// None.
+
+// CONSTANTS
+// None
+
+// MACROS
+// None.
+
+// LOCAL CONSTANTS AND MACROS
+// None.
+
+// MODULE DATA STRUCTURES
+// None.
+
+// LOCAL FUNCTION PROTOTYPES
+// None.
+
+// ==================== LOCAL FUNCTIONS =====================================
+//None.
+
+// ================= MEMBER FUNCTIONS =======================================
+
+// -----------------------------------------------------------------------------
+// CPECallAudioRoutingHandler::CPECallAudioRoutingHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPECallAudioRoutingHandler::CPECallAudioRoutingHandler(
+ CPEAudioData& aOwner )
+ : iOwner( aOwner )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPEAudioRoutingMonitor::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPECallAudioRoutingHandler* CPECallAudioRoutingHandler::NewL(
+ CPEAudioData& aOwner )
+ {
+ CPECallAudioRoutingHandler* self =
+ new ( ELeave ) CPECallAudioRoutingHandler( aOwner );
+
+ return self;
+ }
+
+CPECallAudioRoutingHandler::~CPECallAudioRoutingHandler()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPECallAudioRoutingHandler::HandleAudioRoutingCallInit
+// -----------------------------------------------------------------------------
+//
+TInt CPECallAudioRoutingHandler::HandleAudioRoutingCallInit( TBool aVideoCall )
+ {
+
+ TInt error = KErrNone;
+ CTelephonyAudioRouting::TAudioOutput curOutput = iOwner.Output();
+ CTelephonyAudioRouting::TAudioOutput newOutput = curOutput;
+
+ TEFLOGSTRING2( KTAINT,
+ "AUD CPECallAudioRoutingHandler::HandleAudioRoutingCallInit > : isVideo = %d", aVideoCall );
+ iAnyVideoCall = aVideoCall;
+
+ // Wired headset has top priority
+ if ( iOwner.IsWiredAvailable() )
+ {
+ newOutput = CTelephonyAudioRouting::EWiredAudioAccessory;
+ }
+ else if ( iOwner.IsBTAvailable() )
+ {
+ if ( iAnswerToHandset )
+ {
+ newOutput = iOwner.RoutePreference();
+ }
+ else
+ {
+ newOutput = CTelephonyAudioRouting::EBTAudioAccessory;
+ }
+ }
+ else if ( iOwner.IsTTYAvailable() )
+ {
+ newOutput = CTelephonyAudioRouting::ETTY;
+ }
+ else
+ {
+ if ( iAnyVideoCall )
+ {
+ if ( iAnswerToHandset )
+ {
+ newOutput = CTelephonyAudioRouting::EHandset;
+ }
+ else
+ {
+ newOutput = CTelephonyAudioRouting::ELoudspeaker;
+ }
+ }
+ else
+ {
+ newOutput = iOwner.RoutePreference();
+ }
+ }
+ SetAnswerToHandset( EFalse );
+
+ if ( newOutput != curOutput )
+ {
+ iOwner.SetTAROutput( newOutput, EFalse );
+ TEFLOGSTRING2( KTAINT,
+ "AUD CPECallAudioRoutingHandler::HandleAudioRoutingCallInit: new output = %d", newOutput );
+ }
+ else
+ {
+ TEFLOGSTRING2( KTAINT,
+ "AUD CPECallAudioRoutingHandler::HandleAudioRoutingCallInit: Already output = %d", curOutput );
+ }
+
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CPECallAudioRoutingHandler::HandleAudioRoutingAvailableChanged
+// Handles accessory mode changed message from AudioHandling subsystem.
+// -----------------------------------------------------------------------------
+//
+TInt CPECallAudioRoutingHandler::HandleAudioRoutingAvailableChanged()
+ {
+ TInt error = KErrNone;
+
+ CTelephonyAudioRouting::TAudioOutput curOutput = iOwner.Output();
+ CTelephonyAudioRouting::TAudioOutput newOutput = curOutput;
+
+
+ switch ( curOutput )
+ {
+ case CTelephonyAudioRouting::ENotActive:
+ // None
+ break;
+ case CTelephonyAudioRouting::EHandset:
+ case CTelephonyAudioRouting::ELoudspeaker:
+ // Wired audio accessory connected during call
+ if ( iOwner.IsWiredAvailable() )
+ {
+ newOutput = CTelephonyAudioRouting::EWiredAudioAccessory;
+ }
+ // BT comes available during call
+ else if ( iOwner.IsBTAvailable() )
+ {
+ newOutput = CTelephonyAudioRouting::EBTAudioAccessory;
+ }
+ else if ( iOwner.IsTTYAvailable() )
+ {
+ newOutput = CTelephonyAudioRouting::ETTY;
+ }
+ else
+ {
+ // No changes
+ }
+ break;
+ case CTelephonyAudioRouting::EWiredAudioAccessory:
+ if ( iOwner.IsBTAvailable() )
+ {
+ // Not allowed direct from wired to BTA
+ // or BTA comes available during wired, No changes
+ }
+ if ( iOwner.IsWiredAvailable() )
+ {
+ // No changes
+ }
+ else if ( iAnyVideoCall )
+ {
+ newOutput = CTelephonyAudioRouting::ELoudspeaker;
+ }
+ else
+ {
+ // Wired detach
+ newOutput = iOwner.RoutePreference();
+ }
+ break;
+ case CTelephonyAudioRouting::EBTAudioAccessory:
+ if ( iOwner.IsWiredAvailable() )
+ {
+ newOutput = CTelephonyAudioRouting::EWiredAudioAccessory;
+ }
+ else if ( iOwner.IsBTAvailable() )
+ {
+ // No changes
+ }
+ else
+ {
+ newOutput = iOwner.RoutePreference();
+ }
+ break;
+ case CTelephonyAudioRouting::ETTY:
+ if ( iOwner.IsTTYAvailable() )
+ {
+ // No changes
+ }
+ else
+ {
+ newOutput = iOwner.RoutePreference();
+ }
+ break;
+ default:
+ break;
+ }
+
+ if ( newOutput != curOutput )
+ {
+ iOwner.SetTAROutput( newOutput, ETrue );
+ TEFLOGSTRING2( KTAINT,
+ "PE CPECallAudioRoutingHandler::HandleAudioRoutingAvailableChanged: new output = %d", newOutput );
+ }
+ else
+ {
+ TEFLOGSTRING2( KTAINT,
+ "PE CPECallAudioRoutingHandler::HandleAudioRoutingAvailableChanged: Already output = %d", curOutput );
+ }
+
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// CPECallAudioRoutingHandler::HandleAudioRoutePreferenceChanged
+// Handles route preference mode changed message from AudioHandling subsystem.
+// -----------------------------------------------------------------------------
+//
+TInt CPECallAudioRoutingHandler::HandleAudioRoutePreferenceChanged()
+ {
+ TInt error = KErrNone;
+ CTelephonyAudioRouting::TAudioOutput curOutput = iOwner.Output();
+ CTelephonyAudioRouting::TAudioOutput newOutput = curOutput;
+
+ if ( !iAnyVideoCall &&
+ curOutput != CTelephonyAudioRouting::EWiredAudioAccessory &&
+ curOutput != CTelephonyAudioRouting::EBTAudioAccessory )
+ {
+ newOutput = iOwner.RoutePreference();
+ }
+ if ( newOutput != curOutput )
+ {
+ iOwner.SetTAROutput( newOutput, ETrue );
+ TEFLOGSTRING2( KTAINT,
+ "PE CPECallAudioRoutingHandler::HandleAudioRoutePreferenceChanged: new output = %d", newOutput );
+ }
+ else
+ {
+ TEFLOGSTRING2( KTAINT,
+ "PE CPECallAudioRoutingHandler::HandleAudioRoutePreferenceChanged: Already output = %d", curOutput );
+ }
+ return error;
+ }
+// -----------------------------------------------------------------------------
+// CPECallAudioRoutingHandler::SetAnswerToHandset
+//
+// -----------------------------------------------------------------------------
+//
+void CPECallAudioRoutingHandler::SetAnswerToHandset( TBool aStatus )
+ {
+ iAnswerToHandset = aStatus;
+ }
+
+
+// ================= OTHER EXPORTED FUNCTIONS ===============================
+//None
+
+// End of File