diff --git a/tests/manual/trk/launcher.cpp b/tests/manual/trk/launcher.cpp index 309f3f95b91edc5eb77832b07e123fb1749fd4ed..33364df8ee3daf724b525f06f2bbf6f6a2d81f61 100644 --- a/tests/manual/trk/launcher.cpp +++ b/tests/manual/trk/launcher.cpp @@ -27,18 +27,7 @@ ** **************************************************************************/ -#include "trkutils.h" - -#include <QtCore/QCoreApplication> -#include <QtCore/QFile> -#include <QtCore/QQueue> -#include <QtCore/QTimer> -#include <QtCore/QDateTime> - -#include <QtNetwork/QTcpServer> -#include <QtNetwork/QTcpSocket> -#include <QtNetwork/QLocalServer> -#include <QtNetwork/QLocalSocket> +#include "launcher.h" #if USE_NATIVE #include <windows.h> @@ -63,115 +52,10 @@ BOOL WINAPI TryReadFile(HANDLE hFile, } #endif -#ifdef Q_OS_UNIX - -#include <signal.h> - -void signalHandler(int) -{ - qApp->exit(1); -} - -#endif - using namespace trk; -enum { TRK_SYNC = 0x7f }; - #define CB(s) &Adapter::s -class Adapter : public QObject -{ - Q_OBJECT - -public: - Adapter(); - ~Adapter(); - void setTrkServerName(const QString &name) { m_trkServerName = name; } - void setFileName(const QString &name) { m_fileName = name; } - void setCopyFileName(const QString &srcName, const QString &dstName) { m_copySrcFileName = srcName; m_copyDstFileName = dstName; } - void setInstallFileName(const QString &name) { m_installFileName = name; } - bool startServer(); - -private: - // - // TRK - // - typedef void (Adapter::*TrkCallBack)(const TrkResult &); - - struct TrkMessage - { - TrkMessage() { code = token = 0; callBack = 0; } - byte code; - byte token; - QByteArray data; - QVariant cookie; - TrkCallBack callBack; - }; - - bool openTrkPort(const QString &port); // or server name for local server - void sendTrkMessage(byte code, - TrkCallBack callBack = 0, - const QByteArray &data = QByteArray(), - const QVariant &cookie = QVariant()); - // adds message to 'send' queue - void queueTrkMessage(const TrkMessage &msg); - void tryTrkWrite(); - void tryTrkRead(); - // actually writes a message to the device - void trkWrite(const TrkMessage &msg); - // convienience messages - void sendTrkInitialPing(); - void sendTrkAck(byte token); - - // kill process and breakpoints - void cleanUp(); - - void timerEvent(QTimerEvent *ev); - byte nextTrkWriteToken(); - - void handleFileCreation(const TrkResult &result); - void handleFileCreated(const TrkResult &result); - void handleCpuType(const TrkResult &result); - void handleCreateProcess(const TrkResult &result); - void handleWaitForFinished(const TrkResult &result); - void handleStop(const TrkResult &result); - void handleSupportMask(const TrkResult &result); - void waitForTrkFinished(const TrkResult &data); - - void handleAndReportCreateProcess(const TrkResult &result); - void handleResult(const TrkResult &data); - - void copyFileToRemote(); - void installRemotePackageSilently(const QString &filename); - void installAndRun(); - void startInferiorIfNeeded(); - -#if USE_NATIVE - HANDLE m_hdevice; -#else - QLocalSocket *m_trkDevice; -#endif - - QString m_trkServerName; - QByteArray m_trkReadBuffer; - - unsigned char m_trkWriteToken; - QQueue<TrkMessage> m_trkWriteQueue; - QHash<byte, TrkMessage> m_writtenTrkMessages; - QByteArray m_trkReadQueue; - bool m_trkWriteBusy; - - void logMessage(const QString &msg); - // Debuggee state - Session m_session; // global-ish data (process id, target information) - - QString m_fileName; - QString m_copySrcFileName; - QString m_copyDstFileName; - QString m_installFileName; -}; - Adapter::Adapter() { // Trk @@ -309,6 +193,7 @@ void Adapter::sendTrkInitialPing() void Adapter::waitForTrkFinished(const TrkResult &result) { + Q_UNUSED(result) sendTrkMessage(TrkPing, CB(handleWaitForFinished)); } @@ -338,19 +223,7 @@ void Adapter::tryTrkWrite() return; TrkMessage msg = m_trkWriteQueue.dequeue(); - if (msg.code == TRK_SYNC) { - //logMessage("TRK SYNC"); - TrkResult result; - result.code = msg.code; - result.token = msg.token; - result.data = msg.data; - result.cookie = msg.cookie; - TrkCallBack cb = msg.callBack; - if (cb) - (this->*cb)(result); - } else { - trkWrite(msg); - } + trkWrite(msg); } void Adapter::trkWrite(const TrkMessage &msg) @@ -602,7 +475,7 @@ void Adapter::handleCreateProcess(const TrkResult &result) void Adapter::handleWaitForFinished(const TrkResult &result) { logMessage(" FINISHED: " + stringFromArray(result.data)); - qApp->exit(0); + emit finished(); } void Adapter::handleSupportMask(const TrkResult &result) @@ -706,40 +579,3 @@ void Adapter::startInferiorIfNeeded() appendString(&ba, m_fileName.toLocal8Bit(), TargetByteOrder); sendTrkMessage(TrkCreateItem, CB(handleCreateProcess), ba); // Create Item } - -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; - } - -#ifdef Q_OS_UNIX - signal(SIGUSR1, signalHandler); -#endif - - QCoreApplication app(argc, argv); - - Adapter adapter; - adapter.setTrkServerName(argv[1]); - if (argc == 3) { - adapter.setFileName(argv[2]); - } else if (argc == 5) { - adapter.setInstallFileName(argv[3]); - adapter.setFileName(argv[4]); - } else { - adapter.setCopyFileName(argv[3], argv[4]); - adapter.setInstallFileName(argv[4]); - adapter.setFileName(argv[5]); - } - if (adapter.startServer()) - return app.exec(); - return 4; -} - -#include "launcher.moc" diff --git a/tests/manual/trk/launcher.h b/tests/manual/trk/launcher.h new file mode 100644 index 0000000000000000000000000000000000000000..656d6514186e620439e36d5bbc913c4c7dea1b5f --- /dev/null +++ b/tests/manual/trk/launcher.h @@ -0,0 +1,148 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** GNU Lesser General Public License Usage +** +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** +**************************************************************************/ +#ifndef LAUNCHER_H +#define LAUNCHER_H + +#include "trkutils.h" + +#include <QtCore/QCoreApplication> +#include <QtCore/QFile> +#include <QtCore/QQueue> +#include <QtCore/QTimer> +#include <QtCore/QDateTime> + +#include <QtNetwork/QTcpServer> +#include <QtNetwork/QTcpSocket> +#include <QtNetwork/QLocalServer> +#include <QtNetwork/QLocalSocket> + +#if USE_NATIVE +#include <windows.h> +#endif + +namespace trk { + +class Adapter : public QObject +{ + Q_OBJECT + +public: + Adapter(); + ~Adapter(); + void setTrkServerName(const QString &name) { m_trkServerName = name; } + void setFileName(const QString &name) { m_fileName = name; } + void setCopyFileName(const QString &srcName, const QString &dstName) { m_copySrcFileName = srcName; m_copyDstFileName = dstName; } + void setInstallFileName(const QString &name) { m_installFileName = name; } + bool startServer(); + +signals: + void finished(); + +private: + // + // TRK + // + typedef void (Adapter::*TrkCallBack)(const TrkResult &); + + struct TrkMessage + { + TrkMessage() { code = token = 0; callBack = 0; } + byte code; + byte token; + QByteArray data; + QVariant cookie; + TrkCallBack callBack; + }; + + bool openTrkPort(const QString &port); // or server name for local server + void sendTrkMessage(byte code, + TrkCallBack callBack = 0, + const QByteArray &data = QByteArray(), + const QVariant &cookie = QVariant()); + // adds message to 'send' queue + void queueTrkMessage(const TrkMessage &msg); + void tryTrkWrite(); + void tryTrkRead(); + // actually writes a message to the device + void trkWrite(const TrkMessage &msg); + // convienience messages + void sendTrkInitialPing(); + void sendTrkAck(byte token); + + // kill process and breakpoints + void cleanUp(); + + void timerEvent(QTimerEvent *ev); + byte nextTrkWriteToken(); + + void handleFileCreation(const TrkResult &result); + void handleFileCreated(const TrkResult &result); + void handleCpuType(const TrkResult &result); + void handleCreateProcess(const TrkResult &result); + void handleWaitForFinished(const TrkResult &result); + void handleStop(const TrkResult &result); + void handleSupportMask(const TrkResult &result); + void waitForTrkFinished(const TrkResult &data); + + void handleAndReportCreateProcess(const TrkResult &result); + void handleResult(const TrkResult &data); + + void copyFileToRemote(); + void installRemotePackageSilently(const QString &filename); + void installAndRun(); + void startInferiorIfNeeded(); + +#if USE_NATIVE + HANDLE m_hdevice; +#else + QLocalSocket *m_trkDevice; +#endif + + QString m_trkServerName; + QByteArray m_trkReadBuffer; + + unsigned char m_trkWriteToken; + QQueue<TrkMessage> m_trkWriteQueue; + QHash<byte, TrkMessage> m_writtenTrkMessages; + QByteArray m_trkReadQueue; + bool m_trkWriteBusy; + + void logMessage(const QString &msg); + // Debuggee state + Session m_session; // global-ish data (process id, target information) + + QString m_fileName; + QString m_copySrcFileName; + QString m_copyDstFileName; + QString m_installFileName; +}; + +} // namespace Trk + +#endif // LAUNCHER_H diff --git a/tests/manual/trk/main_launcher.cpp b/tests/manual/trk/main_launcher.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e6b6d322969fb2f7c4d1b5e62fbd8f3cc9d45fe7 --- /dev/null +++ b/tests/manual/trk/main_launcher.cpp @@ -0,0 +1,36 @@ +#include "launcher.h" + +using namespace trk; + +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); + + Adapter adapter; + adapter.setTrkServerName(argv[1]); + if (argc == 3) { + adapter.setFileName(argv[2]); + } else if (argc == 5) { + adapter.setInstallFileName(argv[3]); + adapter.setFileName(argv[4]); + } else { + adapter.setCopyFileName(argv[3], argv[4]); + adapter.setInstallFileName(argv[4]); + adapter.setFileName(argv[5]); + } + QObject::connect(&adapter, SIGNAL(finished()), &app, SLOT(quit())); + if (adapter.startServer()) + return app.exec(); + return 4; +} + diff --git a/tests/manual/trk/trklauncher.pri b/tests/manual/trk/trklauncher.pri new file mode 100644 index 0000000000000000000000000000000000000000..46f5d0f7812dab49dd4b2eaf865fa997be05fd71 --- /dev/null +++ b/tests/manual/trk/trklauncher.pri @@ -0,0 +1,5 @@ +win32:DEFINES += USE_NATIVE +SOURCES = $$PWD/launcher.cpp \ + $$PWD/trkutils.cpp +HEADERS = $$PWD/trkutils.h \ + $$PWD/launcher.h diff --git a/tests/manual/trk/trklauncher.pro b/tests/manual/trk/trklauncher.pro index d953f0abca327b85dd0b5d83d6daee457c688ca7..a1f43bc1daeb4586379ed2298b722e88b31d7926 100644 --- a/tests/manual/trk/trklauncher.pro +++ b/tests/manual/trk/trklauncher.pro @@ -1,11 +1,8 @@ TEMPLATE = app -QT = core network +QT = core \ + network QT -= gui - +include($$PWD/trklauncher.pri) DEFINES += DEBUG=0 win32:CONFIG += console -win32:DEFINES += USE_NATIVE - -SOURCES = launcher.cpp \ - trkutils.cpp -HEADERS = trkutils.h +SOURCES += main_launcher.cpp