os/mm/devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingBase/src/TelephonyAudioRoutingProxy.cpp
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/mm/devsoundextensions/telephonyaudiorouting/TelephonyAudioRoutingBase/src/TelephonyAudioRoutingProxy.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,282 @@
1.4 +/*
1.5 +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description: Handles client-side telephony audio routing requests.
1.18 +*
1.19 +*/
1.20 +
1.21 +
1.22 +
1.23 +// INCLUDE FILES
1.24 +#include <e32base.h>
1.25 +#include <e32svr.h>
1.26 +#include <e32std.h>
1.27 +
1.28 +#include "TelephonyAudioRouting.h"
1.29 +#include "TelephonyAudioRoutingProxy.h"
1.30 +#include "TelephonyAudioRoutingClientServer.h"
1.31 +#include "TelephonyAudioRoutingSession.h"
1.32 +#include "MTelephonyAudioRoutingObserver.h"
1.33 +
1.34 +
1.35 +
1.36 +// ================= MEMBER FUNCTIONS =======================
1.37 +
1.38 +// C++ default constructor can NOT contain any code, that
1.39 +// might leave.
1.40 +//
1.41 +CTelephonyAudioRoutingProxy::CTelephonyAudioRoutingProxy(
1.42 + MTelephonyAudioRoutingObserver& aObserver)
1.43 + : iObserver(aObserver),
1.44 + iAvailableOutputs(0, NULL, NULL)
1.45 + {
1.46 +
1.47 + }
1.48 +
1.49 +
1.50 +// -----------------------------------------------------------------------------
1.51 +// CTelephonyAudioRoutingProxy::ConstructL
1.52 +// Symbian 2nd phase constructor can leave.
1.53 +// -----------------------------------------------------------------------------
1.54 +//
1.55 +void CTelephonyAudioRoutingProxy::ConstructL()
1.56 + {
1.57 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ConstructL"),this);
1.58 + User::LeaveIfError(iSession.ConnectL(*this, iObserver));
1.59 +
1.60 + // Make sure session is set up with default values from server for its local variables:
1.61 + iSession.GetDefaultValuesL();
1.62 +
1.63 + CTelephonyAudioRouting::TAudioOutput audioOutput = Output();
1.64 +
1.65 + // Get stored values for audio output and array and store values in local variables:
1.66 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ConstructL, current iAudioOutput retrieved from server: %d"), audioOutput);
1.67 +
1.68 + TArray<CTelephonyAudioRouting::TAudioOutput> availableOutputArray = AvailableOutputs();
1.69 + TInt count = availableOutputArray.Count();
1.70 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: Count = %d "), count);
1.71 + for(TInt i = 0; i < count; i++)
1.72 + {
1.73 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t ConstructL: availableOutputs[i] = %d "),availableOutputArray[i]);
1.74 + }
1.75 +
1.76 + iSession.NotifyIfOutputChanged();
1.77 + iSession.NotifyIfAvailableOutputsChanged();
1.78 +
1.79 + }
1.80 +
1.81 +// Two-phased constructor.
1.82 +EXPORT_C CTelephonyAudioRoutingProxy* CTelephonyAudioRoutingProxy::NewL(MTelephonyAudioRoutingObserver& aObserver)
1.83 + {
1.84 + CTelephonyAudioRoutingProxy* self = new(ELeave) CTelephonyAudioRoutingProxy(aObserver);
1.85 + CleanupStack::PushL(self);
1.86 + self->ConstructL();
1.87 + CleanupStack::Pop(self);
1.88 + return self;
1.89 + }
1.90 +
1.91 +
1.92 +// Destructor
1.93 +CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy()
1.94 + {
1.95 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::~CTelephonyAudioRoutingProxy[%x]"),this);
1.96 + iSession.Close();
1.97 + }
1.98 +
1.99 +
1.100 +
1.101 +// ---------------------------------------------------------
1.102 +// CTelephonyAudioRoutingProxy::AvailableOutputs
1.103 +// Provides caller with an array of available audio outputs
1.104 +// ---------------------------------------------------------
1.105 +//
1.106 +const TArray<CTelephonyAudioRouting::TAudioOutput>& CTelephonyAudioRoutingProxy::AvailableOutputs()
1.107 + {
1.108 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::AvailableOutputs"),this);
1.109 +
1.110 + TRAP_IGNORE(iSession.GetAvailableOutputsL()); // Session will get values from Server and store in its iAvailableOutputs
1.111 +
1.112 + TInt count = (iSession.AvailableOutputs()).Count();
1.113 +
1.114 + iAvailableOutputs = (iSession.AvailableOutputs()).Array();
1.115 +
1.116 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: Count = %d "), count);
1.117 + for(TInt i = 0; i < count; i++)
1.118 + {
1.119 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::AvailableOutputs: availableOutputs[i] = %d "),iAvailableOutputs[i]);
1.120 + }
1.121 + return iAvailableOutputs;
1.122 + }
1.123 +
1.124 +// ---------------------------------------------------------
1.125 +// CTelephonyAudioRoutingProxy::Output
1.126 +// Provides caller with the current audio output setting.
1.127 +// (other items were commented in a header).
1.128 +// ---------------------------------------------------------
1.129 +//
1.130 +CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::Output()
1.131 + {
1.132 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::Output"),this);
1.133 +
1.134 + TAudioOutput audioOutput = (iSession.CurrentAudioOutputPkg())();
1.135 +
1.136 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::Output: iSession's Audio Output = %d"),audioOutput);
1.137 + return audioOutput;
1.138 + }
1.139 +
1.140 +// ---------------------------------------------------------
1.141 +// CTelephonyAudioRoutingProxy::SetOutputL
1.142 +// Allows caller to set audio output to a particular value.
1.143 +// (other items were commented in a header).
1.144 +// ---------------------------------------------------------
1.145 +//
1.146 +
1.147 +void CTelephonyAudioRoutingProxy::SetOutputL(TAudioOutput aOutput)
1.148 + {
1.149 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetOutput"),this);
1.150 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput with: %d"), aOutput);
1.151 +
1.152 + TBool validOutput = ETrue;
1.153 + // Verify request is valid: (not necessary for ENone or ENotActive)
1.154 + if ((aOutput != CTelephonyAudioRouting::ENotActive) && (aOutput != CTelephonyAudioRouting::ENone))
1.155 + {
1.156 + validOutput = ValidateOutputRequest(aOutput);
1.157 + }
1.158 +
1.159 + if (validOutput)
1.160 + {
1.161 + iSession.SetOutput(aOutput, iShowNote);
1.162 + // Reset iShowNote once it's sent
1.163 + iShowNote = EFalse;
1.164 + }
1.165 + else
1.166 + {
1.167 + TELAUDRTNG_RDEBUG(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetOutput: Error: Requested output not in array"));
1.168 + // reset session's iOkToGetShowNoteMode flag, since it errored
1.169 + iSession.ResetShowNoteMode();
1.170 + User::Leave(KErrHardwareNotAvailable);
1.171 + }
1.172 + }
1.173 +
1.174 +// ---------------------------------------------------------
1.175 +// CTelephonyAudioRoutingProxy::PreviousOutput
1.176 +// Provides caller with current value of previous audio output value.
1.177 +// (other items were commented in a header).
1.178 +// ---------------------------------------------------------
1.179 +//
1.180 +
1.181 +CTelephonyAudioRouting::TAudioOutput CTelephonyAudioRoutingProxy::PreviousOutput()
1.182 + {
1.183 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::PreviousOutput"), this);
1.184 + TAudioOutput prevOutput = (iSession.PreviousAudioOutputPkg())();
1.185 +
1.186 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::PreviousOutput: iSession's Previous Audio Output = %d"),prevOutput);
1.187 + return prevOutput;
1.188 + }
1.189 +
1.190 +// ---------------------------------------------------------
1.191 +// CTelephonyAudioRoutingProxy::ValidateOutputRequest
1.192 +// Checks that output requested is in list of available outputs.
1.193 +// (other items were commented in a header).
1.194 +// ---------------------------------------------------------
1.195 +//
1.196 +
1.197 +TBool CTelephonyAudioRoutingProxy::ValidateOutputRequest(TAudioOutput aOutput)
1.198 + {
1.199 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ValidateOutputRequest"),this);
1.200 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ValidateOutputRequest for: %d"),aOutput);
1.201 +
1.202 + TArray<CTelephonyAudioRouting::TAudioOutput> availableOutputs = (iSession.AvailableOutputs()).Array();
1.203 +
1.204 + TBool found = EFalse;
1.205 + TInt count = availableOutputs.Count();
1.206 + for(TInt i = 0; i < count; i++)
1.207 + {
1.208 + if (aOutput == availableOutputs[i])
1.209 + {
1.210 + found = ETrue;
1.211 + break;
1.212 + }
1.213 + }
1.214 + return found;
1.215 + }
1.216 +
1.217 +
1.218 +// ---------------------------------------------------------
1.219 +// CTelephonyAudioRoutingProxy::ShowNoteMode
1.220 +// Provides caller with the current ShowNoteMode setting in server.
1.221 +// (other items were commented in a header).
1.222 +// ---------------------------------------------------------
1.223 +//
1.224 +TBool CTelephonyAudioRoutingProxy::ShowNoteMode()
1.225 + {
1.226 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::ShowNoteMode"),this);
1.227 +
1.228 + TPckgBuf<TBool> showNoteModePkg = iSession.ShowNoteMode();
1.229 + TBool showNoteMode = showNoteModePkg();
1.230 +
1.231 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::ShowNoteMode: = %d"), showNoteMode);
1.232 + return showNoteMode;
1.233 + }
1.234 +
1.235 +
1.236 +// ---------------------------------------------------------
1.237 +// CTelephonyAudioRoutingProxy::SetShowNote
1.238 +//
1.239 +// (other items were commented in a header).
1.240 +// ---------------------------------------------------------
1.241 +//
1.242 +
1.243 +TInt CTelephonyAudioRoutingProxy::SetShowNote( TBool aMode )
1.244 + {
1.245 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::SetShowNote"),this);
1.246 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::SetShowNote With: %d"),aMode);
1.247 +
1.248 + // Note: Will set aMode on a GetShowNote call after SetOutputComplete called
1.249 + iShowNote = aMode;
1.250 + return KErrNone;
1.251 + }
1.252 +// ---------------------------------------------------------
1.253 +// CTelephonyAudioRoutingProxy::GetShowNote
1.254 +//
1.255 +// (other items were commented in a header).
1.256 +// ---------------------------------------------------------
1.257 +//
1.258 +
1.259 +TInt CTelephonyAudioRoutingProxy::GetShowNote( TBool& aMode )
1.260 + {
1.261 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy[%x]::GetShowNote"),this);
1.262 +
1.263 + // Check with session if Ok to retrieve iShowNoteMode from server:
1.264 + TBool okToGetShowNoteMode = iSession.OkToGetShowNoteMode();
1.265 +
1.266 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t GetShowNote: Session: Ok to get show note = %d"),okToGetShowNoteMode);
1.267 +
1.268 + if (okToGetShowNoteMode)
1.269 + {
1.270 + aMode = ShowNoteMode();
1.271 + }
1.272 + else
1.273 + {
1.274 + aMode = EFalse;
1.275 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: (Not OK to Get Value from Server) Returning ShowNoteMode = %d"), aMode);
1.276 + }
1.277 +
1.278 + // reset session's iOkToGetShowNoteMode flag once it has been retrieved
1.279 + iSession.ResetShowNoteMode();
1.280 +
1.281 + TELAUDRTNG_RDEBUG1(_L("[TELAUDRTNG]\t CTelephonyAudioRoutingProxy::GetShowNote: Returning ShowNoteMode = %d"), aMode);
1.282 +
1.283 + return KErrNone;
1.284 + }
1.285 +// End of File