sl@0: /* sl@0: * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: Handles client-side telephony audio routing requests. sl@0: * sl@0: */ sl@0: sl@0: sl@0: sl@0: // INCLUDE FILES sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include "TelephonyAudioRouting.h" sl@0: #include "TelephonyAudioRoutingProxy.h" sl@0: #include "TelephonyAudioRoutingClientServer.h" sl@0: #include "TelephonyAudioRoutingSession.h" sl@0: #include "MTelephonyAudioRoutingObserver.h" sl@0: sl@0: sl@0: sl@0: // ================= MEMBER FUNCTIONS ======================= sl@0: sl@0: // C++ default constructor can NOT contain any code, that sl@0: // might leave. sl@0: // sl@0: CTelephonyAudioRoutingProxy::CTelephonyAudioRoutingProxy( sl@0: MTelephonyAudioRoutingObserver& aObserver) sl@0: : iObserver(aObserver), sl@0: iAvailableOutputs(0, NULL, NULL) sl@0: { sl@0: sl@0: } sl@0: sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::ConstructL sl@0: // Symbian 2nd phase constructor can leave. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CTelephonyAudioRoutingProxy::ConstructL() sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ConstructL"),this); sl@0: User::LeaveIfError(iSession.ConnectL(*this, iObserver)); sl@0: sl@0: // Make sure session is set up with default values from server for its local variables: sl@0: iSession.GetDefaultValuesL(); sl@0: sl@0: CTelephonyAudioRouting::TAudioOutput audioOutput = Output(); sl@0: sl@0: // Get stored values for audio output and array and store values in local variables: sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ConstructL, current iAudioOutput retrieved from server: %d"), audioOutput); sl@0: sl@0: TArray availableOutputArray = AvailableOutputs(); sl@0: TInt count = availableOutputArray.Count(); sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: Count = %d "), count); sl@0: for(TInt i = 0; i < count; i++) sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: availableOutputs[i] = %d "),availableOutputArray[i]); sl@0: } sl@0: sl@0: iSession.NotifyIfOutputChanged(); sl@0: iSession.NotifyIfAvailableOutputsChanged(); sl@0: sl@0: } sl@0: sl@0: // Two-phased constructor. sl@0: EXPORT_C CTelephonyAudioRoutingProxy* CTelephonyAudioRoutingProxy::NewL(MTelephonyAudioRoutingObserver& aObserver) sl@0: { sl@0: CTelephonyAudioRoutingProxy* self = new(ELeave) CTelephonyAudioRoutingProxy(aObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: sl@0: // Destructor sl@0: CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy() sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy[%x]"),this); sl@0: iSession.Close(); sl@0: } sl@0: sl@0: sl@0: sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::AvailableOutputs sl@0: // Provides caller with an array of available audio outputs sl@0: // --------------------------------------------------------- sl@0: // sl@0: const TArray& CTelephonyAudioRoutingProxy::AvailableOutputs() sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::AvailableOutputs"),this); sl@0: sl@0: TRAP_IGNORE(iSession.GetAvailableOutputsL()); // Session will get values from Server and store in its iAvailableOutputs sl@0: sl@0: TInt count = (iSession.AvailableOutputs()).Count(); sl@0: sl@0: iAvailableOutputs = (iSession.AvailableOutputs()).Array(); sl@0: sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: Count = %d "), count); sl@0: for(TInt i = 0; i < count; i++) sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: availableOutputs[i] = %d "),iAvailableOutputs[i]); sl@0: } sl@0: return iAvailableOutputs; sl@0: } sl@0: sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::Output sl@0: // Provides caller with the current audio output setting. sl@0: // (other items were commented in a header). sl@0: // --------------------------------------------------------- sl@0: // sl@0: CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::Output() sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::Output"),this); sl@0: sl@0: TAudioOutput audioOutput = (iSession.CurrentAudioOutputPkg())(); sl@0: sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::Output: iSession's Audio Output = %d"),audioOutput); sl@0: return audioOutput; sl@0: } sl@0: sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::SetOutputL sl@0: // Allows caller to set audio output to a particular value. sl@0: // (other items were commented in a header). sl@0: // --------------------------------------------------------- sl@0: // sl@0: sl@0: void CTelephonyAudioRoutingProxy::SetOutputL(TAudioOutput aOutput) sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetOutput"),this); sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput with: %d"), aOutput); sl@0: sl@0: TBool validOutput = ETrue; sl@0: // Verify request is valid: (not necessary for ENone or ENotActive) sl@0: if ((aOutput != CTelephonyAudioRouting::ENotActive) && (aOutput != CTelephonyAudioRouting::ENone)) sl@0: { sl@0: validOutput = ValidateOutputRequest(aOutput); sl@0: } sl@0: sl@0: if (validOutput) sl@0: { sl@0: iSession.SetOutput(aOutput, iShowNote); sl@0: // Reset iShowNote once it's sent sl@0: iShowNote = EFalse; sl@0: } sl@0: else sl@0: { sl@0: TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput: Error: Requested output not in array")); sl@0: // reset session's iOkToGetShowNoteMode flag, since it errored sl@0: iSession.ResetShowNoteMode(); sl@0: User::Leave(KErrHardwareNotAvailable); sl@0: } sl@0: } sl@0: sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::PreviousOutput sl@0: // Provides caller with current value of previous audio output value. sl@0: // (other items were commented in a header). sl@0: // --------------------------------------------------------- sl@0: // sl@0: sl@0: CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::PreviousOutput() sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::PreviousOutput"), this); sl@0: TAudioOutput prevOutput = (iSession.PreviousAudioOutputPkg())(); sl@0: sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::PreviousOutput: iSession's Previous Audio Output = %d"),prevOutput); sl@0: return prevOutput; sl@0: } sl@0: sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::ValidateOutputRequest sl@0: // Checks that output requested is in list of available outputs. sl@0: // (other items were commented in a header). sl@0: // --------------------------------------------------------- sl@0: // sl@0: sl@0: TBool CTelephonyAudioRoutingProxy::ValidateOutputRequest(TAudioOutput aOutput) sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ValidateOutputRequest"),this); sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ValidateOutputRequest for: %d"),aOutput); sl@0: sl@0: TArray availableOutputs = (iSession.AvailableOutputs()).Array(); sl@0: sl@0: TBool found = EFalse; sl@0: TInt count = availableOutputs.Count(); sl@0: for(TInt i = 0; i < count; i++) sl@0: { sl@0: if (aOutput == availableOutputs[i]) sl@0: { sl@0: found = ETrue; sl@0: break; sl@0: } sl@0: } sl@0: return found; sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::ShowNoteMode sl@0: // Provides caller with the current ShowNoteMode setting in server. sl@0: // (other items were commented in a header). sl@0: // --------------------------------------------------------- sl@0: // sl@0: TBool CTelephonyAudioRoutingProxy::ShowNoteMode() sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ShowNoteMode"),this); sl@0: sl@0: TPckgBuf showNoteModePkg = iSession.ShowNoteMode(); sl@0: TBool showNoteMode = showNoteModePkg(); sl@0: sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ShowNoteMode: = %d"), showNoteMode); sl@0: return showNoteMode; sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::SetShowNote sl@0: // sl@0: // (other items were commented in a header). sl@0: // --------------------------------------------------------- sl@0: // sl@0: sl@0: TInt CTelephonyAudioRoutingProxy::SetShowNote( TBool aMode ) sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetShowNote"),this); sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetShowNote With: %d"),aMode); sl@0: sl@0: // Note: Will set aMode on a GetShowNote call after SetOutputComplete called sl@0: iShowNote = aMode; sl@0: return KErrNone; sl@0: } sl@0: // --------------------------------------------------------- sl@0: // CTelephonyAudioRoutingProxy::GetShowNote sl@0: // sl@0: // (other items were commented in a header). sl@0: // --------------------------------------------------------- sl@0: // sl@0: sl@0: TInt CTelephonyAudioRoutingProxy::GetShowNote( TBool& aMode ) sl@0: { sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::GetShowNote"),this); sl@0: sl@0: // Check with session if Ok to retrieve iShowNoteMode from server: sl@0: TBool okToGetShowNoteMode = iSession.OkToGetShowNoteMode(); sl@0: sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t GetShowNote: Session: Ok to get show note = %d"),okToGetShowNoteMode); sl@0: sl@0: if (okToGetShowNoteMode) sl@0: { sl@0: aMode = ShowNoteMode(); sl@0: } sl@0: else sl@0: { sl@0: aMode = EFalse; sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: (Not OK to Get Value from Server) Returning ShowNoteMode = %d"), aMode); sl@0: } sl@0: sl@0: // reset session's iOkToGetShowNoteMode flag once it has been retrieved sl@0: iSession.ResetShowNoteMode(); sl@0: sl@0: TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: Returning ShowNoteMode = %d"), aMode); sl@0: sl@0: return KErrNone; sl@0: } sl@0: // End of File