From 1072534809072c9abd4856739d0ed284c2fc1a4d Mon Sep 17 00:00:00 2001 From: Nav Date: Sun, 1 May 2022 17:33:09 +0100 Subject: [PATCH] Replaced SetTargetPinState event with TC command --- src/EventManager/Events/Event.hpp | 2 - src/EventManager/Events/Events.hpp | 2 - src/EventManager/Events/SetTargetPinState.hpp | 29 -------------- .../Events/TargetPinStatesRetrieved.hpp | 27 ------------- .../Commands/CommandTypes.hpp | 1 + .../Commands/SetTargetPinState.hpp | 34 +++++++++++++++++ .../TargetControllerComponent.cpp | 38 +++++-------------- .../TargetControllerComponent.hpp | 10 +---- .../TargetControllerConsole.cpp | 11 +++--- 9 files changed, 52 insertions(+), 102 deletions(-) delete mode 100644 src/EventManager/Events/SetTargetPinState.hpp delete mode 100644 src/EventManager/Events/TargetPinStatesRetrieved.hpp create mode 100644 src/TargetController/Commands/SetTargetPinState.hpp diff --git a/src/EventManager/Events/Event.hpp b/src/EventManager/Events/Event.hpp index e2b10cad..20fb0a8f 100644 --- a/src/EventManager/Events/Event.hpp +++ b/src/EventManager/Events/Event.hpp @@ -32,8 +32,6 @@ namespace Bloom::Events EXTRACT_TARGET_DESCRIPTOR, TARGET_DESCRIPTOR_EXTRACTED, INSIGHT_THREAD_STATE_CHANGED, - TARGET_PIN_STATES_RETRIEVED, - SET_TARGET_PIN_STATE, RETRIEVE_STACK_POINTER_FROM_TARGET, STACK_POINTER_RETRIEVED_FROM_TARGET, TARGET_RESET, diff --git a/src/EventManager/Events/Events.hpp b/src/EventManager/Events/Events.hpp index 128d02af..48ecd740 100644 --- a/src/EventManager/Events/Events.hpp +++ b/src/EventManager/Events/Events.hpp @@ -19,8 +19,6 @@ #include "ExtractTargetDescriptor.hpp" #include "TargetDescriptorExtracted.hpp" #include "InsightThreadStateChanged.hpp" -#include "TargetPinStatesRetrieved.hpp" -#include "SetTargetPinState.hpp" #include "RetrieveStackPointerFromTarget.hpp" #include "StackPointerRetrievedFromTarget.hpp" #include "TargetReset.hpp" diff --git a/src/EventManager/Events/SetTargetPinState.hpp b/src/EventManager/Events/SetTargetPinState.hpp deleted file mode 100644 index 197adfb6..00000000 --- a/src/EventManager/Events/SetTargetPinState.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -#include "Event.hpp" -#include "TargetPinStatesRetrieved.hpp" -#include "src/Targets/TargetPinDescriptor.hpp" - -namespace Bloom::Events -{ - class SetTargetPinState: public Event - { - public: - using TargetControllerResponseType = TargetPinStatesRetrieved; - - static constexpr EventType type = EventType::SET_TARGET_PIN_STATE; - static inline const std::string name = "SetTargetPinState"; - Targets::TargetPinDescriptor pinDescriptor; - Targets::TargetPinState pinState; - - [[nodiscard]] EventType getType() const override { - return SetTargetPinState::type; - } - - [[nodiscard]] std::string getName() const override { - return SetTargetPinState::name; - } - }; -} diff --git a/src/EventManager/Events/TargetPinStatesRetrieved.hpp b/src/EventManager/Events/TargetPinStatesRetrieved.hpp deleted file mode 100644 index ed04658c..00000000 --- a/src/EventManager/Events/TargetPinStatesRetrieved.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include - -#include "Event.hpp" -#include "src/Targets/TargetPinDescriptor.hpp" - -namespace Bloom::Events -{ - class TargetPinStatesRetrieved: public Event - { - public: - static constexpr EventType type = EventType::TARGET_PIN_STATES_RETRIEVED; - static inline const std::string name = "TargetPinStatesRetrieved"; - int variantId = 0; - std::map pinSatesByNumber; - - [[nodiscard]] EventType getType() const override { - return TargetPinStatesRetrieved::type; - } - - [[nodiscard]] std::string getName() const override { - return TargetPinStatesRetrieved::name; - } - }; -} diff --git a/src/TargetController/Commands/CommandTypes.hpp b/src/TargetController/Commands/CommandTypes.hpp index 61b9f2c2..c540b5ff 100644 --- a/src/TargetController/Commands/CommandTypes.hpp +++ b/src/TargetController/Commands/CommandTypes.hpp @@ -21,5 +21,6 @@ namespace Bloom::TargetController::Commands REMOVE_BREAKPOINT, SET_PROGRAM_COUNTER, GET_TARGET_PIN_STATES, + SET_TARGET_PIN_STATE, }; } diff --git a/src/TargetController/Commands/SetTargetPinState.hpp b/src/TargetController/Commands/SetTargetPinState.hpp new file mode 100644 index 00000000..7b9d37e4 --- /dev/null +++ b/src/TargetController/Commands/SetTargetPinState.hpp @@ -0,0 +1,34 @@ +#pragma once + +#include "Command.hpp" + +#include "src/Targets/TargetPinDescriptor.hpp" + +namespace Bloom::TargetController::Commands +{ + class SetTargetPinState: public Command + { + public: + static constexpr CommandType type = CommandType::SET_TARGET_PIN_STATE; + static inline const std::string name = "SetTargetPinState"; + + Targets::TargetPinDescriptor pinDescriptor; + Targets::TargetPinState pinState; + + SetTargetPinState( + const Targets::TargetPinDescriptor& pinDescriptor, + const Targets::TargetPinState& pinState + ) + : pinDescriptor(pinDescriptor) + , pinState(pinState) + {}; + + [[nodiscard]] CommandType getType() const override { + return SetTargetPinState::type; + } + + [[nodiscard]] bool requiresStoppedTargetState() const override { + return true; + } + }; +} diff --git a/src/TargetController/TargetControllerComponent.cpp b/src/TargetController/TargetControllerComponent.cpp index e1fc96a5..15e1ffe4 100644 --- a/src/TargetController/TargetControllerComponent.cpp +++ b/src/TargetController/TargetControllerComponent.cpp @@ -35,6 +35,7 @@ namespace Bloom::TargetController using Commands::RemoveBreakpoint; using Commands::SetProgramCounter; using Commands::GetTargetPinStates; + using Commands::SetTargetPinState; using Responses::Response; using Responses::TargetRegistersRead; @@ -402,11 +403,11 @@ namespace Bloom::TargetController this->deregisterCommandHandler(RemoveBreakpoint::type); this->deregisterCommandHandler(SetProgramCounter::type); this->deregisterCommandHandler(GetTargetPinStates::type); + this->deregisterCommandHandler(SetTargetPinState::type); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); - this->eventListener->deregisterCallbacksForEventType(); this->eventListener->deregisterCallbacksForEventType(); this->lastTargetState = TargetState::UNKNOWN; @@ -476,6 +477,10 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::handleGetTargetPinStates, this, std::placeholders::_1) ); + this->registerCommandHandler( + std::bind(&TargetControllerComponent::handleSetTargetPinState, this, std::placeholders::_1) + ); + this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onDebugSessionFinishedEvent, this, std::placeholders::_1) ); @@ -484,10 +489,6 @@ namespace Bloom::TargetController std::bind(&TargetControllerComponent::onExtractTargetDescriptor, this, std::placeholders::_1) ); - this->eventListener->registerCallbackForEventType( - std::bind(&TargetControllerComponent::onSetPinStateEvent, this, std::placeholders::_1) - ); - this->eventListener->registerCallbackForEventType( std::bind(&TargetControllerComponent::onRetrieveStackPointerEvent, this, std::placeholders::_1) ); @@ -883,30 +884,9 @@ namespace Bloom::TargetController return std::make_unique(this->target->getPinStates(command.variantId)); } - void TargetControllerComponent::onSetPinStateEvent(const Events::SetTargetPinState& event) { - try { - if (this->target->getState() != TargetState::STOPPED) { - throw TargetOperationFailure( - "Invalid target state - target must be stopped before pin state can be set" - ); - } - - this->target->setPinState(event.pinDescriptor, event.pinState); - - auto pinStatesUpdateEvent = std::make_shared(); - pinStatesUpdateEvent->correlationId = event.id; - pinStatesUpdateEvent->variantId = event.pinDescriptor.variantId; - pinStatesUpdateEvent->pinSatesByNumber = { - {event.pinDescriptor.number, event.pinState} - }; - - EventManager::triggerEvent(pinStatesUpdateEvent); - - } catch (const TargetOperationFailure& exception) { - Logger::error("Failed to set target pin state for pin " + event.pinDescriptor.name + " - " - + exception.getMessage()); - this->emitErrorEvent(event.id, exception.getMessage()); - } + std::unique_ptr TargetControllerComponent::handleSetTargetPinState(SetTargetPinState& command) { + this->target->setPinState(command.pinDescriptor, command.pinState); + return std::make_unique(); } void TargetControllerComponent::onRetrieveStackPointerEvent(const Events::RetrieveStackPointerFromTarget& event) { diff --git a/src/TargetController/TargetControllerComponent.hpp b/src/TargetController/TargetControllerComponent.hpp index dfa8b25f..e2fba0dd 100644 --- a/src/TargetController/TargetControllerComponent.hpp +++ b/src/TargetController/TargetControllerComponent.hpp @@ -31,6 +31,7 @@ #include "Commands/RemoveBreakpoint.hpp" #include "Commands/SetProgramCounter.hpp" #include "Commands/GetTargetPinStates.hpp" +#include "Commands/SetTargetPinState.hpp" // Responses #include "Responses/Response.hpp" @@ -315,14 +316,7 @@ namespace Bloom::TargetController std::unique_ptr handleRemoveBreakpoint(Commands::RemoveBreakpoint& command); std::unique_ptr handleSetProgramCounter(Commands::SetProgramCounter& command); std::unique_ptr handleGetTargetPinStates(Commands::GetTargetPinStates& command); - - /** - * Will update a pin state for a particular pin. Will emit a TargetPinStatesRetrieved with the new pin - * state, on success. - * - * @param event - */ - void onSetPinStateEvent(const Events::SetTargetPinState& event); + std::unique_ptr handleSetTargetPinState(Commands::SetTargetPinState& command); /** * Will retrieve the current stack pointer from the target. Will emit a StackPointerRetrievedFromTarget event diff --git a/src/TargetController/TargetControllerConsole.cpp b/src/TargetController/TargetControllerConsole.cpp index eb2ec3ad..2fb0d472 100644 --- a/src/TargetController/TargetControllerConsole.cpp +++ b/src/TargetController/TargetControllerConsole.cpp @@ -18,6 +18,7 @@ #include "Commands/RemoveBreakpoint.hpp" #include "Commands/SetProgramCounter.hpp" #include "Commands/GetTargetPinStates.hpp" +#include "Commands/SetTargetPinState.hpp" #include "src/Logger/Logger.hpp" @@ -40,6 +41,7 @@ namespace Bloom::TargetController using Commands::RemoveBreakpoint; using Commands::SetProgramCounter; using Commands::GetTargetPinStates; + using Commands::SetTargetPinState; TargetControllerConsole::TargetControllerConsole(EventListener& eventListener) : eventListener(eventListener) @@ -175,11 +177,10 @@ namespace Bloom::TargetController } void TargetControllerConsole::setPinState(TargetPinDescriptor pinDescriptor, TargetPinState pinState) { - auto updateEvent = std::make_shared(); - updateEvent->pinDescriptor = std::move(pinDescriptor); - updateEvent->pinState = pinState; - - this->triggerTargetControllerEventAndWaitForResponse(updateEvent); + this->commandManager.sendCommandAndWaitForResponse( + std::make_unique(pinDescriptor, pinState), + this->defaultTimeout + ); } std::uint32_t TargetControllerConsole::getStackPointer() {