diff -r 000000000000 -r b8ed18f6c07b devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingBase/src/TelephonyAudioRoutingProxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingBase/src/TelephonyAudioRoutingProxy.cpp Thu Oct 07 22:34:12 2010 +0100 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2006 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: Handles client-side telephony audio routing requests. +* +*/ + + + +// INCLUDE FILES +#include +#include +#include + +#include "TelephonyAudioRouting.h" +#include "TelephonyAudioRoutingProxy.h" +#include "TelephonyAudioRoutingClientServer.h" +#include "TelephonyAudioRoutingSession.h" +#include "MTelephonyAudioRoutingObserver.h" + + + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CTelephonyAudioRoutingProxy::CTelephonyAudioRoutingProxy( + MTelephonyAudioRoutingObserver& aObserver) + : iObserver(aObserver), + iAvailableOutputs(0, NULL, NULL) + { + + } + + +// ----------------------------------------------------------------------------- +// CTelephonyAudioRoutingProxy::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CTelephonyAudioRoutingProxy::ConstructL() + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ConstructL"),this); + User::LeaveIfError(iSession.ConnectL(*this, iObserver)); + + // Make sure session is set up with default values from server for its local variables: + iSession.GetDefaultValuesL(); + + CTelephonyAudioRouting::TAudioOutput audioOutput = Output(); + + // Get stored values for audio output and array and store values in local variables: + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ConstructL, current iAudioOutput retrieved from server: %d"), audioOutput); + + TArray availableOutputArray = AvailableOutputs(); + TInt count = availableOutputArray.Count(); + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: Count = %d "), count); + for(TInt i = 0; i < count; i++) + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: availableOutputs[i] = %d "),availableOutputArray[i]); + } + + iSession.NotifyIfOutputChanged(); + iSession.NotifyIfAvailableOutputsChanged(); + + } + +// Two-phased constructor. +EXPORT_C CTelephonyAudioRoutingProxy* CTelephonyAudioRoutingProxy::NewL(MTelephonyAudioRoutingObserver& aObserver) + { + CTelephonyAudioRoutingProxy* self = new(ELeave) CTelephonyAudioRoutingProxy(aObserver); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +// Destructor +CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy() + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy[%x]"),this); + iSession.Close(); + } + + + +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::AvailableOutputs +// Provides caller with an array of available audio outputs +// --------------------------------------------------------- +// +const TArray& CTelephonyAudioRoutingProxy::AvailableOutputs() + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::AvailableOutputs"),this); + + TRAP_IGNORE(iSession.GetAvailableOutputsL()); // Session will get values from Server and store in its iAvailableOutputs + + TInt count = (iSession.AvailableOutputs()).Count(); + + iAvailableOutputs = (iSession.AvailableOutputs()).Array(); + + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: Count = %d "), count); + for(TInt i = 0; i < count; i++) + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: availableOutputs[i] = %d "),iAvailableOutputs[i]); + } + return iAvailableOutputs; + } + +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::Output +// Provides caller with the current audio output setting. +// (other items were commented in a header). +// --------------------------------------------------------- +// +CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::Output() + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::Output"),this); + + TAudioOutput audioOutput = (iSession.CurrentAudioOutputPkg())(); + + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::Output: iSession's Audio Output = %d"),audioOutput); + return audioOutput; + } + +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::SetOutputL +// Allows caller to set audio output to a particular value. +// (other items were commented in a header). +// --------------------------------------------------------- +// + +void CTelephonyAudioRoutingProxy::SetOutputL(TAudioOutput aOutput) + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetOutput"),this); + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput with: %d"), aOutput); + + TBool validOutput = ETrue; + // Verify request is valid: (not necessary for ENone or ENotActive) + if ((aOutput != CTelephonyAudioRouting::ENotActive) && (aOutput != CTelephonyAudioRouting::ENone)) + { + validOutput = ValidateOutputRequest(aOutput); + } + + if (validOutput) + { + iSession.SetOutput(aOutput, iShowNote); + // Reset iShowNote once it's sent + iShowNote = EFalse; + } + else + { + TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput: Error: Requested output not in array")); + // reset session's iOkToGetShowNoteMode flag, since it errored + iSession.ResetShowNoteMode(); + User::Leave(KErrHardwareNotAvailable); + } + } + +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::PreviousOutput +// Provides caller with current value of previous audio output value. +// (other items were commented in a header). +// --------------------------------------------------------- +// + +CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::PreviousOutput() + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::PreviousOutput"), this); + TAudioOutput prevOutput = (iSession.PreviousAudioOutputPkg())(); + + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::PreviousOutput: iSession's Previous Audio Output = %d"),prevOutput); + return prevOutput; + } + +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::ValidateOutputRequest +// Checks that output requested is in list of available outputs. +// (other items were commented in a header). +// --------------------------------------------------------- +// + +TBool CTelephonyAudioRoutingProxy::ValidateOutputRequest(TAudioOutput aOutput) + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ValidateOutputRequest"),this); + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ValidateOutputRequest for: %d"),aOutput); + + TArray availableOutputs = (iSession.AvailableOutputs()).Array(); + + TBool found = EFalse; + TInt count = availableOutputs.Count(); + for(TInt i = 0; i < count; i++) + { + if (aOutput == availableOutputs[i]) + { + found = ETrue; + break; + } + } + return found; + } + + +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::ShowNoteMode +// Provides caller with the current ShowNoteMode setting in server. +// (other items were commented in a header). +// --------------------------------------------------------- +// +TBool CTelephonyAudioRoutingProxy::ShowNoteMode() + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ShowNoteMode"),this); + + TPckgBuf showNoteModePkg = iSession.ShowNoteMode(); + TBool showNoteMode = showNoteModePkg(); + + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ShowNoteMode: = %d"), showNoteMode); + return showNoteMode; + } + + +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::SetShowNote +// +// (other items were commented in a header). +// --------------------------------------------------------- +// + +TInt CTelephonyAudioRoutingProxy::SetShowNote( TBool aMode ) + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetShowNote"),this); + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetShowNote With: %d"),aMode); + + // Note: Will set aMode on a GetShowNote call after SetOutputComplete called + iShowNote = aMode; + return KErrNone; + } +// --------------------------------------------------------- +// CTelephonyAudioRoutingProxy::GetShowNote +// +// (other items were commented in a header). +// --------------------------------------------------------- +// + +TInt CTelephonyAudioRoutingProxy::GetShowNote( TBool& aMode ) + { + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::GetShowNote"),this); + + // Check with session if Ok to retrieve iShowNoteMode from server: + TBool okToGetShowNoteMode = iSession.OkToGetShowNoteMode(); + + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t GetShowNote: Session: Ok to get show note = %d"),okToGetShowNoteMode); + + if (okToGetShowNoteMode) + { + aMode = ShowNoteMode(); + } + else + { + aMode = EFalse; + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: (Not OK to Get Value from Server) Returning ShowNoteMode = %d"), aMode); + } + + // reset session's iOkToGetShowNoteMode flag once it has been retrieved + iSession.ResetShowNoteMode(); + + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: Returning ShowNoteMode = %d"), aMode); + + return KErrNone; + } +// End of File