From 0fc3129b3c18dbc29cf24d461b7b31571c0a834b Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Tue, 8 Sep 2009 10:57:33 +0200
Subject: [PATCH] trk: we always want to be called back independent of ACK/NAK

---
 tests/manual/trk/runner.cpp     | 97 ++++++++++++++++++---------------
 tests/manual/trk/trkdevicex.cpp | 22 +++-----
 tests/manual/trk/trkdevicex.h   |  4 +-
 3 files changed, 62 insertions(+), 61 deletions(-)

diff --git a/tests/manual/trk/runner.cpp b/tests/manual/trk/runner.cpp
index 27fb8e0cfb4..f73f8409363 100755
--- a/tests/manual/trk/runner.cpp
+++ b/tests/manual/trk/runner.cpp
@@ -180,8 +180,7 @@ public:
     void sendTrkMessage(byte code,
         TrkCallback callback = TrkCallback(),
         const QByteArray &data = QByteArray(),
-        const QVariant &cookie = QVariant(),
-        bool invokeOnFailure = false);
+        const QVariant &cookie = QVariant());
     Q_SLOT void handleTrkResult(const trk::TrkResult &data);
     Q_SLOT void handleTrkError(const QString &msg);
 
@@ -206,8 +205,9 @@ public:
     void handleAndReportReadRegisters(const TrkResult &result);
     QByteArray memoryReadLogMessage(uint addr, uint len, const QByteArray &ba) const;
     QByteArray trkContinueMessage();
-    QByteArray trkBreakpointMessage(uint addr, int len, int pid,
-        bool armMode = true);
+    QByteArray trkReadRegisterMessage();
+    QByteArray trkReadMemoryMessage(uint addr, uint len);
+    QByteArray trkBreakpointMessage(uint addr, uint len, bool armMode = true);
     void handleAndReportSetBreakpoint(const TrkResult &result);
     void handleReadMemoryBuffered(const TrkResult &result);
     void handleReadMemoryUnbuffered(const TrkResult &result);
@@ -358,6 +358,36 @@ uint Adapter::gdbServerPort() const
     return m_gdbServerName.mid(pos + 1).toUInt();
 }
 
+QByteArray Adapter::trkContinueMessage()
+{
+    QByteArray ba;
+    appendInt(&ba, m_session.pid);
+    appendInt(&ba, m_session.tid);
+    return ba;
+}
+
+QByteArray Adapter::trkReadRegisterMessage()
+{
+    QByteArray ba;
+    appendByte(&ba, 0); // Register set, only 0 supported
+    appendShort(&ba, 0);
+    appendShort(&ba, RegisterCount - 1); // last register
+    appendInt(&ba, m_session.pid);
+    appendInt(&ba, m_session.tid);
+    return ba;
+}
+
+QByteArray Adapter::trkReadMemoryMessage(uint addr, uint len)
+{
+    QByteArray ba;
+    appendByte(&ba, 0x08); // Options, FIXME: why?
+    appendShort(&ba, len);
+    appendInt(&ba, addr);
+    appendInt(&ba, m_session.pid);
+    appendInt(&ba, m_session.tid);
+    return ba;
+}
+
 void Adapter::startInferior()
 {
     QString errorMessage;
@@ -556,7 +586,7 @@ void Adapter::reportToGdb(const TrkResult &result)
     sendGdbServerMessage(message, note);
 }
 
