OSDN Git Service

Feed back changes from launcher to adapter
authorcon <qtc-committer@nokia.com>
Fri, 24 Jul 2009 14:27:03 +0000 (16:27 +0200)
committercon <qtc-committer@nokia.com>
Fri, 24 Jul 2009 14:30:07 +0000 (16:30 +0200)
tests/manual/trk/adapter.cpp

index 8071b53..b679b5c 100644 (file)
 #include <QtNetwork/QLocalServer>
 #include <QtNetwork/QLocalSocket>
 
+#if USE_NATIVE
+#include <windows.h>
+#endif
+
 #ifdef Q_OS_UNIX
 
 #include <signal.h>
@@ -64,7 +68,7 @@ public:
     ~Adapter();
     void setGdbServerName(const QString &name);
     void setTrkServerName(const QString &name) { m_trkServerName = name; }
-    void startServer();
+    bool startServer();
 
 private:
     //
@@ -128,7 +132,11 @@ private:
     void startInferiorIfNeeded();
     void interruptInferior();
 
-    QLocalSocket *m_trkDevice;
+#if USE_NATIVE
+    HANDLE m_hdevice;
+#else
+     QLocalSocket *m_trkDevice;
+#endif
 
     QString m_trkServerName;
     QByteArray m_trkReadBuffer;
@@ -192,13 +200,13 @@ Adapter::~Adapter()
 #if USE_NATIVE
     CloseHandle(m_hdevice);
 #else
+    m_trkDevice->abort();
     delete m_trkDevice;
 #endif
 
     // Gdb
     m_gdbServer.close();
     //>disconnectFromServer();
-    m_trkDevice->abort();
     logMessage("Shutting down.\n");
 }
 
@@ -214,11 +222,11 @@ void Adapter::setGdbServerName(const QString &name)
     }
 }
 
-void Adapter::startServer()
+bool Adapter::startServer()
 {
     if (!openTrkPort(m_trkServerName)) {
         logMessage("Unable to connect to TRK server");
-        return;
+        return false;
     }
 
     sendTrkInitialPing();
@@ -237,7 +245,7 @@ void Adapter::startServer()
         logMessage(QString("Unable to start the gdb server at %1:%2: %3.")
             .arg(m_gdbServerName).arg(m_gdbServerPort)
             .arg(m_gdbServer.errorString()));
-        return;
+        return false;
     }
 
     logMessage(QString("Gdb server running on port %1. Run arm-gdb now.")
@@ -245,6 +253,7 @@ void Adapter::startServer()
 
     connect(&m_gdbServer, SIGNAL(newConnection()),
         this, SLOT(handleGdbConnection()));
+    return true;
 }
 
 void Adapter::logMessage(const QString &msg)
@@ -669,17 +678,21 @@ void Adapter::readFromTrk()
 
 bool Adapter::openTrkPort(const QString &port)
 {
-    // QFile does not work with "COM3", so work around
-    /*
-    FILE *f = fopen("COM3", "r+");
-    if (!f) {
-        logMessage("Could not open file ");
-        return;
-    }
-    m_trkDevice = new QFile;
-    if (!m_trkDevice->open(f, QIODevice::ReadWrite))
-    */
-
+#if USE_NATIVE
+    m_hdevice = CreateFile(port.toStdWString().c_str(),
+                           GENERIC_READ | GENERIC_WRITE,
+                           0,
+                           NULL,
+                           OPEN_EXISTING,
+                           FILE_ATTRIBUTE_NORMAL,
+                           NULL);
+
+    if (INVALID_HANDLE_VALUE == m_hdevice){
+        logMessage("Could not open device " + port);
+        return false;
+     }
+    return true;
+#else
 #if 0
     m_trkDevice = new Win_QextSerialPort(port);
     m_trkDevice->setBaudRate(BAUD115200);
@@ -692,13 +705,15 @@ bool Adapter::openTrkPort(const QString &port)
     if (!m_trkDevice->open(QIODevice::ReadWrite)) {
         QByteArray ba = m_trkDevice->errorString().toLatin1();
         logMessage("Could not open device " << ba);
-        return;
+        return false;
     }
+    return true
 #else
     m_trkDevice = new QLocalSocket(this);
     m_trkDevice->connectToServer(port);
     return m_trkDevice->waitForConnected();
 #endif
+#endif
 }
 
 void Adapter::timerEvent(QTimerEvent *)
@@ -794,18 +809,15 @@ void Adapter::trkWrite(const TrkMessage &msg)
     m_writtenTrkMessages.insert(msg.token, msg);
     m_trkWriteBusy = true;
 
-#if USE_NATIVE
+    logMessage("WRITE: " + stringFromArray(ba));
 
+#if USE_NATIVE
     DWORD charsWritten;
     if (!WriteFile(m_hdevice, ba.data(), ba.size(), &charsWritten, NULL))
         logMessage("WRITE ERROR: ");
 
-    //logMessage("WRITE: " + stringFromArray(ba));
     FlushFileBuffers(m_hdevice);
-
 #else
-
-    //logMessage("WRITE: " + stringFromArray(ba));
     if (!m_trkDevice->write(ba))
         logMessage("WRITE ERROR: " + m_trkDevice->errorString());
     m_trkDevice->flush();
@@ -819,17 +831,15 @@ void Adapter::tryTrkRead()
     //        << stringFromArray(m_trkReadQueue);
 
 #if USE_NATIVE
-
-    const int BUFFERSIZE = 1024;
+    const DWORD BUFFERSIZE = 1;
     char buffer[BUFFERSIZE];
     DWORD charsRead;
 
-    while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)
-            && BUFFERSIZE == charsRead) {
+    while (ReadFile(m_hdevice, buffer, BUFFERSIZE, &charsRead, NULL)) {
         m_trkReadQueue.append(buffer, charsRead);
+        if (isValidTrkResult(m_trkReadQueue))
+            break;
     }
-    m_trkReadQueue.append(buffer, charsRead);
-
 #else // USE_NATIVE
 
     if (m_trkDevice->bytesAvailable() == 0 && m_trkReadQueue.isEmpty())
@@ -1079,12 +1089,10 @@ void Adapter::handleAndReportReadRegisters(const TrkResult &result)
         m_snapshot.registers[i] = extractInt(data + 4 * i);
         //qDebug() << i << hexNumber(m_snapshot.registers[i], 8);
     }
-
     //QByteArray ba = result.data.toHex();
     QByteArray ba;
     for (int i = 0; i < 16; ++i)
         ba += hexNumber(m_snapshot.registers[i], 8);
-
     sendGdbMessage(ba, "register contents");
 }
 
@@ -1342,9 +1350,9 @@ int main(int argc, char *argv[])
     Adapter adapter;
     adapter.setTrkServerName(argv[1]);
     adapter.setGdbServerName(argv[2]);
-    adapter.startServer();
-
-    return app.exec();
+    if (adapter.startServer())
+        return app.exec();
+    return 4;
 }
 
 #include "adapter.moc"