Added atomic sessions in TC

This commit is contained in:
Nav
2023-06-01 22:13:07 +01:00
parent 2ea7c1e67b
commit 30936fe0a2
11 changed files with 333 additions and 30 deletions

View File

@@ -3,8 +3,10 @@
#include <cstdint>
#include <chrono>
#include <optional>
#include <functional>
#include "src/TargetController/CommandManager.hpp"
#include "src/TargetController/AtomicSession.hpp"
#include "src/Targets/TargetState.hpp"
#include "src/Targets/TargetRegister.hpp"
@@ -23,6 +25,25 @@ namespace Bloom::Services
class TargetControllerService
{
public:
/**
* RAII wrapper for atomic sessions.
*/
class AtomicSession
{
public:
explicit AtomicSession(TargetControllerService& targetControllerService);
~AtomicSession();
AtomicSession(const AtomicSession&) = delete;
AtomicSession(const AtomicSession&&) = delete;
AtomicSession& operator = (const AtomicSession&) = delete;
AtomicSession& operator = (const AtomicSession&&) = delete;
private:
TargetControllerService& targetControllerService;
TargetController::AtomicSessionIdType sessionId;
};
TargetControllerService() = default;
void setDefaultTimeout(std::chrono::milliseconds timeout) {
@@ -192,9 +213,22 @@ namespace Bloom::Services
*/
void shutdown() const;
/**
* Starts a new atomic session with the TC, via an TargetControllerService::AtomicSession RAII object.
* The session will end when the object is destroyed.
*
* @return
*/
TargetControllerService::AtomicSession makeAtomicSession();
private:
TargetController::CommandManager commandManager = TargetController::CommandManager();
std::optional<TargetController::AtomicSessionIdType> activeAtomicSessionId = std::nullopt;
std::chrono::milliseconds defaultTimeout = std::chrono::milliseconds(60000);
TargetController::AtomicSessionIdType startAtomicSession();
void endAtomicSession(TargetController::AtomicSessionIdType sessionId);
};
}