debugger: rename TrkFunctor1 into Callback

This commit is contained in:
hjk
2009-09-11 15:34:41 +02:00
parent 5f69a0286e
commit 32e79e10ad
14 changed files with 132 additions and 127 deletions

View File

@@ -87,7 +87,6 @@ include(cdb/cdb.pri)
include(gdb/gdb.pri) include(gdb/gdb.pri)
include(script/script.pri) include(script/script.pri)
include(tcf/tcf.pri) include(tcf/tcf.pri)
include(symbian/symbian.pri)
include(shared/shared.pri) include(shared/shared.pri)
OTHER_FILES += Debugger.pluginspec OTHER_FILES += Debugger.pluginspec

View File

@@ -27,50 +27,50 @@
** **
**************************************************************************/ **************************************************************************/
#ifndef DEBUGGER_TRK_FUNCTOR_H #ifndef DEBUGGER_CALLBACK_H
#define DEBUGGER_TRK_FUNCTOR_H #define DEBUGGER_CALLBACK_H
#include <QtGlobal> #include <QtGlobal>
namespace Debugger {
// FIXME: rename into something less TRK-specific
namespace trk {
namespace Internal { namespace Internal {
/* Helper class for the 1-argument functor: /* Helper class for the 1-argument functor:
* Cloneable base class for the implementation which is * Cloneable base class for the implementation which is
* invokeable with the argument. */ * invokeable with the argument. */
template <class Argument> template <class Argument>
class TrkFunctor1ImplBase { class CallbackImplBase
Q_DISABLE_COPY(TrkFunctor1ImplBase) {
Q_DISABLE_COPY(CallbackImplBase)
public: public:
TrkFunctor1ImplBase() {} CallbackImplBase() {}
virtual TrkFunctor1ImplBase *clone() const = 0; virtual CallbackImplBase *clone() const = 0;
virtual void invoke(Argument a) = 0; virtual void invoke(Argument a) = 0;
virtual ~TrkFunctor1ImplBase() {} virtual ~CallbackImplBase() {}
}; };
/* Helper class for the 1-argument functor: Implementation for /* Helper class for the 1-argument functor: Implementation for
* a class instance with a member function pointer. */ * a class instance with a member function pointer. */
template <class Klass, class Argument> template <class Class, class Argument>
class TrkFunctor1MemberPtrImpl : public TrkFunctor1ImplBase<Argument> { class CallbackMemberPtrImpl : public CallbackImplBase<Argument>
{
public: public:
typedef void (Klass::*MemberFuncPtr)(Argument); typedef void (Class::*MemberFuncPtr)(Argument);
explicit TrkFunctor1MemberPtrImpl(Klass *instance, CallbackMemberPtrImpl(Class *instance,
MemberFuncPtr memberFunc) : MemberFuncPtr memberFunc) :
m_instance(instance), m_instance(instance),
m_memberFunc(memberFunc) {} m_memberFunc(memberFunc) {}
virtual TrkFunctor1ImplBase<Argument> *clone() const virtual CallbackImplBase<Argument> *clone() const
{ {
return new TrkFunctor1MemberPtrImpl<Klass, Argument>(m_instance, m_memberFunc); return new CallbackMemberPtrImpl<Class, Argument>(m_instance, m_memberFunc);
} }
virtual void invoke(Argument a) virtual void invoke(Argument a)
{ (m_instance->*m_memberFunc)(a); } { (m_instance->*m_memberFunc)(a); }
private: private:
Klass *m_instance; Class *m_instance;
MemberFuncPtr m_memberFunc; MemberFuncPtr m_memberFunc;
}; };
@@ -85,33 +85,34 @@ public:
}; };
... ...
Foo foo; Foo foo;
TrkFunctor1<const std::string &> f1(&foo, &Foo::print); Callback<const std::string &> f1(&foo, &Foo::print);
f1("test"); f1("test");
\endcode */ \endcode */
template <class Argument> template <class Argument>
class TrkFunctor1 { class Callback
{
public: public:
TrkFunctor1() : m_impl(0) {} Callback() : m_impl(0) {}
template <class Klass> template <class Class>
TrkFunctor1(Klass *instance, Callback(Class *instance, void (Class::*memberFunc)(Argument)) :
void (Klass::*memberFunc)(Argument)) : m_impl(new Internal::CallbackMemberPtrImpl<Class,Argument>(instance, memberFunc))
m_impl(new Internal::TrkFunctor1MemberPtrImpl<Klass,Argument>(instance, memberFunc)) {} {}
~TrkFunctor1() ~Callback()
{ {
clean(); clean();
} }
TrkFunctor1(const TrkFunctor1 &rhs) : Callback(const Callback &rhs) :
m_impl(0) m_impl(0)
{ {
if (rhs.m_impl) if (rhs.m_impl)
m_impl = rhs.m_impl->clone(); m_impl = rhs.m_impl->clone();
} }
TrkFunctor1 &operator=(const TrkFunctor1 &rhs) Callback &operator=(const Callback &rhs)
{ {
if (this != &rhs) { if (this != &rhs) {
clean(); clean();
@@ -121,7 +122,7 @@ public:
return *this; return *this;
} }
inline bool isNull() const { return m_impl == 0; } bool isNull() const { return m_impl == 0; }
operator bool() const { return !isNull(); } operator bool() const { return !isNull(); }
void operator()(Argument a) void operator()(Argument a)
@@ -139,9 +140,9 @@ private:
} }
} }
Internal::TrkFunctor1ImplBase<Argument> *m_impl; Internal::CallbackImplBase<Argument> *m_impl;
}; };
} // namespace trk } // namespace Debugger
#endif // _TRK_FUNCTOR_H_ #endif // DEBUGGER_CALLBACK_H

View File

@@ -3,11 +3,21 @@ HEADERS += \
$$PWD/gdbmi.h \ $$PWD/gdbmi.h \
$$PWD/gdbengine.h \ $$PWD/gdbengine.h \
$$PWD/gdboptionspage.h \ $$PWD/gdboptionspage.h \
$$PWD/callback.h \
$$PWD/trkutils.h \
$$PWD/trkclient.h \
$$PWD/symbianadapter.h \
#$$PWD/gdboptionspage.h \
SOURCES += \ SOURCES += \
$$PWD/gdbmi.cpp \ $$PWD/gdbmi.cpp \
$$PWD/gdbengine.cpp \ $$PWD/gdbengine.cpp \
$$PWD/gdboptionspage.cpp \ $$PWD/gdboptionspage.cpp \
$$PWD/trkutils.cpp \
$$PWD/trkclient.cpp \
$$PWD/symbianadapter.cpp \
$$PWD/symbianengine.cpp \
#$$PWD/gdboptionspage.cpp \
FORMS += $$PWD/gdboptionspage.ui FORMS += $$PWD/gdboptionspage.ui

