diff --git a/src/EventManager/Events/BreakpointSetOnTarget.hpp b/src/EventManager/Events/BreakpointSetOnTarget.hpp deleted file mode 100644 index 4f7f7dec..00000000 --- a/src/EventManager/Events/BreakpointSetOnTarget.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include - -#include "Event.hpp" - -namespace Bloom::Events -{ - class BreakpointSetOnTarget: public Event - { - public: - static constexpr EventType type = EventType::BREAKPOINT_SET_ON_TARGET; - static inline const std::string name = "BreakpointSetOnTarget"; - - [[nodiscard]] EventType getType() const override { - return BreakpointSetOnTarget::type; - } - - [[nodiscard]] std::string getName() const override { - return BreakpointSetOnTarget::name; - } - }; -} diff --git a/src/EventManager/Events/Event.hpp b/src/EventManager/Events/Event.hpp index 6fdd6768..2c841e81 100644 --- a/src/EventManager/Events/Event.hpp +++ b/src/EventManager/Events/Event.hpp @@ -29,9 +29,7 @@ namespace Bloom::Events TARGET_EXECUTION_RESUMED, TARGET_EXECUTION_STOPPED, MEMORY_WRITTEN_TO_TARGET, - SET_BREAKPOINT_ON_TARGET, REMOVE_BREAKPOINT_ON_TARGET, - BREAKPOINT_SET_ON_TARGET, BREAKPOINT_REMOVED_ON_TARGET, SET_PROGRAM_COUNTER_ON_TARGET, PROGRAM_COUNTER_SET_ON_TARGET, diff --git a/src/EventManager/Events/Events.hpp b/src/EventManager/Events/Events.hpp index 10f8a179..788b751b 100644 --- a/src/EventManager/Events/Events.hpp +++ b/src/EventManager/Events/Events.hpp @@ -16,9 +16,7 @@ #include "TargetExecutionResumed.hpp" #include "TargetExecutionStopped.hpp" #include "MemoryWrittenToTarget.hpp" -#include "SetBreakpointOnTarget.hpp" #include "RemoveBreakpointOnTarget.hpp" -#include "BreakpointSetOnTarget.hpp" #include "BreakpointRemovedOnTarget.hpp" #include "SetProgramCounterOnTarget.hpp" #include "ProgramCounterSetOnTarget.hpp" diff --git a/src/EventManager/Events/SetBreakpointOnTarget.hpp b/src/EventManager/Events/SetBreakpointOnTarget.hpp deleted file mode 100644 index 2a9ac02d..00000000 --- a/src/EventManager/Events/SetBreakpointOnTarget.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include -#include - -#include "Event.hpp" -#include "BreakpointSetOnTarget.hpp" -#include "src/Targets/TargetBreakpoint.hpp" - -namespace Bloom::Events -{ - class SetBreakpointOnTarget: public Event - { - public: - using TargetControllerResponseType = BreakpointSetOnTarget; - - static constexpr EventType type = EventType::SET_BREAKPOINT_ON_TARGET; - static inline const std::string name = "SetBreakpointOnTarget"; - Targets::TargetBreakpoint breakpoint; - - [[nodiscard]] EventType getType() const override { - return SetBreakpointOnTarget::type; - } - - [[nodiscard]] std::string getName() const override { - return SetBreakpointOnTarget::name; - } - }; -} diff --git a/src/TargetController/Commands/CommandTypes.hpp b/src/TargetController/Commands/CommandTypes.hpp index 4843c279..0036b44b 100644 --- a/src/TargetController/Commands/CommandTypes.hpp +++ b/src/TargetController/Commands/CommandTypes.hpp @@ -17,5 +17,6 @@ namespace Bloom::TargetController::Commands GET_TARGET_STATE, STEP_TARGET_EXECUTION, WRITE_TARGET_MEMORY, + SET_BREAKPOINT, }; } diff --git a/src/TargetController/Commands/SetBreakpoint.hpp b/src/TargetController/Commands/SetBreakpoint.hpp new file mode 100644 index 00000000..29385419 --- /dev/null +++ b/src/TargetController/Commands/SetBreakpoint.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include "Command.hpp" + +#include "src/Targets/TargetBreakpoint.hpp" + +namespace Bloom::TargetController::Commands +{ + class SetBreakpoint: public Command + { + public: + static constexpr CommandType type = CommandType::SET_BREAKPOINT; + static inline const std::string name = "SetBreakpoint"; + + Targets::TargetBreakpoint breakpoint; + + SetBreakpoint() = default; + explicit SetBreakpoint(const Targets::TargetBreakpoint& breakpoint) + : breakpoint(breakpoint) + {}; + + [[nodiscard]] CommandType getType() const override { + return SetBreakpoint::type; + } + + [[nodiscard]] bool requiresStoppedTargetState() const override { + return true; + } + }; +} diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index 2c7250d4..a59d413b 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -31,6 +31,7 @@ namespace Bloom::TargetController using Commands::ReadTargetMemory; using Commands::WriteTargetMemory; using Commands::StepTargetExecution; + using Commands::SetBreakpoint; using Responses::Response; using Responses::TargetRegistersRead; @@ -393,10 +394,10 @@ namespace Bloom::TargetController this->deregisterCommandHandler(ReadTargetMemory::type); this->deregisterCommandHandler(WriteTargetMemory::type); this->deregisterCommandHandler(StepTargetExecution::type); + this->deregisterCommandHandler(SetBreakpoint::type); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); - this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); @@ -455,6 +456,10 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::handleStepTargetExecution, this, std::placeholders::_1) ); + this->registerCommandHandler( + std::bind(&TargetControllerComponent::handleSetBreakpoint, this, std::placeholders::_1) + ); + this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onDebugSessionFinishedEvent, this, std::placeholders::_1) ); @@ -463,10 +468,6 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::onExtractTargetDescriptor, this, std::placeholders::_1) ); - this->eventListener->registerCallbackForEventType( - std::bind(&TargetControllerComponent::onSetBreakpointEvent, this, std::placeholders::_1) - ); - this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onRemoveBreakpointEvent, this, std::placeholders::_1) ); @@ -859,18 +860,9 @@ namespace Bloom::TargetController return std::make_unique(); } - void TargetControllerComponent::onSetBreakpointEvent(const Events::SetBreakpointOnTarget& event) { - try { - this->target->setBreakpoint(event.breakpoint.address); - auto breakpointSetEvent = std::make_shared(); - breakpointSetEvent->correlationId = event.id; - - EventManager::triggerEvent(breakpointSetEvent); - - } catch (const TargetOperationFailure& exception) { - Logger::error("Failed to set breakpoint on target - " + exception.getMessage()); - this->emitErrorEvent(event.id, exception.getMessage()); - } + std::unique_ptr TargetControllerComponent::handleSetBreakpoint(SetBreakpoint& command) { + this->target->setBreakpoint(command.breakpoint.address); + return std::make_unique(); } void TargetControllerComponent::onRemoveBreakpointEvent(const Events::RemoveBreakpointOnTarget& event) { diff --git a/src/TargetController/TargetControllerComponent.hpp b/src/TargetController/TargetControllerComponent.hpp index f25a15de..beaf43ad 100644 --- a/src/TargetController/TargetControllerComponent.hpp +++ b/src/TargetController/TargetControllerComponent.hpp @@ -27,6 +27,7 @@ #include "Commands/ReadTargetMemory.hpp" #include "Commands/WriteTargetMemory.hpp" #include "Commands/StepTargetExecution.hpp" +#include "Commands/SetBreakpoint.hpp" // Responses #include "Responses/Response.hpp" @@ -306,14 +307,7 @@ namespace Bloom::TargetController std::unique_ptr handleReadTargetMemory(Commands::ReadTargetMemory& command); std::unique_ptr handleWriteTargetMemory(Commands::WriteTargetMemory& command); std::unique_ptr handleStepTargetExecution(Commands::StepTargetExecution& command); - - /** - * Will attempt to set the specific breakpoint on the target. On success, the BreakpointSetOnTarget event will - * be emitted. - * - * @param event - */ - void onSetBreakpointEvent(const Events::SetBreakpointOnTarget& event); + std::unique_ptr handleSetBreakpoint(Commands::SetBreakpoint& command); /** * Will attempt to remove a breakpoint at the specified address, on the target. On success, the diff --git a/src/TargetController/TargetControllerConsole.cpp b/src/TargetController/TargetControllerConsole.cpp index c2647735..a0c638e7 100644 --- a/src/TargetController/TargetControllerConsole.cpp +++ b/src/TargetController/TargetControllerConsole.cpp @@ -14,6 +14,7 @@ #include "Commands/ReadTargetMemory.hpp" #include "Commands/WriteTargetMemory.hpp" #include "Commands/StepTargetExecution.hpp" +#include "Commands/SetBreakpoint.hpp" #include "src/Logger/Logger.hpp" @@ -32,6 +33,7 @@ namespace Bloom::TargetController using Commands::ReadTargetMemory; using Commands::WriteTargetMemory; using Commands::StepTargetExecution; + using Commands::SetBreakpoint; TargetControllerConsole::TargetControllerConsole(EventListener& eventListener) : eventListener(eventListener) @@ -139,10 +141,10 @@ namespace Bloom::TargetController } void TargetControllerConsole::setBreakpoint(TargetBreakpoint breakpoint) { - auto event = std::make_shared(); - event->breakpoint = breakpoint; - - this->triggerTargetControllerEventAndWaitForResponse(event); + this->commandManager.sendCommandAndWaitForResponse( + std::make_unique(breakpoint), + this->defaultTimeout + ); } void TargetControllerConsole::removeBreakpoint(TargetBreakpoint breakpoint) {