summaryrefslogtreecommitdiff
path: root/src/plugins/baremetal/baremetaldebugsupport.h
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2014-12-20 19:10:02 +0000
committerhjk <hjk@theqtcompany.com>2015-01-06 15:04:47 +0100
commit165f008dce6b3129b93daf4d7eb314ea7885f769 (patch)
treef22fea9ffb5685a58f80ae13e66712135758210d /src/plugins/baremetal/baremetaldebugsupport.h
parent18aa49e7c2296da46e6070058b600434c68211ae (diff)
downloadqt-creator-165f008dce6b3129b93daf4d7eb314ea7885f769.tar.gz
BareMetal: Allow to manage configurations of HW GDB servers
The user has only one possibility to setup of the remote GDB server when a new device is created (or to modify it for existing device). It is possible only in the host/port fields for connection to the GDB server. It is a little inconvenient for the user. If the user wants to use other configuration of the GDB server, then need every time to edit the current configuration. Improving this it is introduction a new concept with a new entity named as "GDB server provider". Now to the device debugging purpose the user can choose any of the GDB provider from the list (by analogy with toolchain and so on). Each configuration of GDB provider is created by the user manually on the new "GDB Server Provider" options page. This can be made before or after creation of device. A GDB server provider can work in three startup modes (depends on implementation of concrete provider): 1) NoStartup mode. This means that we do not want to startup a provider, we just trying to connect to the already started GDB provider server. This mode uses the TCP/IP connection with manually specifying of remote host and port. 2) StartupOnNetwork mode. This means that we want to launch of the GDB provider automatically before connect to it in process of remote debugging. This mode also uses the TCP/IP protocol. In addition to it, a GDB provider can has additional options which are contains a paths to provider executable file, to configuration files and so on (it is depends on concrete provider implementation). This mode (with NoStartup) covers about 90% of usecase, and is supported by most set of the GDB server providers. 3) StartupOnPipe mode. This is similar to StartupOnNetwork mode and we also automatically starts the GDB server provider before debugging. But in this case is used the Pipe mode instead of TCP/IP. Not each of the GDB provider can support debugging via pipes. This patch has concrete implementations for a following set of the GDB server providers: * "Default" provider which supports only the NoStartup mode. * "Open On-Chip Debugger" (http://openocd.sourceforge.net/) provider which supports all modes. * "STLinkUtil" (https://github.com/texane/stlink) provider which supports NoStartup and StartupOnNetwork modes. Tested on Windows and Linux with: * target HW: ARM Stm32F4Discovery board with HW debugger STLink-v2 * provider: OpenOCD v0.8.0 (tested on Windows and Linux) * provider: STLink-Util (tested on Linux only) * toolchain: ARM GCC v4.9.2 * debugger: GDB v7.8.1 (with Python support) * QtCreator with QBS project Task-number: QTCREATORBUG-13686 Change-Id: I59c775d91b0a4227d931188879850c536290e1ba Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com> Reviewed-by: hjk <hjk@theqtcompany.com>
Diffstat (limited to 'src/plugins/baremetal/baremetaldebugsupport.h')
-rw-r--r--src/plugins/baremetal/baremetaldebugsupport.h91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/plugins/baremetal/baremetaldebugsupport.h b/src/plugins/baremetal/baremetaldebugsupport.h
new file mode 100644
index 0000000000..160987a077
--- /dev/null
+++ b/src/plugins/baremetal/baremetaldebugsupport.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Denis Shienkov <denis.shienkov@gmail.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://www.qt.io/licensing. For further information
+** use the contact form at http://www.qt.io/contact-us.
+**
+** 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 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#ifndef BAREMETALDEBUGSUPPORT_H
+#define BAREMETALDEBUGSUPPORT_H
+
+#include <QObject>
+#include <QPointer>
+
+#include <projectexplorer/devicesupport/idevice.h>
+
+namespace Debugger { class DebuggerRunControl; }
+
+namespace ProjectExplorer {
+class DeviceApplicationRunner;
+class IDevice;
+}
+
+namespace BareMetal {
+namespace Internal {
+
+class GdbServerProvider;
+class BareMetalRunConfiguration;
+
+class BareMetalDebugSupport : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit BareMetalDebugSupport(const ProjectExplorer::IDevice::ConstPtr device,
+ Debugger::DebuggerRunControl *runControl);
+ ~BareMetalDebugSupport();
+
+private slots:
+ void remoteSetupRequested();
+ void debuggingFinished();
+ void remoteOutputMessage(const QByteArray &output);
+ void remoteErrorOutputMessage(const QByteArray &output);
+ void remoteProcessStarted();
+ void appRunnerFinished(bool success);
+ void progressReport(const QString &progressOutput);
+ void appRunnerError(const QString &error);
+
+private:
+ enum State { Inactive, StartingRunner, Running };
+
+ void adapterSetupDone();
+ void adapterSetupFailed(const QString &error);
+
+ void startExecution();
+ void setFinished();
+ void reset();
+ void showMessage(const QString &msg, int channel);
+
+ QPointer<ProjectExplorer::DeviceApplicationRunner> m_appRunner;
+ const QPointer<Debugger::DebuggerRunControl> m_runControl;
+ const ProjectExplorer::IDevice::ConstPtr m_device;
+ BareMetalDebugSupport::State m_state;
+};
+
+} // namespace Internal
+} // namespace BareMetal
+
+#endif // BAREMETALDEBUGSUPPORT_H