/** 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}