2025-06-03 00:50:08 +02:00
|
|
|
#pragma once
|
|
|
|
|
#include <thread>
|
|
|
|
|
#include <atomic>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include "ring_buffer.h"
|
|
|
|
|
#include "analysis_model.h"
|
|
|
|
|
|
2025-06-03 01:40:44 +02:00
|
|
|
/**
|
|
|
|
|
* Hauptklasse für das Sensornetzwerk
|
|
|
|
|
* @tparam N Größe des Ringpuffers
|
|
|
|
|
*
|
|
|
|
|
* Verwaltet alle Komponenten:
|
|
|
|
|
* - Ringpuffer für Sensordaten
|
|
|
|
|
* - Analysemodell
|
|
|
|
|
* - Threads für Sensoren, Analyse und Controller
|
|
|
|
|
*/
|
2025-06-03 00:50:08 +02:00
|
|
|
template <size_t N>
|
|
|
|
|
class SensorNetwork {
|
2025-06-03 01:40:44 +02:00
|
|
|
RingBuffer<N> buffer; // Gemeinsamer Datenpuffer
|
|
|
|
|
AnalysisModel model; // Geteiltes Analysemodell
|
|
|
|
|
std::atomic<bool> running = false; // Steuerflag für Threads
|
|
|
|
|
std::vector<std::thread> threads; // Alle Threads
|
2025-06-03 00:50:08 +02:00
|
|
|
|
|
|
|
|
public:
|
2025-06-03 01:25:44 +02:00
|
|
|
~SensorNetwork() { if (running) stop(); }
|
2025-06-03 01:40:44 +02:00
|
|
|
|
2025-06-03 01:25:44 +02:00
|
|
|
void start(size_t sensors, size_t analysers);
|
2025-06-03 00:50:08 +02:00
|
|
|
void stop();
|
2025-06-03 01:25:44 +02:00
|
|
|
};
|