diff --git a/src/plugins/qnx/blackberryapplicationrunner.cpp b/src/plugins/qnx/blackberryapplicationrunner.cpp index 7e2ed84025554ce431781ac286f26945f3a89f5e..8178f2b3afc6979ec1a535842a9bb2ad3c03c963 100644 --- a/src/plugins/qnx/blackberryapplicationrunner.cpp +++ b/src/plugins/qnx/blackberryapplicationrunner.cpp @@ -32,6 +32,7 @@ #include "blackberryapplicationrunner.h" #include "blackberrydeployconfiguration.h" +#include "blackberrydeviceconnectionmanager.h" #include "blackberryrunconfiguration.h" #include "blackberrylogprocessrunner.h" #include "qnxconstants.h" @@ -94,28 +95,17 @@ BlackBerryApplicationRunner::BlackBerryApplicationRunner(bool debugMode, BlackBe void BlackBerryApplicationRunner::start() { - QStringList args; - args << QLatin1String("-launchApp"); - if (m_debugMode) - args << QLatin1String("-debugNative"); - args << QLatin1String("-device") << m_sshParams.host; - if (!m_sshParams.password.isEmpty()) - args << QLatin1String("-password") << m_sshParams.password; - args << QDir::toNativeSeparators(m_barPackage); - - if (!m_launchProcess) { - m_launchProcess = new QProcess(this); - connect(m_launchProcess, SIGNAL(readyReadStandardError()), this, SLOT(readStandardError())); - connect(m_launchProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readStandardOutput())); - connect(m_launchProcess, SIGNAL(finished(int,QProcess::ExitStatus)), - this, SLOT(startFinished(int,QProcess::ExitStatus))); - - m_launchProcess->setEnvironment(m_environment.toStringList()); + if (!BlackBerryDeviceConnectionManager::instance()->isConnected(m_device->id())) { + connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceConnected()), + this, SLOT(launchApplication())); + connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceDisconnected(Core::Id)), + this, SLOT(disconnectFromDeviceSignals(Core::Id))); + connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(connectionOutput(Core::Id,QString)), + this, SLOT(displayConnectionOutput(Core::Id,QString))); + BlackBerryDeviceConnectionManager::instance()->connectDevice(m_device->id()); + } else { + launchApplication(); } - - m_launchProcess->start(m_deployCmd, args); - m_runningStateTimer->start(); - m_running = true; } void BlackBerryApplicationRunner::startLogProcessRunner() @@ -130,6 +120,17 @@ void BlackBerryApplicationRunner::startLogProcessRunner() m_logProcessRunner->start(); } +void BlackBerryApplicationRunner::displayConnectionOutput(Core::Id deviceId, const QString &msg) +{ + if (deviceId != m_device->id()) + return; + + if (msg.contains(QLatin1String("Info:"))) + emit output(msg, Utils::StdOutFormat); + else if (msg.contains(QLatin1String("Error:"))) + emit output(msg, Utils::StdErrFormat); +} + void BlackBerryApplicationRunner::startFinished(int exitCode, QProcess::ExitStatus exitStatus) { if (exitCode == 0 && exitStatus == QProcess::NormalExit && m_pid > -1) { @@ -214,6 +215,18 @@ void BlackBerryApplicationRunner::readStandardError() } } +void BlackBerryApplicationRunner::disconnectFromDeviceSignals(Core::Id deviceId) +{ + if (m_device->id() == deviceId) { + disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceConnected()), + this, SLOT(launchApplication())); + disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceDisconnected(Core::Id)), + this, SLOT(disconnectFromDeviceSignals(Core::Id))); + disconnect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(connectionOutput(Core::Id,QString)), + this, SLOT(displayConnectionOutput(Core::Id,QString))); + } +} + void BlackBerryApplicationRunner::setPid(qint64 pid) { m_pid = pid; @@ -224,6 +237,37 @@ void BlackBerryApplicationRunner::setApplicationId(const QString &applicationId) m_appId = applicationId; } +void BlackBerryApplicationRunner::launchApplication() +{ + // If original device connection fails before launching, this method maybe triggered + // if any other device is connected(?) + if (!BlackBerryDeviceConnectionManager::instance()->isConnected(m_device->id())) + return; + + QStringList args; + args << QLatin1String("-launchApp"); + if (m_debugMode) + args << QLatin1String("-debugNative"); + args << QLatin1String("-device") << m_sshParams.host; + if (!m_sshParams.password.isEmpty()) + args << QLatin1String("-password") << m_sshParams.password; + args << QDir::toNativeSeparators(m_barPackage); + + if (!m_launchProcess) { + m_launchProcess = new QProcess(this); + connect(m_launchProcess, SIGNAL(readyReadStandardError()), this, SLOT(readStandardError())); + connect(m_launchProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(readStandardOutput())); + connect(m_launchProcess, SIGNAL(finished(int,QProcess::ExitStatus)), + this, SLOT(startFinished(int,QProcess::ExitStatus))); + + m_launchProcess->setEnvironment(m_environment.toStringList()); + } + + m_launchProcess->start(m_deployCmd, args); + m_runningStateTimer->start(); + m_running = true; +} + void BlackBerryApplicationRunner::startRunningStateTimer() { if (m_running) diff --git a/src/plugins/qnx/blackberryapplicationrunner.h b/src/plugins/qnx/blackberryapplicationrunner.h index 9f257066d4fe5931d049c96b04c608089fdb5006..3ba06a4785c537646de00effc726b7d8cf9e394b 100644 --- a/src/plugins/qnx/blackberryapplicationrunner.h +++ b/src/plugins/qnx/blackberryapplicationrunner.h @@ -82,6 +82,7 @@ private slots: void readStandardOutput(); void readStandardError(); + void disconnectFromDeviceSignals(Core::Id deviceId); void startRunningStateTimer(); void determineRunningState(); void readRunningStateStandardOutput(); @@ -89,8 +90,11 @@ private slots: void setPid(qint64 pid); void setApplicationId(const QString &applicationId); + void launchApplication(); void startLogProcessRunner(); + void displayConnectionOutput(Core::Id deviceId, const QString &output); + private: void reset(); diff --git a/src/plugins/qnx/blackberrydebugsupport.cpp b/src/plugins/qnx/blackberrydebugsupport.cpp index e0ae83c181e43477857c2dce00841372f9acd74f..cbd48c5b4f2df2bba02f5727e6992e43a6ce7afc 100644 --- a/src/plugins/qnx/blackberrydebugsupport.cpp +++ b/src/plugins/qnx/blackberrydebugsupport.cpp @@ -51,8 +51,8 @@ BlackBerryDebugSupport::BlackBerryDebugSupport(BlackBerryRunConfiguration *runCo this, SLOT(handleDebuggerStateChanged(Debugger::DebuggerState))); connect(m_runner, SIGNAL(started()), this, SLOT(handleStarted())); - connect(m_runner, SIGNAL(started()), m_runner, SLOT(checkSlog2Info())); connect(m_runner, SIGNAL(startFailed(QString)), this, SLOT(handleStartFailed(QString))); + connect(m_runner, SIGNAL(started()), m_runner, SLOT(checkSlog2Info())); connect(m_runner, SIGNAL(output(QString,Utils::OutputFormat)), this, SLOT(handleApplicationOutput(QString,Utils::OutputFormat))); diff --git a/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp b/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp index fa549d70db15312f56bb6a559a0612de242adc1e..ad0c308295ba518b07141f46d1ad714326373fb3 100644 --- a/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp +++ b/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp @@ -278,9 +278,11 @@ void BlackBerryDeviceConnectionManager::handleDeviceDisconnected() QTC_ASSERT(connection, return); QList<Core::Id> disconnectedDevices = m_connections.values(connection); - foreach (Core::Id id, disconnectedDevices) + foreach (Core::Id id, disconnectedDevices) { ProjectExplorer::DeviceManager::instance()->setDeviceState(id, ProjectExplorer::IDevice::DeviceDisconnected); + emit deviceDisconnected(id); + } } void BlackBerryDeviceConnectionManager::handleDeviceAboutToConnect() diff --git a/src/plugins/qnx/blackberrydeviceconnectionmanager.h b/src/plugins/qnx/blackberrydeviceconnectionmanager.h index a211f505e98fde87e0b99764159103a1b908738f..b9a5e10909dd7bf6ba482d061e67f30a19840592 100644 --- a/src/plugins/qnx/blackberrydeviceconnectionmanager.h +++ b/src/plugins/qnx/blackberrydeviceconnectionmanager.h @@ -69,6 +69,7 @@ signals: void connectionOutput(Core::Id deviceId, const QString &output); void deviceAboutToConnect(Core::Id deviceId); void deviceConnected(); + void deviceDisconnected(Core::Id deviceId); public slots: void connectDevice(Core::Id deviceId); diff --git a/src/plugins/qnx/blackberryruncontrol.cpp b/src/plugins/qnx/blackberryruncontrol.cpp index f372452bc7027fe22d2baf18cb5633ff65489f21..564329fa57355862b56d3525fa163385faed89f0 100644 --- a/src/plugins/qnx/blackberryruncontrol.cpp +++ b/src/plugins/qnx/blackberryruncontrol.cpp @@ -34,8 +34,6 @@ #include "blackberryrunconfiguration.h" #include "blackberrydeviceconnectionmanager.h" -#include <projectexplorer/target.h> - #include <QIcon> #include <QTimer> @@ -45,7 +43,6 @@ using namespace Qnx::Internal; BlackBerryRunControl::BlackBerryRunControl(BlackBerryRunConfiguration *runConfiguration) : ProjectExplorer::RunControl(runConfiguration, ProjectExplorer::NormalRunMode) { - m_device = BlackBerryDeviceConfiguration::device(runConfiguration->target()->kit()); m_runner = new BlackBerryApplicationRunner(false, runConfiguration, this); connect(m_runner, SIGNAL(started()), this, SIGNAL(started())); @@ -57,7 +54,7 @@ BlackBerryRunControl::BlackBerryRunControl(BlackBerryRunConfiguration *runConfig void BlackBerryRunControl::start() { - checkDeviceConnection(); + m_runner->start(); } ProjectExplorer::RunControl::StopResult BlackBerryRunControl::stop() @@ -79,32 +76,3 @@ void BlackBerryRunControl::handleStartFailed(const QString &message) { appendMessage(message, Utils::StdErrFormat); } - -void BlackBerryRunControl::handleDeviceConnected() -{ - m_runner->start(); -} - -void BlackBerryRunControl::displayConnectionOutput(Core::Id deviceId, const QString &output) -{ - if (deviceId != m_device->id()) - return; - - if (output.contains(QLatin1String("Info:"))) - appendMessage(output, Utils::StdOutFormat); - else if (output.contains(QLatin1String("Error:"))) - appendMessage(output, Utils::StdErrFormat); -} - -void BlackBerryRunControl::checkDeviceConnection() -{ - if (!BlackBerryDeviceConnectionManager::instance()->isConnected(m_device->id())) { - connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(deviceConnected()), - this, SLOT(handleDeviceConnected())); - connect(BlackBerryDeviceConnectionManager::instance(), SIGNAL(connectionOutput(Core::Id,QString)), - this, SLOT(displayConnectionOutput(Core::Id,QString))); - BlackBerryDeviceConnectionManager::instance()->connectDevice(m_device->id()); - } else { - m_runner->start(); - } -} diff --git a/src/plugins/qnx/blackberryruncontrol.h b/src/plugins/qnx/blackberryruncontrol.h index 787add054b157100aff8702e3068e25dbcfd548f..ab061407d008e6c29796a5db938726a098f403ad 100644 --- a/src/plugins/qnx/blackberryruncontrol.h +++ b/src/plugins/qnx/blackberryruncontrol.h @@ -32,8 +32,6 @@ #ifndef QNX_INTERNAL_BLACKBERRYRUNCONTROL_H #define QNX_INTERNAL_BLACKBERRYRUNCONTROL_H -#include "blackberrydeviceconfiguration.h" - #include <projectexplorer/runconfiguration.h> namespace QmakeProjectManager { @@ -60,13 +58,9 @@ public: private slots: void handleStartFailed(const QString &message); - void handleDeviceConnected(); - void displayConnectionOutput(Core::Id deviceId, const QString &output); - void checkDeviceConnection(); private: BlackBerryApplicationRunner *m_runner; - BlackBerryDeviceConfiguration::ConstPtr m_device; }; } // namespace Internal