forked from qt-creator/qt-creator
Feed back changes from launcher to adapter
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
|
#if USE_NATIVE
|
||||||
|
HANDLE m_hdevice;
|
||||||
|
#else
|
||||||
QLocalSocket *m_trkDevice;
|
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"
|
||||||
|
Reference in New Issue
Block a user