Feed back changes from launcher to adapter

This commit is contained in:
con
2009-07-24 16:27:03 +02:00
parent 5d4273cc01
commit 10721dc368

View File

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