diff --git a/src/EventManager/Events/Event.hpp b/src/EventManager/Events/Event.hpp index d3417678..477d53c1 100644 --- a/src/EventManager/Events/Event.hpp +++ b/src/EventManager/Events/Event.hpp @@ -26,7 +26,6 @@ namespace Bloom::Events SHUTDOWN_APPLICATION, DEBUG_SERVER_THREAD_STATE_CHANGED, SHUTDOWN_DEBUG_SERVER, - WRITE_REGISTERS_TO_TARGET, REGISTERS_WRITTEN_TO_TARGET, TARGET_EXECUTION_RESUMED, TARGET_EXECUTION_STOPPED, diff --git a/src/EventManager/Events/Events.hpp b/src/EventManager/Events/Events.hpp index d6a24140..ec147a45 100644 --- a/src/EventManager/Events/Events.hpp +++ b/src/EventManager/Events/Events.hpp @@ -13,7 +13,6 @@ #include "ShutdownApplication.hpp" #include "DebugServerThreadStateChanged.hpp" #include "ShutdownDebugServer.hpp" -#include "WriteRegistersToTarget.hpp" #include "RegistersWrittenToTarget.hpp" #include "TargetExecutionResumed.hpp" #include "TargetExecutionStopped.hpp" diff --git a/src/EventManager/Events/WriteRegistersToTarget.hpp b/src/EventManager/Events/WriteRegistersToTarget.hpp deleted file mode 100644 index cbc441b6..00000000 --- a/src/EventManager/Events/WriteRegistersToTarget.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include -#include - -#include "Event.hpp" -#include "RegistersWrittenToTarget.hpp" -#include "src/Targets/TargetRegister.hpp" - -namespace Bloom::Events -{ - class WriteRegistersToTarget: public Event - { - public: - using TargetControllerResponseType = RegistersWrittenToTarget; - - static constexpr EventType type = EventType::WRITE_REGISTERS_TO_TARGET; - static inline const std::string name = "WriteRegistersToTarget"; - Targets::TargetRegisters registers; - - WriteRegistersToTarget() = default; - explicit WriteRegistersToTarget(Targets::TargetRegisters registers): registers(std::move(registers)) {}; - - [[nodiscard]] EventType getType() const override { - return WriteRegistersToTarget::type; - } - - [[nodiscard]] std::string getName() const override { - return WriteRegistersToTarget::name; - } - }; -} diff --git a/src/TargetController/Commands/CommandTypes.hpp b/src/TargetController/Commands/CommandTypes.hpp index e091cd76..9615856b 100644 --- a/src/TargetController/Commands/CommandTypes.hpp +++ b/src/TargetController/Commands/CommandTypes.hpp @@ -11,5 +11,6 @@ namespace Bloom::TargetController::Commands RESUME_TARGET_EXECUTION, RESET_TARGET, READ_TARGET_REGISTERS, + WRITE_TARGET_REGISTERS, }; } diff --git a/src/TargetController/Commands/WriteTargetRegisters.hpp b/src/TargetController/Commands/WriteTargetRegisters.hpp new file mode 100644 index 00000000..e3ca25bd --- /dev/null +++ b/src/TargetController/Commands/WriteTargetRegisters.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include + +#include "Command.hpp" + +#include "src/Targets/TargetRegister.hpp" + +namespace Bloom::TargetController::Commands +{ + class WriteTargetRegisters: public Command + { + public: + static constexpr CommandType type = CommandType::WRITE_TARGET_REGISTERS; + static inline const std::string name = "WriteTargetRegisters"; + + Targets::TargetRegisters registers; + + explicit WriteTargetRegisters(const Targets::TargetRegisters& registers) + : registers(registers) + {}; + + [[nodiscard]] CommandType getType() const override { + return WriteTargetRegisters::type; + } + }; +} diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index f631c052..e85a9f31 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -26,6 +26,7 @@ namespace Bloom::TargetController using Commands::ResumeTargetExecution; using Commands::ResetTarget; using Commands::ReadTargetRegisters; + using Commands::WriteTargetRegisters; using Responses::Response; using Responses::TargetRegistersRead; @@ -377,11 +378,11 @@ namespace Bloom::TargetController this->deregisterCommandHandler(ResumeTargetExecution::type); this->deregisterCommandHandler(ResetTarget::type); this->deregisterCommandHandler(ReadTargetRegisters::type); + this->deregisterCommandHandler(WriteTargetRegisters::type); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); - this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); @@ -423,6 +424,10 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::handleReadTargetRegisters, this, std::placeholders::_1) ); + this->registerCommandHandler( + std::bind(&TargetControllerComponent::handleWriteTargetRegisters, this, std::placeholders::_1) + ); + this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onDebugSessionFinishedEvent, this, std::placeholders::_1) ); @@ -435,10 +440,6 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::onStepTargetExecutionEvent, this, std::placeholders::_1) ); - this->eventListener->registerCallbackForEventType( - std::bind(&TargetControllerComponent::onWriteRegistersEvent, this, std::placeholders::_1) - ); - this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onReadMemoryEvent, this, std::placeholders::_1) ); @@ -771,6 +772,17 @@ namespace Bloom::TargetController return std::make_unique(this->target->readRegisters(command.descriptors)); } + std::unique_ptr TargetControllerComponent::handleWriteTargetRegisters(WriteTargetRegisters& command) { + this->target->writeRegisters(command.registers); + + auto registersWrittenEvent = std::make_shared(); + registersWrittenEvent->registers = command.registers; + + EventManager::triggerEvent(registersWrittenEvent); + + return std::make_unique(); + } + void TargetControllerComponent::onStepTargetExecutionEvent(const Events::StepTargetExecution& event) { try { if (this->target->getState() != TargetState::STOPPED) { @@ -795,22 +807,6 @@ namespace Bloom::TargetController } } - void TargetControllerComponent::onWriteRegistersEvent(const Events::WriteRegistersToTarget& event) { - try { - this->target->writeRegisters(event.registers); - - auto registersWrittenEvent = std::make_shared(); - registersWrittenEvent->correlationId = event.id; - registersWrittenEvent->registers = event.registers; - - EventManager::triggerEvent(registersWrittenEvent); - - } catch (const TargetOperationFailure& exception) { - Logger::error("Failed to write registers to target - " + exception.getMessage()); - this->emitErrorEvent(event.id, exception.getMessage()); - } - } - void TargetControllerComponent::onReadMemoryEvent(const Events::RetrieveMemoryFromTarget& event) { try { auto memoryReadEvent = std::make_shared(); diff --git a/src/TargetController/TargetControllerComponent.hpp b/src/TargetController/TargetControllerComponent.hpp index d814c633..fcfc7206 100644 --- a/src/TargetController/TargetControllerComponent.hpp +++ b/src/TargetController/TargetControllerComponent.hpp @@ -21,6 +21,7 @@ #include "Commands/ResumeTargetExecution.hpp" #include "Commands/ResetTarget.hpp" #include "Commands/ReadTargetRegisters.hpp" +#include "Commands/WriteTargetRegisters.hpp" // Responses #include "Responses/Response.hpp" @@ -296,6 +297,7 @@ namespace Bloom::TargetController std::unique_ptr handleReadTargetRegisters( Commands::ReadTargetRegisters& command ); + std::unique_ptr handleWriteTargetRegisters(Commands::WriteTargetRegisters& command); /** * Will attempt to step execution on the target and emit a TargetExecutionResumed event. @@ -304,13 +306,6 @@ namespace Bloom::TargetController */ void onStepTargetExecutionEvent(const Events::StepTargetExecution& event); - /** - * Will attempt to write the specified register values and emit a RegistersWrittenToTarget event. - * - * @param event - */ - void onWriteRegistersEvent(const Events::WriteRegistersToTarget& event); - /** * Will attempt to read memory from the target and include the data in a MemoryRetrievedFromTarget event. * diff --git a/src/TargetController/TargetControllerConsole.cpp b/src/TargetController/TargetControllerConsole.cpp index eaaa4c01..325d682a 100644 --- a/src/TargetController/TargetControllerConsole.cpp +++ b/src/TargetController/TargetControllerConsole.cpp @@ -7,6 +7,7 @@ #include "Commands/ResumeTargetExecution.hpp" #include "Commands/ResetTarget.hpp" #include "Commands/ReadTargetRegisters.hpp" +#include "Commands/WriteTargetRegisters.hpp" #include "src/Logger/Logger.hpp" @@ -20,6 +21,7 @@ namespace Bloom::TargetController using Commands::ResumeTargetExecution; using Commands::ResetTarget; using Commands::ReadTargetRegisters; + using Commands::WriteTargetRegisters; TargetControllerConsole::TargetControllerConsole(EventListener& eventListener) : eventListener(eventListener) @@ -84,10 +86,10 @@ namespace Bloom::TargetController } void TargetControllerConsole::writeRegisters(const TargetRegisters& registers) { - auto event = std::make_shared(); - event->registers = std::move(registers); - - this->triggerTargetControllerEventAndWaitForResponse(event); + this->commandManager.sendCommandAndWaitForResponse( + std::make_unique(registers), + this->defaultTimeout + ); } TargetMemoryBuffer TargetControllerConsole::readMemory(