diff -r 000000000000 -r f63038272f30 bluetoothengine/btaudioman/src/basrvaccstatedisconnect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btaudioman/src/basrvaccstatedisconnect.cpp Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,118 @@ +/* +* Copyright (c) 2005-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: Implementation of Disconnect state. +* +*/ + + +// INCLUDE FILES +#include "basrvaccstatedisconnect.h" +#include "debug.h" + +// ================= MEMBER FUNCTIONS ======================= + +CBasrvAccStateDisconnect* CBasrvAccStateDisconnect::NewL(CBasrvAcc& aParent, TInt aConnErr) + { + CBasrvAccStateDisconnect* self=new(ELeave) CBasrvAccStateDisconnect(aParent, aConnErr); + return self; + } + +CBasrvAccStateDisconnect::~CBasrvAccStateDisconnect() + { + delete iActive; + TRACE_FUNC + } + +void CBasrvAccStateDisconnect::EnterL() + { + StatePrint(_L("Disconnect")); + iProfiles = AccInfo().iConnProfiles; + Parent().RequestActiveMode(); + DoDisconnectL(); + } + +CBasrvAccState* CBasrvAccStateDisconnect::ErrorOnEntry(TInt /*aReason*/) + { + TRACE_FUNC + return NULL; + } + +TBTEngConnectionStatus CBasrvAccStateDisconnect::ConnectionStatus() const + { + if (iConnErr) + return EBTEngConnecting; + return EBTEngDisconnecting; + } + +void CBasrvAccStateDisconnect::RequestCompletedL(CBasrvActive& aActive) + { + TRACE_INFO((_L("Disconnect 0x%02x done, err %d"), aActive.RequestId(), iDiscErr)) + if (!iDiscErr) + iDiscErr = aActive.iStatus.Int(); + AccInfo().iConnProfiles &= ~(aActive.RequestId()); + StatePrint(_L("Disconnect")); + if (!AccInfo().iConnProfiles) + { + if (iConnErr) + Parent().AccMan().ConnectCompletedL(AccInfo().iAddr, iConnErr, AccInfo().iSuppProfiles); + else + Parent().AccMan().DisconnectCompletedL(AccInfo().iAddr, iProfiles, KErrNone); + Parent().ChangeStateL(NULL); + } + else + { + DoDisconnectL(); + } + } + +void CBasrvAccStateDisconnect::CancelRequest(CBasrvActive& /*aActive*/) + { + } + +CBasrvAccStateDisconnect::CBasrvAccStateDisconnect(CBasrvAcc& aParent, TInt aConnErr) + : CBasrvAccState(aParent, NULL), iConnErr(aConnErr) + { + } + +void CBasrvAccStateDisconnect::DoDisconnectL() + { + TRACE_FUNC + TProfiles profile = EUnknownProfile; + CBTAccPlugin* plugin = NULL; + if (AccInfo().iConnProfiles & EStereo) + { + profile = EStereo; + } + else if (AccInfo().iConnProfiles & EAnyRemConProfiles) + { + profile = EAnyRemConProfiles; + } + else if (AccInfo().iConnProfiles & EAnyMonoAudioProfiles ) + { + profile = EAnyMonoAudioProfiles; + } + plugin = Parent().AccMan().PluginMan().Plugin(profile); + if (plugin) + { + if (!iActive) + { + iActive = CBasrvActive::NewL(*this, CActive::EPriorityStandard, profile); + } + iActive->SetRequestId(profile); + plugin->DisconnectAccessory(AccInfo().iAddr, iActive->iStatus); + iActive->GoActive(); + TRACE_INFO((_L("Disconnect 0x%02x ..."), profile)) + } + } +