dbgagents/trkagent/trkserver/trkdebugmanager.cpp
changeset 0 c6b0df440bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgagents/trkagent/trkserver/trkdebugmanager.cpp	Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,390 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+
+#include "trkdebugmgrcallbacks.h"
+#include "trkdebugmanager.h"
+#ifndef __TEXT_SHELL__
+#include "DebugNotifier.h"
+#endif
+// System includes
+#include <e32debug.h>
+
+//Constants
+#ifndef __TEXT_SHELL__
+_LIT(KLibraryName, "DebugNotifier.dll");
+#endif
+
+#define SafeDelete(x) { if (x) delete x; x = NULL; }
+
+//
+// CTrkDebugManager (source)
+//
+
+//
+// CTrkDebugManager::CTrkDebugManager()
+//
+// Constructor
+//
+CTrkDebugManager::CTrkDebugManager() : iTrkEngine(NULL), iConnStatus(ETrkNotConnected), iDebugging(EFalse), iPlugAndPlay(ETrue),
+                                       iDebugMgrCallback(NULL)
+#ifndef __TEXT_SHELL__                                       
+, iToolsConnectionListener(NULL)
+#endif
+{
+    
+}
+
+//
+// CTrkDebugManager::~CTrkDebugManager()
+//
+// Destructor
+//
+CTrkDebugManager::~CTrkDebugManager()
+{
+    StopListening();
+#ifndef __TEXT_SHELL__
+    SafeDelete(iToolsConnectionListener);
+#endif
+    SafeDelete(iTrkEngine);
+}
+
+//
+// CTrkDebugManager::ConstructL()
+//
+// Second level constructor
+//
+void CTrkDebugManager::ConstructL()
+{	
+	iTrkEngine = CTrkEngine::NewL(this);
+#ifndef __TEXT_SHELL__
+	TRAPD(err,iToolsConnectionListener = CToolsConnectionListener::NewL(this));
+	if(!err)
+	iToolsConnectionListener->StartListening();
+#endif
+}
+
+//
+// CTrkDebugManager::NewL()
+//
+// Creates an instance of CTrkDebugManager
+//
+CTrkDebugManager* CTrkDebugManager::NewL()
+{
+	CTrkDebugManager* self = new(ELeave) CTrkDebugManager();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+}
+
+
+//
+// CTrkDebugManager::NewLC()
+//
+// Creates an instance of CTrkDebugManager
+//
+CTrkDebugManager* CTrkDebugManager::NewLC()
+{
+	CTrkDebugManager* self = new(ELeave) CTrkDebugManager();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	
+	return self;
+}
+//
+// CTrkDebugManager::StartDebugging()
+//
+// This method is to start debugging when the connection changes and also to handle command line arguments
+//
+void CTrkDebugManager::StartDebuggingL(TTrkConnType aConnType)
+{   
+    TRAPD(error, iTrkEngine->StartL(aConnType));
+    
+    if (error != KErrNone)
+    {
+        iTrkEngine->GetErrorInfo(iConnMsg);
+        iConnStatus = ETrkNotConnected;
+        iTrkEngine->Stop();
+    }
+    else
+    {
+        iTrkEngine->GetConnectionInfo(iConnMsg);
+        iConnStatus = ETrkConnected;
+    }
+    User::Leave(error);
+}
+//
+// CTrkSrvScheduler::StartDebuggingL()
+//
+// This method is to start debugging with the bluetooth connection
+//
+void CTrkDebugManager::StartDebuggingL()
+{	
+	TRAPD(error, iTrkEngine->StartL());
+
+	if (error != KErrNone)
+	{
+		iTrkEngine->GetErrorInfo(iConnMsg);
+		iConnStatus = ETrkNotConnected;
+		iTrkEngine->Stop();
+	}
+	else
+	{
+		iTrkEngine->GetConnectionInfo(iConnMsg);
+		iConnStatus = iTrkEngine->GetConnectionStatus();
+	}
+}
+//
+// CTrkSrvScheduler::StopDebugging()
+//
+// This method is to stop the debugging
+//
+void CTrkDebugManager::StopDebugging()
+{   
+	iTrkEngine->Stop();
+	iConnStatus = ETrkNotConnected;
+	iConnMsg = KNullDesC;
+}
+//
+// CTrkSrvScheduler::StopDebugging()
+//
+// To get the version info of TRK
+//
+void CTrkDebugManager::GetVersion(TTRKVersion& aVersion)
+{
+	iTrkEngine->GetVersionInfo(aVersion.iMajor, aVersion.iMinor, aVersion.iMajorAPI, aVersion.iMinorAPI, aVersion.iBuild);
+}
+//
+// CTrkSrvScheduler::GetConnectionMsg()
+//
+// To find out the connection msg 
+//
+void CTrkDebugManager::GetConnectionMsg(TDes& aConnStatusMsg)
+{
+    aConnStatusMsg = iConnMsg;        
+}
+
+//
+// CTrkDebugManager::ConnectToDebuggerL()
+//
+void CTrkDebugManager::ConnectToDebuggerL()
+{	
+    StartDebuggingL();
+}
+
+//
+// CTrkSrvScheduler::DisConnect()
+//
+void CTrkDebugManager::DisConnect()
+{
+    StopDebugging();
+}
+
+//
+// CTrkDebugManager::GetCurrentConnData()
+//
+void CTrkDebugManager::GetCurrentConnData(TTrkConnData& aConnData)
+{
+    iTrkEngine->GetConnectionData(aConnData);
+}
+
+//
+//CTrkDebugManager::SetCurrentConnData()
+//
+void CTrkDebugManager::SetCurrentConnData(TTrkConnData& aConnData)
+{
+    iTrkEngine->SetConnectionData(aConnData);
+}
+//
+// CTrkDebugManager::IsDebugging()
+// returns whether debugging started or not
+//
+TBool CTrkDebugManager::IsDebugging()
+{
+    iDebugging = iTrkEngine->IsDebugging();
+    return iDebugging;
+}
+//
+// CTrkDebugManager::GetPlugAndPlayOption()
+// returns whether the plug and play is set or not
+//
+TBool CTrkDebugManager::GetPlugAndPlayOption()
+{   
+    return iPlugAndPlay;
+    
+}
+//
+// CTrkDebugManager::SetPlugAndPlayOption()
+// To set the plug and play option 
+//
+void CTrkDebugManager::SetPlugAndPlayOption(TBool aPlugAndPlay)
+{
+    iPlugAndPlay = aPlugAndPlay;
+    
+}
+// ----------------------------------------------------
+// CTrkDebugManager::OnConnection
+// Called when a connection is opened, right now nothing is done
+// as connection is always established from the user side.
+// This call would be useful when we add for connecting automatically 
+// when a USB cable is plugged in while TRK is running.
+// ----------------------------------------------------
+//
+void CTrkDebugManager::OnConnection()
+{
+    iConnStatus = ETrkConnected;
+    iTrkEngine->GetConnectionInfo(iConnMsg);
+    if (iDebugMgrCallback)
+         iDebugMgrCallback->DebugConnStatusChanged(iConnStatus);
+}
+
+// ----------------------------------------------------
+// CTrkDebugManager::OnCloseConnection
+// Called when a connection is closed, update any of the UI clients.
+// ----------------------------------------------------
+//
+void CTrkDebugManager::OnCloseConnection()
+{   
+    iConnStatus = ETrkNotConnected;
+    if (iDebugMgrCallback)
+          iDebugMgrCallback->DebugConnStatusChanged(iConnStatus);
+}
+
+//
+// ----------------------------------------------------
+// CTrkDebugManager::DebuggingStarted
+// Called when a debug session is started.
+// ----------------------------------------------------
+//
+void CTrkDebugManager::DebuggingStarted()
+{
+    iDebugging = ETrue;
+    if (iDebugMgrCallback)
+        iDebugMgrCallback->DebuggingStatusChanged(iDebugging);
+}
+
+//
+// ----------------------------------------------------
+// CTrkDebugManager::DebuggingEnded
+// Called when a debug session is ended.
+// ----------------------------------------------------
+//
+void CTrkDebugManager::DebuggingEnded()
+{
+    iDebugging = EFalse;
+    if (iDebugMgrCallback)
+        iDebugMgrCallback->DebuggingStatusChanged(iDebugging);
+}
+
+//
+//----------------------------------------------------
+//CTrkDebugManager::OnAsyncConnectionFailed()
+//Called when bluetooth connection falied
+//----------------------------------------------------
+//
+void CTrkDebugManager::OnAsyncConnectionFailed()
+{
+    
+    iConnStatus = ETrkConnectionError;
+    iTrkEngine->GetErrorInfo(iConnMsg);
+    if (iDebugMgrCallback)
+          iDebugMgrCallback->DebugConnStatusChanged(iConnStatus);
+    
+}
+
+//
+//----------------------------------------------------
+// CTrkDebugManager::ConnectionAvailable()
+// Called when the usb connection available
+//----------------------------------------------------
+//
+void CTrkDebugManager::ConnectionAvailable()
+{   
+    iPlugAndPlay = iTrkEngine->GetPlugPlaySetting(); 
+  
+    if(!iDebugging && iPlugAndPlay)
+    {   
+       StopDebugging();
+       TRAPD(error, StartDebuggingL(ETrkUsbDbgTrc));
+        if (!error)
+        {   
+            TRAP(error, NotifyTheUserL());           
+        } 
+            if (iDebugMgrCallback)
+                iDebugMgrCallback->DebugConnStatusChanged(iConnStatus);
+        }       
+}
+
+//
+//----------------------------------------------------
+// CTrkDebugManager::ConnectionUnAvailable()
+// Called when the usb cable is disconnected
+//----------------------------------------------------
+//
+void CTrkDebugManager::ConnectionUnAvailable()
+{   
+    TTrkConnType connType = iTrkEngine->GetConnectionType();
+    if(connType == ETrkUsbDbgTrc)
+    {
+        StopDebugging();
+        TRAPD(error, StartDebuggingL(ETrkXti));
+        if (!error)
+        {   
+            // Nothing to do for now                       
+        }
+        if (iDebugMgrCallback)
+            iDebugMgrCallback->DebugConnStatusChanged(iConnStatus);
+    }    
+}
+
+//
+//----------------------------------------------------
+// CTrkDebugManager::NotifyTheUser()
+// To notify the user that debug services have started
+//----------------------------------------------------
+//
+void CTrkDebugManager::NotifyTheUserL()
+{
+#ifndef __TEXT_SHELL__
+    RLibrary library;
+    // Dynamically load DLL
+    TInt err = library.Load(KLibraryName);
+    if(!err)
+    {
+        TLibraryFunction entry=library.Lookup(1);
+        IDebugNotifier* notify =(IDebugNotifier*)entry();
+        CleanupStack::PushL(notify);
+        notify->NotifyTheUserL();
+        CleanupStack::PopAndDestroy();
+        // Finished with the DLL
+        library.Close();
+    }
+#endif    
+}
+//
+//----------------------------------------------------
+// CTrkDebugManager::StopListening()
+// To stop listening to cable connections
+//----------------------------------------------------
+//
+void CTrkDebugManager::StopListening()
+{    
+#ifndef __TEXT_SHELL__
+    if(iToolsConnectionListener)
+    iToolsConnectionListener->StopListening();
+#endif
+}