forked from qt-creator/qt-creator
Trk: Ping mode, better argument parsing.
This commit is contained in:
@@ -117,6 +117,7 @@ struct LauncherPrivate {
|
|||||||
QString m_copySrcFileName;
|
QString m_copySrcFileName;
|
||||||
QString m_copyDstFileName;
|
QString m_copyDstFileName;
|
||||||
QString m_installFileName;
|
QString m_installFileName;
|
||||||
|
int m_verbose;
|
||||||
};
|
};
|
||||||
|
|
||||||
LauncherPrivate::LauncherPrivate() :
|
LauncherPrivate::LauncherPrivate() :
|
||||||
@@ -125,7 +126,8 @@ LauncherPrivate::LauncherPrivate() :
|
|||||||
#endif
|
#endif
|
||||||
m_trkWriteToken(0),
|
m_trkWriteToken(0),
|
||||||
m_trkWriteBusy(false),
|
m_trkWriteBusy(false),
|
||||||
m_timerId(-1)
|
m_timerId(-1),
|
||||||
|
m_verbose(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,6 +167,11 @@ void Launcher::setInstallFileName(const QString &name)
|
|||||||
|
|
||||||
bool Launcher::startServer(QString *errorMessage)
|
bool Launcher::startServer(QString *errorMessage)
|
||||||
{
|
{
|
||||||
|
if (d->m_verbose) {
|
||||||
|
const QString msg = QString::fromLatin1("Port=%1 Executable=%2 Package=%3 Remote Package=%4 Install file=%5")
|
||||||
|
.arg(d->m_trkServerName, d->m_fileName, d->m_copySrcFileName, d->m_copyDstFileName, d->m_installFileName);
|
||||||
|
logMessage(msg);
|
||||||
|
}
|
||||||
if (!openTrkPort(d->m_trkServerName, errorMessage))
|
if (!openTrkPort(d->m_trkServerName, errorMessage))
|
||||||
return false;
|
return false;
|
||||||
d->m_timerId = startTimer(100);
|
d->m_timerId = startTimer(100);
|
||||||
@@ -172,7 +179,9 @@ bool Launcher::startServer(QString *errorMessage)
|
|||||||
sendTrkMessage(TrkConnect); // Connect
|
sendTrkMessage(TrkConnect); // Connect
|
||||||
sendTrkMessage(TrkSupported, CB(handleSupportMask));
|
sendTrkMessage(TrkSupported, CB(handleSupportMask));
|
||||||
sendTrkMessage(TrkCpuType, CB(handleCpuType));
|
sendTrkMessage(TrkCpuType, CB(handleCpuType));
|
||||||
sendTrkMessage(TrkVersions); // Versions
|
sendTrkMessage(TrkVersions, CB(handleTrkVersion));
|
||||||
|
if (d->m_fileName.isEmpty())
|
||||||
|
return true;
|
||||||
if (!d->m_copySrcFileName.isEmpty() && !d->m_copyDstFileName.isEmpty())
|
if (!d->m_copySrcFileName.isEmpty() && !d->m_copyDstFileName.isEmpty())
|
||||||
copyFileToRemote();
|
copyFileToRemote();
|
||||||
else
|
else
|
||||||
@@ -180,6 +189,11 @@ bool Launcher::startServer(QString *errorMessage)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Launcher::setVerbose(int v)
|
||||||
|
{
|
||||||
|
d->m_verbose = v;
|
||||||
|
}
|
||||||
|
|
||||||
void Launcher::installAndRun()
|
void Launcher::installAndRun()
|
||||||
{
|
{
|
||||||
if (!d->m_installFileName.isEmpty()) {
|
if (!d->m_installFileName.isEmpty()) {
|
||||||
@@ -190,7 +204,7 @@ void Launcher::installAndRun()
|
|||||||
}
|
}
|
||||||
void Launcher::logMessage(const QString &msg)
|
void Launcher::logMessage(const QString &msg)
|
||||||
{
|
{
|
||||||
if (DEBUG_TRK)
|
if (d->m_verbose)
|
||||||
qDebug() << "ADAPTER: " << qPrintable(msg);
|
qDebug() << "ADAPTER: " << qPrintable(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -464,6 +478,27 @@ void Launcher::handleResult(const TrkResult &result)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Launcher::handleTrkVersion(const TrkResult &result)
|
||||||
|
{
|
||||||
|
if (result.data.size() < 5)
|
||||||
|
return;
|
||||||
|
const int trkMajor = result.data.at(1);
|
||||||
|
const int trkMinor = result.data.at(2);
|
||||||
|
const int protocolMajor = result.data.at(3);
|
||||||
|
const int protocolMinor = result.data.at(4);
|
||||||
|
// Ping mode: Log & Terminate
|
||||||
|
if (d->m_fileName.isEmpty()) {
|
||||||
|
QString msg;
|
||||||
|
QTextStream(&msg) << "CPU: " << d->m_session.cpuMajor << '.' << d->m_session.cpuMinor << ' '
|
||||||
|
<< (d->m_session.bigEndian ? "big endian" : "little endian")
|
||||||
|
<< " type size: " << d->m_session.defaultTypeSize
|
||||||
|
<< " float size: " << d->m_session.fpTypeSize
|
||||||
|
<< " Trk: v" << trkMajor << '.' << trkMinor << " Protocol: " << protocolMajor << '.' << protocolMinor;
|
||||||
|
qWarning("%s", qPrintable(msg));
|
||||||
|
sendTrkMessage(TrkPing, CB(waitForTrkFinished));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Launcher::handleFileCreation(const TrkResult &result)
|
void Launcher::handleFileCreation(const TrkResult &result)
|
||||||
{
|
{
|
||||||
// we don't do any error handling yet, which is bad
|
// we don't do any error handling yet, which is bad
|
||||||
@@ -502,12 +537,12 @@ void Launcher::handleCpuType(const TrkResult &result)
|
|||||||
// Command: 0x80 Acknowledge
|
// Command: 0x80 Acknowledge
|
||||||
// Error: 0x00
|
// Error: 0x00
|
||||||
// [80 03 00 04 00 00 04 00 00 00]
|
// [80 03 00 04 00 00 04 00 00 00]
|
||||||
d->m_session.cpuMajor = result.data[0];
|
d->m_session.cpuMajor = result.data.at(1);
|
||||||
d->m_session.cpuMinor = result.data[1];
|
d->m_session.cpuMinor = result.data.at(2);
|
||||||
d->m_session.bigEndian = result.data[2];
|
d->m_session.bigEndian = result.data.at(3);
|
||||||
d->m_session.defaultTypeSize = result.data[3];
|
d->m_session.defaultTypeSize = result.data.at(4);
|
||||||
d->m_session.fpTypeSize = result.data[4];
|
d->m_session.fpTypeSize = result.data.at(5);
|
||||||
d->m_session.extended1TypeSize = result.data[5];
|
d->m_session.extended1TypeSize = result.data.at(6);
|
||||||
//d->m_session.extended2TypeSize = result.data[6];
|
//d->m_session.extended2TypeSize = result.data[6];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -521,10 +556,12 @@ void Launcher::handleCreateProcess(const TrkResult &result)
|
|||||||
d->m_session.tid = extractInt(data + 5);
|
d->m_session.tid = extractInt(data + 5);
|
||||||
d->m_session.codeseg = extractInt(data + 9);
|
d->m_session.codeseg = extractInt(data + 9);
|
||||||
d->m_session.dataseg = extractInt(data + 13);
|
d->m_session.dataseg = extractInt(data + 13);
|
||||||
logMessage(QString(" READ PID: %1").arg(d->m_session.pid));
|
if (d->m_verbose) {
|
||||||
logMessage(QString(" READ TID: %1").arg(d->m_session.tid));
|
const QString msg = QString::fromLatin1("Process id: %1 Thread id: %2 code: 0x%3 data: 0x%4").
|
||||||
logMessage(QString(" READ CODE: %1").arg(d->m_session.codeseg));
|
arg(d->m_session.pid).arg(d->m_session.tid).arg(d->m_session.codeseg, 0, 16).
|
||||||
logMessage(QString(" READ DATA: %1").arg(d->m_session.dataseg));
|
arg(d->m_session.dataseg, 0 ,16);
|
||||||
|
logMessage(msg);
|
||||||
|
}
|
||||||
emit applicationRunning(d->m_session.pid);
|
emit applicationRunning(d->m_session.pid);
|
||||||
QByteArray ba;
|
QByteArray ba;
|
||||||
appendInt(&ba, d->m_session.pid);
|
appendInt(&ba, d->m_session.pid);
|
||||||
|
@@ -51,6 +51,7 @@ public:
|
|||||||
void setCopyFileName(const QString &srcName, const QString &dstName);
|
void setCopyFileName(const QString &srcName, const QString &dstName);
|
||||||
void setInstallFileName(const QString &name);
|
void setInstallFileName(const QString &name);
|
||||||
bool startServer(QString *errorMessage);
|
bool startServer(QString *errorMessage);
|
||||||
|
void setVerbose(int v);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void copyingStarted();
|
void copyingStarted();
|
||||||
@@ -93,6 +94,7 @@ private:
|
|||||||
void handleWaitForFinished(const TrkResult &result);
|
void handleWaitForFinished(const TrkResult &result);
|
||||||
void handleStop(const TrkResult &result);
|
void handleStop(const TrkResult &result);
|
||||||
void handleSupportMask(const TrkResult &result);
|
void handleSupportMask(const TrkResult &result);
|
||||||
|
void handleTrkVersion(const TrkResult &result);
|
||||||
void waitForTrkFinished(const TrkResult &data);
|
void waitForTrkFinished(const TrkResult &data);
|
||||||
|
|
||||||
void handleAndReportCreateProcess(const TrkResult &result);
|
void handleAndReportCreateProcess(const TrkResult &result);
|
||||||
|
@@ -2,32 +2,94 @@
|
|||||||
|
|
||||||
#include <QtCore/QCoreApplication>
|
#include <QtCore/QCoreApplication>
|
||||||
#include <QtCore/QDebug>
|
#include <QtCore/QDebug>
|
||||||
|
#include <QtCore/QStringList>
|
||||||
|
|
||||||
|
static const char *usageC =
|
||||||
|
"\nUsage: %1 <trk_port_name> [-v] [-i remote_sis_file | -I local_sis_file remote_sis_file] <remote_executable_name>\n"
|
||||||
|
"\nOptions:\n -v verbose\n\n"
|
||||||
|
"\nPing:\n"
|
||||||
|
"%1 COM5\n"
|
||||||
|
"\nRemote launch:\n"
|
||||||
|
"%1 COM5 C:\\sys\\bin\\test.exe\n"
|
||||||
|
"\nInstallation and remote launch:\n"
|
||||||
|
"%1 COM5 -i C:\\Data\\test_gcce_udeb.sisx C:\\sys\\bin\\test.exe\n"
|
||||||
|
"\nCopy from local file, installation and remote launch:\n"
|
||||||
|
"%1 COM5 -I C:\\Projects\\test\\test_gcce_udeb.sisx C:\\Data\\test_gcce_udeb.sisx C:\\sys\\bin\\test.exe\n";
|
||||||
|
|
||||||
|
static void usage()
|
||||||
|
{
|
||||||
|
const QString msg = QString::fromLatin1(usageC).arg(QCoreApplication::applicationName());
|
||||||
|
qWarning("%s", qPrintable(msg));
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool parseArguments(const QStringList &arguments, trk::Launcher &launcher)
|
||||||
|
{
|
||||||
|
// Parse away options
|
||||||
|
bool install = false;
|
||||||
|
bool customInstall = false;
|
||||||
|
const int argCount = arguments.size();
|
||||||
|
int verbosity = 0;
|
||||||
|
int a = 1;
|
||||||
|
for ( ; a < argCount; a++) {
|
||||||
|
const QString option = arguments.at(a);
|
||||||
|
if (!option.startsWith(QLatin1Char('-')))
|
||||||
|
break;
|
||||||
|
if (option.size() != 2)
|
||||||
|
return false;
|
||||||
|
switch (option.at(1).toAscii()) {
|
||||||
|
case 'v':
|
||||||
|
verbosity++;
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
install = true;
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
customInstall = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
launcher.setVerbose(verbosity);
|
||||||
|
// Evaluate arguments
|
||||||
|
const int remainingArgsCount = argCount - a;
|
||||||
|
if (remainingArgsCount == 1 && !install && !customInstall) {
|
||||||
|
launcher.setTrkServerName(arguments.at(a)); // ping
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (remainingArgsCount == 2 && !install && !customInstall) {
|
||||||
|
// remote exec
|
||||||
|
launcher.setTrkServerName(arguments.at(a)); // ping
|
||||||
|
launcher.setFileName(arguments.at(a + 1));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (remainingArgsCount == 3 && install && !customInstall) {
|
||||||
|
launcher.setTrkServerName(arguments.at(a)); // ping
|
||||||
|
launcher.setInstallFileName(arguments.at(a + 1));
|
||||||
|
launcher.setFileName(arguments.at(a + 2));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (remainingArgsCount == 4 && !install && customInstall) {
|
||||||
|
launcher.setTrkServerName(arguments.at(a)); // ping
|
||||||
|
launcher.setCopyFileName(arguments.at(a + 1), arguments.at(a + 2));
|
||||||
|
launcher.setInstallFileName(arguments.at(a + 2));
|
||||||
|
launcher.setFileName(arguments.at(a + 3));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
if ((argc != 3 && argc != 5 && argc != 6)
|
|
||||||
|| (argc == 5 && QString(argv[2]) != "-i")
|
|
||||||
|| (argc == 6 && QString(argv[2]) != "-I")) {
|
|
||||||
qDebug() << "Usage: " << argv[0] << "<trk_port_name> [-i remote_sis_file | -I local_sis_file remote_sis_file] <remote_executable_name>";
|
|
||||||
qDebug() << "for example" << argv[0] << "COM5 C:\\sys\\bin\\test.exe";
|
|
||||||
qDebug() << " " << argv[0] << "COM5 -i C:\\Data\\test_gcce_udeb.sisx C:\\sys\\bin\\test.exe";
|
|
||||||
qDebug() << " " << argv[0] << "COM5 -I C:\\Projects\\test\\test_gcce_udeb.sisx C:\\Data\\test_gcce_udeb.sisx C:\\sys\\bin\\test.exe";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
|
QCoreApplication::setApplicationName(QLatin1String("trklauncher"));
|
||||||
|
QCoreApplication::setOrganizationName(QLatin1String("Nokia"));
|
||||||
|
|
||||||
trk::Launcher launcher;
|
trk::Launcher launcher;
|
||||||
launcher.setTrkServerName(argv[1]);
|
if (!parseArguments(app.arguments(), launcher)) {
|
||||||
if (argc == 3) {
|
usage();
|
||||||
launcher.setFileName(argv[2]);
|
return 1;
|
||||||
} else if (argc == 5) {
|
|
||||||
launcher.setInstallFileName(argv[3]);
|
|
||||||
launcher.setFileName(argv[4]);
|
|
||||||
} else {
|
|
||||||
launcher.setCopyFileName(argv[3], argv[4]);
|
|
||||||
launcher.setInstallFileName(argv[4]);
|
|
||||||
launcher.setFileName(argv[5]);
|
|
||||||
}
|
}
|
||||||
QObject::connect(&launcher, SIGNAL(finished()), &app, SLOT(quit()));
|
QObject::connect(&launcher, SIGNAL(finished()), &app, SLOT(quit()));
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
QT = core
|
QT = core
|
||||||
include($$PWD/trklauncher.pri)
|
include($$PWD/trklauncher.pri)
|
||||||
DEFINES += DEBUG_TRK=1
|
|
||||||
win32:CONFIG += console
|
win32:CONFIG += console
|
||||||
SOURCES += main_launcher.cpp
|
SOURCES += main_launcher.cpp
|
||||||
|
Reference in New Issue
Block a user