From e662d0b57a208d764741bff0cae8f02eaaaba984 Mon Sep 17 00:00:00 2001 From: Nav Date: Sun, 24 Apr 2022 16:41:40 +0100 Subject: [PATCH] Replaced RetrieveRegistersFromTarget event with TC command --- src/EventManager/Events/Event.hpp | 2 - src/EventManager/Events/Events.hpp | 2 - .../Events/RegistersRetrievedFromTarget.hpp | 25 ------------ .../Events/RetrieveRegistersFromTarget.hpp | 28 ------------- .../Commands/CommandTypes.hpp | 1 + .../Commands/ReadTargetRegisters.hpp | 30 ++++++++++++++ .../Responses/ResponseTypes.hpp | 1 + .../Responses/TargetRegistersRead.hpp | 24 ++++++++++++ .../TargetControllerComponent.cpp | 39 +++++++------------ .../TargetControllerComponent.hpp | 12 +++--- .../TargetControllerConsole.cpp | 10 +++-- 11 files changed, 82 insertions(+), 92 deletions(-) delete mode 100644 src/EventManager/Events/RegistersRetrievedFromTarget.hpp delete mode 100644 src/EventManager/Events/RetrieveRegistersFromTarget.hpp create mode 100644 src/TargetController/Commands/ReadTargetRegisters.hpp create mode 100644 src/TargetController/Responses/TargetRegistersRead.hpp diff --git a/src/EventManager/Events/Event.hpp b/src/EventManager/Events/Event.hpp index b11f08c3..d3417678 100644 --- a/src/EventManager/Events/Event.hpp +++ b/src/EventManager/Events/Event.hpp @@ -26,8 +26,6 @@ namespace Bloom::Events SHUTDOWN_APPLICATION, DEBUG_SERVER_THREAD_STATE_CHANGED, SHUTDOWN_DEBUG_SERVER, - RETRIEVE_REGISTERS_FROM_TARGET, - REGISTERS_RETRIEVED_FROM_TARGET, WRITE_REGISTERS_TO_TARGET, REGISTERS_WRITTEN_TO_TARGET, TARGET_EXECUTION_RESUMED, diff --git a/src/EventManager/Events/Events.hpp b/src/EventManager/Events/Events.hpp index 06fdc58f..d6a24140 100644 --- a/src/EventManager/Events/Events.hpp +++ b/src/EventManager/Events/Events.hpp @@ -13,8 +13,6 @@ #include "ShutdownApplication.hpp" #include "DebugServerThreadStateChanged.hpp" #include "ShutdownDebugServer.hpp" -#include "RetrieveRegistersFromTarget.hpp" -#include "RegistersRetrievedFromTarget.hpp" #include "WriteRegistersToTarget.hpp" #include "RegistersWrittenToTarget.hpp" #include "TargetExecutionResumed.hpp" diff --git a/src/EventManager/Events/RegistersRetrievedFromTarget.hpp b/src/EventManager/Events/RegistersRetrievedFromTarget.hpp deleted file mode 100644 index 31dc92f2..00000000 --- a/src/EventManager/Events/RegistersRetrievedFromTarget.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include - -#include "Event.hpp" -#include "src/Targets/TargetRegister.hpp" - -namespace Bloom::Events -{ - class RegistersRetrievedFromTarget: public Event - { - public: - static constexpr EventType type = EventType::REGISTERS_RETRIEVED_FROM_TARGET; - static inline const std::string name = "RegistersRetrievedFromTarget"; - Targets::TargetRegisters registers; - - [[nodiscard]] EventType getType() const override { - return RegistersRetrievedFromTarget::type; - } - - [[nodiscard]] std::string getName() const override { - return RegistersRetrievedFromTarget::name; - } - }; -} diff --git a/src/EventManager/Events/RetrieveRegistersFromTarget.hpp b/src/EventManager/Events/RetrieveRegistersFromTarget.hpp deleted file mode 100644 index 9fcf142e..00000000 --- a/src/EventManager/Events/RetrieveRegistersFromTarget.hpp +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include - -#include "Event.hpp" -#include "RegistersRetrievedFromTarget.hpp" -#include "src/Targets/TargetRegister.hpp" - -namespace Bloom::Events -{ - class RetrieveRegistersFromTarget: public Event - { - public: - using TargetControllerResponseType = RegistersRetrievedFromTarget; - - static constexpr EventType type = EventType::RETRIEVE_REGISTERS_FROM_TARGET; - static inline const std::string name = "RetrieveRegistersFromTarget"; - Targets::TargetRegisterDescriptors descriptors; - - [[nodiscard]] EventType getType() const override { - return RetrieveRegistersFromTarget::type; - } - - [[nodiscard]] std::string getName() const override { - return RetrieveRegistersFromTarget::name; - } - }; -} diff --git a/src/TargetController/Commands/CommandTypes.hpp b/src/TargetController/Commands/CommandTypes.hpp index 93450d87..e091cd76 100644 --- a/src/TargetController/Commands/CommandTypes.hpp +++ b/src/TargetController/Commands/CommandTypes.hpp @@ -10,5 +10,6 @@ namespace Bloom::TargetController::Commands STOP_TARGET_EXECUTION, RESUME_TARGET_EXECUTION, RESET_TARGET, + READ_TARGET_REGISTERS, }; } diff --git a/src/TargetController/Commands/ReadTargetRegisters.hpp b/src/TargetController/Commands/ReadTargetRegisters.hpp new file mode 100644 index 00000000..b1c229d0 --- /dev/null +++ b/src/TargetController/Commands/ReadTargetRegisters.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include + +#include "Command.hpp" +#include "src/TargetController/Responses/TargetRegistersRead.hpp" + +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::TargetController::Commands +{ + class ReadTargetRegisters: public Command + { + public: + using SuccessResponseType = Responses::TargetRegistersRead; + + static constexpr CommandType type = CommandType::READ_TARGET_REGISTERS; + static inline const std::string name = "ReadTargetRegisters"; + + Targets::TargetRegisterDescriptors descriptors; + + explicit ReadTargetRegisters(const Targets::TargetRegisterDescriptors& descriptors) + : descriptors(descriptors) + {}; + + [[nodiscard]] CommandType getType() const override { + return ReadTargetRegisters::type; + } + }; +} diff --git a/src/TargetController/Responses/ResponseTypes.hpp b/src/TargetController/Responses/ResponseTypes.hpp index 8372d2b3..b2280d48 100644 --- a/src/TargetController/Responses/ResponseTypes.hpp +++ b/src/TargetController/Responses/ResponseTypes.hpp @@ -8,5 +8,6 @@ namespace Bloom::TargetController::Responses { GENERIC, ERROR, + TARGET_REGISTERS_READ, }; } diff --git a/src/TargetController/Responses/TargetRegistersRead.hpp b/src/TargetController/Responses/TargetRegistersRead.hpp new file mode 100644 index 00000000..b1359ba8 --- /dev/null +++ b/src/TargetController/Responses/TargetRegistersRead.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include "Response.hpp" + +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::TargetController::Responses +{ + class TargetRegistersRead: public Response + { + public: + static constexpr ResponseType type = ResponseType::TARGET_REGISTERS_READ; + + Targets::TargetRegisters registers; + + TargetRegistersRead(const Targets::TargetRegisters& registers) + : registers(registers) + {} + + [[nodiscard]] ResponseType getType() const override { + return TargetRegistersRead::type; + } + }; +} diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index ea7f0847..f631c052 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -25,8 +25,10 @@ namespace Bloom::TargetController using Commands::StopTargetExecution; using Commands::ResumeTargetExecution; using Commands::ResetTarget; + using Commands::ReadTargetRegisters; using Responses::Response; + using Responses::TargetRegistersRead; TargetControllerComponent::TargetControllerComponent( const ProjectConfig& projectConfig, @@ -374,11 +376,11 @@ namespace Bloom::TargetController this->deregisterCommandHandler(StopTargetExecution::type); this->deregisterCommandHandler(ResumeTargetExecution::type); this->deregisterCommandHandler(ResetTarget::type); + this->deregisterCommandHandler(ReadTargetRegisters::type); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); - this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); @@ -417,6 +419,10 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::handleResetTarget, this, std::placeholders::_1) ); + this->registerCommandHandler( + std::bind(&TargetControllerComponent::handleReadTargetRegisters, this, std::placeholders::_1) + ); + this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onDebugSessionFinishedEvent, this, std::placeholders::_1) ); @@ -429,10 +435,6 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::onStepTargetExecutionEvent, this, std::placeholders::_1) ); - this->eventListener->registerCallbackForEventType( - std::bind(&TargetControllerComponent::onReadRegistersEvent, this, std::placeholders::_1) - ); - this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onWriteRegistersEvent, this, std::placeholders::_1) ); @@ -741,7 +743,7 @@ namespace Bloom::TargetController return std::make_unique(); } - std::unique_ptr TargetControllerComponent::handleResumeTargetExecution( + std::unique_ptr TargetControllerComponent::handleResumeTargetExecution( ResumeTargetExecution& command ) { if (this->target->getState() != TargetState::RUNNING) { @@ -758,11 +760,17 @@ namespace Bloom::TargetController return std::make_unique(); } - std::unique_ptr TargetControllerComponent::handleResetTarget(ResetTarget& command) { + std::unique_ptr TargetControllerComponent::handleResetTarget(ResetTarget& command) { this->resetTarget(); return std::make_unique(); } + std::unique_ptr TargetControllerComponent::handleReadTargetRegisters( + ReadTargetRegisters& command + ) { + return std::make_unique(this->target->readRegisters(command.descriptors)); + } + void TargetControllerComponent::onStepTargetExecutionEvent(const Events::StepTargetExecution& event) { try { if (this->target->getState() != TargetState::STOPPED) { @@ -787,23 +795,6 @@ namespace Bloom::TargetController } } - void TargetControllerComponent::onReadRegistersEvent(const Events::RetrieveRegistersFromTarget& event) { - try { - auto registers = this->target->readRegisters(event.descriptors); - - if (registers.size() > 0) { - auto registersRetrievedEvent = std::make_shared(); - registersRetrievedEvent->correlationId = event.id; - registersRetrievedEvent->registers = registers; - EventManager::triggerEvent(registersRetrievedEvent); - } - - } catch (const TargetOperationFailure& exception) { - Logger::error("Failed to read registers from target - " + exception.getMessage()); - this->emitErrorEvent(event.id, exception.getMessage()); - } - } - void TargetControllerComponent::onWriteRegistersEvent(const Events::WriteRegistersToTarget& event) { try { this->target->writeRegisters(event.registers); diff --git a/src/TargetController/TargetControllerComponent.hpp b/src/TargetController/TargetControllerComponent.hpp index b5175ca0..d814c633 100644 --- a/src/TargetController/TargetControllerComponent.hpp +++ b/src/TargetController/TargetControllerComponent.hpp @@ -20,9 +20,11 @@ #include "Commands/StopTargetExecution.hpp" #include "Commands/ResumeTargetExecution.hpp" #include "Commands/ResetTarget.hpp" +#include "Commands/ReadTargetRegisters.hpp" // Responses #include "Responses/Response.hpp" +#include "Responses/TargetRegistersRead.hpp" #include "TargetControllerState.hpp" @@ -291,6 +293,9 @@ namespace Bloom::TargetController std::unique_ptr handleStopTargetExecution(Commands::StopTargetExecution& command); std::unique_ptr handleResumeTargetExecution(Commands::ResumeTargetExecution& command); std::unique_ptr handleResetTarget(Commands::ResetTarget& command); + std::unique_ptr handleReadTargetRegisters( + Commands::ReadTargetRegisters& command + ); /** * Will attempt to step execution on the target and emit a TargetExecutionResumed event. @@ -299,13 +304,6 @@ namespace Bloom::TargetController */ void onStepTargetExecutionEvent(const Events::StepTargetExecution& event); - /** - * Will attempt to read the requested registers and emit a RegistersRetrievedFromTarget event. - * - * @param event - */ - void onReadRegistersEvent(const Events::RetrieveRegistersFromTarget& event); - /** * Will attempt to write the specified register values and emit a RegistersWrittenToTarget event. * diff --git a/src/TargetController/TargetControllerConsole.cpp b/src/TargetController/TargetControllerConsole.cpp index 7adffed7..eaaa4c01 100644 --- a/src/TargetController/TargetControllerConsole.cpp +++ b/src/TargetController/TargetControllerConsole.cpp @@ -6,6 +6,7 @@ #include "Commands/StopTargetExecution.hpp" #include "Commands/ResumeTargetExecution.hpp" #include "Commands/ResetTarget.hpp" +#include "Commands/ReadTargetRegisters.hpp" #include "src/Logger/Logger.hpp" @@ -18,6 +19,7 @@ namespace Bloom::TargetController using Commands::StopTargetExecution; using Commands::ResumeTargetExecution; using Commands::ResetTarget; + using Commands::ReadTargetRegisters; TargetControllerConsole::TargetControllerConsole(EventListener& eventListener) : eventListener(eventListener) @@ -75,10 +77,10 @@ namespace Bloom::TargetController } TargetRegisters TargetControllerConsole::readRegisters(const TargetRegisterDescriptors& descriptors) { - auto readRegistersEvent = std::make_shared(); - readRegistersEvent->descriptors = descriptors; - - return this->triggerTargetControllerEventAndWaitForResponse(readRegistersEvent)->registers; + return this->commandManager.sendCommandAndWaitForResponse( + std::make_unique(descriptors), + this->defaultTimeout + )->registers; } void TargetControllerConsole::writeRegisters(const TargetRegisters& registers) {