dbgagents/trkagent/engine/TrkEngine.cpp
changeset 0 c6b0df440bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgagents/trkagent/engine/TrkEngine.cpp	Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,439 @@
+/*
+* Copyright (c) 2004 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 "TrkEngineModel.h"
+#include "TrkEngine.h"
+#ifdef __USE_NEW_DEBUG_API__
+#include "trkdispatchlayer2.h"
+#else
+#include "TrkDispatchLayer.h"
+#endif
+
+#ifndef __NOKIA_TEXT_SHELL__
+#include "TrkSerialCommPort.h"
+#endif
+
+#ifndef __TEXT_SHELL__
+#include "TrkBtSocketCommPort.h"
+#include "TrkUsbPortListener.h"
+#include "TrkDbgTrcCommPort.h"
+#endif //__TEXT_SHELL__
+
+#ifdef __OEM_TRK__	  
+#include "TrkDccCommPort.h"
+
+#ifdef __ENABLE_XTI__
+#include "TrkXtiCommPort.h"
+#endif
+#endif //__OEM_TRK__
+
+
+//
+//
+// CTrkEngine implementation
+//
+//
+
+//
+// CTrkEngine::NewL
+//
+EXPORT_C CTrkEngine* CTrkEngine::NewL()
+{
+	CTrkEngine* self = new(ELeave) CTrkEngine;
+	self->ConstructL();
+	return self;
+}
+
+//
+// CTrkEngine::NewLC
+//
+EXPORT_C CTrkEngine* CTrkEngine::NewLC()
+{
+	CTrkEngine* self = new(ELeave) CTrkEngine;
+	CleanupStack::PushL(self);
+	
+	self->ConstructL();
+	
+	return self;
+}
+
+
+EXPORT_C CTrkEngine* CTrkEngine::NewL(MTrkEngineCallback* aCallback)
+{
+	CTrkEngine* self = new(ELeave) CTrkEngine;
+	self->ConstructL(aCallback);
+	return self;
+}
+
+//
+// CTrkEngine::NewLC
+//
+EXPORT_C CTrkEngine* CTrkEngine::NewLC(MTrkEngineCallback* aCallback)
+{
+	CTrkEngine* self = new(ELeave) CTrkEngine;
+	CleanupStack::PushL(self);
+	
+	self->ConstructL(aCallback);
+	
+	return self;
+}
+
+//
+// CTrkEngine destructor
+//
+CTrkEngine::CTrkEngine()
+:iCommPort(NULL),
+ iDispatchLayer(NULL),
+ iModel(NULL),
+ iCommPortListener(NULL),
+ iInactivityTimerDisabler(NULL),
+ iCallback(NULL),
+ iCurrentConnType(ETrkBt)
+{
+}
+
+//
+// CTrkEngine::ConstructL
+//
+
+void CTrkEngine::ConstructL(MTrkEngineCallback* aCallback)
+{	
+    // make sure the kernel side device driver is not already loaded
+    User::FreeLogicalDevice(KMetroTrkDriverName);
+    // load the kernel side device driver
+#ifndef __WINS__
+    TInt err = User::LoadLogicalDevice(_L("TrkDriver.ldd"));
+    if ((KErrAlreadyExists != err) && (KErrNone != err))
+        User::Leave(err);       
+#endif
+
+	iModel = CTrkEngineModel::NewL();
+	iCallback = aCallback;
+}
+
+//
+// CTrkEngine destructor
+//
+EXPORT_C CTrkEngine::~CTrkEngine()
+{
+    #ifndef __TEXT_SHELL__
+    // if USB connection, then stop the cable listener as well.
+    if (iCurrentConnType == ETrkUsbDbgTrc)
+    {
+    	iCommPortListener->StopListening();
+    }
+	#endif
+    
+    //Unload the driver stuff
+#ifndef __WINS__
+    TInt err = User::FreeLogicalDevice(KMetroTrkDriverName);
+    if (KErrNone != err)
+        User::Panic(_L("FreeLogicalDevice failed"), err);
+#endif
+    
+	SafeDelete(iDispatchLayer);
+	SafeDelete(iModel);
+	SafeDelete(iCommPortListener);	
+	SafeDelete(iInactivityTimerDisabler);
+}
+
+//
+// CTrkEngine::Start
+//
+EXPORT_C void CTrkEngine::StartL()
+{
+	iModel->GetConnData(iCurrentConnData);
+	iCurrentConnType = iCurrentConnData.iConnType;
+	
+	DoStartL();
+}
+
+//
+// CTrkEngine::Start
+//
+EXPORT_C void CTrkEngine::StartL(TTrkConnType aConnType)
+{
+	iModel->GetDefaultConnData(aConnType, iCurrentConnData);
+	iCurrentConnType = iCurrentConnData.iConnType;
+	
+	DoStartL();
+}
+
+//
+// CTrkEngine::Stop
+//
+EXPORT_C void CTrkEngine::Stop()
+{
+	if (iDispatchLayer)
+	{
+		iDispatchLayer->StopListening();	
+		SafeDelete(iDispatchLayer);
+		iCommPort = NULL; //port is deleted by the framing layer
+	}
+}
+
+//
+// CTrkEngine::GetVersionInfo
+//
+EXPORT_C void CTrkEngine::GetVersionInfo(TInt &aMajorVersion, TInt &aMinorVersion, TInt &aMajorAPIVersion, TInt &aMinorAPIVersion, TInt &aBuildNumber)
+{
+	CTrkDispatchLayer::GetVersionInfo(aMajorVersion, aMinorVersion, aMajorAPIVersion, aMinorAPIVersion, aBuildNumber);
+}
+
+//
+// CTrkEngine::GetConnectionInfo
+//
+EXPORT_C void CTrkEngine::GetConnectionInfo(TDes& aMessage)
+{
+	aMessage = KNullDesC;
+	if (iCommPort)
+	{
+		iCommPort->GetConnectionInfo(aMessage);
+	}
+}
+//
+// CTrkEngine::GetConnectionInfo
+//
+EXPORT_C TTrkConnStatus CTrkEngine::GetConnectionStatus()
+{
+    if (iCommPort)
+    {
+        
+        return(iCommPort->GetConnectionStatus());
+    }
+    else
+        return ETrkConnectionError;
+        
+}
+//
+// CTrkEngine::GetErrorInfo
+//
+EXPORT_C void CTrkEngine::GetErrorInfo(TDes& aMessage)
+{
+	if (iCommPort)
+	{
+		iCommPort->GetErrorInfo(aMessage);
+	}
+	else
+	{
+		aMessage = iErrorMessage;
+	}
+}
+
+//
+// CTrkEngine::GetConnectionData
+//
+EXPORT_C void CTrkEngine::GetConnectionData(TTrkConnData& aConnData)
+{
+	iModel->GetConnData(aConnData);
+}
+
+//
+// CTrkEngine::SetConnectionData
+//
+EXPORT_C TInt CTrkEngine::SetConnectionData(TTrkConnData& aConnData)
+{
+	return iModel->SetConnData(aConnData);
+}
+
+//
+// CTrkEngine::IsDebugging
+//
+EXPORT_C TInt CTrkEngine::IsDebugging()
+{
+	if (iDispatchLayer)
+	{
+		return iDispatchLayer->IsDebugging();
+	}
+	return EFalse;
+}
+
+//
+// CTrkEngine::GetConnectionType
+//
+EXPORT_C TTrkConnType CTrkEngine::GetConnectionType()
+{
+    return iCurrentConnType;
+}
+//
+// CTrkEngine::GetPlugPlaySetting()
+//
+EXPORT_C TBool CTrkEngine::GetPlugPlaySetting()
+{
+    TBool PlugPLaySetting;
+    PlugPLaySetting = iModel->GetPlugPlaySettingValue();
+    return PlugPLaySetting;
+    
+}
+//
+// CTrkEngine::DoStartL
+//
+void CTrkEngine::DoStartL()
+{
+	CreateCommInterfaceL();
+
+	// ownership of the comm port is passed down to CTrkFramingLayer
+	iDispatchLayer = CTrkDispatchLayer::NewL(iCommPort, this);
+		
+#ifndef __TEXT_SHELL__		
+	// start listening for the cable connection.	
+	/* not required here as server starts listening
+	 
+	if (iCurrentConnType == ETrkUsbDbgTrc)
+	{
+		if (!iCommPortListener) // create the listener only once
+			iCommPortListener = new CTrkUsbPortListener(this);
+
+		iCommPortListener->ListenL();
+	}
+	*/
+#endif //__TEXT_SHELL__	
+
+	iCommPort->OpenPortL();
+	if (iCommPort->IsConnectionEstablished())
+	{	  
+		iDispatchLayer->Listen();
+	
+		if (iCurrentConnData.iConnType == ETrkBt || iCurrentConnData.iConnType == ETrkSerial)
+			iCommPort->SendDataL(_L8("Trk for Symbian OS started"));
+	}
+
+}
+
+//
+// CTrkEngine::CreateCommInterfaceL
+//
+void CTrkEngine::CreateCommInterfaceL()
+{
+	iCommPort = NULL;
+
+	switch (iCurrentConnData.iCommType)
+	{
+
+	#ifndef __NOKIA_TEXT_SHELL__		
+		case ESerialComm:
+		{
+			iCommPort = CTrkSerialCommPort::NewL(iCurrentConnData, iErrorMessage);
+			break;
+		}
+	#endif
+	
+	#ifndef __TEXT_SHELL__		
+		case EBtSocket:
+		{
+			iCommPort = CTrkBtSocketCommPort::NewL(iCurrentConnData, iErrorMessage, this);			
+			break;
+		}
+		case EDbgTrcComm:
+		{
+			iCommPort = CTrkDbgTrcCommPort::NewL(iCurrentConnData, iErrorMessage);
+			break;
+		}
+	#endif //__TEXT_SHELL__
+		
+	#ifdef __OEM_TRK__	  
+		case EDcc:
+		{
+			iCommPort = CTrkDccCommPort::NewL(iCurrentConnData, iErrorMessage);			
+			break;
+		}
+		
+		#ifdef __ENABLE_XTI__
+		case EXti:
+		{
+			iCommPort = CTrkXtiCommPort::NewL(iCurrentConnData, iErrorMessage);			
+			break;
+		}		
+		#endif
+	#endif //__OEM_TRK__
+	
+		default:
+		{
+			User::Leave(KErrNotFound);
+		}
+	}
+	}
+	
+/*
+ * This is called by when BT socket finds the port and started to listen  
+ * 
+ */
+void CTrkEngine::AsyncConnectionSuccessfulL()
+{
+    iDispatchLayer->Listen();    
+
+    if (iCurrentConnData.iConnType == ETrkBt || iCurrentConnData.iConnType == ETrkSerial)
+        iCommPort->SendDataL(_L8("Trk for Symbian OS started"));
+    
+    if (iCallback)
+			iCallback->OnConnection();
+	}
+
+/*
+ * This is called when PC rejects the connection
+ * 
+ */
+void CTrkEngine::AsyncConnectionFailed()
+{
+    iCallback->OnAsyncConnectionFailed();   
+}
+
+//
+// CTrkEngine::DebuggingStarted
+// Called from the dispatch layer to indicate the start of a debug session
+//
+void CTrkEngine::DebuggingStarted()
+{
+	//start the inactivity timer
+	StartInactivityTimerDisabler();
+	
+	if (iCallback)
+		iCallback->DebuggingStarted();
+}
+
+//
+// CTrkEngine::DebuggingEnded
+// Called from the dispatch layer when a debug session ends.
+//
+void CTrkEngine::DebuggingEnded()
+{	
+	if (iCallback)
+		iCallback->DebuggingEnded();
+	//deactivate inactivity timer
+	SafeDelete(iInactivityTimerDisabler);
+}
+
+// CTrkEngine::StartInactivityTimerDisabler 
+//
+void CTrkEngine::StartInactivityTimerDisabler()
+{	
+	iInactivityTimerDisabler = new(ELeave) CInactivityTimerDisabler;
+    iInactivityTimerDisabler->ConstructL();  
+    iInactivityTimerDisabler->Activate();
+}
+
+//
+// DLL Entry point
+//
+#ifndef EKA2
+TInt E32Dll(TDllReason)
+{
+	return KErrNone;
+}
+#endif
+