bluetoothengine/btaudioman/src/basrvaccstatedisconnect.cpp
changeset 0 f63038272f30
child 6 6a29d5ad0713
--- /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))
+        }
+    }
+