View File

@@ -29,7 +29,7 @@
#include "symbianadapter.h" #include "symbianadapter.h"
#ifndef STANDALONE_RUNNER #ifndef STANDALONE_RUNNER
#include "gdb/gdbengine.h" #include "gdbengine.h"
#endif #endif
#define TrkCB(s) TrkCallback(this, &SymbianAdapter::s) #define TrkCB(s) TrkCallback(this, &SymbianAdapter::s)
@@ -75,7 +75,7 @@ SymbianAdapter::SymbianAdapter()
m_gdbAckMode = true; m_gdbAckMode = true;
m_verbose = 2; m_verbose = 2;
m_serialFrame = false; m_serialFrame = false;
m_bufferedMemoryRead = true; m_bufferedMemoryRead = false;
m_rfcommDevice = "/dev/rfcomm0"; m_rfcommDevice = "/dev/rfcomm0";
uid_t userId = getuid(); uid_t userId = getuid();

View File

@@ -32,7 +32,7 @@
#include "trkutils.h" #include "trkutils.h"
#include "trkclient.h" #include "trkclient.h"
#include "../gdb/gdbprocessbase.h" #include "gdbprocessbase.h"
#include <QtCore/QDebug> #include <QtCore/QDebug>
#include <QtCore/QDir> #include <QtCore/QDir>
@@ -79,8 +79,8 @@ class SymbianAdapter : public GdbProcessBase
public: public:
typedef trk::TrkResult TrkResult; typedef trk::TrkResult TrkResult;
typedef trk::TrkFunctor1<const TrkResult &> TrkCallback; typedef Callback<const TrkResult &> TrkCallback;
typedef trk::TrkFunctor1<const GdbResult &> GdbCallback; typedef Callback<const GdbResult &> GdbCallback;
SymbianAdapter(); SymbianAdapter();
~SymbianAdapter(); ~SymbianAdapter();

View File

@@ -29,7 +29,7 @@
#define QT_NO_CAST_FROM_ASCII #define QT_NO_CAST_FROM_ASCII
#include "gdb/gdbengine.h" #include "gdbengine.h"
#include "symbianadapter.h" #include "symbianadapter.h"
#include "debuggermanager.h" #include "debuggermanager.h"

View File

