Replaced targetProgramCounterUpdated signal with new ReadProgramCounter Insight worker task.

Also some other bits of tidying
This commit is contained in:
Nav
2022-09-06 00:51:48 +01:00
parent 8146a442f6
commit 0397cb9aba
11 changed files with 110 additions and 101 deletions

View File

@@ -27,6 +27,7 @@ target_sources(
${CMAKE_CURRENT_SOURCE_DIR}/InsightWorker/Tasks/ReadTargetMemory.cpp ${CMAKE_CURRENT_SOURCE_DIR}/InsightWorker/Tasks/ReadTargetMemory.cpp
${CMAKE_CURRENT_SOURCE_DIR}/InsightWorker/Tasks/ReadStackPointer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/InsightWorker/Tasks/ReadStackPointer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/InsightWorker/Tasks/QueryLatestVersionNumber.cpp ${CMAKE_CURRENT_SOURCE_DIR}/InsightWorker/Tasks/QueryLatestVersionNumber.cpp
${CMAKE_CURRENT_SOURCE_DIR}/InsightWorker/Tasks/ReadProgramCounter.cpp
# Error dialogue window # Error dialogue window
${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/ErrorDialogue/ErrorDialogue.cpp ${CMAKE_CURRENT_SOURCE_DIR}/UserInterfaces/InsightWindow/Widgets/ErrorDialogue/ErrorDialogue.cpp

View File

@@ -41,10 +41,6 @@ namespace Bloom
std::bind(&InsightWorker::onTargetResetEvent, this, std::placeholders::_1) std::bind(&InsightWorker::onTargetResetEvent, this, std::placeholders::_1)
); );
this->eventListener->registerCallbackForEventType<Events::RegistersWrittenToTarget>(
std::bind(&InsightWorker::onTargetRegistersWrittenEvent, this, std::placeholders::_1)
);
this->eventListener->registerCallbackForEventType<Events::ProgrammingModeEnabled>( this->eventListener->registerCallbackForEventType<Events::ProgrammingModeEnabled>(
std::bind(&InsightWorker::onProgrammingModeEnabledEvent, this, std::placeholders::_1) std::bind(&InsightWorker::onProgrammingModeEnabledEvent, this, std::placeholders::_1)
); );
@@ -92,7 +88,6 @@ namespace Bloom
this->lastTargetState = TargetState::STOPPED; this->lastTargetState = TargetState::STOPPED;
emit this->targetStateUpdated(TargetState::STOPPED); emit this->targetStateUpdated(TargetState::STOPPED);
emit this->targetProgramCounterUpdated(event.programCounter);
} }
void InsightWorker::onTargetResumedEvent(const Events::TargetExecutionResumed& event) { void InsightWorker::onTargetResumedEvent(const Events::TargetExecutionResumed& event) {
@@ -113,30 +108,13 @@ namespace Bloom
emit this->targetStateUpdated(TargetState::STOPPED); emit this->targetStateUpdated(TargetState::STOPPED);
} }
emit this->targetProgramCounterUpdated(this->targetControllerConsole.getProgramCounter()); emit this->targetReset();
} catch (const Exceptions::Exception& exception) { } catch (const Exceptions::Exception& exception) {
Logger::debug("Error handling TargetReset event - " + exception.getMessage()); Logger::debug("Error handling TargetReset event - " + exception.getMessage());
} }
} }
void InsightWorker::onTargetRegistersWrittenEvent(const Events::RegistersWrittenToTarget& event) {
emit this->targetRegistersWritten(event.registers, event.createdTimestamp);
for (const auto& reg : event.registers) {
if (reg.descriptor.type == Targets::TargetRegisterType::PROGRAM_COUNTER) {
try {
emit this->targetProgramCounterUpdated(this->targetControllerConsole.getProgramCounter());
} catch (const Exceptions::Exception& exception) {
Logger::debug("Error reading program counter - " + exception.getMessage());
}
break;
}
}
}
void InsightWorker::onTargetControllerStateChangedEvent(const Events::TargetControllerStateChanged& event) { void InsightWorker::onTargetControllerStateChangedEvent(const Events::TargetControllerStateChanged& event) {
using TargetController::TargetControllerState; using TargetController::TargetControllerState;

View File

@@ -38,7 +38,7 @@ namespace Bloom
void ready(); void ready();
void taskQueued(); void taskQueued();
void targetStateUpdated(Bloom::Targets::TargetState newState); void targetStateUpdated(Bloom::Targets::TargetState newState);
void targetProgramCounterUpdated(quint32 programCounter); void targetReset();
void targetControllerSuspended(); void targetControllerSuspended();
void targetControllerResumed(const Bloom::Targets::TargetDescriptor& targetDescriptor); void targetControllerResumed(const Bloom::Targets::TargetDescriptor& targetDescriptor);
void targetRegistersWritten(const Bloom::Targets::TargetRegisters& targetRegisters, const QDateTime& timestamp); void targetRegistersWritten(const Bloom::Targets::TargetRegisters& targetRegisters, const QDateTime& timestamp);
@@ -65,7 +65,6 @@ namespace Bloom
void onTargetStoppedEvent(const Events::TargetExecutionStopped& event); void onTargetStoppedEvent(const Events::TargetExecutionStopped& event);
void onTargetResumedEvent(const Events::TargetExecutionResumed& event); void onTargetResumedEvent(const Events::TargetExecutionResumed& event);
void onTargetResetEvent(const Events::TargetReset& event); void onTargetResetEvent(const Events::TargetReset& event);
void onTargetRegistersWrittenEvent(const Events::RegistersWrittenToTarget& event);
void onTargetControllerStateChangedEvent(const Events::TargetControllerStateChanged& event); void onTargetControllerStateChangedEvent(const Events::TargetControllerStateChanged& event);
void onProgrammingModeEnabledEvent(const Events::ProgrammingModeEnabled& event); void onProgrammingModeEnabledEvent(const Events::ProgrammingModeEnabled& event);
void onProgrammingModeDisabledEvent(const Events::ProgrammingModeDisabled& event); void onProgrammingModeDisabledEvent(const Events::ProgrammingModeDisabled& event);

View File

@@ -0,0 +1,10 @@
#include "ReadProgramCounter.hpp"
namespace Bloom
{
using TargetController::TargetControllerConsole;
void ReadProgramCounter::run(TargetControllerConsole& targetControllerConsole) {
emit this->programCounterRead(targetControllerConsole.getProgramCounter());
}
}

View File

@@ -0,0 +1,20 @@
#pragma once
#include "InsightWorkerTask.hpp"
namespace Bloom
{
class ReadProgramCounter: public InsightWorkerTask
{
Q_OBJECT
public:
ReadProgramCounter() = default;
signals:
void programCounterRead(std::uint32_t programCounter);
protected:
void run(TargetController::TargetControllerConsole& targetControllerConsole) override;
};
}

View File

@@ -15,6 +15,8 @@
#include "src/Helpers/Paths.hpp" #include "src/Helpers/Paths.hpp"
#include "src/Targets/TargetDescriptor.hpp" #include "src/Targets/TargetDescriptor.hpp"
#include "src/Insight/InsightWorker/Tasks/ReadProgramCounter.hpp"
namespace Bloom namespace Bloom
{ {
using namespace Bloom::Exceptions; using namespace Bloom::Exceptions;
@@ -262,9 +264,11 @@ namespace Bloom
); );
QObject::connect( QObject::connect(
&(this->insightWorker), &(this->insightWorker),
&InsightWorker::targetProgramCounterUpdated, &InsightWorker::targetReset,
this, this,
&InsightWindow::onTargetProgramCounterUpdate [this] {
this->refreshProgramCounter();
}
); );
QObject::connect( QObject::connect(
@@ -533,11 +537,7 @@ namespace Bloom
this->targetPackageWidget->setTargetState(this->targetState); this->targetPackageWidget->setTargetState(this->targetState);
if (this->targetState == TargetState::STOPPED) { if (this->targetState == TargetState::STOPPED) {
this->targetPackageWidget->refreshPinStates([this] { this->refreshPinStates();
if (this->targetState == TargetState::STOPPED) {
this->targetPackageWidget->setDisabled(false);
}
});
} }
this->adjustPanels(); this->adjustPanels();
@@ -840,49 +840,79 @@ namespace Bloom
this->programCounterValueLabel->setText("-"); this->programCounterValueLabel->setText("-");
this->setUiDisabled(true); this->setUiDisabled(true);
if (this->targetPackageWidget != nullptr) {
this->targetPackageWidget->setDisabled(true);
}
} else if (newState == TargetState::STOPPED) { } else if (newState == TargetState::STOPPED) {
this->targetStatusLabel->setText("Stopped"); this->targetStatusLabel->setText("Stopped");
this->setUiDisabled(false); this->refresh();
} else { } else {
this->targetStatusLabel->setText("Unknown"); this->targetStatusLabel->setText("Unknown");
} }
} }
void InsightWindow::onTargetProgramCounterUpdate(quint32 programCounter) {
this->programCounterValueLabel->setText(
"0x" + QString::number(programCounter, 16).toUpper() + " (" + QString::number(programCounter) + ")"
);
}
void InsightWindow::refresh() { void InsightWindow::refresh() {
if (this->targetState != TargetState::STOPPED || this->selectedVariant == nullptr) { if (this->targetState != TargetState::STOPPED || this->selectedVariant == nullptr) {
return; return;
} }
this->setUiDisabled(true);
this->refreshIoInspectionButton->startSpin(); this->refreshIoInspectionButton->startSpin();
this->refreshIoInspectionButton->setDisabled(true);
if (this->targetPackageWidget != nullptr) { if (this->targetPackageWidget != nullptr) {
this->targetPackageWidget->setDisabled(true); this->refreshPinStates();
this->targetPackageWidget->refreshPinStates([this] {
if (this->targetState == TargetState::STOPPED) {
this->targetPackageWidget->setDisabled(false);
if (this->targetRegistersSidePane == nullptr || !this->targetRegistersSidePane->state.activated) {
this->refreshIoInspectionButton->stopSpin();
this->setUiDisabled(false);
}
}
});
} }
if (this->targetRegistersSidePane != nullptr && this->targetRegistersSidePane->state.activated) { if (this->targetRegistersSidePane != nullptr) {
this->targetRegistersSidePane->refreshRegisterValues([this] { this->targetRegistersSidePane->refreshRegisterValues();
this->refreshIoInspectionButton->stopSpin();
this->setUiDisabled(false);
});
} }
this->refreshProgramCounter([this] {
this->refreshIoInspectionButton->stopSpin();
if (this->targetState == TargetState::STOPPED) {
this->refreshIoInspectionButton->setDisabled(false);
}
});
}
void InsightWindow::refreshPinStates() {
this->targetPackageWidget->setDisabled(true);
this->targetPackageWidget->refreshPinStates([this] {
if (this->targetState == TargetState::STOPPED) {
this->targetPackageWidget->setDisabled(false);
}
});
}
void InsightWindow::refreshProgramCounter(std::optional<std::function<void(void)>> callback) {
auto* readProgramCounterTask = new ReadProgramCounter();
QObject::connect(
readProgramCounterTask,
&ReadProgramCounter::programCounterRead,
this,
[this] (std::uint32_t programCounter) {
this->programCounterValueLabel->setText(
"0x" + QString::number(programCounter, 16).toUpper() + " (" + QString::number(programCounter) + ")"
);
}
);
if (callback.has_value()) {
QObject::connect(
readProgramCounterTask,
&ReadProgramCounter::finished,
this,
callback.value()
);
}
this->insightWorker.queueTask(readProgramCounterTask);
} }
void InsightWindow::openReportIssuesUrl() { void InsightWindow::openReportIssuesUrl() {
@@ -985,6 +1015,10 @@ namespace Bloom
void InsightWindow::onRegistersPaneStateChanged() { void InsightWindow::onRegistersPaneStateChanged() {
this->targetRegistersButton->setChecked(this->targetRegistersSidePane->state.activated); this->targetRegistersButton->setChecked(this->targetRegistersSidePane->state.activated);
if (this->targetState == Targets::TargetState::STOPPED && this->targetRegistersSidePane->state.activated) {
this->targetRegistersSidePane->refreshRegisterValues();
}
} }
void InsightWindow::onRamInspectionPaneStateChanged() { void InsightWindow::onRamInspectionPaneStateChanged() {

View File

@@ -131,8 +131,9 @@ namespace Bloom
void onTargetControllerSuspended(); void onTargetControllerSuspended();
void onTargetControllerResumed(const Bloom::Targets::TargetDescriptor& targetDescriptor); void onTargetControllerResumed(const Bloom::Targets::TargetDescriptor& targetDescriptor);
void onTargetStateUpdate(Targets::TargetState newState); void onTargetStateUpdate(Targets::TargetState newState);
void onTargetProgramCounterUpdate(quint32 programCounter);
void refresh(); void refresh();
void refreshPinStates();
void refreshProgramCounter(std::optional<std::function<void(void)>> callback = std::nullopt);
void openReportIssuesUrl(); void openReportIssuesUrl();
void openGettingStartedUrl(); void openGettingStartedUrl();
void openAboutWindow(); void openAboutWindow();

View File

@@ -229,9 +229,5 @@ namespace Bloom::Widgets
void RegisterWidget::onTargetStateChange(Targets::TargetState newState) { void RegisterWidget::onTargetStateChange(Targets::TargetState newState) {
this->targetState = newState; this->targetState = newState;
if (this->targetState == Targets::TargetState::RUNNING) {
this->clearInlineValue();
}
} }
} }

View File

@@ -115,20 +115,6 @@ namespace Bloom::Widgets
itemLayout->addStretch(1); itemLayout->addStretch(1);
QObject::connect(
this,
&PaneWidget::paneActivated,
this,
&TargetRegistersPaneWidget::postActivate
);
QObject::connect(
this,
&PaneWidget::paneDeactivated,
this,
&TargetRegistersPaneWidget::postDeactivate
);
QObject::connect( QObject::connect(
&insightWorker, &insightWorker,
&InsightWorker::targetStateUpdated, &InsightWorker::targetStateUpdated,
@@ -240,26 +226,15 @@ namespace Bloom::Widgets
PaneWidget::resizeEvent(event); PaneWidget::resizeEvent(event);
} }
void TargetRegistersPaneWidget::postActivate() {
if (this->targetState == Targets::TargetState::STOPPED) {
this->refreshRegisterValues();
}
}
void TargetRegistersPaneWidget::postDeactivate() {
}
void TargetRegistersPaneWidget::onTargetStateChanged(Targets::TargetState newState) { void TargetRegistersPaneWidget::onTargetStateChanged(Targets::TargetState newState) {
if (this->targetState == newState) { if (this->targetState == newState) {
return; return;
} }
using Targets::TargetState;
this->targetState = newState; this->targetState = newState;
if (newState == TargetState::STOPPED && this->state.activated) { if (this->targetState == Targets::TargetState::RUNNING) {
this->refreshRegisterValues(); this->clearInlineRegisterValues();
} }
} }
@@ -277,4 +252,12 @@ namespace Bloom::Widgets
} }
} }
} }
void TargetRegistersPaneWidget::clearInlineRegisterValues() {
for (const auto& registerGroupWidget : this->registerGroupWidgets) {
for (auto* registerWidget : registerGroupWidget->registerWidgets) {
registerWidget->clearInlineValue();
}
}
}
} }

