Commit 3f750695 authored by Pawel Polanski's avatar Pawel Polanski Committed by Paweł Polański

Symbian: TRK is no more!

TKR-related code has been removed.
From now on CODA is the default On-Device
Agent

Change-Id: I52236a33aff9b31ca48d507da97430df7d871239
Reviewed-on: http://codereview.qt.nokia.com/450Reviewed-by: default avatarQt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: default avatarPaweł Polański <jaggernod@gmail.com>
parent eed4d1e1
......@@ -153,7 +153,7 @@
\brief Base class of a debugger engine.
Note: the Debugger process itself and any helper processes like
gdbserver, the trk client etc are referred to as 'Engine',
gdbserver, the CODA client etc are referred to as 'Engine',
whereas the debugged process is referred to as 'Inferior'.
Transitions marked by '---' are done in the individual engines.
......
......@@ -56,7 +56,6 @@ public:
};
enum SymbianDebugClient {
SymbianDebugClientTrk,
SymbianDebugClientCoda
};
......@@ -73,7 +72,7 @@ public:
executableUid(0),
communicationChannel(CommunicationChannelTcpIp),
serverPort(0),
debugClient(SymbianDebugClientTrk)
debugClient(SymbianDebugClientCoda)
{}
QString executable;
......
......@@ -74,7 +74,7 @@ void AbstractGdbAdapter::write(const QByteArray &data)
gdbProc()->write(data);
}
bool AbstractGdbAdapter::isTrkAdapter() const
bool AbstractGdbAdapter::isCodaAdapter() const
{
return false;
}
......
......@@ -49,9 +49,9 @@ class AbstractGdbProcess;
class GdbResponse;
// AbstractGdbAdapter is inherited by PlainGdbAdapter used for local
// debugging and TrkGdbAdapter used for on-device debugging.
// debugging and CodaGdbAdapter used for on-device debugging.
// In the PlainGdbAdapter case it's just a wrapper around a QProcess running
// gdb, in the TrkGdbAdapter case it's the interface to the gdb process in
// gdb, in the CodaGdbAdapter case it's the interface to the gdb process in
// the whole rfcomm/gdb/gdbserver combo.
class AbstractGdbAdapter : public QObject
{
......@@ -88,10 +88,10 @@ public:
static QString msgInferiorRunOk();
static QString msgConnectRemoteServerFailed(const QString &why);
// Trk specific stuff
virtual bool isTrkAdapter() const;
virtual void trkReloadRegisters() {}
virtual void trkReloadThreads() {}
// CODA specific stuff
virtual bool isCodaAdapter() const;
virtual void codaReloadRegisters() {}
virtual void codaReloadThreads() {}
virtual void handleRemoteSetupDone(int gdbServerPort, int qmlPort);
virtual void handleRemoteSetupFailed(const QString &reason);
......
......@@ -34,7 +34,7 @@
#include "debuggerstartparameters.h"
#include "codadevice.h"
#include "trkutils.h"
#include "codautils.h"
#include "gdbmi.h"
#include "symbiandevicemanager.h"
......@@ -89,7 +89,7 @@ namespace Internal {
using namespace Symbian;
using namespace Coda;
static inline QString startMsg(const trk::Session &session)
static inline QString startMsg(const Coda::Session &session)
{
return CodaGdbAdapter::tr("Process started, PID: 0x%1, thread id: 0x%2, "
"code segment: 0x%3, data segment: 0x%4.")
......@@ -109,9 +109,9 @@ static inline QString startMsg(const trk::Session &session)
* - Engine sets up breakpoints,etc and calls inferiorStartPhase2(), which
* resumes the suspended CODA process via gdb 'continue'.
* Thread handling (30.06.2010):
* TRK does not report thread creation/termination. So, if we receive
* CODA does not report thread creation/termination. So, if we receive
* a stop in a different thread, we store an additional thread in snapshot.
* When continuing in sendTrkContinue(), we delete this thread, since we cannot
* When continuing in sendContinue(), we delete this thread, since we cannot
* know whether it will exist at the next stop.
* Also note that threads continue running in Symbian even if one crashes.
* TODO: - Maybe thread reporting will be improved in CODA?
......@@ -149,7 +149,7 @@ CodaGdbAdapter::CodaGdbAdapter(GdbEngine *engine) :
this, SLOT(setVerbose(QVariant)));
}
void CodaGdbAdapter::setupTrkDeviceSignals()
void CodaGdbAdapter::setupDeviceSignals()
{
connect(m_codaDevice.data(), SIGNAL(error(QString)),
this, SLOT(codaDeviceError(QString)));
......@@ -186,7 +186,7 @@ void CodaGdbAdapter::setVerbose(int verbose)
void CodaGdbAdapter::codaLogMessage(const QString &msg)
{
logMessage(_("TRK ") + msg);
logMessage(_("CODA ") + msg);
}
void CodaGdbAdapter::setGdbServerName(const QString &name)
......@@ -221,7 +221,7 @@ void CodaGdbAdapter::handleCodaRunControlModuleLoadContextSuspendedEvent(const C
if (!isExe) {
if (minfo.loaded) {
m_session.modules.push_back(moduleName);
trk::Library library;
Coda::Library library;
library.name = minfo.name;
library.codeseg = minfo.codeAddress;
library.dataseg = minfo.dataAddress;
......@@ -268,7 +268,7 @@ void CodaGdbAdapter::handleCodaRunControlModuleLoadContextSuspendedEvent(const C
} else {
// Does not seem to be necessary anymore.
// FIXME: Startup sequence can be streamlined now as we do not
// have to wait for the TRK startup to learn the load address.
// have to wait for the CODA startup to learn the load address.
//m_engine->postCommand("add-symbol-file \"" + symbolFile + "\" "
// + QByteArray::number(m_session.codeseg));
m_engine->postCommand("symbol-file \"" + symbolFile + "\"");
......@@ -466,7 +466,7 @@ void CodaGdbAdapter::readGdbServerCommand()
if (code != '$') {
logMessage("Broken package (2) " + quoteUnprintableLatin1(ba)
+ trk::hexNumber(code), LogError);
+ Coda::hexNumber(code), LogError);
continue;
}
......@@ -486,7 +486,7 @@ void CodaGdbAdapter::readGdbServerCommand()
}
//logMessage(QString("Packet checksum: %1").arg(checkSum));
trk::byte sum = 0;
Coda::byte sum = 0;
for (int i = 0; i < pos; ++i)
sum += ba.at(i);
......@@ -533,7 +533,7 @@ void CodaGdbAdapter::sendGdbServerAck()
void CodaGdbAdapter::sendGdbServerMessage(const QByteArray &msg, const QByteArray &logNote)
{
trk::byte sum = 0;
Coda::byte sum = 0;
for (int i = 0; i != msg.size(); ++i)
sum += msg.at(i);
......@@ -593,7 +593,7 @@ void CodaGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
else if (cmd == "c") {
logMessage(msgGdbPacket(_("Continue")));
sendGdbServerAck();
sendTrkContinue();
sendContinue();
}
else if (cmd.startsWith('C')) {
......@@ -608,7 +608,7 @@ void CodaGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
LogWarning);
sendGdbServerMessage('O' + QByteArray("Console output").toHex());
sendGdbServerMessage("W81"); // "Process exited with result 1
sendTrkContinue();
sendContinue();
}
else if (cmd.startsWith('D')) {
......@@ -746,12 +746,12 @@ void CodaGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
logMessage(_("Setting register #%1 to 0x%2").arg(regnumValue.first)
.arg(regnumValue.second, 0, 16));
QByteArray registerValue;
trk::appendInt(&registerValue, trk::BigEndian); // Registers are big endian
Coda::appendInt(&registerValue, Coda::BigEndian); // Registers are big endian
m_codaDevice->sendRegistersSetCommand(
CodaCallback(this, &CodaGdbAdapter::handleWriteRegister),
currentThreadContextId(), regnumValue.first, registerValue,
QVariant(regnumValue.first));
// Note that App TRK refuses to write registers 13 and 14
// Note that App CODA refuses to write registers 13 and 14
}
else if (cmd == "qAttached") {
......@@ -890,7 +890,7 @@ void CodaGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
arg(pc, 0, 16)));
sendGdbServerAck();
m_running = true;
sendTrkStepRange();
sendStepRange();
}
else if (cmd.startsWith('T')) {
......@@ -909,7 +909,7 @@ void CodaGdbAdapter::handleGdbServerCommand(const QByteArray &cmd)
// vCont[;action[:thread-id]]...'
sendGdbServerAck();
m_running = true;
sendTrkContinue();
sendContinue();
}
else if (cmd.startsWith("Z0,") || cmd.startsWith("Z1,")) {
......@@ -1047,7 +1047,7 @@ void CodaGdbAdapter::startAdapter()
if (parameters.communicationChannel ==
DebuggerStartParameters::CommunicationChannelTcpIp) {
m_codaDevice = QSharedPointer<CodaDevice>(new CodaDevice, &CodaDevice::deleteLater);
setupTrkDeviceSignals();
setupDeviceSignals();
codaSocket = QSharedPointer<QTcpSocket>(new QTcpSocket);
m_codaDevice->setDevice(codaSocket);
} else {
......@@ -1065,7 +1065,7 @@ void CodaGdbAdapter::startAdapter()
m_engine->handleAdapterStartFailed(msg, QString());
return;
}
setupTrkDeviceSignals();
setupDeviceSignals();
m_codaDevice->setVerbose(m_verbose);
}
......@@ -1209,7 +1209,7 @@ void CodaGdbAdapter::write(const QByteArray &data)
QByteArray ba = QByteArray::fromHex(data.mid(2));
qDebug() << "Writing: " << quoteUnprintableLatin1(ba);
// if (ba.size() >= 1)
// sendTrkMessage(ba.at(0), TrkCB(handleDirectTrk), ba.mid(1));
// sendMessage(ba.at(0), TrkCB(handleDirectTrk), ba.mid(1));
return;
}
if (data.startsWith("@@")) {
......@@ -1252,13 +1252,13 @@ void CodaGdbAdapter::shutdownAdapter()
}
}
void CodaGdbAdapter::trkReloadRegisters()
void CodaGdbAdapter::codaReloadRegisters()
{
// Take advantage of direct access to cached register values.
m_snapshot.syncRegisters(m_session.tid, m_engine->registerHandler());
}
void CodaGdbAdapter::trkReloadThreads()
void CodaGdbAdapter::codaReloadThreads()
{
m_snapshot.syncThreads(m_engine->threadsHandler());
}
......@@ -1557,7 +1557,7 @@ void CodaGdbAdapter::tryAnswerGdbMemoryRequest(bool buffered)
it = m_snapshot.memory.begin();
et = m_snapshot.memory.end();
for ( ; it != et; ++it)
qDebug() << trk::hexNumber(it.key().from) << trk::hexNumber(it.key().to);
qDebug() << Coda::hexNumber(it.key().from) << Coda::hexNumber(it.key().to);
qDebug() << "WANTED" << wanted.from << wanted.to;
# endif
sendGdbServerMessage("E22", "");
......@@ -1601,7 +1601,7 @@ QByteArray CodaGdbAdapter::currentThreadContextId() const
return RunControlContext::codaId(m_session.pid, m_session.tid);
}
void CodaGdbAdapter::sendTrkContinue()
void CodaGdbAdapter::sendContinue()
{
// Remove all but main thread as we do not know whether they will exist
// at the next stop.
......@@ -1610,7 +1610,7 @@ void CodaGdbAdapter::sendTrkContinue()
m_codaDevice->sendRunControlResumeCommand(CodaCallback(), m_codaProcessId);
}
void CodaGdbAdapter::sendTrkStepRange()
void CodaGdbAdapter::sendStepRange()
{
uint from = m_snapshot.lineFromAddress;
uint to = m_snapshot.lineToAddress;
......@@ -1641,10 +1641,10 @@ void CodaGdbAdapter::handleStep(const CodaCommandResult &result)
if (!result) { // Try fallback with Continue.
logMessage(_("Error while stepping: %1 (fallback to 'continue')").
arg(result.errorString()), LogWarning);
sendTrkContinue();
sendContinue();
// Doing nothing as below does not work as gdb seems to insist on
// making some progress through a 'step'.
//sendTrkMessage(0x12,
//sendMessage(0x12,
// TrkCB(handleAndReportReadRegistersAfterStop),
// trkReadRegistersMessage());
return;
......
......@@ -36,7 +36,7 @@
#include "abstractgdbadapter.h"
#include "localgdbprocess.h"
#include "callback.h"
#include "trkutils.h"
#include "codautils.h"
#include "symbian.h"
#include <QtCore/QPointer>
......@@ -78,9 +78,9 @@ class CodaGdbAdapter : public AbstractGdbAdapter
Q_OBJECT
public:
typedef trk::Callback<const GdbResult &> GdbResultCallback;
typedef trk::Callback<const Coda::CodaCommandResult &> CodaCallback;
typedef trk::Callback<const GdbResponse &> GdbCallback;
typedef Coda::Callback<const GdbResult &> GdbResultCallback;
typedef Coda::Callback<const Coda::CodaCommandResult &> CodaCallback;
typedef Coda::Callback<const GdbResponse &> GdbCallback;
explicit CodaGdbAdapter(GdbEngine *engine);
virtual ~CodaGdbAdapter();
......@@ -91,8 +91,8 @@ public:
void setVerbose(int verbose);
void setBufferedMemoryRead(bool b) { m_bufferedMemoryRead = b; }
void trkReloadRegisters();
void trkReloadThreads();
void codaReloadRegisters();
void codaReloadThreads();
signals:
void output(const QString &msg);
......@@ -104,12 +104,12 @@ public:
void start(const QString &program, const QStringList &args,
QIODevice::OpenMode mode = QIODevice::ReadWrite);
void write(const QByteArray &data);
bool isTrkAdapter() const { return true; }
bool isCodaAdapter() const { return true; }
virtual DumperHandling dumperHandling() const { return DumperNotAvailable; }
private:
void setupTrkDeviceSignals();
void setupDeviceSignals();
void startAdapter();
void setupInferior();
void runEngine();
......@@ -162,8 +162,8 @@ private:
void startGdb();
Q_SLOT void codaEvent(const Coda::CodaEvent &knownEvent);
void handleCodaRunControlModuleLoadContextSuspendedEvent(const Coda::CodaRunControlModuleLoadContextSuspendedEvent &e);
inline void sendTrkContinue();
void sendTrkStepRange();
inline void sendContinue();
void sendStepRange();
void handleStep(const Coda::CodaCommandResult &result);
void handleCreateProcess(const Coda::CodaCommandResult &result);
......@@ -184,7 +184,7 @@ private:
bool m_gdbAckMode;
// Debuggee state
trk::Session m_session; // global-ish data (process id, target information)
Coda::Session m_session; // global-ish data (process id, target information)
Symbian::Snapshot m_snapshot; // local-ish data (memory and registers)
QString m_remoteExecutable;
unsigned m_uid;
......
......@@ -8,9 +8,7 @@ HEADERS += \
$$PWD/localplaingdbadapter.h \
$$PWD/termgdbadapter.h \
$$PWD/remotegdbserveradapter.h \
$$PWD/trkgdbadapter.h \
$$PWD/codagdbadapter.h \
$$PWD/s60debuggerbluetoothstarter.h \
$$PWD/abstractgdbprocess.h \
$$PWD/localgdbprocess.h \
$$PWD/remotegdbprocess.h \
......@@ -30,9 +28,7 @@ SOURCES += \
$$PWD/localplaingdbadapter.cpp \
$$PWD/termgdbadapter.cpp \
$$PWD/remotegdbserveradapter.cpp \
$$PWD/trkgdbadapter.cpp \
$$PWD/codagdbadapter.cpp \
$$PWD/s60debuggerbluetoothstarter.cpp \
$$PWD/abstractgdbprocess.cpp \
$$PWD/localgdbprocess.cpp \
$$PWD/remotegdbprocess.cpp \
......
......@@ -43,7 +43,6 @@
#include "termgdbadapter.h"
#include "remotegdbserveradapter.h"
#include "remoteplaingdbadapter.h"
#include "trkgdbadapter.h"
#include "codagdbadapter.h"
#include "debuggeractions.h"
......@@ -1618,8 +1617,8 @@ void GdbEngine::handleStop2()
reloadStack(false); // Will trigger register reload.
if (supportsThreads()) {
if (m_gdbAdapter->isTrkAdapter()) {
m_gdbAdapter->trkReloadThreads();
if (m_gdbAdapter->isCodaAdapter()) {
m_gdbAdapter->codaReloadThreads();
} else if (m_isMacGdb) {
postCommand("-thread-list-ids", Discardable, CB(handleThreadListIds));
} else {
......@@ -1894,8 +1893,7 @@ AbstractGdbAdapter *GdbEngine::createAdapter()
// FIXME: 1 of 3 testing hacks.
if (sp.debugClient == DebuggerStartParameters::SymbianDebugClientCoda)
return new CodaGdbAdapter(this);
else
return new TrkGdbAdapter(this);
return 0;
}
switch (sp.startMode) {
......@@ -1998,7 +1996,7 @@ void GdbEngine::executeStep()
setTokenBarrier();
notifyInferiorRunRequested();
showStatusMessage(tr("Step requested..."), 5000);
if (m_gdbAdapter->isTrkAdapter() && stackHandler()->stackSize() > 0)
if (m_gdbAdapter->isCodaAdapter() && stackHandler()->stackSize() > 0)
postCommand("sal step,0x" + QByteArray::number(stackHandler()->topAddress(), 16));
if (isReverseDebugging()) {
postCommand("reverse-step", RunRequest, CB(handleExecuteStep));
......@@ -2065,7 +2063,7 @@ void GdbEngine::executeNext()
setTokenBarrier();
notifyInferiorRunRequested();
showStatusMessage(tr("Step next requested..."), 5000);
if (m_gdbAdapter->isTrkAdapter() && stackHandler()->stackSize() > 0)
if (m_gdbAdapter->isCodaAdapter() && stackHandler()->stackSize() > 0)
postCommand("sal next,0x" + QByteArray::number(stackHandler()->topAddress(), 16));
if (isReverseDebugging()) {
postCommand("reverse-next", RunRequest, CB(handleExecuteNext));
......@@ -2805,7 +2803,7 @@ void GdbEngine::insertBreakpoint(BreakpointId id)
cmd = "-break-insert -a -f ";
} else if (m_isMacGdb) {
cmd = "-break-insert -l -1 -f ";
} else if (m_gdbAdapter->isTrkAdapter()) {
} else if (m_gdbAdapter->isCodaAdapter()) {
cmd = "-break-insert -h -f ";
} else if (m_gdbVersion >= 70000) {
int spec = handler->threadSpec(id);
......@@ -3185,7 +3183,7 @@ void GdbEngine::reloadStack(bool forceGotoLocation)
PENDING_DEBUG("RELOAD STACK");
QByteArray cmd = "-stack-list-frames";
int stackDepth = debuggerCore()->action(MaximalStackDepth)->value().toInt();
if (stackDepth && !m_gdbAdapter->isTrkAdapter())
if (stackDepth && !m_gdbAdapter->isCodaAdapter())
cmd += " 0 " + QByteArray::number(stackDepth);
// FIXME: gdb 6.4 symbianelf likes to be asked twice. The first time it
// returns with "^error,msg="Previous frame identical to this frame
......@@ -3194,7 +3192,7 @@ void GdbEngine::reloadStack(bool forceGotoLocation)
// this sometimes happens, ask the second time immediately instead
// of waiting for the first request to fail.
// FIXME: Seems to work with 6.8.
if (m_gdbAdapter->isTrkAdapter() && m_gdbVersion < 6.8)
if (m_gdbAdapter->isCodaAdapter() && m_gdbVersion < 6.8)
postCommand(cmd);
postCommand(cmd, Discardable, CB(handleStackListFrames),
QVariant::fromValue<StackCookie>(StackCookie(false, forceGotoLocation)));
......@@ -3435,13 +3433,13 @@ void GdbEngine::reloadRegisters()
if (!m_registerNamesListed) {
postCommand("-data-list-register-names", CB(handleRegisterListNames));
m_registerNamesListed = true;
// FIXME: Maybe better completely re-do this logic in TRK adapter.
if (m_gdbAdapter->isTrkAdapter())
// FIXME: Maybe better completely re-do this logic in CODA adapter.
if (m_gdbAdapter->isCodaAdapter())
return;
}
if (m_gdbAdapter->isTrkAdapter()) {
m_gdbAdapter->trkReloadRegisters();
if (m_gdbAdapter->isCodaAdapter()) {
m_gdbAdapter->codaReloadRegisters();
} else {
postCommand("-data-list-register-values x",
Discardable, CB(handleRegisterListValues));
......@@ -3475,8 +3473,8 @@ void GdbEngine::handleRegisterListNames(const GdbResponse &response)
registerHandler()->setRegisters(registers);
if (m_gdbAdapter->isTrkAdapter())
m_gdbAdapter->trkReloadRegisters();
if (m_gdbAdapter->isCodaAdapter())
m_gdbAdapter->codaReloadRegisters();
}
void GdbEngine::handleRegisterListValues(const GdbResponse &response)
......
......@@ -69,7 +69,6 @@ class AttachGdbAdapter;
class CoreGdbAdapter;
class LocalPlainGdbAdapter;
class RemoteGdbServerAdapter;
class TrkGdbAdapter;
enum DebuggingHelperState
{
......@@ -230,7 +229,6 @@ private:
friend class TermGdbAdapter;
friend class RemoteGdbServerAdapter;
friend class RemotePlainGdbAdapter;
friend class TrkGdbAdapter;
friend class CodaGdbAdapter;
private: ////////// General Interface //////////
......
......@@ -205,8 +205,8 @@ void GdbEngine::updateAllPython()
postCommand("-stack-list-frames", CB(handleStackListFrames),
QVariant::fromValue<StackCookie>(StackCookie(false, true)));
stackHandler()->setCurrentIndex(0);
if (m_gdbAdapter->isTrkAdapter())
m_gdbAdapter->trkReloadThreads();
if (m_gdbAdapter->isCodaAdapter())
m_gdbAdapter->codaReloadThreads();
else
postCommand("-thread-list-ids", CB(handleThreadListIds), 0);
reloadRegisters();
......
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#include "s60debuggerbluetoothstarter.h"
#include "bluetoothlistener.h"
#include "debuggerengine.h"
#include "trkdevice.h"
namespace Debugger {
namespace Internal {
S60DebuggerBluetoothStarter::S60DebuggerBluetoothStarter
(const TrkDevicePtr& trkDevice, QObject *parent)
: trk::AbstractBluetoothStarter(trkDevice, parent)
{
}
trk::BluetoothListener *S60DebuggerBluetoothStarter::createListener()
{
DebuggerEngine *engine = 0; // FIXME: ABC
trk::BluetoothListener *rc = new trk::BluetoothListener(engine);
rc->setMode(trk::BluetoothListener::Listen);
connect(rc, SIGNAL(message(QString)), engine, SLOT(showDebuggerOutput(QString)));
connect(rc, SIGNAL(terminated()), engine, SLOT(startFailed()));
return rc;
}
trk::PromptStartCommunicationResult
S60DebuggerBluetoothStarter::startCommunication(const TrkDevicePtr &trkDevice,
QWidget *msgBoxParent,
QString *errorMessage)
{
// Bluetooth?
if (trkDevice->serialFrame()) {
BaseCommunicationStarter serialStarter(trkDevice);
return trk::promptStartSerial(serialStarter, msgBoxParent, errorMessage);
}
S60DebuggerBluetoothStarter bluetoothStarter(trkDevice);
return trk::promptStartBluetooth(bluetoothStarter, msgBoxParent, errorMessage);
}
} // namespace Internal
} // namespace Debugger
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (info@qt.nokia.com)
**
**
** GNU Lesser General Public License Usage
**
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** Other Usage
**
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
** If you have questions regarding the use of this file, please contact
** Nokia at info@qt.nokia.com.
**
**************************************************************************/
#ifndef S60DEBUGGERBLUETOOTHSTARTER_H
#define S60DEBUGGERBLUETOOTHSTARTER_H
#include "communicationstarter.h"
#include "bluetoothlistener_gui.h"
namespace Debugger {
namespace Internal {
/* S60DebuggerBluetoothStarter: Creates a listener in 'Listen' mode
* parented on the Debugger manager which outputs to the debugger window.
* Note: This is a "last resort" starter, normally, the run configuration
* should have already started a listener.
* Provides a static convenience to prompt for both connection types. */
class S60DebuggerBluetoothStarter : public trk::AbstractBluetoothStarter
{