@@ -52,14 +52,17 @@ enum { TimerInterval = 100 };
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
// Format windows error from GetLastError() value: TODO: Use the one provided by the utisl lib. // Format windows error from GetLastError() value:
// TODO: Use the one provided by the utils lib.
QString winErrorMessage(unsigned long error) QString winErrorMessage(unsigned long error)
{ {
QString rc = QString::fromLatin1("#%1: ").arg(error); QString rc = QString::fromLatin1("#%1: ").arg(error);
ushort *lpMsgBuf; ushort *lpMsgBuf;
const int len = FormatMessage( const int len = FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, error, 0, (LPTSTR)&lpMsgBuf, 0, NULL); NULL, error, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
if (len) { if (len) {
rc = QString::fromUtf16(lpMsgBuf, len); rc = QString::fromUtf16(lpMsgBuf, len);
@@ -106,19 +109,17 @@ namespace trk {
* of the answer. */ * of the answer. */
struct TrkMessage struct TrkMessage
{ {
typedef TrkFunctor1<const TrkResult &> Callback;
explicit TrkMessage(byte code = 0u, byte token = 0u, explicit TrkMessage(byte code = 0u, byte token = 0u,
Callback callback = Callback()); TrkCallback callback = TrkCallback());
byte code; byte code;
byte token; byte token;
QByteArray data; QByteArray data;
QVariant cookie; QVariant cookie;
Callback callback; TrkCallback callback;
}; };
TrkMessage::TrkMessage(byte c, byte t, Callback cb) : TrkMessage::TrkMessage(byte c, byte t, TrkCallback cb) :
code(c), code(c),
token(t), token(t),
callback(cb) callback(cb)
@@ -135,12 +136,10 @@ TrkMessage::TrkMessage(byte c, byte t, Callback cb) :
class TrkWriteQueue class TrkWriteQueue
{ {
public: public:
typedef TrkDevice::Callback Callback;
TrkWriteQueue(); TrkWriteQueue();
// Enqueue messages. // Enqueue messages.
void queueTrkMessage(byte code, Callback callback, void queueTrkMessage(byte code, TrkCallback callback,
const QByteArray &data, const QVariant &cookie); const QByteArray &data, const QVariant &cookie);
void queueTrkInitialPing(); void queueTrkInitialPing();
@@ -179,7 +178,7 @@ byte TrkWriteQueue::nextTrkWriteToken()
return trkWriteToken; return trkWriteToken;
} }
void TrkWriteQueue::queueTrkMessage(byte code, Callback callback, void TrkWriteQueue::queueTrkMessage(byte code, TrkCallback callback,
const QByteArray &data, const QVariant &cookie) const QByteArray &data, const QVariant &cookie)
{ {
const byte token = code == TRK_WRITE_QUEUE_NOOP_CODE ? const byte token = code == TRK_WRITE_QUEUE_NOOP_CODE ?
@@ -509,7 +508,7 @@ void TrkDevice::emitError(const QString &s)
emit error(s); emit error(s);
} }
void TrkDevice::sendTrkMessage(byte code, Callback callback, void TrkDevice::sendTrkMessage(byte code, TrkCallback callback,
const QByteArray &data, const QVariant &cookie) const QByteArray &data, const QVariant &cookie)
{ {
d->queue.queueTrkMessage(code, callback, data, cookie); d->queue.queueTrkMessage(code, callback, data, cookie);

View File

@@ -30,7 +30,7 @@
#ifndef TRKDEVICE_H #ifndef TRKDEVICE_H
#define TRKDEVICE_H #define TRKDEVICE_H
#include "trkfunctor.h" #include "callback.h"
#include <QtCore/QObject> #include <QtCore/QObject>
#include <QtCore/QVariant> #include <QtCore/QVariant>
@@ -60,6 +60,8 @@ struct TrkDevicePrivate;
enum { TRK_WRITE_QUEUE_NOOP_CODE = 0x7f }; enum { TRK_WRITE_QUEUE_NOOP_CODE = 0x7f };
typedef Debugger::Callback<const TrkResult &> TrkCallback;
class TrkDevice : public QObject class TrkDevice : public QObject
{ {
Q_OBJECT Q_OBJECT
@@ -83,9 +85,6 @@ public:
bool write(const QByteArray &data, QString *errorMessage); bool write(const QByteArray &data, QString *errorMessage);
// Construct as 'TrkWriteQueueDevice::Callback(instance, &Klass::method);'
typedef TrkFunctor1<const TrkResult &> Callback;
signals: signals:
void messageReceived(const trk::TrkResult &result); void messageReceived(const trk::TrkResult &result);
// Emitted with the contents of messages enclosed in 07e, not for log output // Emitted with the contents of messages enclosed in 07e, not for log output
@@ -102,7 +101,7 @@ public:
// Enqueue a message with a notification callback. // Enqueue a message with a notification callback.
void sendTrkMessage(unsigned char code, void sendTrkMessage(unsigned char code,
Callback callBack = Callback(), TrkCallback callBack = TrkCallback(),
const QByteArray &data = QByteArray(), const QByteArray &data = QByteArray(),
const QVariant &cookie = QVariant()); const QVariant &cookie = QVariant());

View File

@@ -104,7 +104,7 @@ class Adapter : public QObject
Q_OBJECT Q_OBJECT
public: public:
typedef TrkFunctor1<const TrkResult &> Callback; typedef Debugger::Callback<const TrkResult &> TrkCallback;
Adapter(); Adapter();
~Adapter(); ~Adapter();
@@ -129,7 +129,7 @@ private:
bool openTrkPort(const QString &port, QString *errorMessage); // or server name for local server bool openTrkPort(const QString &port, QString *errorMessage); // or server name for local server
void sendTrkMessage(byte code, void sendTrkMessage(byte code,
Callback callBack = Callback(), TrkCallback callBack = TrkCallback(),
const QByteArray &data = QByteArray(), const QByteArray &data = QByteArray(),
const QVariant &cookie = QVariant(), const QVariant &cookie = QVariant(),
bool invokeOnFailure = false); bool invokeOnFailure = false);
@@ -261,9 +261,9 @@ void Adapter::startServer()
sendTrkInitialPing(); sendTrkInitialPing();
sendTrkMessage(0x01); // Connect sendTrkMessage(0x01); // Connect
sendTrkMessage(0x05, Callback(this, &Adapter::handleSupportMask)); sendTrkMessage(0x05, TrkCallback(this, &Adapter::handleSupportMask));
sendTrkMessage(0x06, Callback(this, &Adapter::handleCpuType)); sendTrkMessage(0x06, TrkCallback(this, &Adapter::handleCpuType));
sendTrkMessage(0x04, Callback(this, &Adapter::handleTrkVersions)); // Versions sendTrkMessage(0x04, TrkCallback(this, &Adapter::handleTrkVersions)); // Versions
//sendTrkMessage(0x09); // Unrecognized command //sendTrkMessage(0x09); // Unrecognized command
//sendTrkMessage(0x4a, 0, //sendTrkMessage(0x4a, 0,
// "10 " + formatString("C:\\data\\usingdlls.sisx")); // Open File // "10 " + formatString("C:\\data\\usingdlls.sisx")); // Open File
@@ -427,7 +427,7 @@ void Adapter::sendGdbMessage(const QByteArray &msg, const QByteArray &logNote)
void Adapter::sendGdbMessageAfterSync(const QByteArray &msg, const QByteArray &logNote) void Adapter::sendGdbMessageAfterSync(const QByteArray &msg, const QByteArray &logNote)
{ {
QByteArray ba = msg + char(1) + logNote; QByteArray ba = msg + char(1) + logNote;
sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, Callback(this, &Adapter::reportToGdb), "", ba); // Answer gdb sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, TrkCallback(this, &Adapter::reportToGdb), "", ba); // Answer gdb
} }
void Adapter::reportToGdb(const TrkResult &result) void Adapter::reportToGdb(const TrkResult &result)
@@ -492,7 +492,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
appendInt(&ba, 0); // end address appendInt(&ba, 0); // end address
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid); appendInt(&ba, m_session.tid);
sendTrkMessage(0x18, Callback(), ba); sendTrkMessage(0x18, TrkCallback(), ba);
// FIXME: should be triggered by real stop // FIXME: should be triggered by real stop
//sendGdbMessageAfterSync("S11", "target stopped"); //sendGdbMessageAfterSync("S11", "target stopped");
} }
@@ -508,7 +508,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
QByteArray ba; QByteArray ba;
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid); appendInt(&ba, m_session.tid);
sendTrkMessage(0x18, Callback(this, &Adapter::handleSignalContinue), ba, signalNumber); // Continue sendTrkMessage(0x18, TrkCallback(this, &Adapter::handleSignalContinue), ba, signalNumber); // Continue
} }
else if (response.startsWith("D")) { else if (response.startsWith("D")) {
@@ -529,7 +529,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
appendShort(&ba, RegisterCount - 1); // last register appendShort(&ba, RegisterCount - 1); // last register
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid); appendInt(&ba, m_session.tid);
sendTrkMessage(0x12, Callback(this, &Adapter::handleAndReportReadRegisters), ba, QVariant(), true); sendTrkMessage(0x12, TrkCallback(this, &Adapter::handleAndReportReadRegisters), ba, QVariant(), true);
} }
else if (response.startsWith("Hc")) { else if (response.startsWith("Hc")) {
@@ -562,7 +562,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
QByteArray ba; QByteArray ba;
appendByte(&ba, 0); // Sub-command: Delete Process appendByte(&ba, 0); // Sub-command: Delete Process
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
sendTrkMessage(0x41, Callback(), ba, "Delete process"); // Delete Item sendTrkMessage(0x41, TrkCallback(), ba, "Delete process"); // Delete Item
sendGdbMessageAfterSync("", "process killed"); sendGdbMessageAfterSync("", "process killed");
} }
@@ -740,7 +740,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
appendInt(&ba, m_snapshot.registers[RegisterPC] + 4); // end address appendInt(&ba, m_snapshot.registers[RegisterPC] + 4); // end address
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid); appendInt(&ba, m_session.tid);
sendTrkMessage(0x19, Callback(), ba, "Step range"); sendTrkMessage(0x19, TrkCallback(), ba, "Step range");
// FIXME: should be triggered by "real" stop" // FIXME: should be triggered by "real" stop"
//sendGdbMessageAfterSync("S05", "target halted"); //sendGdbMessageAfterSync("S05", "target halted");
} }
@@ -762,7 +762,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
QByteArray ba; QByteArray ba;
appendByte(&ba, 0); // Sub-command: Delete Process appendByte(&ba, 0); // Sub-command: Delete Process
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
sendTrkMessage(0x41, Callback(), ba, "Delete process"); // Delete Item sendTrkMessage(0x41, TrkCallback(), ba, "Delete process"); // Delete Item
sendGdbMessageAfterSync("", "process killed"); sendGdbMessageAfterSync("", "process killed");
} }
@@ -789,7 +789,7 @@ void Adapter::handleGdbResponse(const QByteArray &response)
// [1B 09 82 00 78 67 43 40 00 00 00 01 00 00 00 00 // [1B 09 82 00 78 67 43 40 00 00 00 01 00 00 00 00
// 00 00 01 B5 FF FF FF FF] // 00 00 01 B5 FF FF FF FF]
const QByteArray ba = breakpointTrkMessage(addr, len, m_session.pid); const QByteArray ba = breakpointTrkMessage(addr, len, m_session.pid);
sendTrkMessage(0x1B, Callback(this, &Adapter::handleAndReportSetBreakpoint), ba); sendTrkMessage(0x1B, TrkCallback(this, &Adapter::handleAndReportSetBreakpoint), ba);
//m_session.toekn //m_session.toekn
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
@@ -852,7 +852,7 @@ bool Adapter::openTrkPort(const QString &port, QString *errorMessage)
return m_trkDevice->open(port, errorMessage); return m_trkDevice->open(port, errorMessage);
} }
void Adapter::sendTrkMessage(byte code, Callback callBack, void Adapter::sendTrkMessage(byte code, TrkCallback callBack,
const QByteArray &data, const QVariant &cookie, bool invokeOnFailure) const QByteArray &data, const QVariant &cookie, bool invokeOnFailure)
{ {
if (m_useSocket) if (m_useSocket)
@@ -874,13 +874,13 @@ void Adapter::sendTrkContinue()
QByteArray ba; QByteArray ba;
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid); appendInt(&ba, m_session.tid);
sendTrkMessage(0x18, Callback(), ba, "CONTINUE"); sendTrkMessage(0x18, TrkCallback(), ba, "CONTINUE");
} }
void Adapter::waitForTrkFinished() void Adapter::waitForTrkFinished()
{ {
// initiate one last roundtrip to ensure all is flushed // initiate one last roundtrip to ensure all is flushed
sendTrkMessage(0x0, Callback(this, &Adapter::handleWaitForFinished)); sendTrkMessage(0x0, TrkCallback(this, &Adapter::handleWaitForFinished));
} }
void Adapter::sendTrkAck(byte token) void Adapter::sendTrkAck(byte token)
@@ -1032,7 +1032,7 @@ void Adapter::setTrkBreakpoint(const Breakpoint &bp)
// [1B 09 82 00 78 67 43 40 00 00 00 01 00 00 00 00 // [1B 09 82 00 78 67 43 40 00 00 00 01 00 00 00 00
// 00 00 01 B5 FF FF FF FF] // 00 00 01 B5 FF FF FF FF]
const QByteArray ba = breakpointTrkMessage(m_session.codeseg + bp.offset, 1, m_session.pid); const QByteArray ba = breakpointTrkMessage(m_session.codeseg + bp.offset, 1, m_session.pid);
sendTrkMessage(0x1B, Callback(this, &Adapter::handleSetTrkBreakpoint), ba); sendTrkMessage(0x1B, TrkCallback(this, &Adapter::handleSetTrkBreakpoint), ba);
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
// Command: 0x80 Acknowledge // Command: 0x80 Acknowledge
@@ -1088,10 +1088,10 @@ void Adapter::handleCreateProcess(const TrkResult &result)
// Command: 0x42 Read Info // Command: 0x42 Read Info
// [42 0C 00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F // [42 0C 00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F
// 72 70 68 69 63 44 4C 4C 32 2E 64 6C 6C 00] // 72 70 68 69 63 44 4C 4C 32 2E 64 6C 6C 00]
sendTrkMessage(0x42, Callback(this, &Adapter::handleReadInfo), sendTrkMessage(0x42, TrkCallback(this, &Adapter::handleReadInfo),
"00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F " "00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F "
"72 70 68 69 63 44 4C 4C 32 2E 64 6C 6C 00"); "72 70 68 69 63 44 4C 4C 32 2E 64 6C 6C 00");
//sendTrkMessage(0x42, Callback(this, &Adapter::handleReadInfo), //sendTrkMessage(0x42, TrkCallback(this, &Adapter::handleReadInfo),
// "00 01 00 00 00 00"); // "00 01 00 00 00 00");
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
// Command: 0x80 Acknowledge // Command: 0x80 Acknowledge
@@ -1103,7 +1103,7 @@ void Adapter::handleCreateProcess(const TrkResult &result)
// Command: 0x42 Read Info // Command: 0x42 Read Info
// [42 0D 00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F // [42 0D 00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F
// 72 70 68 69 63 44 4C 4C 31 2E 64 6C 6C 00] // 72 70 68 69 63 44 4C 4C 31 2E 64 6C 6C 00]
sendTrkMessage(0x42, Callback(this, &Adapter::handleReadInfo), sendTrkMessage(0x42, TrkCallback(this, &Adapter::handleReadInfo),
"00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F " "00 06 00 00 00 00 00 14 50 6F 6C 79 6D 6F "
"72 70 68 69 63 44 4C 4C 31 2E 64 6C 6C 00"); "72 70 68 69 63 44 4C 4C 31 2E 64 6C 6C 00");
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
@@ -1112,7 +1112,7 @@ void Adapter::handleCreateProcess(const TrkResult &result)
// [80 0D 20] // [80 0D 20]
#endif #endif
//sendTrkMessage(0x18, Callback(this, &Adapter::handleStop), //sendTrkMessage(0x18, TrkCallback(this, &Adapter::handleStop),
// "01 " + formatInt(m_session.pid) + formatInt(m_session.tid)); // "01 " + formatInt(m_session.pid) + formatInt(m_session.tid));
//---IDE------------------------------------------------------ //---IDE------------------------------------------------------
@@ -1123,8 +1123,8 @@ void Adapter::handleCreateProcess(const TrkResult &result)
QByteArray ba; QByteArray ba;
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid); appendInt(&ba, m_session.tid);
sendTrkMessage(0x18, Callback(this, &Adapter::handleContinue), ba); sendTrkMessage(0x18, TrkCallback(this, &Adapter::handleContinue), ba);
//sendTrkMessage(0x18, Callback(this, &Adapter::handleContinue), //sendTrkMessage(0x18, TrkCallback(this, &Adapter::handleContinue),
// formatInt(m_session.pid) + "ff ff ff ff"); // formatInt(m_session.pid) + "ff ff ff ff");
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
// Command: 0x80 Acknowledge // Command: 0x80 Acknowledge
@@ -1267,7 +1267,7 @@ void Adapter::clearTrkBreakpoint(const Breakpoint &bp)
appendByte(&ba, 0x00); appendByte(&ba, 0x00);
appendShort(&ba, bp.number); appendShort(&ba, bp.number);
appendInt(&ba, m_session.codeseg + bp.offset); appendInt(&ba, m_session.codeseg + bp.offset);
sendTrkMessage(0x1C, Callback(this, &Adapter::handleClearBreakpoint), ba); sendTrkMessage(0x1C, TrkCallback(this, &Adapter::handleClearBreakpoint), ba);
} }
void Adapter::handleClearBreakpoint(const TrkResult &result) void Adapter::handleClearBreakpoint(const TrkResult &result)
@@ -1341,7 +1341,7 @@ void Adapter::cleanUp()
appendByte(&ba, 0x00); appendByte(&ba, 0x00);
appendByte(&ba, 0x00); appendByte(&ba, 0x00);
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
sendTrkMessage(0x41, Callback(), ba, "Delete process"); sendTrkMessage(0x41, TrkCallback(), ba, "Delete process");
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
// Command: 0x80 Acknowledge // Command: 0x80 Acknowledge
@@ -1351,7 +1351,7 @@ void Adapter::cleanUp()
foreach (const Breakpoint &bp, m_breakpoints) foreach (const Breakpoint &bp, m_breakpoints)
clearTrkBreakpoint(bp); clearTrkBreakpoint(bp);
sendTrkMessage(0x02, Callback(this, &Adapter::handleDisconnect)); sendTrkMessage(0x02, TrkCallback(this, &Adapter::handleDisconnect));
m_startInferiorTriggered = false; m_startInferiorTriggered = false;
//---IDE------------------------------------------------------ //---IDE------------------------------------------------------
// Command: 0x1C Clear Break // Command: 0x1C Clear Break
@@ -1382,7 +1382,7 @@ void Adapter::cleanUp()
//---IDE------------------------------------------------------ //---IDE------------------------------------------------------
// Command: 0x02 Disconnect // Command: 0x02 Disconnect
// [02 27] // [02 27]
// sendTrkMessage(0x02, Callback(this, &Adapter::handleDisconnect)); // sendTrkMessage(0x02, TrkCallback(this, &Adapter::handleDisconnect));
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
// Command: 0x80 Acknowledge // Command: 0x80 Acknowledge
// Error: 0x00 // Error: 0x00
@@ -1413,17 +1413,17 @@ void Adapter::readMemory(uint addr, uint len)
if (!m_snapshot.memory.contains(blockaddr)) { if (!m_snapshot.memory.contains(blockaddr)) {
if (m_verbose) if (m_verbose)
logMessage(QString::fromLatin1("Requesting buffered memory %1 bytes from 0x%2").arg(MemoryChunkSize).arg(blockaddr, 0, 16)); logMessage(QString::fromLatin1("Requesting buffered memory %1 bytes from 0x%2").arg(MemoryChunkSize).arg(blockaddr, 0, 16));
sendTrkMessage(0x10, Callback(this, &Adapter::handleReadMemoryBuffered), sendTrkMessage(0x10, TrkCallback(this, &Adapter::handleReadMemoryBuffered),
memoryRequestTrkMessage(blockaddr, MemoryChunkSize, m_session.pid, m_session.tid), memoryRequestTrkMessage(blockaddr, MemoryChunkSize, m_session.pid, m_session.tid),
QVariant(blockaddr), true); QVariant(blockaddr), true);
} }
} }
const qulonglong cookie = (qulonglong(addr) << 32) + len; const qulonglong cookie = (qulonglong(addr) << 32) + len;
sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, Callback(this, &Adapter::reportReadMemoryBuffered), QByteArray(), cookie); sendTrkMessage(TRK_WRITE_QUEUE_NOOP_CODE, TrkCallback(this, &Adapter::reportReadMemoryBuffered), QByteArray(), cookie);
} else { } else {
if (m_verbose) if (m_verbose)
logMessage(QString::fromLatin1("Requesting unbuffered memory %1 bytes from 0x%2").arg(len).arg(addr, 0, 16)); logMessage(QString::fromLatin1("Requesting unbuffered memory %1 bytes from 0x%2").arg(len).arg(addr, 0, 16));
sendTrkMessage(0x10, Callback(this, &Adapter::handleReadMemoryUnbuffered), sendTrkMessage(0x10, TrkCallback(this, &Adapter::handleReadMemoryUnbuffered),
memoryRequestTrkMessage(addr, len, m_session.pid, m_session.tid), memoryRequestTrkMessage(addr, len, m_session.pid, m_session.tid),
QVariant(addr), true); QVariant(addr), true);
} }
@@ -1446,7 +1446,7 @@ void Adapter::startInferiorIfNeeded()
QByteArray file("C:\\sys\\bin\\filebrowseapp.exe"); QByteArray file("C:\\sys\\bin\\filebrowseapp.exe");
appendString(&ba, file, TargetByteOrder); appendString(&ba, file, TargetByteOrder);
sendTrkMessage(0x40, Callback(this, &Adapter::handleCreateProcess), ba); // Create Item sendTrkMessage(0x40, TrkCallback(this, &Adapter::handleCreateProcess), ba); // Create Item
} }
void Adapter::interruptInferior() void Adapter::interruptInferior()
@@ -1456,7 +1456,7 @@ void Adapter::interruptInferior()
appendByte(&ba, 1); appendByte(&ba, 1);
appendInt(&ba, m_session.pid); appendInt(&ba, m_session.pid);
appendInt(&ba, m_session.tid); // threadID: 4 bytes Variable number of bytes. appendInt(&ba, m_session.tid); // threadID: 4 bytes Variable number of bytes.
sendTrkMessage(0x1A, Callback(), ba, "Interrupting..."); sendTrkMessage(0x1A, TrkCallback(), ba, "Interrupting...");
} }
static bool readAdapterArgs(const QStringList &args, AdapterOptions *o) static bool readAdapterArgs(const QStringList &args, AdapterOptions *o)

