bool QnxRunControlFactory::canRun(RunConfiguration *runConfiguration, Core::Id mode) const { if (mode != ProjectExplorer::Constants::NORMAL_RUN_MODE && mode != ProjectExplorer::Constants::DEBUG_RUN_MODE && mode != ProjectExplorer::Constants::QML_PROFILER_RUN_MODE) { return false; } if (!runConfiguration->isEnabled() || !runConfiguration->id().name().startsWith(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX)) { return false; } const QnxDeviceConfiguration::ConstPtr dev = DeviceKitInformation::device(runConfiguration->target()->kit()) .dynamicCast<const QnxDeviceConfiguration>(); if (dev.isNull()) return false; if (mode == ProjectExplorer::Constants::DEBUG_RUN_MODE || mode == ProjectExplorer::Constants::QML_PROFILER_RUN_MODE) { auto aspect = runConfiguration->extraAspect<DebuggerRunConfigurationAspect>(); int portsUsed = aspect ? aspect->portsUsedByDebugger() : 0; return portsUsed <= dev->freePorts().count(); } return true; }
QnxAnalyzeSupport::QnxAnalyzeSupport(QnxRunConfiguration *runConfig, Analyzer::AnalyzerRunControl *runControl) : QnxAbstractRunSupport(runConfig, runControl) , m_runControl(runControl) , m_qmlPort(-1) { const DeviceApplicationRunner *runner = appRunner(); connect(runner, SIGNAL(reportError(QString)), SLOT(handleError(QString))); connect(runner, SIGNAL(remoteProcessStarted()), SLOT(handleRemoteProcessStarted())); connect(runner, SIGNAL(finished(bool)), SLOT(handleRemoteProcessFinished(bool))); connect(runner, SIGNAL(reportProgress(QString)), SLOT(handleProgressReport(QString))); connect(runner, SIGNAL(remoteStdout(QByteArray)), SLOT(handleRemoteOutput(QByteArray))); connect(runner, SIGNAL(remoteStderr(QByteArray)), SLOT(handleRemoteOutput(QByteArray))); connect(m_runControl, SIGNAL(starting(const Analyzer::AnalyzerRunControl*)), SLOT(handleAdapterSetupRequested())); connect(&m_outputParser, SIGNAL(waitingForConnectionOnPort(quint16)), SLOT(remoteIsRunning())); ProjectExplorer::IDevice::ConstPtr dev = ProjectExplorer::DeviceKitInformation::device(runConfig->target()->kit()); QnxDeviceConfiguration::ConstPtr qnxDevice = dev.dynamicCast<const QnxDeviceConfiguration>(); const QString applicationId = QFileInfo(runConfig->remoteExecutableFilePath()).fileName(); m_slog2Info = new Slog2InfoRunner(applicationId, qnxDevice, this); connect(m_slog2Info, SIGNAL(output(QString,Utils::OutputFormat)), this, SLOT(showMessage(QString,Utils::OutputFormat))); connect(runner, SIGNAL(remoteProcessStarted()), m_slog2Info, SLOT(start())); if (qnxDevice->qnxVersion() > 0x060500) connect(m_slog2Info, SIGNAL(commandMissing()), this, SLOT(printMissingWarning())); }
QnxDebugSupport::QnxDebugSupport(QnxRunConfiguration *runConfig, Debugger::DebuggerRunControl *runControl) : QnxAbstractRunSupport(runConfig, runControl) , m_runControl(runControl) , m_pdebugPort(-1) , m_qmlPort(-1) , m_useCppDebugger(runConfig->extraAspect<Debugger::DebuggerRunConfigurationAspect>()->useCppDebugger()) , m_useQmlDebugger(runConfig->extraAspect<Debugger::DebuggerRunConfigurationAspect>()->useQmlDebugger()) { const DeviceApplicationRunner *runner = appRunner(); connect(runner, SIGNAL(reportError(QString)), SLOT(handleError(QString))); connect(runner, SIGNAL(remoteProcessStarted()), SLOT(handleRemoteProcessStarted())); connect(runner, SIGNAL(finished(bool)), SLOT(handleRemoteProcessFinished(bool))); connect(runner, SIGNAL(reportProgress(QString)), SLOT(handleProgressReport(QString))); connect(runner, SIGNAL(remoteStdout(QByteArray)), SLOT(handleRemoteOutput(QByteArray))); connect(runner, SIGNAL(remoteStderr(QByteArray)), SLOT(handleRemoteOutput(QByteArray))); connect(m_runControl, &Debugger::DebuggerRunControl::requestRemoteSetup, this, &QnxDebugSupport::handleAdapterSetupRequested); const QString applicationId = Utils::FileName::fromString(runConfig->remoteExecutableFilePath()).fileName(); IDevice::ConstPtr dev = DeviceKitInformation::device(runConfig->target()->kit()); QnxDeviceConfiguration::ConstPtr qnxDevice = dev.dynamicCast<const QnxDeviceConfiguration>(); m_slog2Info = new Slog2InfoRunner(applicationId, qnxDevice, this); connect(m_slog2Info, SIGNAL(output(QString,Utils::OutputFormat)), this, SLOT(handleApplicationOutput(QString,Utils::OutputFormat))); connect(runner, SIGNAL(remoteProcessStarted()), m_slog2Info, SLOT(start())); if (qnxDevice->qnxVersion() > 0x060500) connect(m_slog2Info, SIGNAL(commandMissing()), this, SLOT(printMissingWarning())); }
QnxRunControl::QnxRunControl(RunConfiguration *runConfig) : RemoteLinuxRunControl(runConfig) , m_slog2Info(0) { IDevice::ConstPtr dev = DeviceKitInformation::device(runConfig->target()->kit()); QnxDeviceConfiguration::ConstPtr qnxDevice = dev.dynamicCast<const QnxDeviceConfiguration>(); QnxRunConfiguration *qnxRunConfig = qobject_cast<QnxRunConfiguration *>(runConfig); QTC_CHECK(qnxRunConfig); const QString applicationId = FileName::fromString(qnxRunConfig->remoteExecutableFilePath()).fileName(); m_slog2Info = new Slog2InfoRunner(applicationId, qnxDevice, this); connect(m_slog2Info, &Slog2InfoRunner::output, this, static_cast<void(RunControl::*)(const QString &, OutputFormat)>(&RunControl::appendMessage)); connect(this, &RunControl::started, m_slog2Info, &Slog2InfoRunner::start); if (qnxDevice->qnxVersion() > 0x060500) connect(m_slog2Info, &Slog2InfoRunner::commandMissing, this, &QnxRunControl::printMissingWarning); }
bool QnxRunControlFactory::canRun(RunConfiguration *runConfiguration, RunMode mode) const { if (mode != NormalRunMode && mode != DebugRunMode && mode != QmlProfilerRunMode) return false; if (!runConfiguration->isEnabled() || !runConfiguration->id().name().startsWith(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX)) { return false; } const QnxRunConfiguration * const rc = qobject_cast<QnxRunConfiguration *>(runConfiguration); const QnxDeviceConfiguration::ConstPtr dev = DeviceKitInformation::device(runConfiguration->target()->kit()) .dynamicCast<const QnxDeviceConfiguration>(); if (dev.isNull()) return false; if (mode == DebugRunMode || mode == QmlProfilerRunMode) return rc->portsUsedByDebuggers() <= dev->freePorts().count(); return true; }