bluetoothengine/bteng/src/btengsrvbbconnectionmgr.cpp
branchRCL_3
changeset 16 b23265fb36da
parent 0 f63038272f30
child 19 43824b19ee35
--- a/bluetoothengine/bteng/src/btengsrvbbconnectionmgr.cpp	Wed Apr 14 16:09:00 2010 +0300
+++ b/bluetoothengine/bteng/src/btengsrvbbconnectionmgr.cpp	Tue Apr 27 16:49:44 2010 +0300
@@ -22,6 +22,8 @@
 #include <featmgr.h>
 
 #include "btengsrvbbconnectionmgr.h"
+#include "btengserver.h"
+#include "btengsrvsettingsmgr.h"
 #include "debug.h"
 
 /**  ?description */
@@ -38,8 +40,8 @@
 // C++ default constructor
 // ---------------------------------------------------------------------------
 //
-CBTEngSrvBBConnMgr::CBTEngSrvBBConnMgr(RSocketServ& aSockServ)
-    : iSockServ(aSockServ)
+CBTEngSrvBBConnMgr::CBTEngSrvBBConnMgr(CBTEngServer* aServer, RSocketServ& aSockServ)
+    : iSockServ(aSockServ), iServer(aServer)
     {
     }
 
@@ -73,9 +75,10 @@
 // NewL
 // ---------------------------------------------------------------------------
 //
-CBTEngSrvBBConnMgr* CBTEngSrvBBConnMgr::NewL(RSocketServ& aSockServ)
+CBTEngSrvBBConnMgr* CBTEngSrvBBConnMgr::NewL(CBTEngServer* aServer,
+                                             RSocketServ& aSockServ)
     {
-    CBTEngSrvBBConnMgr* self = new( ELeave ) CBTEngSrvBBConnMgr(aSockServ);
+    CBTEngSrvBBConnMgr* self = new( ELeave ) CBTEngSrvBBConnMgr(aServer, aSockServ);
     CleanupStack::PushL( self );
     self->ConstructL();
     CleanupStack::Pop( self );
@@ -266,6 +269,37 @@
     TRACE_FUNC_EXIT
     }
 
+// ---------------------------------------------------------------------------
+// Request to disconnect all Bluetooth baseband connections with Power off reason code.
+// ---------------------------------------------------------------------------
+//
+void CBTEngSrvBBConnMgr::DisconnectAllLinksForPowerOffL( TCallBack& aCallBack )
+    {
+    TRACE_FUNC_ENTRY
+    iCallBack = aCallBack;
+    RBTDevAddrArray addrArray;
+    GetConnectedAddressesL( addrArray );
+    TInt err = KErrNone;
+    if( addrArray.Count() > 0 )
+        {
+        err = iPhyLinks->DisconnectAll();
+        // @todo Once fix is in stack, call this API instead
+        // err = iPhyLinks->DisconnectAllForPowerOff();
+        }
+    else
+        {
+        err = KErrNotFound;
+        }
+    addrArray.Close();
+    if( err && err != KErrInUse )
+        {
+            // No connections, or something went wrong; just clean up 
+            // and inform our client.
+        HandleDisconnectAllCompleteL( err );
+        }
+    TRACE_FUNC_EXIT
+    }
+
 
 // ---------------------------------------------------------------------------
 // Request to disconnect all Bluetooth baseband connections.
@@ -345,6 +379,11 @@
         }
     (void) ManageTopology( EFalse );    // Ignore result; nothing to do 
                                         // about it here.
+    if( aId == KBTEngSrvBBConnId )
+        {
+        TRACE_INFO( ( _L( "[BTENG] PHY count key changed, update UI connection status" ) ) )
+        iServer->SettingsManager()->SetUiIndicatorsL();
+        }    
     TRACE_FUNC_EXIT
     }