-QByteArray Adapter::trkBreakpointMessage(uint addr, int len, int pid, bool armMode)
+QByteArray Adapter::trkBreakpointMessage(uint addr, uint len, bool armMode)
 {
     QByteArray ba;
     appendByte(&ba, 0x82);  // unused option
@@ -564,7 +594,7 @@ QByteArray Adapter::trkBreakpointMessage(uint addr, int len, int pid, bool armMo
     appendInt(&ba, addr);
     appendInt(&ba, len);
     appendInt(&ba, 0x00000001);
-    appendInt(&ba, pid);
+    appendInt(&ba, m_session.pid);
     appendInt(&ba, 0xFFFFFFFF);
     return ba;
 }
@@ -630,13 +660,8 @@ void Adapter::handleGdbServerCommand(const QByteArray &cmd)
         // Read general registers.
         //sendGdbServerMessage("00000000", "read registers");
         sendGdbServerAck();
-        QByteArray ba;
-        appendByte(&ba, 0); // Register set, only 0 supported
-        appendShort(&ba, 0);
-        appendShort(&ba, RegisterCount - 1); // last register
-        appendInt(&ba, m_session.pid);
-        appendInt(&ba, m_session.tid);
-        sendTrkMessage(0x12, TrkCB(handleAndReportReadRegisters), ba, QVariant(), true);
+        sendTrkMessage(0x12, TrkCB(handleAndReportReadRegisters),
+            trkReadRegisterMessage());
     }
 
     else if (cmd.startsWith("Hc")) {
@@ -787,7 +812,6 @@ void Adapter::handleGdbServerCommand(const QByteArray &cmd)
     else if (cmd == "qPacketInfo") {
         // happens with  gdb 6.4.50.20060226-cvs / CodeSourcery
         // deprecated by qSupported?
-
         sendGdbServerAck();
         sendGdbServerMessage("", "FIXME: nothing?");
     }
@@ -832,9 +856,12 @@ void Adapter::handleGdbServerCommand(const QByteArray &cmd)
     }
 
     else if (cmd == "s" || cmd.startsWith("vCont;s")) {
-        if (m_verbose)
-            logMessage(msgGdbPacket(QLatin1String("Step range")));
+        static int used = 0;
+        if (!used) {
+        ++used;
+        logMessage(msgGdbPacket(QLatin1String("Step range")));
         sendGdbServerAck();
+        m_running = true;
         QByteArray ba;
         appendByte(&ba, 0); // options
         appendInt(&ba, m_snapshot.registers[RegisterPC]); // start address
@@ -844,6 +871,7 @@ void Adapter::handleGdbServerCommand(const QByteArray &cmd)
         sendTrkMessage(0x19, TrkCB(handleStepRange), ba, "Step range");
         // FIXME: should be triggered by "real" stop"
         //sendGdbServerMessageAfterTrkResponse("S05", "target halted");
+        }
     }
 
     else if (cmd == "vCont?") {
@@ -948,6 +976,8 @@ void Adapter::executeCommand(const QString &msg)
         sendGdbMessage("-exec-interrupt");
     } else if (msg == "C") {
         sendTrkMessage(0x18, TrkCallback(), trkContinueMessage(), "CONTINUE");
+    } else if (msg == "R") {
+        sendTrkMessage(0x18, TrkCallback(), trkReadRegisterMessage(), "READ REGS");
     } else if (msg == "I") {
         interruptInferior();
     } else {
@@ -969,9 +999,9 @@ bool Adapter::openTrkPort(const QString &port, QString *errorMessage)
 }
 
 void Adapter::sendTrkMessage(byte code, TrkCallback callback,
-    const QByteArray &data, const QVariant &cookie, bool invokeOnFailure)
+    const QByteArray &data, const QVariant &cookie)
 {
-    m_trkDevice.sendTrkMessage(code, callback, data, cookie, invokeOnFailure);
+    m_trkDevice.sendTrkMessage(code, callback, data, cookie);
 }
 
 void Adapter::waitForTrkFinished()
@@ -1310,14 +1340,6 @@ QByteArray Adapter::memoryReadLogMessage(uint addr, uint len, const QByteArray &
     return logMsg;
 }
 
-QByteArray Adapter::trkContinueMessage()
-{
-    QByteArray ba;
-    appendInt(&ba, m_session.pid);
-    appendInt(&ba, m_session.tid);
-    return ba;
-}
-
 void Adapter::reportReadMemoryBuffered(const TrkResult &result)
 {
     const qulonglong cookie = result.cookie.toULongLong();
@@ -1368,7 +1390,7 @@ void Adapter::handleStepRange(const TrkResult &result)
     // [80 0f 12]
     //uint bpnr = extractInt(result.data.data());
     logMessage("STEPPING FINISHED " + stringFromArray(result.data.data()));
-    sendGdbServerMessage("S05", "Stepping finished");
+    //sendGdbServerMessage("S05", "Stepping finished");
 }
 
 void Adapter::handleAndReportSetBreakpoint(const TrkResult &result)
@@ -1514,17 +1536,6 @@ void Adapter::cleanUp()
     // Error: 0x00
 }
 
-static inline QByteArray memoryRequestTrkMessage(uint addr, uint len, int pid, int tid)
-{
-    QByteArray ba;
-    appendByte(&ba, 0x08); // Options, FIXME: why?
-    appendShort(&ba, len);
-    appendInt(&ba, addr);
-    appendInt(&ba, pid);
-    appendInt(&ba, tid);
-    return ba;
-}
-
 void Adapter::readMemory(uint addr, uint len)
 {
     Q_ASSERT(len < (2 << 16));
@@ -1543,9 +1554,8 @@ void Adapter::readMemory(uint addr, uint len)
                         "memory %1 bytes from 0x%2")
                     .arg(MemoryChunkSize).arg(blockaddr, 0, 16));
                 sendTrkMessage(0x10, TrkCB(handleReadMemoryBuffered),
-                    memoryRequestTrkMessage(blockaddr, MemoryChunkSize,
-                        m_session.pid, m_session.tid),
-                    QVariant(blockaddr), true);
+                    trkReadMemoryMessage(blockaddr, MemoryChunkSize),
+                    QVariant(blockaddr));
             }
         }
         const qulonglong cookie = (qulonglong(addr) << 32) + len;
