Removed EventManager and EventListener dependency from TargetControllerConsole class
This commit is contained in:
@@ -114,9 +114,7 @@ namespace Bloom::DebugServer::Gdb
|
|||||||
*
|
*
|
||||||
* See documentation in src/DebugServer/Gdb/README.md for more on how GDB commands are processed.
|
* See documentation in src/DebugServer/Gdb/README.md for more on how GDB commands are processed.
|
||||||
*/
|
*/
|
||||||
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole(
|
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole();
|
||||||
this->eventListener
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listening socket address
|
* Listening socket address
|
||||||
|
|||||||
@@ -78,9 +78,7 @@ namespace Bloom
|
|||||||
this->insightProjectSettings
|
this->insightProjectSettings
|
||||||
);
|
);
|
||||||
|
|
||||||
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole(
|
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole();
|
||||||
this->eventListener
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insight consists of two threads - the main thread where the main Qt event loop runs (for the GUI), and
|
* Insight consists of two threads - the main thread where the main Qt event loop runs (for the GUI), and
|
||||||
|
|||||||
@@ -46,9 +46,7 @@ namespace Bloom
|
|||||||
private:
|
private:
|
||||||
EventListenerPointer eventListener = std::make_shared<EventListener>("InsightWorkerEventListener");
|
EventListenerPointer eventListener = std::make_shared<EventListener>("InsightWorkerEventListener");
|
||||||
|
|
||||||
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole(
|
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole();
|
||||||
*(this->eventListener)
|
|
||||||
);
|
|
||||||
|
|
||||||
Targets::TargetState lastTargetState = Targets::TargetState::UNKNOWN;
|
Targets::TargetState lastTargetState = Targets::TargetState::UNKNOWN;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
#include "TargetControllerConsole.hpp"
|
#include "TargetControllerConsole.hpp"
|
||||||
|
|
||||||
#include "src/EventManager/Events/Events.hpp"
|
|
||||||
|
|
||||||
#include "TargetControllerComponent.hpp"
|
#include "TargetControllerComponent.hpp"
|
||||||
|
|
||||||
// Commands
|
// Commands
|
||||||
@@ -28,7 +26,6 @@
|
|||||||
namespace Bloom::TargetController
|
namespace Bloom::TargetController
|
||||||
{
|
{
|
||||||
using namespace Bloom::Targets;
|
using namespace Bloom::Targets;
|
||||||
using namespace Bloom::Events;
|
|
||||||
using namespace Bloom::Exceptions;
|
using namespace Bloom::Exceptions;
|
||||||
|
|
||||||
using Commands::GetTargetDescriptor;
|
using Commands::GetTargetDescriptor;
|
||||||
@@ -49,10 +46,6 @@ namespace Bloom::TargetController
|
|||||||
using Commands::GetTargetStackPointer;
|
using Commands::GetTargetStackPointer;
|
||||||
using Commands::GetTargetProgramCounter;
|
using Commands::GetTargetProgramCounter;
|
||||||
|
|
||||||
TargetControllerConsole::TargetControllerConsole(EventListener& eventListener)
|
|
||||||
: eventListener(eventListener)
|
|
||||||
{}
|
|
||||||
|
|
||||||
TargetControllerState TargetControllerConsole::getTargetControllerState() {
|
TargetControllerState TargetControllerConsole::getTargetControllerState() {
|
||||||
return TargetControllerComponent::getState();
|
return TargetControllerComponent::getState();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,6 @@
|
|||||||
#include "CommandManager.hpp"
|
#include "CommandManager.hpp"
|
||||||
#include "TargetControllerState.hpp"
|
#include "TargetControllerState.hpp"
|
||||||
|
|
||||||
#include "src/EventManager/EventListener.hpp"
|
|
||||||
#include "src/EventManager/EventManager.hpp"
|
|
||||||
|
|
||||||
#include "src/Targets/TargetState.hpp"
|
#include "src/Targets/TargetState.hpp"
|
||||||
#include "src/Targets/TargetRegister.hpp"
|
#include "src/Targets/TargetRegister.hpp"
|
||||||
#include "src/Targets/TargetMemory.hpp"
|
#include "src/Targets/TargetMemory.hpp"
|
||||||
@@ -26,7 +23,7 @@ namespace Bloom::TargetController
|
|||||||
class TargetControllerConsole
|
class TargetControllerConsole
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TargetControllerConsole(EventListener& eventListener);
|
TargetControllerConsole() = default;
|
||||||
|
|
||||||
void setDefaultTimeout(std::chrono::milliseconds timeout) {
|
void setDefaultTimeout(std::chrono::milliseconds timeout) {
|
||||||
this->defaultTimeout = timeout;
|
this->defaultTimeout = timeout;
|
||||||
@@ -187,73 +184,7 @@ namespace Bloom::TargetController
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
CommandManager commandManager = CommandManager();
|
CommandManager commandManager = CommandManager();
|
||||||
EventListener& eventListener;
|
|
||||||
|
|
||||||
std::chrono::milliseconds defaultTimeout = std::chrono::milliseconds(20000);
|
std::chrono::milliseconds defaultTimeout = std::chrono::milliseconds(20000);
|
||||||
|
|
||||||
/**
|
|
||||||
* Triggers an event for the TargetController and waits for a response.
|
|
||||||
*
|
|
||||||
* To use this method, the triggered event must define a 'TargetControllerResponseType' alias, which should
|
|
||||||
* specify the type of response expected from the TargetController.
|
|
||||||
* For an example of this, see the Events::ExtractTargetDescriptor class.
|
|
||||||
*
|
|
||||||
* If the TargetController fails to respond within the given time specified by the timeout argument, or it
|
|
||||||
* responds with an instance of Events::TargetControllerErrorOccurred, this function will throw an exception.
|
|
||||||
*
|
|
||||||
* @tparam TriggerEventType
|
|
||||||
*
|
|
||||||
* @param event
|
|
||||||
* Event to trigger.
|
|
||||||
*
|
|
||||||
* @param timeout
|
|
||||||
* The time, in milliseconds, to wait for the TargetController to respond to the event. If this is not
|
|
||||||
* supplied, this->defaultTimeout will be used.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
template<class TriggerEventType>
|
|
||||||
auto triggerTargetControllerEventAndWaitForResponse(
|
|
||||||
const Events::SharedEventPointerNonConst<TriggerEventType> event,
|
|
||||||
std::optional<std::chrono::milliseconds> timeout = {}
|
|
||||||
) {
|
|
||||||
using Bloom::Events::SharedEventPointer;
|
|
||||||
using Bloom::Events::TargetControllerErrorOccurred;
|
|
||||||
|
|
||||||
using ResponseEventType = typename TriggerEventType::TargetControllerResponseType;
|
|
||||||
|
|
||||||
bool deRegisterEventType = false;
|
|
||||||
|
|
||||||
if (!this->eventListener.isEventTypeRegistered<ResponseEventType>()) {
|
|
||||||
this->eventListener.registerEventType<ResponseEventType>();
|
|
||||||
deRegisterEventType = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
EventManager::triggerEvent(event);
|
|
||||||
|
|
||||||
auto responseEvent = this->eventListener.waitForEvent<
|
|
||||||
ResponseEventType,
|
|
||||||
TargetControllerErrorOccurred
|
|
||||||
>(timeout.value_or(this->defaultTimeout), event->id);
|
|
||||||
|
|
||||||
if (deRegisterEventType) {
|
|
||||||
this->eventListener.deRegisterEventType<ResponseEventType>();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!responseEvent.has_value()) {
|
|
||||||
throw Bloom::Exceptions::Exception("Timed out waiting for response from TargetController.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!std::holds_alternative<SharedEventPointer<ResponseEventType>>(responseEvent.value())) {
|
|
||||||
if (std::holds_alternative<SharedEventPointer<TargetControllerErrorOccurred>>(responseEvent.value())) {
|
|
||||||
auto& tcErrorEvent = std::get<SharedEventPointer<TargetControllerErrorOccurred>>(responseEvent.value());
|
|
||||||
throw Bloom::Exceptions::Exception(tcErrorEvent->errorMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
throw Bloom::Exceptions::Exception("Unexpected response from TargetController");
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::get<SharedEventPointer<ResponseEventType>>(responseEvent.value());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user