View File

@@ -11,7 +11,7 @@ win32:CONFIG+=console
HEADERS += \ HEADERS += \
$$DEBUGGERHOME/trkutils.h \ $$DEBUGGERHOME/trkutils.h \
$$DEBUGGERHOME/trkfunctor.h \ $$DEBUGGERHOME/callback.h \
$$PWD/trkdevice.h \ $$PWD/trkdevice.h \
SOURCES += \ SOURCES += \

View File

@@ -40,7 +40,7 @@
namespace trk { namespace trk {
typedef TrkWriteQueueDevice::Callback Callback; typedef TrkWriteQueueDevice::TrkCallback TrkCallback;
struct LauncherPrivate { struct LauncherPrivate {
struct CopyState { struct CopyState {
@@ -125,9 +125,9 @@ bool Launcher::startServer(QString *errorMessage)
return false; return false;
d->m_device.sendTrkInitialPing(); d->m_device.sendTrkInitialPing();
d->m_device.sendTrkMessage(TrkConnect); // Connect d->m_device.sendTrkMessage(TrkConnect); // Connect
d->m_device.sendTrkMessage(TrkSupported, Callback(this, &Launcher::handleSupportMask)); d->m_device.sendTrkMessage(TrkSupported, TrkCallback(this, &Launcher::handleSupportMask));
d->m_device.sendTrkMessage(TrkCpuType, Callback(this, &Launcher::handleCpuType)); d->m_device.sendTrkMessage(TrkCpuType, TrkCallback(this, &Launcher::handleCpuType));
d->m_device.sendTrkMessage(TrkVersions, Callback(this, &Launcher::handleTrkVersion)); d->m_device.sendTrkMessage(TrkVersions, TrkCallback(this, &Launcher::handleTrkVersion));
if (d->m_fileName.isEmpty()) if (d->m_fileName.isEmpty())
return true; return true;
if (!d->m_copyState.sourceFileName.isEmpty() && !d->m_copyState.destinationFileName.isEmpty()) if (!d->m_copyState.sourceFileName.isEmpty() && !d->m_copyState.destinationFileName.isEmpty())
@@ -160,7 +160,7 @@ void Launcher::logMessage(const QString &msg)
void Launcher::waitForTrkFinished(const TrkResult &result) void Launcher::waitForTrkFinished(const TrkResult &result)
{ {
Q_UNUSED(result) Q_UNUSED(result)
d->m_device.sendTrkMessage(TrkPing, Callback(this, &Launcher::handleWaitForFinished)); d->m_device.sendTrkMessage(TrkPing, TrkCallback(this, &Launcher::handleWaitForFinished));
} }
void Launcher::terminate() void Launcher::terminate()
@@ -169,7 +169,7 @@ void Launcher::terminate()
QByteArray ba; QByteArray ba;
appendShort(&ba, 0x0000, TargetByteOrder); appendShort(&ba, 0x0000, TargetByteOrder);
appendInt(&ba, d->m_session.pid, TargetByteOrder); appendInt(&ba, d->m_session.pid, TargetByteOrder);
d->m_device.sendTrkMessage(TrkDeleteItem, Callback(this, &Launcher::waitForTrkFinished), ba); d->m_device.sendTrkMessage(TrkDeleteItem, TrkCallback(this, &Launcher::waitForTrkFinished), ba);
} }
void Launcher::handleResult(const TrkResult &result) void Launcher::handleResult(const TrkResult &result)
@@ -240,7 +240,7 @@ void Launcher::handleResult(const TrkResult &result)
QByteArray ba; QByteArray ba;
appendInt(&ba, d->m_session.pid); appendInt(&ba, d->m_session.pid);
appendInt(&ba, d->m_session.tid); appendInt(&ba, d->m_session.tid);
d->m_device.sendTrkMessage(TrkContinue, Callback(), ba, "CONTINUE"); d->m_device.sendTrkMessage(TrkContinue, TrkCallback(), ba, "CONTINUE");
//d->m_device.sendTrkAck(result.token) //d->m_device.sendTrkAck(result.token)
break; break;
} }
@@ -253,7 +253,7 @@ void Launcher::handleResult(const TrkResult &result)
arg(name)); arg(name));
d->m_device.sendTrkAck(result.token); d->m_device.sendTrkAck(result.token);
if (itemType == 0) { // process if (itemType == 0) { // process
d->m_device.sendTrkMessage(TrkDisconnect, Callback(this, &Launcher::waitForTrkFinished)); d->m_device.sendTrkMessage(TrkDisconnect, TrkCallback(this, &Launcher::waitForTrkFinished));
} }
break; break;
} }
@@ -296,7 +296,7 @@ void Launcher::handleTrkVersion(const TrkResult &result)
<< " float size: " << d->m_session.fpTypeSize << " float size: " << d->m_session.fpTypeSize
<< " Trk: v" << trkMajor << '.' << trkMinor << " Protocol: " << protocolMajor << '.' << protocolMinor; << " Trk: v" << trkMajor << '.' << trkMinor << " Protocol: " << protocolMajor << '.' << protocolMinor;
qWarning("%s", qPrintable(msg)); qWarning("%s", qPrintable(msg));
d->m_device.sendTrkMessage(TrkPing, Callback(this, &Launcher::waitForTrkFinished)); d->m_device.sendTrkMessage(TrkPing, TrkCallback(this, &Launcher::waitForTrkFinished));
} }
} }
@@ -335,12 +335,12 @@ void Launcher::continueCopying()
appendInt(&ba, d->m_copyState.copyFileHandle, TargetByteOrder); appendInt(&ba, d->m_copyState.copyFileHandle, TargetByteOrder);
appendString(&ba, d->m_copyState.data->mid(d->m_copyState.position, BLOCKSIZE), TargetByteOrder, false); appendString(&ba, d->m_copyState.data->mid(d->m_copyState.position, BLOCKSIZE), TargetByteOrder, false);
d->m_copyState.position += BLOCKSIZE; d->m_copyState.position += BLOCKSIZE;
d->m_device.sendTrkMessage(TrkWriteFile, Callback(this, &Launcher::handleCopy), ba); d->m_device.sendTrkMessage(TrkWriteFile, TrkCallback(this, &Launcher::handleCopy), ba);
} else { } else {
QByteArray ba; QByteArray ba;
appendInt(&ba, d->m_copyState.copyFileHandle, TargetByteOrder); appendInt(&ba, d->m_copyState.copyFileHandle, TargetByteOrder);
appendInt(&ba, QDateTime::currentDateTime().toTime_t(), TargetByteOrder); appendInt(&ba, QDateTime::currentDateTime().toTime_t(), TargetByteOrder);
d->m_device.sendTrkMessage(TrkCloseFile, Callback(this, &Launcher::handleFileCreated), ba); d->m_device.sendTrkMessage(TrkCloseFile, TrkCallback(this, &Launcher::handleFileCreated), ba);
delete d->m_copyState.data; delete d->m_copyState.data;
d->m_copyState.data = 0; d->m_copyState.data = 0;
} }
@@ -388,7 +388,7 @@ void Launcher::handleCreateProcess(const TrkResult &result)
QByteArray ba; QByteArray ba;
appendInt(&ba, d->m_session.pid); appendInt(&ba, d->m_session.pid);
appendInt(&ba, d->m_session.tid); appendInt(&ba, d->m_session.tid);
d->m_device.sendTrkMessage(TrkContinue, Callback(), ba, "CONTINUE"); d->m_device.sendTrkMessage(TrkContinue, TrkCallback(), ba, "CONTINUE");
} }
void Launcher::handleWaitForFinished(const TrkResult &result) void Launcher::handleWaitForFinished(const TrkResult &result)
@@ -423,7 +423,7 @@ void Launcher::cleanUp()
appendByte(&ba, 0x00); appendByte(&ba, 0x00);
appendByte(&ba, 0x00); appendByte(&ba, 0x00);
appendInt(&ba, d->m_session.pid); appendInt(&ba, d->m_session.pid);
d->m_device.sendTrkMessage(TrkDeleteItem, Callback(), ba, "Delete process"); d->m_device.sendTrkMessage(TrkDeleteItem, TrkCallback(), ba, "Delete process");
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
// Command: 0x80 Acknowledge // Command: 0x80 Acknowledge
@@ -459,7 +459,7 @@ void Launcher::cleanUp()
//---IDE------------------------------------------------------ //---IDE------------------------------------------------------
// Command: 0x02 Disconnect // Command: 0x02 Disconnect
// [02 27] // [02 27]
// sendTrkMessage(0x02, Callback(this, &Launcher::handleDisconnect)); // sendTrkMessage(0x02, TrkCallback(this, &Launcher::handleDisconnect));
//---TRK------------------------------------------------------ //---TRK------------------------------------------------------
// Command: 0x80 Acknowledge // Command: 0x80 Acknowledge
// Error: 0x00 // Error: 0x00
@@ -471,7 +471,7 @@ void Launcher::copyFileToRemote()
QByteArray ba; QByteArray ba;
appendByte(&ba, 0x10); appendByte(&ba, 0x10);
appendString(&ba, d->m_copyState.destinationFileName.toLocal8Bit(), TargetByteOrder, false); appendString(&ba, d->m_copyState.destinationFileName.toLocal8Bit(), TargetByteOrder, false);
d->m_device.sendTrkMessage(TrkOpenFile, Callback(this, &Launcher::handleFileCreation), ba); d->m_device.sendTrkMessage(TrkOpenFile, TrkCallback(this, &Launcher::handleFileCreation), ba);
} }
void Launcher::installRemotePackageSilently(const QString &fileName) void Launcher::installRemotePackageSilently(const QString &fileName)
@@ -480,7 +480,7 @@ void Launcher::installRemotePackageSilently(const QString &fileName)
QByteArray ba; QByteArray ba;
appendByte(&ba, 'C'); appendByte(&ba, 'C');
appendString(&ba, fileName.toLocal8Bit(), TargetByteOrder, false); appendString(&ba, fileName.toLocal8Bit(), TargetByteOrder, false);
d->m_device.sendTrkMessage(TrkInstallFile, Callback(this, &Launcher::handleInstallPackageFinished), ba); d->m_device.sendTrkMessage(TrkInstallFile, TrkCallback(this, &Launcher::handleInstallPackageFinished), ba);
} }
void Launcher::handleInstallPackageFinished(const TrkResult &) void Launcher::handleInstallPackageFinished(const TrkResult &)
@@ -501,7 +501,7 @@ void Launcher::startInferiorIfNeeded()
appendByte(&ba, 0); // ? appendByte(&ba, 0); // ?
appendByte(&ba, 0); // ? appendByte(&ba, 0); // ?
appendString(&ba, d->m_fileName.toLocal8Bit(), TargetByteOrder); appendString(&ba, d->m_fileName.toLocal8Bit(), TargetByteOrder);
d->m_device.sendTrkMessage(TrkCreateItem, Callback(this, &Launcher::handleCreateProcess), ba); // Create Item d->m_device.sendTrkMessage(TrkCreateItem, TrkCallback(this, &Launcher::handleCreateProcess), ba); // Create Item
} }
} }