@@ -1556,8 +1566,7 @@ void Adapter::readMemory(uint addr, uint len)
             logMessage(QString::fromLatin1("Requesting unbuffered memory %1 "
                 "bytes from 0x%2").arg(len).arg(addr, 0, 16));
         sendTrkMessage(0x10, TrkCB(handleReadMemoryUnbuffered),
-           memoryRequestTrkMessage(addr, len, m_session.pid, m_session.tid),
-           QVariant(addr), true);
+           trkReadMemoryMessage(addr, len), QVariant(addr));
     }
 }
 
@@ -1754,7 +1763,7 @@ void Adapter::handleInfoMainAddress(const GdbResult &result)
 {
     bool ok;
     uint addr = result.data.toInt(&ok, 16);
-    const QByteArray ba = trkBreakpointMessage(addr, 1, m_session.pid);
+    const QByteArray ba = trkBreakpointMessage(addr, 1);
     sendTrkMessage(0x1B, TrkCB(handleSetTrkMainBreakpoint), ba);
 }
 
diff --git a/tests/manual/trk/trkdevicex.cpp b/tests/manual/trk/trkdevicex.cpp
index 0323d82eadf..42c7f72e175 100644
--- a/tests/manual/trk/trkdevicex.cpp
+++ b/tests/manual/trk/trkdevicex.cpp
@@ -117,14 +117,12 @@ struct TrkMessage
     QByteArray data;
     QVariant cookie;
     Callback callback;
-    bool invokeOnNAK;
 };
 
 TrkMessage::TrkMessage(byte c, byte t, Callback cb) :
     code(c),
     token(t),
-    callback(cb),
-    invokeOnNAK(false)
+    callback(cb)
 {
 }
 
@@ -144,8 +142,7 @@ public:
 
     // Enqueue messages.
     void queueTrkMessage(byte code, Callback callback,
-                        const QByteArray &data, const QVariant &cookie,
-                        bool invokeOnNAK);
+                        const QByteArray &data, const QVariant &cookie);
     void queueTrkInitialPing();
 
     // Call this from the device read notification with the results.
@@ -184,14 +181,13 @@ byte TrkWriteQueue::nextTrkWriteToken()
 }
 
 void TrkWriteQueue::queueTrkMessage(byte code, Callback callback,
-    const QByteArray &data, const QVariant &cookie, bool invokeOnNAK)
+    const QByteArray &data, const QVariant &cookie)
 {
     const byte token = code == TRK_WRITE_QUEUE_NOOP_CODE ?
                                 byte(0) : nextTrkWriteToken();
     TrkMessage msg(code, token, callback);
     msg.data = data;
     msg.cookie = cookie;
-    msg.invokeOnNAK = invokeOnNAK;
     trkWriteQueue.append(msg);
 }
 
@@ -233,16 +229,14 @@ void TrkWriteQueue::notifyWriteResult(bool ok)
 void TrkWriteQueue::slotHandleResult(const TrkResult &result)
 {
     trkWriteBusy = false;
-    if (result.code != TrkNotifyAck && result.code != TrkNotifyNak)
-        return;
+    //if (result.code != TrkNotifyAck && result.code != TrkNotifyNak)
+    //    return;
     // Find which request the message belongs to and invoke callback
     // if ACK or on NAK if desired.
     const TokenMessageMap::iterator it = writtenTrkMessages.find(result.token);
     if (it == writtenTrkMessages.end())
         return;
-    const bool invokeCB = it.value().callback
-                          && (result.code == TrkNotifyAck || it.value().invokeOnNAK);
-
+    const bool invokeCB = it.value().callback;
     if (invokeCB) {
         TrkResult result1 = result;
         result1.cookie = it.value().cookie;
@@ -517,9 +511,9 @@ void TrkDevice::emitError(const QString &s)
 }
 
 void TrkDevice::sendTrkMessage(byte code, Callback callback,
-     const QByteArray &data, const QVariant &cookie, bool invokeOnNAK)
+     const QByteArray &data, const QVariant &cookie)
 {
-    d->queue.queueTrkMessage(code, callback, data, cookie, invokeOnNAK);
+    d->queue.queueTrkMessage(code, callback, data, cookie);
 }
 
 void TrkDevice::sendTrkInitialPing()
diff --git a/tests/manual/trk/trkdevicex.h b/tests/manual/trk/trkdevicex.h
index 1873f458e7c..5a7a7440775 100644
--- a/tests/manual/trk/trkdevicex.h
+++ b/tests/manual/trk/trkdevicex.h
@@ -104,9 +104,7 @@ public:
     void sendTrkMessage(unsigned char code,
                         Callback callBack = Callback(),
                         const QByteArray &data = QByteArray(),
-                        const QVariant &cookie = QVariant(),
-                        // Invoke callback on receiving NAK, too.
-                        bool invokeOnNAK = false);
+                        const QVariant &cookie = QVariant());
 
     // Enqeue an initial ping
     void sendTrkInitialPing();
-- 
GitLab