Files
BloomPatched/src/Insight/InsightWorker/InsightWorker.hpp

68 lines
2.2 KiB
C++
Raw Normal View History

2021-04-04 21:04:12 +01:00
#pragma once
#include <QtCore>
#include <QApplication>
#include "src/Helpers/Thread.hpp"
#include "src/Helpers/SyncSafe.hpp"
#include "src/ProjectConfig.hpp"
2021-04-04 21:04:12 +01:00
#include "src/EventManager/EventManager.hpp"
#include "src/EventManager/EventListener.hpp"
#include "src/TargetController/TargetControllerConsole.hpp"
2021-05-30 16:53:24 +01:00
#include "src/TargetController/TargetControllerState.hpp"
#include "Tasks/InsightWorkerTask.hpp"
2021-04-04 21:04:12 +01:00
namespace Bloom
{
/**
* 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
public:
InsightWorker() = default;
void queueTask(InsightWorkerTask* task);
void dispatchEvents() {
this->eventListener->dispatchCurrentEvents();
}
public slots:
void startup();
void requestPinStates(int variantId);
signals:
void ready();
void taskQueued();
void targetStateUpdated(Bloom::Targets::TargetState newState);
void targetProgramCounterUpdated(quint32 programCounter);
void targetControllerSuspended();
void targetControllerResumed(const Bloom::Targets::TargetDescriptor& targetDescriptor);
void targetRegistersWritten(const Bloom::Targets::TargetRegisters& targetRegisters, const QDateTime& timestamp);
2021-04-04 21:04:12 +01:00
private:
EventListenerPointer eventListener = std::make_shared<EventListener>("InsightWorkerEventListener");
TargetControllerConsole targetControllerConsole = TargetControllerConsole(*(this->eventListener));
2021-05-30 16:53:24 +01:00
TargetControllerState lastTargetControllerState = TargetControllerState::ACTIVE;
2021-04-04 21:04:12 +01:00
QTimer* eventDispatchTimer = nullptr;
SyncSafe<std::queue<InsightWorkerTask*>> queuedTasks;
std::optional<InsightWorkerTask*> getQueuedTask();
2021-06-22 14:44:00 +01:00
void onTargetStoppedEvent(const Events::TargetExecutionStopped& event);
void onTargetResumedEvent(const Events::TargetExecutionResumed& event);
void onTargetRegistersWrittenEvent(const Events::RegistersWrittenToTarget& event);
2021-09-11 20:45:26 +01:00
void onTargetControllerStateReportedEvent(const Events::TargetControllerStateReported& event);
2021-04-04 21:04:12 +01:00
private slots:
void executeTasks();
2021-04-04 21:04:12 +01:00
};
}