forked from qt-creator/qt-creator
BareMetal: Update device address when provider is changed
Change-Id: Id020328797c4ec9a739cbf5844f9c4a9acf363ff Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com> Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
committed by
Orgad Shaneh
parent
24a922cb28
commit
c82c742d8d
@@ -59,6 +59,12 @@ BareMetalDevice::Ptr BareMetalDevice::create(const BareMetalDevice &other)
|
||||
return Ptr(new BareMetalDevice(other));
|
||||
}
|
||||
|
||||
BareMetalDevice::~BareMetalDevice()
|
||||
{
|
||||
if (GdbServerProvider *provider = GdbServerProviderManager::findProvider(m_gdbServerProviderId))
|
||||
provider->unregisterDevice(this);
|
||||
}
|
||||
|
||||
QString BareMetalDevice::gdbServerProviderId() const
|
||||
{
|
||||
return m_gdbServerProviderId;
|
||||
@@ -66,8 +72,26 @@ QString BareMetalDevice::gdbServerProviderId() const
|
||||
|
||||
void BareMetalDevice::setGdbServerProviderId(const QString &id)
|
||||
{
|
||||
if (id == m_gdbServerProviderId)
|
||||
return;
|
||||
if (GdbServerProvider *currentProvider = GdbServerProviderManager::findProvider(m_gdbServerProviderId))
|
||||
currentProvider->unregisterDevice(this);
|
||||
m_gdbServerProviderId = id;
|
||||
GdbServerProvider *provider = GdbServerProviderManager::findProvider(id);
|
||||
if (GdbServerProvider *provider = GdbServerProviderManager::findProvider(id)) {
|
||||
setChannelByServerProvider(provider);
|
||||
provider->registerDevice(this);
|
||||
}
|
||||
}
|
||||
|
||||
void BareMetalDevice::providerUpdated(GdbServerProvider *provider)
|
||||
{
|
||||
GdbServerProvider *myProvider = GdbServerProviderManager::findProvider(m_gdbServerProviderId);
|
||||
if (provider == myProvider)
|
||||
setChannelByServerProvider(provider);
|
||||
}
|
||||
|
||||
void BareMetalDevice::setChannelByServerProvider(GdbServerProvider *provider)
|
||||
{
|
||||
QTC_ASSERT(provider, return);
|
||||
const QString channel = provider->channel();
|
||||
const int colon = channel.indexOf(QLatin1Char(':'));
|
||||
|
@@ -31,6 +31,8 @@
|
||||
namespace BareMetal {
|
||||
namespace Internal {
|
||||
|
||||
class GdbServerProvider;
|
||||
|
||||
class BareMetalDevice : public ProjectExplorer::IDevice
|
||||
{
|
||||
public:
|
||||
@@ -42,6 +44,7 @@ public:
|
||||
Origin origin = ManuallyAdded, Core::Id id = Core::Id());
|
||||
static Ptr create(const BareMetalDevice &other);
|
||||
|
||||
~BareMetalDevice();
|
||||
QString displayType() const override;
|
||||
ProjectExplorer::IDeviceWidget *createWidget() override;
|
||||
QList<Core::Id> actionIds() const override;
|
||||
@@ -56,6 +59,7 @@ public:
|
||||
|
||||
QString gdbServerProviderId() const;
|
||||
void setGdbServerProviderId(const QString &id);
|
||||
void providerUpdated(GdbServerProvider *provider);
|
||||
|
||||
virtual void fromMap(const QVariantMap &map) override;
|
||||
virtual QVariantMap toMap() const override;
|
||||
@@ -67,6 +71,7 @@ protected:
|
||||
BareMetalDevice(const BareMetalDevice &other);
|
||||
|
||||
private:
|
||||
void setChannelByServerProvider(GdbServerProvider *provider);
|
||||
BareMetalDevice &operator=(const BareMetalDevice &);
|
||||
QString m_gdbServerProviderId;
|
||||
};
|
||||
|
@@ -25,7 +25,9 @@
|
||||
|
||||
#include "gdbserverprovider.h"
|
||||
#include "gdbserverprovidermanager.h"
|
||||
#include "baremetaldevice.h"
|
||||
|
||||
#include <utils/asconst.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/environment.h>
|
||||
|
||||
@@ -74,6 +76,9 @@ GdbServerProvider::GdbServerProvider(const GdbServerProvider &other)
|
||||
|
||||
GdbServerProvider::~GdbServerProvider()
|
||||
{
|
||||
const QSet<BareMetalDevice *> devices = m_devices;
|
||||
for (BareMetalDevice *device : devices)
|
||||
device->setGdbServerProviderId(QString());
|
||||
}
|
||||
|
||||
QString GdbServerProvider::displayName() const
|
||||
@@ -173,9 +178,21 @@ bool GdbServerProvider::canStartupMode(StartupMode m) const
|
||||
return m == NoStartup;
|
||||
}
|
||||
|
||||
void GdbServerProvider::registerDevice(BareMetalDevice *device)
|
||||
{
|
||||
m_devices.insert(device);
|
||||
}
|
||||
|
||||
void GdbServerProvider::unregisterDevice(BareMetalDevice *device)
|
||||
{
|
||||
m_devices.remove(device);
|
||||
}
|
||||
|
||||
void GdbServerProvider::providerUpdated()
|
||||
{
|
||||
GdbServerProviderManager::notifyAboutUpdate(this);
|
||||
for (BareMetalDevice *device : Utils::asConst(m_devices))
|
||||
device->providerUpdated(this);
|
||||
}
|
||||
|
||||
bool GdbServerProvider::fromMap(const QVariantMap &data)
|
||||
|
@@ -26,8 +26,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
#include <QSet>
|
||||
#include <QVariantMap>
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include <utils/fileutils.h>
|
||||
@@ -44,6 +44,7 @@ QT_END_NAMESPACE
|
||||
namespace BareMetal {
|
||||
namespace Internal {
|
||||
|
||||
class BareMetalDevice;
|
||||
class GdbServerProviderConfigWidget;
|
||||
class GdbServerProviderManager;
|
||||
|
||||
@@ -85,6 +86,9 @@ public:
|
||||
virtual bool isValid() const;
|
||||
virtual bool canStartupMode(StartupMode) const;
|
||||
|
||||
void registerDevice(BareMetalDevice *);
|
||||
void unregisterDevice(BareMetalDevice *);
|
||||
|
||||
protected:
|
||||
explicit GdbServerProvider(const QString &id);
|
||||
explicit GdbServerProvider(const GdbServerProvider &);
|
||||
@@ -103,6 +107,7 @@ private:
|
||||
StartupMode m_startupMode;
|
||||
QString m_initCommands;
|
||||
QString m_resetCommands;
|
||||
QSet<BareMetalDevice *> m_devices;
|
||||
|
||||
friend class GdbServerProviderConfigWidget;
|
||||
};
|
||||
|
Reference in New Issue
Block a user