View File

@@ -44,9 +44,6 @@ namespace Bloom::Widgets
protected: protected:
void resizeEvent(QResizeEvent* event) override; void resizeEvent(QResizeEvent* event) override;
void postActivate();
void postDeactivate();
private: private:
const Targets::TargetDescriptor& targetDescriptor; const Targets::TargetDescriptor& targetDescriptor;
InsightWorker& insightWorker; InsightWorker& insightWorker;
@@ -70,5 +67,6 @@ namespace Bloom::Widgets
void onTargetStateChanged(Targets::TargetState newState); void onTargetStateChanged(Targets::TargetState newState);
void onRegistersRead(const Targets::TargetRegisters& registers); void onRegistersRead(const Targets::TargetRegisters& registers);
void clearInlineRegisterValues();
}; };
} }

View File

@@ -86,17 +86,6 @@ namespace Bloom::Widgets::InsightTargetWidgets
} }
this->targetState = newState; this->targetState = newState;
if (newState == TargetState::RUNNING) {
this->setDisabled(true);
} else if (newState == TargetState::STOPPED) {
this->refreshPinStates([this] {
if (this->targetState == TargetState::STOPPED) {
this->setDisabled(false);
}
});
}
} }
void TargetPackageWidget::onProgrammingModeEnabled() { void TargetPackageWidget::onProgrammingModeEnabled() {