View File

@@ -339,24 +339,23 @@ void TrkDevice::emitError(const QString &s)
/* A message to be send to TRK, triggering a callback on receipt /* A message to be send to TRK, triggering a callback on receipt
* of the answer. */ * of the answer. */
typedef Debugger::Callback<const TrkResult &> TrkCallback;
struct TrkMessage { struct TrkMessage {
typedef TrkFunctor1<const TrkResult &> Callback;
explicit TrkMessage(unsigned char code = 0u, explicit TrkMessage(unsigned char code = 0u,
unsigned char token = 0u, unsigned char token = 0u,
Callback callback = Callback()); TrkCallback callback = TrkCallback());
unsigned char code; unsigned char code;
unsigned char token; unsigned char token;
QByteArray data; QByteArray data;
QVariant cookie; QVariant cookie;
Callback callback; TrkCallback callback;
bool invokeOnNAK; bool invokeOnNAK;
}; };
TrkMessage::TrkMessage(unsigned char c, TrkMessage::TrkMessage(unsigned char c,
unsigned char t, unsigned char t,
Callback cb) : TrkCallback cb) :
code(c), code(c),
token(t), token(t),
callback(cb), callback(cb),
@@ -371,12 +370,10 @@ typedef QSharedPointer<TrkMessage> SharedPointerTrkMessage;
class TrkWriteQueue { class TrkWriteQueue {
public: public:
typedef TrkWriteQueueDevice::Callback Callback;
TrkWriteQueue(); TrkWriteQueue();
// Enqueue messages. // Enqueue messages.
void queueTrkMessage(unsigned char code, Callback callback, void queueTrkMessage(unsigned char code, TrkCallback callback,
const QByteArray &data, const QVariant &cookie, const QByteArray &data, const QVariant &cookie,
bool invokeOnNAK); bool invokeOnNAK);
void queueTrkInitialPing(); void queueTrkInitialPing();
@@ -419,7 +416,7 @@ unsigned char TrkWriteQueue::nextTrkWriteToken()
return trkWriteToken; return trkWriteToken;
} }
void TrkWriteQueue::queueTrkMessage(unsigned char code, Callback callback, void TrkWriteQueue::queueTrkMessage(unsigned char code, TrkCallback callback,
const QByteArray &data, const QVariant &cookie, const QByteArray &data, const QVariant &cookie,
bool invokeOnNAK) bool invokeOnNAK)
{ {
@@ -515,7 +512,7 @@ TrkWriteQueueDevice::~TrkWriteQueueDevice()
delete qd; delete qd;
} }
void TrkWriteQueueDevice::sendTrkMessage(unsigned char code, Callback callback, void TrkWriteQueueDevice::sendTrkMessage(unsigned char code, TrkCallback callback,
const QByteArray &data, const QVariant &cookie, const QByteArray &data, const QVariant &cookie,
bool invokeOnNAK) bool invokeOnNAK)
{ {
@@ -620,7 +617,7 @@ void TrkWriteQueueIODevice::setVerbose(bool b)
d->verbose = b; d->verbose = b;
} }
void TrkWriteQueueIODevice::sendTrkMessage(unsigned char code, Callback callback, void TrkWriteQueueIODevice::sendTrkMessage(unsigned char code, TrkCallback callback,
const QByteArray &data, const QVariant &cookie, const QByteArray &data, const QVariant &cookie,
bool invokeOnNAK) bool invokeOnNAK)
{ {

View File

@@ -30,7 +30,7 @@
#ifndef TRKDEVICE_H #ifndef TRKDEVICE_H
#define TRKDEVICE_H #define TRKDEVICE_H
#include "trkfunctor.h" #include "callback.h"
#include <QtCore/QObject> #include <QtCore/QObject>
#include <QtCore/QVariant> #include <QtCore/QVariant>
@@ -111,12 +111,12 @@ public:
explicit TrkWriteQueueDevice(QObject *parent = 0); explicit TrkWriteQueueDevice(QObject *parent = 0);
virtual ~TrkWriteQueueDevice(); virtual ~TrkWriteQueueDevice();
// Construct as 'TrkWriteQueueDevice::Callback(instance, &Class::method);' // Construct as 'TrkWriteQueueDevice::TrkCallback(instance, &Class::method);'
typedef TrkFunctor1<const TrkResult &> Callback; typedef Debugger::Callback<const TrkResult &> TrkCallback;
// Enqueue a message with a notification callback. // Enqueue a message with a notification callback.
void sendTrkMessage(unsigned char code, void sendTrkMessage(unsigned char code,
Callback callBack = Callback(), TrkCallback callBack = TrkCallback(),
const QByteArray &data = QByteArray(), const QByteArray &data = QByteArray(),
const QVariant &cookie = QVariant(), const QVariant &cookie = QVariant(),
// Invoke callback on receiving NAK, too. // Invoke callback on receiving NAK, too.
@@ -155,7 +155,7 @@ class TrkWriteQueueIODevice : public QObject
Q_PROPERTY(bool serialFrame READ serialFrame WRITE setSerialFrame) Q_PROPERTY(bool serialFrame READ serialFrame WRITE setSerialFrame)
Q_PROPERTY(bool verbose READ verbose WRITE setVerbose) Q_PROPERTY(bool verbose READ verbose WRITE setVerbose)
public: public:
typedef TrkFunctor1<const TrkResult &> Callback; typedef Debugger::Callback<const TrkResult &> TrkCallback;
explicit TrkWriteQueueIODevice(const QSharedPointer<QIODevice> &device, explicit TrkWriteQueueIODevice(const QSharedPointer<QIODevice> &device,
QObject *parent = 0); QObject *parent = 0);
@@ -168,7 +168,7 @@ public:
void setVerbose(bool b); void setVerbose(bool b);
void sendTrkMessage(unsigned char code, void sendTrkMessage(unsigned char code,
Callback callback = Callback(), TrkCallback callback = TrkCallback(),
const QByteArray &data = QByteArray(), const QByteArray &data = QByteArray(),
const QVariant &cookie = QVariant(), const QVariant &cookie = QVariant(),
bool invokeOnNAK = false); bool invokeOnNAK = false);

View File

@@ -10,6 +10,6 @@ SOURCES += \
HEADERS += \ HEADERS += \
$$DEBUGGERHOME/trkutils.h \ $$DEBUGGERHOME/trkutils.h \
$$DEBUGGERHOME/trkfunctor.h \ $$DEBUGGERHOME/callback.h \
$$PWD/trkdevice.h \ $$PWD/trkdevice.h \
$$PWD/launcher.h $$PWD/launcher.h