diff --git a/src/EventManager/Events/Event.hpp b/src/EventManager/Events/Event.hpp index cca1553a..e06215c5 100644 --- a/src/EventManager/Events/Event.hpp +++ b/src/EventManager/Events/Event.hpp @@ -15,7 +15,6 @@ namespace Bloom::Events enum class EventType: std::uint8_t { GENERIC, - STOP_TARGET_EXECUTION, RESUME_TARGET_EXECUTION, RESET_TARGET, DEBUG_SESSION_STARTED, diff --git a/src/EventManager/Events/Events.hpp b/src/EventManager/Events/Events.hpp index 50014ad9..30ea342f 100644 --- a/src/EventManager/Events/Events.hpp +++ b/src/EventManager/Events/Events.hpp @@ -3,7 +3,6 @@ #include #include "Event.hpp" -#include "StopTargetExecution.hpp" #include "ResumeTargetExecution.hpp" #include "ResetTarget.hpp" #include "DebugSessionStarted.hpp" diff --git a/src/EventManager/Events/StopTargetExecution.hpp b/src/EventManager/Events/StopTargetExecution.hpp deleted file mode 100644 index e754296a..00000000 --- a/src/EventManager/Events/StopTargetExecution.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include - -#include "Event.hpp" -#include "TargetExecutionStopped.hpp" - -namespace Bloom::Events -{ - class StopTargetExecution: public Event - { - public: - using TargetControllerResponseType = TargetExecutionStopped; - - static constexpr EventType type = EventType::STOP_TARGET_EXECUTION; - static inline const std::string name = "StopTargetExecution"; - - [[nodiscard]] EventType getType() const override { - return StopTargetExecution::type; - } - - [[nodiscard]] std::string getName() const override { - return StopTargetExecution::name; - } - }; -} diff --git a/src/TargetController/Commands/CommandTypes.hpp b/src/TargetController/Commands/CommandTypes.hpp index 762bd950..27f955f6 100644 --- a/src/TargetController/Commands/CommandTypes.hpp +++ b/src/TargetController/Commands/CommandTypes.hpp @@ -7,5 +7,6 @@ namespace Bloom::TargetController::Commands enum class CommandType: std::uint8_t { GENERIC, + STOP_TARGET_EXECUTION, }; } diff --git a/src/TargetController/Commands/StopTargetExecution.hpp b/src/TargetController/Commands/StopTargetExecution.hpp new file mode 100644 index 00000000..09cbc65e --- /dev/null +++ b/src/TargetController/Commands/StopTargetExecution.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "Command.hpp" + +namespace Bloom::TargetController::Commands +{ + class StopTargetExecution: public Command + { + public: + static constexpr CommandType type = CommandType::STOP_TARGET_EXECUTION; + static inline const std::string name = "StopTargetExecution"; + + [[nodiscard]] CommandType getType() const override { + return StopTargetExecution::type; + } + }; +} diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index 2077786b..86ab005d 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -22,7 +22,10 @@ namespace Bloom::TargetController using Commands::Command; using Commands::CommandIdType; + using Commands::StopTargetExecution; + using Responses::Response; + TargetControllerComponent::TargetControllerComponent( const ProjectConfig& projectConfig, const EnvironmentConfig& environmentConfig @@ -366,9 +369,10 @@ namespace Bloom::TargetController + std::string(exception.what())); } + this->deregisterCommandHandler(StopTargetExecution::type); + this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); - this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); @@ -398,6 +402,10 @@ namespace Bloom::TargetController this->acquireHardware(); this->loadRegisterDescriptors(); + this->registerCommandHandler( + std::bind(&TargetControllerComponent::handleStopTargetExecution, this, std::placeholders::_1) + ); + this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onDebugSessionFinishedEvent, this, std::placeholders::_1) ); @@ -406,10 +414,6 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::onExtractTargetDescriptor, this, std::placeholders::_1) ); - this->eventListener->registerCallbackForEventType( - std::bind(&TargetControllerComponent::onStopTargetExecutionEvent, this, std::placeholders::_1) - ); - this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onStepTargetExecutionEvent, this, std::placeholders::_1) ); @@ -723,19 +727,18 @@ namespace Bloom::TargetController } } - void TargetControllerComponent::onStopTargetExecutionEvent(const Events::StopTargetExecution& event) { + std::unique_ptr TargetControllerComponent::handleStopTargetExecution(StopTargetExecution& command) { if (this->target->getState() != TargetState::STOPPED) { this->target->stop(); this->lastTargetState = TargetState::STOPPED; } - auto executionStoppedEvent = std::make_shared( + EventManager::triggerEvent(std::make_shared( this->target->getProgramCounter(), TargetBreakCause::UNKNOWN - ); + )); - executionStoppedEvent->correlationId = event.id; - EventManager::triggerEvent(executionStoppedEvent); + return std::make_unique(); } void TargetControllerComponent::onStepTargetExecutionEvent(const Events::StepTargetExecution& event) { diff --git a/src/TargetController/TargetControllerComponent.hpp b/src/TargetController/TargetControllerComponent.hpp index 4b1309c6..782c7d0e 100644 --- a/src/TargetController/TargetControllerComponent.hpp +++ b/src/TargetController/TargetControllerComponent.hpp @@ -17,6 +17,7 @@ // Commands #include "Commands/Command.hpp" +#include "Commands/StopTargetExecution.hpp" // Responses #include "Responses/Response.hpp" @@ -287,12 +288,7 @@ namespace Bloom::TargetController */ void onDebugSessionFinishedEvent(const Events::DebugSessionFinished& event); - /** - * Will attempt to stop execution on the target and emit a TargetExecutionStopped event. - * - * @param event - */ - void onStopTargetExecutionEvent(const Events::StopTargetExecution& event); + std::unique_ptr handleStopTargetExecution(Commands::StopTargetExecution& command); /** * Will attempt to step execution on the target and emit a TargetExecutionResumed event. diff --git a/src/TargetController/TargetControllerConsole.cpp b/src/TargetController/TargetControllerConsole.cpp index dc99bf2f..dcf5a89a 100644 --- a/src/TargetController/TargetControllerConsole.cpp +++ b/src/TargetController/TargetControllerConsole.cpp @@ -1,6 +1,10 @@ #include "TargetControllerConsole.hpp" #include "src/EventManager/Events/Events.hpp" + +// Commands +#include "Commands/StopTargetExecution.hpp" + #include "src/Logger/Logger.hpp" namespace Bloom::TargetController @@ -9,6 +13,8 @@ namespace Bloom::TargetController using namespace Bloom::Events; using namespace Bloom::Exceptions; + using Commands::StopTargetExecution; + TargetControllerConsole::TargetControllerConsole(EventListener& eventListener) : eventListener(eventListener) {} @@ -35,7 +41,10 @@ namespace Bloom::TargetController } void TargetControllerConsole::stopTargetExecution() { - this->triggerTargetControllerEventAndWaitForResponse(std::make_shared()); + this->commandManager.sendCommandAndWaitForResponse( + std::make_unique(), + this->defaultTimeout + ); } void TargetControllerConsole::continueTargetExecution(std::optional fromAddress) {