#pragma once #include #include #include "UserInterfaces/InsightWindow/InsightWindow.hpp" #include "src/Helpers/Thread.hpp" #include "src/ApplicationConfig.hpp" #include "src/EventManager/EventManager.hpp" #include "src/EventManager/EventListener.hpp" #include "src/TargetController/TargetControllerConsole.hpp" namespace Bloom { using namespace Events; using Targets::TargetState; /** * The InsightWorker runs on a separate thread to the main GUI thread. Its purpose is to handle any * blocking/time-expensive operations. */ class InsightWorker: public QObject { Q_OBJECT private: EventManager& eventManager; EventListenerPointer eventListener = std::make_shared("InsightWorkerEventListener"); TargetControllerConsole targetControllerConsole = TargetControllerConsole( this->eventManager, *(this->eventListener) ); QTimer* eventDispatchTimer = nullptr; void onTargetStoppedEvent(EventPointer event); void onTargetResumedEvent(EventPointer event); void onTargetPinStatesRetrievedEvent(EventPointer event); void onTargetIoPortsUpdatedEvent(EventPointer event); public: InsightWorker(EventManager& eventManager): eventManager(eventManager) {}; void dispatchEvents() { this->eventListener->dispatchCurrentEvents(); } public slots: void startup(); void requestPinStates(int variantId); void requestPinStateUpdate( int variantId, Bloom::Targets::TargetPinDescriptor pinDescriptor, Bloom::Targets::TargetPinState pinState ); signals: void targetStateUpdated(Bloom::Targets::TargetState newState); void targetProgramCounterUpdated(quint32 programCounter); void targetPinStatesUpdated(int variantId, Bloom::Targets::TargetPinStateMappingType pinStatesByNumber); void targetIoPortsUpdated(); }; }